struct sb_dcd_ctx *dcd_head;
struct sb_dcd_ctx *dcd_tail;
- EVP_CIPHER_CTX cipher_ctx;
- EVP_MD_CTX md_ctx;
+ EVP_CIPHER_CTX *cipher_ctx;
+ EVP_MD_CTX *md_ctx;
uint8_t digest[32];
struct sb_key_dictionary_key sb_dict_key;
struct sb_boot_image_header *hdr = &ictx->payload;
struct sb_section_ctx *sctx = ictx->sect_head;
uint32_t kd_size, sections_blocks;
- EVP_MD_CTX md_ctx;
+ EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
/* The main SB header size in blocks. */
hdr->image_blocks = hdr->header_blocks;
if (!ictx->sect_boot_found) {
fprintf(stderr, "ERR: No bootable section selected!\n");
+ EVP_CIPHER_CTX_free(md_ctx);
return -EINVAL;
}
hdr->first_boot_section_id = ictx->sect_boot;
sizeof(hdr->digest));
EVP_DigestFinal(&md_ctx, hdr->digest, NULL);
+ EVP_CIPHER_CTX_free(md_ctx);
return 0;
}
struct tm tm;
int sz, ret = 0;
unsigned char digest[20];
- EVP_MD_CTX md_ctx;
+ EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
unsigned long size;
/* Start image-wide crypto. */
size = fread(&ictx->payload, 1, sizeof(ictx->payload), fp);
if (size != sizeof(ictx->payload)) {
fprintf(stderr, "ERR: SB image header too short!\n");
+ EVP_CIPHER_CTX_free(md_ctx);
return -EINVAL;
}
sizeof(struct sb_boot_image_header) -
sizeof(hdr->digest));
EVP_DigestFinal(&md_ctx, digest, NULL);
+ EVP_CIPHER_CTX_free(md_ctx);
sb_aes_init(ictx, NULL, 1);
sb_encrypt_sb_header(ictx);