X509_PUBKEY docs
[openssl.git] / doc / crypto / X509_PUBKEY.pod
1 =pod
2
3 =head1 NAME
4
5 X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_set, X509_PUBKEY_get0,
6 X509_PUBKEY_get, d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp,
7 i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param,
8 X509_PUBKEY_get0_param - SubjectPublicKeyInfo public key functions.
9
10 =head1 SYNOPSIS
11
12  #include <openssl/x509.h>
13
14  X509_PUBKEY *X509_PUBKEY_new(void);
15  void X509_PUBKEY_free(X509_PUBKEY *a);
16
17  int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
18  EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key);
19  EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);
20
21  EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
22  int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);
23
24  EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
25  EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
26
27  int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
28  int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
29
30  int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
31                             int ptype, void *pval,
32                             unsigned char *penc, int penclen);
33  int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
34                             const unsigned char **pk, int *ppklen,
35                             X509_ALGOR **pa, X509_PUBKEY *pub);
36
37 =head1 DESCRIPTION
38
39 The B<X509_PUBKEY> structure represents the ASN.1 B<SubjectPublicKeyInfo>
40 structure defined in RFC5280 and used in certificates and certificate requests.
41
42 X509_PUBKEY_new() allocates and initializes an B<X509_PUBKEY> structure.
43
44 X509_PUBKEY_free() frees up B<X509_PUBKEY> structure B<a>. If B<a> is NULL
45 nothing is done.
46
47 X509_PUBKEY_set() sets the public key in B<*x> to the public key contained
48 in the B<EVP_PKEY> structure B<pkey>. If B<*x> is not NULL any existing
49 public key structure will be freed.
50
51 X509_PUBKEY_get0() returns the public key contained in B<key>. The returned
52 value is an internal pointer which B<MUST NOT> be freed after use.
53
54 X509_PUBKEY_get() is similar to X509_PUBKEY_get0() except the reference
55 count on the returned key is incremented so it B<MUST> be freed using
56 EVP_PKEY_free() after use.
57
58 d2i_PUBKEY() and i2d_PUBKEY() decode and encode an B<EVP_PKEY> structure
59 using B<SubjectPublicKeyInfo> format. They otherise follow the conventions of
60 other ASN.1 functions such as d2i_X509().
61
62 d2i_PUBKEY_bio(), d2i_PUBKEY_fp(), i2d_PUBKEY_bio() and i2d_PUBKEY_fp() are
63 similar to d2i_PUBKEY() and i2d_PUBKEY() except they decode or encode using a
64 B<BIO> or B<FILE> pointer.
65
66 X509_PUBKEY_set0_param() sets the public key parameters of B<pub>. The
67 OID associated with the algorithm is set to B<aobj>. The type of the
68 algorithm parameters is set to B<type> using the structure B<pval>.
69 The encoding of the public key itself is set to the B<penclen>
70 bytes contained in buffer B<penc>. On success ownership of all the supplied
71 parameters is passed to B<pub> so they must not be freed after the
72 call.
73
74 X509_PUBKEY_get0_param() retrieves the public key parameters from B<pub>,
75 B<*ppkalg> is set to the associated OID and the encoding consists of
76 B<*ppklen> bytes at B<*pk>, B<*pa> is set to the associated
77 AlgorithmIdentifier for the public key. If the value of any of these
78 parameters is not required it can be set to B<NULL>. All of the
79 retrieved pointers are internal and must not be freed after the
80 call.
81
82 =head1 NOTES
83
84 The B<X509_PUBKEY> functions can be used to encode and decode public keys
85 in a standard format.
86
87 In many cases applications will not call the B<X509_PUBKEY> functions
88 directly: they will instead call wrapper functions such as X509_get0_pubkey().
89
90 =head1 RETURN VALUES
91
92 If the allocation fails, X509_PUBKEY_new() returns B<NULL> and sets an error
93 code that can be obtained by L<ERR_get_error(3)>.
94
95 Otherwise it returns a pointer to the newly allocated structure.
96
97 X509_PUBKEY_free() does not return a value.
98
99 X509_PUBKEY_get0() and X509_PUBKEY_get() return a pointer to an B<EVP_PKEY>
100 structure or B<NULL> if an error occurs.
101
102 X509_PUBKEY_set(), X509_PUBKEY_set0_param() and X509_PUBKEY_get0_param()
103 return 1 for success and 0 if an error occurred.
104
105 =head1 SEE ALSO
106
107 L<d2i_X509(3)>,
108 L<ERR_get_error(3)>,
109 L<X509_get_pubkey(3)>,
110
111 =cut