summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509_cmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x509_cmp.c')
-rw-r--r--src/lib/libcrypto/x509/x509_cmp.c27
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
235unsigned long X509_NAME_hash_old(X509_NAME *x) 242unsigned 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)