EVP_MD_CTX* mdctx = EVP_MD_CTX_new();
// Initialise hash function
- EVP_DigestVerifyInit(mdctx, NULL, NULL, NULL, pkey);
+ r = EVP_DigestVerifyInit(mdctx, NULL, NULL, NULL, pkey);
+ if (r != 1) {
+ ERROR(db->ctx, "Error initializing signature validation: %s\n",
+ ERR_error_string(ERR_get_error(), NULL));
+ r = 1;
+
+ goto CLEANUP;
+ }
// Reset file to start
rewind(db->f);
fread(&magic, 1, sizeof(magic), db->f);
// Feed magic into the hash
- EVP_DigestVerifyUpdate(mdctx, &magic, sizeof(magic));
+ r = EVP_DigestVerifyUpdate(mdctx, &magic, sizeof(magic));
+ if (r != 1) {
+ ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL));
+ r = 1;
+
+ goto CLEANUP;
+ }
// Read the header
struct loc_database_header_v0 header_v0;
// Feed header into the hash
EVP_DigestVerifyUpdate(mdctx, &header_v0, sizeof(header_v0));
+ if (r != 1) {
+ ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL));
+ r = 1;
+
+ goto CLEANUP;
+ }
break;
default:
while (!feof(db->f)) {
size_t bytes_read = fread(buffer, 1, sizeof(buffer), db->f);
- EVP_DigestVerifyUpdate(mdctx, buffer, bytes_read);
+ r = EVP_DigestVerifyUpdate(mdctx, buffer, bytes_read);
+ if (r != 1) {
+ ERROR(db->ctx, "%s\n", ERR_error_string(ERR_get_error(), NULL));
+ r = 1;
+
+ goto CLEANUP;
+ }
}
// Finish