/* 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; }