Newer
Older
SigningTool / verify.c
@Jookia Jookia on 30 Jun 2021 1 KB more WIP
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* Copyright: Jookia 2021 <contact@jookia.org> */

#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <openssl/pem.h>

unsigned char authdata[4096];
unsigned char clienthash[4096];
unsigned char signature[4096];

#define MY_ASSERT(x) do { int err = (long int)x; if(err == 0) { printf("ERR %i line %i\n", err, __LINE__); } } while(0)

int main(void) {
  printf("SigningTool verify\n");
  printf("Reading authdata\n");
  FILE *file = fopen("assert_authdata.bin", "r");
  MY_ASSERT(file);
  size_t authdata_len = fread(authdata, 1, sizeof(authdata), file);
  MY_ASSERT(authdata_len);
  fclose(file);
  printf("Reading clienthash\n");
  file = fopen("assert_hash.bin", "r");
  MY_ASSERT(file);
  size_t clienthash_len = fread(clienthash, 1, sizeof(clienthash), file);
  MY_ASSERT(clienthash_len);
  fclose(file);
  printf("Reading signature\n");
  file = fopen("assert_signature.bin", "r");
  MY_ASSERT(file);
  size_t signature_len = fread(signature, 1, sizeof(signature), file);
  MY_ASSERT(signature_len);
  fclose(file);
  printf("Build digest\n");
  printf("Reading pubkey\n");
  file = fopen("pubkey.pem", "r");
  MY_ASSERT(file);
  EVP_PKEY *pubkey = PEM_read_PUBKEY(file, NULL, NULL, NULL);
  MY_ASSERT(pubkey);
  fclose(file);
  printf("Verifying signature\n");
  char digestable[69];
  bzero(digestable, 69);
  memcpy(digestable, authdata + 2, 37);
  memcpy(digestable + 37, clienthash, 32);
  EVP_MD_CTX *ctx = EVP_MD_CTX_new();
  MY_ASSERT(EVP_DigestVerifyInit(ctx, NULL, EVP_sha256(), NULL, pubkey));
  MY_ASSERT(EVP_VerifyUpdate(ctx, digestable, sizeof(digestable)));
  MY_ASSERT(EVP_VerifyFinal(ctx, signature, signature_len, pubkey));
  EVP_MD_CTX_free(ctx);
  EVP_PKEY_free(pubkey);
  return 0;
}