]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/EVP_PKEY_verify_recover.pod
Remove an unnecessary call to BN_CTX_free.
[thirdparty/openssl.git] / doc / man3 / EVP_PKEY_verify_recover.pod
CommitLineData
64cee65e
DSH
1=pod
2
3=head1 NAME
4
0e521004
RL
5EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover
6- recover signature using a public key algorithm
64cee65e
DSH
7
8=head1 SYNOPSIS
9
10 #include <openssl/evp.h>
11
e54e1235
BL
12 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
13 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
e9b77246
BB
14 unsigned char *rout, size_t *routlen,
15 const unsigned char *sig, size_t siglen);
64cee65e
DSH
16
17=head1 DESCRIPTION
18
0e521004
RL
19EVP_PKEY_verify_recover_init() initializes a public key algorithm context
20I<ctx> for signing using the algorithm given when the context was created
21using L<EVP_PKEY_CTX_new(3)> or variants thereof. The algorithm is used to
22fetch a B<EVP_SIGNATURE> method implicitly, see L<provider(7)/Implicit fetch>
23for more information about implict fetches.
64cee65e 24
e54e1235 25The EVP_PKEY_verify_recover() function recovers signed data
0e521004
RL
26using I<ctx>. The signature is specified using the I<sig> and
27I<siglen> parameters. If I<rout> is NULL then the maximum size of the output
28buffer is written to the I<routlen> parameter. If I<rout> is not NULL then
29before the call the I<routlen> parameter should contain the length of the
30I<rout> buffer, if the call is successful recovered data is written to
31I<rout> and the amount of data written to I<routlen>.
64cee65e
DSH
32
33=head1 NOTES
34
35Normally an application is only interested in whether a signature verification
1bc74519 36operation is successful in those cases the EVP_verify() function should be
64cee65e
DSH
37used.
38
39Sometimes however it is useful to obtain the data originally signed using a
40signing operation. Only certain public key algorithms can recover a signature
41in this way (for example RSA in PKCS padding mode).
42
e54e1235 43After the call to EVP_PKEY_verify_recover_init() algorithm specific control
64cee65e
DSH
44operations can be performed to set any appropriate parameters for the
45operation.
46
e54e1235 47The function EVP_PKEY_verify_recover() can be called more than once on the same
64cee65e
DSH
48context if several operations are performed using the same parameters.
49
50=head1 RETURN VALUES
51
e54e1235 52EVP_PKEY_verify_recover_init() and EVP_PKEY_verify_recover() return 1 for success
64cee65e
DSH
53and 0 or a negative value for failure. In particular a return value of -2
54indicates the operation is not supported by the public key algorithm.
55
cda77422 56=head1 EXAMPLES
64cee65e
DSH
57
58Recover digest originally signed using PKCS#1 and SHA256 digest:
59
43636910
DSH
60 #include <openssl/evp.h>
61 #include <openssl/rsa.h>
62
63 EVP_PKEY_CTX *ctx;
64 unsigned char *rout, *sig;
1bc74519 65 size_t routlen, siglen;
43636910 66 EVP_PKEY *verify_key;
e9b77246 67
2947af32
BB
68 /*
69 * NB: assumes verify_key, sig and siglen are already set up
43636910
DSH
70 * and that verify_key is an RSA public key
71 */
9db6673e 72 ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */);
43636910 73 if (!ctx)
2947af32 74 /* Error occurred */
e54e1235 75 if (EVP_PKEY_verify_recover_init(ctx) <= 0)
2947af32 76 /* Error */
43636910 77 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
2947af32 78 /* Error */
43636910 79 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
2947af32 80 /* Error */
43636910
DSH
81
82 /* Determine buffer length */
e54e1235 83 if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0)
2947af32 84 /* Error */
43636910
DSH
85
86 rout = OPENSSL_malloc(routlen);
87
88 if (!rout)
2947af32 89 /* malloc failure */
1bc74519 90
e54e1235 91 if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0)
2947af32 92 /* Error */
43636910
DSH
93
94 /* Recovered data is routlen bytes written to buffer rout */
64cee65e
DSH
95
96=head1 SEE ALSO
97
9b86974e
RS
98L<EVP_PKEY_CTX_new(3)>,
99L<EVP_PKEY_encrypt(3)>,
100L<EVP_PKEY_decrypt(3)>,
101L<EVP_PKEY_sign(3)>,
102L<EVP_PKEY_verify(3)>,
1bc74519 103L<EVP_PKEY_derive(3)>
64cee65e
DSH
104
105=head1 HISTORY
106
fc5ecadd 107These functions were added in OpenSSL 1.0.0.
64cee65e 108
e2f92610
RS
109=head1 COPYRIGHT
110
48e5119a 111Copyright 2013-2018 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 112
4746f25a 113Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
114this file except in compliance with the License. You can obtain a copy
115in the file LICENSE in the source distribution or at
116L<https://www.openssl.org/source/license.html>.
117
118=cut