1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_cmp, X509_NAME_cmp,
|
---|
6 | X509_issuer_and_serial_cmp, X509_issuer_name_cmp, X509_subject_name_cmp,
|
---|
7 | X509_CRL_cmp, X509_CRL_match
|
---|
8 | - compare X509 certificates and related values
|
---|
9 |
|
---|
10 | =head1 SYNOPSIS
|
---|
11 |
|
---|
12 | #include <openssl/x509.h>
|
---|
13 |
|
---|
14 | int X509_cmp(const X509 *a, const X509 *b);
|
---|
15 | int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
|
---|
16 | int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
|
---|
17 | int X509_issuer_name_cmp(const X509 *a, const X509 *b);
|
---|
18 | int X509_subject_name_cmp(const X509 *a, const X509 *b);
|
---|
19 | int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
|
---|
20 | int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
|
---|
21 |
|
---|
22 | =head1 DESCRIPTION
|
---|
23 |
|
---|
24 | This set of functions are used to compare X509 objects, including X509
|
---|
25 | certificates, X509 CRL objects and various values in an X509 certificate.
|
---|
26 |
|
---|
27 | The X509_cmp() function compares two B<X509> objects indicated by parameters
|
---|
28 | I<a> and I<b>. The comparison is based on the B<memcmp> result of the hash
|
---|
29 | values of two B<X509> objects and the canonical (DER) encoding values.
|
---|
30 |
|
---|
31 | The X509_NAME_cmp() function compares two B<X509_NAME> objects indicated by
|
---|
32 | parameters I<a> and I<b>. The comparison is based on the B<memcmp> result of the
|
---|
33 | canonical (DER) encoding values of the two objects using L<i2d_X509_NAME(3)>.
|
---|
34 | This procedure adheres to the matching rules for Distinguished Names (DN)
|
---|
35 | given in RFC 4517 section 4.2.15 and RFC 5280 section 7.1.
|
---|
36 | In particular, the order of Relative Distinguished Names (RDNs) is relevant.
|
---|
37 | On the other hand, if an RDN is multi-valued, i.e., it contains a set of
|
---|
38 | AttributeValueAssertions (AVAs), its members are effectively not ordered.
|
---|
39 |
|
---|
40 | The X509_issuer_and_serial_cmp() function compares the serial number and issuer
|
---|
41 | values in the given B<X509> objects I<a> and I<b>.
|
---|
42 |
|
---|
43 | The X509_issuer_name_cmp(), X509_subject_name_cmp() and X509_CRL_cmp() functions
|
---|
44 | are effectively wrappers of the X509_NAME_cmp() function. These functions compare
|
---|
45 | issuer names and subject names of the X<509> objects, or issuers of B<X509_CRL>
|
---|
46 | objects, respectively.
|
---|
47 |
|
---|
48 | The X509_CRL_match() function compares two B<X509_CRL> objects. Unlike the
|
---|
49 | X509_CRL_cmp() function, this function compares the whole CRL content instead
|
---|
50 | of just the issuer name.
|
---|
51 |
|
---|
52 | =head1 RETURN VALUES
|
---|
53 |
|
---|
54 | The B<X509> comparison functions return B<-1>, B<0>, or B<1> if object I<a> is
|
---|
55 | found to be less than, to match, or be greater than object I<b>, respectively.
|
---|
56 |
|
---|
57 | X509_NAME_cmp(), X509_issuer_and_serial_cmp(), X509_issuer_name_cmp(),
|
---|
58 | X509_subject_name_cmp(), X509_CRL_cmp(), and X509_CRL_match()
|
---|
59 | may return B<-2> to indicate an error.
|
---|
60 |
|
---|
61 | =head1 NOTES
|
---|
62 |
|
---|
63 | These functions in fact utilize the underlying B<memcmp> of the C library to do
|
---|
64 | the comparison job. Data to be compared varies from DER encoding data, hash
|
---|
65 | value or B<ASN1_STRING>. The sign of the comparison can be used to order the
|
---|
66 | objects but it does not have a special meaning in some cases.
|
---|
67 |
|
---|
68 | X509_NAME_cmp() and wrappers utilize the value B<-2> to indicate errors in some
|
---|
69 | circumstances, which could cause confusion for the applications.
|
---|
70 |
|
---|
71 | =head1 SEE ALSO
|
---|
72 |
|
---|
73 | L<i2d_X509_NAME(3)>, L<i2d_X509(3)>
|
---|
74 |
|
---|
75 | =head1 COPYRIGHT
|
---|
76 |
|
---|
77 | Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
|
---|
78 |
|
---|
79 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
80 | this file except in compliance with the License. You can obtain a copy
|
---|
81 | in the file LICENSE in the source distribution or at
|
---|
82 | L<https://www.openssl.org/source/license.html>.
|
---|
83 |
|
---|
84 | =cut
|
---|