1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_PUBKEY_new_ex, X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_dup,
|
---|
6 | X509_PUBKEY_set, X509_PUBKEY_get0, X509_PUBKEY_get,
|
---|
7 | d2i_PUBKEY_ex, d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp,
|
---|
8 | i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param, X509_PUBKEY_get0_param,
|
---|
9 | X509_PUBKEY_eq - SubjectPublicKeyInfo public key functions
|
---|
10 |
|
---|
11 | =head1 SYNOPSIS
|
---|
12 |
|
---|
13 | #include <openssl/x509.h>
|
---|
14 |
|
---|
15 | X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
|
---|
16 | X509_PUBKEY *X509_PUBKEY_new(void);
|
---|
17 | void X509_PUBKEY_free(X509_PUBKEY *a);
|
---|
18 | X509_PUBKEY *X509_PUBKEY_dup(const X509_PUBKEY *a);
|
---|
19 |
|
---|
20 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
|
---|
21 | EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
|
---|
22 | EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
|
---|
23 |
|
---|
24 | EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length,
|
---|
25 | OSSL_LIB_CTX *libctx, const char *propq);
|
---|
26 | EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
|
---|
27 | int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp);
|
---|
28 |
|
---|
29 | EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
|
---|
30 | EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
|
---|
31 |
|
---|
32 | int i2d_PUBKEY_fp(const FILE *fp, EVP_PKEY *pkey);
|
---|
33 | int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
|
---|
34 |
|
---|
35 | int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
|
---|
36 | int ptype, void *pval,
|
---|
37 | unsigned char *penc, int penclen);
|
---|
38 | int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
|
---|
39 | const unsigned char **pk, int *ppklen,
|
---|
40 | X509_ALGOR **pa, const X509_PUBKEY *pub);
|
---|
41 | int X509_PUBKEY_eq(X509_PUBKEY *a, X509_PUBKEY *b);
|
---|
42 |
|
---|
43 | =head1 DESCRIPTION
|
---|
44 |
|
---|
45 | The B<X509_PUBKEY> structure represents the ASN.1 B<SubjectPublicKeyInfo>
|
---|
46 | structure defined in RFC5280 and used in certificates and certificate requests.
|
---|
47 |
|
---|
48 | X509_PUBKEY_new_ex() allocates and initializes an B<X509_PUBKEY> structure
|
---|
49 | associated with the given B<OSSL_LIB_CTX> in the I<libctx> parameter. Any
|
---|
50 | algorithm fetches associated with using the B<X509_PUBKEY> object will use
|
---|
51 | the property query string I<propq>. See L<crypto(7)/ALGORITHM FETCHING> for
|
---|
52 | further information about algorithm fetching.
|
---|
53 |
|
---|
54 | X509_PUBKEY_new() is the same as X509_PUBKEY_new_ex() except that the default
|
---|
55 | (NULL) B<OSSL_LIB_CTX> and a NULL property query string are used.
|
---|
56 |
|
---|
57 | X509_PUBKEY_dup() creates a duplicate copy of the B<X509_PUBKEY> object
|
---|
58 | specified by I<a>.
|
---|
59 |
|
---|
60 | X509_PUBKEY_free() frees up B<X509_PUBKEY> structure I<a>. If I<a> is NULL
|
---|
61 | nothing is done.
|
---|
62 |
|
---|
63 | X509_PUBKEY_set() sets the public key in I<*x> to the public key contained
|
---|
64 | in the B<EVP_PKEY> structure I<pkey>. If I<*x> is not NULL any existing
|
---|
65 | public key structure will be freed.
|
---|
66 |
|
---|
67 | X509_PUBKEY_get0() returns the public key contained in I<key>. The returned
|
---|
68 | value is an internal pointer which B<MUST NOT> be freed after use.
|
---|
69 |
|
---|
70 | X509_PUBKEY_get() is similar to X509_PUBKEY_get0() except the reference
|
---|
71 | count on the returned key is incremented so it B<MUST> be freed using
|
---|
72 | EVP_PKEY_free() after use.
|
---|
73 |
|
---|
74 | d2i_PUBKEY_ex() decodes an B<EVP_PKEY> structure using B<SubjectPublicKeyInfo>
|
---|
75 | format. Some public key decoding implementations may use cryptographic
|
---|
76 | algorithms. In this case the supplied library context I<libctx> and property
|
---|
77 | query string I<propq> are used.
|
---|
78 | d2i_PUBKEY() does the same as d2i_PUBKEY_ex() except that the default
|
---|
79 | library context and property query string are used.
|
---|
80 |
|
---|
81 | i2d_PUBKEY() encodes an B<EVP_PKEY> structure using B<SubjectPublicKeyInfo>
|
---|
82 | format.
|
---|
83 |
|
---|
84 | d2i_PUBKEY_bio(), d2i_PUBKEY_fp(), i2d_PUBKEY_bio() and i2d_PUBKEY_fp() are
|
---|
85 | similar to d2i_PUBKEY() and i2d_PUBKEY() except they decode or encode using a
|
---|
86 | B<BIO> or B<FILE> pointer.
|
---|
87 |
|
---|
88 | X509_PUBKEY_set0_param() sets the public key parameters of I<pub>. The
|
---|
89 | OID associated with the algorithm is set to I<aobj>. The type of the
|
---|
90 | algorithm parameters is set to I<type> using the structure I<pval>.
|
---|
91 | The encoding of the public key itself is set to the I<penclen>
|
---|
92 | bytes contained in buffer I<penc>. On success ownership of all the supplied
|
---|
93 | parameters is passed to I<pub> so they must not be freed after the
|
---|
94 | call.
|
---|
95 |
|
---|
96 | X509_PUBKEY_get0_param() retrieves the public key parameters from I<pub>,
|
---|
97 | I<*ppkalg> is set to the associated OID and the encoding consists of
|
---|
98 | I<*ppklen> bytes at I<*pk>, I<*pa> is set to the associated
|
---|
99 | AlgorithmIdentifier for the public key. If the value of any of these
|
---|
100 | parameters is not required it can be set to NULL. All of the
|
---|
101 | retrieved pointers are internal and must not be freed after the
|
---|
102 | call.
|
---|
103 |
|
---|
104 | X509_PUBKEY_eq() compares two B<X509_PUBKEY> values.
|
---|
105 |
|
---|
106 | =head1 NOTES
|
---|
107 |
|
---|
108 | The B<X509_PUBKEY> functions can be used to encode and decode public keys
|
---|
109 | in a standard format.
|
---|
110 |
|
---|
111 | In many cases applications will not call the B<X509_PUBKEY> functions
|
---|
112 | directly: they will instead call wrapper functions such as X509_get0_pubkey().
|
---|
113 |
|
---|
114 | =head1 RETURN VALUES
|
---|
115 |
|
---|
116 | If the allocation fails, X509_PUBKEY_new() and X509_PUBKEY_dup() return
|
---|
117 | NULL and set an error code that can be obtained by L<ERR_get_error(3)>.
|
---|
118 | Otherwise they return a pointer to the newly allocated structure.
|
---|
119 |
|
---|
120 | X509_PUBKEY_free() does not return a value.
|
---|
121 |
|
---|
122 | X509_PUBKEY_get0() and X509_PUBKEY_get() return a pointer to an B<EVP_PKEY>
|
---|
123 | structure or NULL if an error occurs.
|
---|
124 |
|
---|
125 | X509_PUBKEY_set(), X509_PUBKEY_set0_param() and X509_PUBKEY_get0_param()
|
---|
126 | return 1 for success and 0 if an error occurred.
|
---|
127 |
|
---|
128 | X509_PUBKEY_eq() returns 1 for equal, 0 for different, and < 0 on error.
|
---|
129 |
|
---|
130 | =head1 SEE ALSO
|
---|
131 |
|
---|
132 | L<d2i_X509(3)>,
|
---|
133 | L<ERR_get_error(3)>,
|
---|
134 | L<X509_get_pubkey(3)>,
|
---|
135 |
|
---|
136 | =head1 HISTORY
|
---|
137 |
|
---|
138 | The X509_PUBKEY_new_ex() and X509_PUBKEY_eq() functions were added in OpenSSL
|
---|
139 | 3.0.
|
---|
140 |
|
---|
141 | =head1 COPYRIGHT
|
---|
142 |
|
---|
143 | Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
|
---|
144 |
|
---|
145 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
146 | this file except in compliance with the License. You can obtain a copy
|
---|
147 | in the file LICENSE in the source distribution or at
|
---|
148 | L<https://www.openssl.org/source/license.html>.
|
---|
149 |
|
---|
150 | =cut
|
---|