]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/X509_PUBKEY_new.pod
Fix X509_PUBKEY_cmp(), move to crypto/x509/x_pubkey.c, rename, export, and document it
[thirdparty/openssl.git] / doc / man3 / X509_PUBKEY_new.pod
CommitLineData
01d358a3
DSH
1=pod
2
3=head1 NAME
4
a8f1aabd
DMSP
5X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_dup,
6X509_PUBKEY_set, X509_PUBKEY_get0, X509_PUBKEY_get,
7d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp,
93f99b68
DDO
8i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param, X509_PUBKEY_get0_param,
9X509_PUBKEY_eq - SubjectPublicKeyInfo public key functions
01d358a3
DSH
10
11=head1 SYNOPSIS
12
13 #include <openssl/x509.h>
14
15 X509_PUBKEY *X509_PUBKEY_new(void);
16 void X509_PUBKEY_free(X509_PUBKEY *a);
a8f1aabd 17 X509_PUBKEY *X509_PUBKEY_dup(const X509_PUBKEY *a);
01d358a3
DSH
18
19 int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
7674e923
DDO
20 EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key);
21 EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key);
01d358a3
DSH
22
23 EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
9fdcc21f 24 int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp);
01d358a3
DSH
25
26 EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
27 EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
28
9fdcc21f
DO
29 int i2d_PUBKEY_fp(const FILE *fp, EVP_PKEY *pkey);
30 int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey);
01d358a3
DSH
31
32 int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
33 int ptype, void *pval,
34 unsigned char *penc, int penclen);
35 int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
36 const unsigned char **pk, int *ppklen,
7674e923 37 X509_ALGOR **pa, const X509_PUBKEY *pub);
93f99b68 38 int X509_PUBKEY_eq(X509_PUBKEY *a, X509_PUBKEY *b);
01d358a3
DSH
39
40=head1 DESCRIPTION
41
42The B<X509_PUBKEY> structure represents the ASN.1 B<SubjectPublicKeyInfo>
43structure defined in RFC5280 and used in certificates and certificate requests.
44
45X509_PUBKEY_new() allocates and initializes an B<X509_PUBKEY> structure.
46
47X509_PUBKEY_free() frees up B<X509_PUBKEY> structure B<a>. If B<a> is NULL
48nothing is done.
49
50X509_PUBKEY_set() sets the public key in B<*x> to the public key contained
51in the B<EVP_PKEY> structure B<pkey>. If B<*x> is not NULL any existing
52public key structure will be freed.
53
54X509_PUBKEY_get0() returns the public key contained in B<key>. The returned
55value is an internal pointer which B<MUST NOT> be freed after use.
56
57X509_PUBKEY_get() is similar to X509_PUBKEY_get0() except the reference
58count on the returned key is incremented so it B<MUST> be freed using
59EVP_PKEY_free() after use.
60
61d2i_PUBKEY() and i2d_PUBKEY() decode and encode an B<EVP_PKEY> structure
0ad69cd6 62using B<SubjectPublicKeyInfo> format. They otherwise follow the conventions of
01d358a3
DSH
63other ASN.1 functions such as d2i_X509().
64
65d2i_PUBKEY_bio(), d2i_PUBKEY_fp(), i2d_PUBKEY_bio() and i2d_PUBKEY_fp() are
66similar to d2i_PUBKEY() and i2d_PUBKEY() except they decode or encode using a
67B<BIO> or B<FILE> pointer.
68
69X509_PUBKEY_set0_param() sets the public key parameters of B<pub>. The
70OID associated with the algorithm is set to B<aobj>. The type of the
71algorithm parameters is set to B<type> using the structure B<pval>.
72The encoding of the public key itself is set to the B<penclen>
73bytes contained in buffer B<penc>. On success ownership of all the supplied
74parameters is passed to B<pub> so they must not be freed after the
75call.
76
77X509_PUBKEY_get0_param() retrieves the public key parameters from B<pub>,
78B<*ppkalg> is set to the associated OID and the encoding consists of
79B<*ppklen> bytes at B<*pk>, B<*pa> is set to the associated
80AlgorithmIdentifier for the public key. If the value of any of these
81parameters is not required it can be set to B<NULL>. All of the
82retrieved pointers are internal and must not be freed after the
83call.
84
93f99b68
DDO
85X509_PUBKEY_eq() compares two B<X509_PUBKEY> values.
86
01d358a3
DSH
87=head1 NOTES
88
89The B<X509_PUBKEY> functions can be used to encode and decode public keys
90in a standard format.
91
92In many cases applications will not call the B<X509_PUBKEY> functions
93directly: they will instead call wrapper functions such as X509_get0_pubkey().
94
95=head1 RETURN VALUES
96
97If the allocation fails, X509_PUBKEY_new() returns B<NULL> and sets an error
98code that can be obtained by L<ERR_get_error(3)>.
99
100Otherwise it returns a pointer to the newly allocated structure.
101
102X509_PUBKEY_free() does not return a value.
103
104X509_PUBKEY_get0() and X509_PUBKEY_get() return a pointer to an B<EVP_PKEY>
105structure or B<NULL> if an error occurs.
106
107X509_PUBKEY_set(), X509_PUBKEY_set0_param() and X509_PUBKEY_get0_param()
108return 1 for success and 0 if an error occurred.
109
93f99b68
DDO
110X509_PUBKEY_eq() returns 1 for equal, 0 for different, and < 0 on error.
111
01d358a3
DSH
112=head1 SEE ALSO
113
114L<d2i_X509(3)>,
115L<ERR_get_error(3)>,
116L<X509_get_pubkey(3)>,
117
93f99b68
DDO
118=head1 HISTORY
119
120The X509_PUBKEY_eq() function was added in OpenSSL 3.0.
121
e2f92610
RS
122=head1 COPYRIGHT
123
124Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
125
4746f25a 126Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
127this file except in compliance with the License. You can obtain a copy
128in the file LICENSE in the source distribution or at
129L<https://www.openssl.org/source/license.html>.
130
131=cut