diff options
Diffstat (limited to 'src/lib/libcrypto/x509/x509_cmp.c')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_cmp.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/lib/libcrypto/x509/x509_cmp.c b/src/lib/libcrypto/x509/x509_cmp.c index 4bc9da07e0..7c2aaee2e9 100644 --- a/src/lib/libcrypto/x509/x509_cmp.c +++ b/src/lib/libcrypto/x509/x509_cmp.c | |||
| @@ -87,15 +87,20 @@ unsigned long X509_issuer_and_serial_hash(X509 *a) | |||
| 87 | EVP_MD_CTX_init(&ctx); | 87 | EVP_MD_CTX_init(&ctx); |
| 88 | f=X509_NAME_oneline(a->cert_info->issuer,NULL,0); | 88 | f=X509_NAME_oneline(a->cert_info->issuer,NULL,0); |
| 89 | ret=strlen(f); | 89 | ret=strlen(f); |
| 90 | EVP_DigestInit_ex(&ctx, EVP_md5(), NULL); | 90 | if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL)) |
| 91 | EVP_DigestUpdate(&ctx,(unsigned char *)f,ret); | 91 | goto err; |
| 92 | if (!EVP_DigestUpdate(&ctx,(unsigned char *)f,ret)) | ||
| 93 | goto err; | ||
| 92 | OPENSSL_free(f); | 94 | OPENSSL_free(f); |
| 93 | EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data, | 95 | if(!EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data, |
| 94 | (unsigned long)a->cert_info->serialNumber->length); | 96 | (unsigned long)a->cert_info->serialNumber->length)) |
| 95 | EVP_DigestFinal_ex(&ctx,&(md[0]),NULL); | 97 | goto err; |
| 98 | if (!EVP_DigestFinal_ex(&ctx,&(md[0]),NULL)) | ||
| 99 | goto err; | ||
| 96 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| | 100 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| |
| 97 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) | 101 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) |
| 98 | )&0xffffffffL; | 102 | )&0xffffffffL; |
| 103 | err: | ||
| 99 | EVP_MD_CTX_cleanup(&ctx); | 104 | EVP_MD_CTX_cleanup(&ctx); |
| 100 | return(ret); | 105 | return(ret); |
| 101 | } | 106 | } |
| @@ -219,7 +224,9 @@ unsigned long X509_NAME_hash(X509_NAME *x) | |||
| 219 | 224 | ||
| 220 | /* Make sure X509_NAME structure contains valid cached encoding */ | 225 | /* Make sure X509_NAME structure contains valid cached encoding */ |
| 221 | i2d_X509_NAME(x,NULL); | 226 | i2d_X509_NAME(x,NULL); |
| 222 | EVP_Digest(x->canon_enc, x->canon_enclen, md, NULL, EVP_sha1(), NULL); | 227 | if (!EVP_Digest(x->canon_enc, x->canon_enclen, md, NULL, EVP_sha1(), |
| 228 | NULL)) | ||
| 229 | return 0; | ||
| 223 | 230 | ||
| 224 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| | 231 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| |
| 225 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) | 232 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) |
| @@ -234,12 +241,18 @@ unsigned long X509_NAME_hash(X509_NAME *x) | |||
| 234 | 241 | ||
| 235 | unsigned long X509_NAME_hash_old(X509_NAME *x) | 242 | unsigned long X509_NAME_hash_old(X509_NAME *x) |
| 236 | { | 243 | { |
| 244 | EVP_MD_CTX md_ctx; | ||
| 237 | unsigned long ret=0; | 245 | unsigned long ret=0; |
| 238 | unsigned char md[16]; | 246 | unsigned char md[16]; |
| 239 | 247 | ||
| 240 | /* Make sure X509_NAME structure contains valid cached encoding */ | 248 | /* Make sure X509_NAME structure contains valid cached encoding */ |
| 241 | i2d_X509_NAME(x,NULL); | 249 | i2d_X509_NAME(x,NULL); |
| 242 | EVP_Digest(x->bytes->data, x->bytes->length, md, NULL, EVP_md5(), NULL); | 250 | EVP_MD_CTX_init(&md_ctx); |
| 251 | EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | ||
| 252 | EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL); | ||
| 253 | EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length); | ||
| 254 | EVP_DigestFinal_ex(&md_ctx,md,NULL); | ||
| 255 | EVP_MD_CTX_cleanup(&md_ctx); | ||
| 243 | 256 | ||
| 244 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| | 257 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| |
| 245 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) | 258 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) |
