]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/crypto/EVP_PKEY_verify_recover.pod
Fix L<> content in manpages
[thirdparty/openssl.git] / doc / crypto / EVP_PKEY_verify_recover.pod
CommitLineData
64cee65e
DSH
1=pod
2
3=head1 NAME
4
e54e1235 5EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover - recover signature using a public key algorithm
64cee65e
DSH
6
7=head1 SYNOPSIS
8
9 #include <openssl/evp.h>
10
e54e1235
BL
11 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
12 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
64cee65e
DSH
13 unsigned char *rout, size_t *routlen,
14 const unsigned char *sig, size_t siglen);
15
16=head1 DESCRIPTION
17
e54e1235 18The EVP_PKEY_verify_recover_init() function initializes a public key algorithm
64cee65e
DSH
19context using key B<pkey> for a verify recover operation.
20
e54e1235 21The EVP_PKEY_verify_recover() function recovers signed data
64cee65e
DSH
22using B<ctx>. The signature is specified using the B<sig> and
23B<siglen> parameters. If B<rout> is B<NULL> then the maximum size of the output
24buffer is written to the B<routlen> parameter. If B<rout> is not B<NULL> then
25before the call the B<routlen> parameter should contain the length of the
26B<rout> buffer, if the call is successful recovered data is written to
27B<rout> and the amount of data written to B<routlen>.
28
29=head1 NOTES
30
31Normally an application is only interested in whether a signature verification
32operation is successful in those cases the EVP_verify() function should be
33used.
34
35Sometimes however it is useful to obtain the data originally signed using a
36signing operation. Only certain public key algorithms can recover a signature
37in this way (for example RSA in PKCS padding mode).
38
e54e1235 39After the call to EVP_PKEY_verify_recover_init() algorithm specific control
64cee65e
DSH
40operations can be performed to set any appropriate parameters for the
41operation.
42
e54e1235 43The function EVP_PKEY_verify_recover() can be called more than once on the same
64cee65e
DSH
44context if several operations are performed using the same parameters.
45
46=head1 RETURN VALUES
47
e54e1235 48EVP_PKEY_verify_recover_init() and EVP_PKEY_verify_recover() return 1 for success
64cee65e
DSH
49and 0 or a negative value for failure. In particular a return value of -2
50indicates the operation is not supported by the public key algorithm.
51
52=head1 EXAMPLE
53
54Recover digest originally signed using PKCS#1 and SHA256 digest:
55
43636910
DSH
56 #include <openssl/evp.h>
57 #include <openssl/rsa.h>
58
59 EVP_PKEY_CTX *ctx;
60 unsigned char *rout, *sig;
61 size_t routlen, siglen;
62 EVP_PKEY *verify_key;
63 /* NB: assumes verify_key, sig and siglen are already set up
64 * and that verify_key is an RSA public key
65 */
66 ctx = EVP_PKEY_CTX_new(verify_key);
67 if (!ctx)
68 /* Error occurred */
e54e1235 69 if (EVP_PKEY_verify_recover_init(ctx) <= 0)
43636910
DSH
70 /* Error */
71 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
72 /* Error */
73 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
74 /* Error */
75
76 /* Determine buffer length */
e54e1235 77 if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0)
43636910
DSH
78 /* Error */
79
80 rout = OPENSSL_malloc(routlen);
81
82 if (!rout)
83 /* malloc failure */
84
e54e1235 85 if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0)
43636910
DSH
86 /* Error */
87
88 /* Recovered data is routlen bytes written to buffer rout */
64cee65e
DSH
89
90=head1 SEE ALSO
91
9b86974e
RS
92L<EVP_PKEY_CTX_new(3)>,
93L<EVP_PKEY_encrypt(3)>,
94L<EVP_PKEY_decrypt(3)>,
95L<EVP_PKEY_sign(3)>,
96L<EVP_PKEY_verify(3)>,
97L<EVP_PKEY_derive(3)>
64cee65e
DSH
98
99=head1 HISTORY
100
fb552ac6 101These functions were first added to OpenSSL 1.0.0.
64cee65e
DSH
102
103=cut