--- ekg-1.7.orig/src/simlite.c 2026-10-18 06:31:33.603997641 +0200 +++ ekg-1.7/src/simlite.c 2026-10-18 06:31:33.612705883 +0200 @@ -180,8 +180,9 @@ char *sim_key_fingerprint(uint32_t uin) RSA *key = sim_key_read(uin); unsigned char md_value[EVP_MAX_MD_SIZE], *buf, *newbuf; char *result = NULL; - EVP_MD_CTX ctx; - int md_len, size, i; + EVP_MD_CTX *ctx; + unsigned int md_len; + int size, i; if (!key) return NULL; @@ -201,9 +202,15 @@ char *sim_key_fingerprint(uint32_t uin) else size = i2d_RSAPrivateKey(key, &newbuf); - EVP_DigestInit(&ctx, EVP_sha1()); - EVP_DigestUpdate(&ctx, buf, size); - EVP_DigestFinal(&ctx, md_value, &md_len); + if (!(ctx = EVP_MD_CTX_new())) { + free(buf); + sim_errno = SIM_ERROR_MEMORY; + goto cleanup; + } + EVP_DigestInit(ctx, EVP_sha1()); + EVP_DigestUpdate(ctx, buf, size); + EVP_DigestFinal(ctx, md_value, &md_len); + EVP_MD_CTX_free(ctx); free(buf);