diff options
Diffstat (limited to 'src/lib/libcrypto/x509/x509_cmp.c')
-rw-r--r-- | src/lib/libcrypto/x509/x509_cmp.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/lib/libcrypto/x509/x509_cmp.c b/src/lib/libcrypto/x509/x509_cmp.c index 9a93bae3ff..a8a5ca8b03 100644 --- a/src/lib/libcrypto/x509/x509_cmp.c +++ b/src/lib/libcrypto/x509/x509_cmp.c | |||
@@ -57,12 +57,11 @@ | |||
57 | */ | 57 | */ |
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include <sys/types.h> | ||
61 | #include <sys/stat.h> | ||
62 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
63 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
64 | #include <openssl/objects.h> | 62 | #include <openssl/objects.h> |
65 | #include <openssl/x509.h> | 63 | #include <openssl/x509.h> |
64 | #include <openssl/x509v3.h> | ||
66 | 65 | ||
67 | int X509_issuer_and_serial_cmp(X509 *a, X509 *b) | 66 | int X509_issuer_and_serial_cmp(X509 *a, X509 *b) |
68 | { | 67 | { |
@@ -71,7 +70,7 @@ int X509_issuer_and_serial_cmp(X509 *a, X509 *b) | |||
71 | 70 | ||
72 | ai=a->cert_info; | 71 | ai=a->cert_info; |
73 | bi=b->cert_info; | 72 | bi=b->cert_info; |
74 | i=ASN1_INTEGER_cmp(ai->serialNumber,bi->serialNumber); | 73 | i=M_ASN1_INTEGER_cmp(ai->serialNumber,bi->serialNumber); |
75 | if (i) return(i); | 74 | if (i) return(i); |
76 | return(X509_NAME_cmp(ai->issuer,bi->issuer)); | 75 | return(X509_NAME_cmp(ai->issuer,bi->issuer)); |
77 | } | 76 | } |
@@ -138,6 +137,20 @@ unsigned long X509_subject_name_hash(X509 *x) | |||
138 | return(X509_NAME_hash(x->cert_info->subject)); | 137 | return(X509_NAME_hash(x->cert_info->subject)); |
139 | } | 138 | } |
140 | 139 | ||
140 | #ifndef NO_SHA | ||
141 | /* Compare two certificates: they must be identical for | ||
142 | * this to work. | ||
143 | */ | ||
144 | int X509_cmp(X509 *a, X509 *b) | ||
145 | { | ||
146 | /* ensure hash is valid */ | ||
147 | X509_check_purpose(a, -1, 0); | ||
148 | X509_check_purpose(b, -1, 0); | ||
149 | |||
150 | return memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH); | ||
151 | } | ||
152 | #endif | ||
153 | |||
141 | int X509_NAME_cmp(X509_NAME *a, X509_NAME *b) | 154 | int X509_NAME_cmp(X509_NAME *a, X509_NAME *b) |
142 | { | 155 | { |
143 | int i,j; | 156 | int i,j; |
@@ -175,7 +188,7 @@ int X509_NAME_cmp(X509_NAME *a, X509_NAME *b) | |||
175 | 188 | ||
176 | #ifndef NO_MD5 | 189 | #ifndef NO_MD5 |
177 | /* I now DER encode the name and hash it. Since I cache the DER encoding, | 190 | /* I now DER encode the name and hash it. Since I cache the DER encoding, |
178 | * this is reasonably effiecent. */ | 191 | * this is reasonably efficient. */ |
179 | unsigned long X509_NAME_hash(X509_NAME *x) | 192 | unsigned long X509_NAME_hash(X509_NAME *x) |
180 | { | 193 | { |
181 | unsigned long ret=0; | 194 | unsigned long ret=0; |
@@ -209,6 +222,8 @@ X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, | |||
209 | X509_CINF cinf; | 222 | X509_CINF cinf; |
210 | X509 x,*x509=NULL; | 223 | X509 x,*x509=NULL; |
211 | 224 | ||
225 | if(!sk) return NULL; | ||
226 | |||
212 | x.cert_info= &cinf; | 227 | x.cert_info= &cinf; |
213 | cinf.serialNumber=serial; | 228 | cinf.serialNumber=serial; |
214 | cinf.issuer=name; | 229 | cinf.issuer=name; |