]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/EVP_PKEY_verify.pod
EVP: Make the KEYEXCH implementation leaner
[thirdparty/openssl.git] / doc / man3 / EVP_PKEY_verify.pod
CommitLineData
6535bd42
DSH
1=pod
2
3=head1 NAME
4
11031468
MC
5EVP_PKEY_verify_init_ex, EVP_PKEY_verify_init, EVP_PKEY_verify
6- signature verification using a public key algorithm
6535bd42
DSH
7
8=head1 SYNOPSIS
9
10 #include <openssl/evp.h>
11
11031468 12 int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *signature);
6535bd42
DSH
13 int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
14 int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
e9b77246
BB
15 const unsigned char *sig, size_t siglen,
16 const unsigned char *tbs, size_t tbslen);
6535bd42
DSH
17
18=head1 DESCRIPTION
19
11031468
MC
20The EVP_PKEY_verify_init_ex() function initializes a public key algorithm
21context for performing signature verification using the signature algorithm
22B<signature>.
23The signature algorithm B<signature> should be fetched using a call to
24L<EVP_SIGNATURE_fetch(3)>.
25The EVP_PKEY object associated with B<ctx> must be compatible with that
26algorithm.
27B<signature> may be NULL in which case the EVP_SIGNATURE algorithm is fetched
28implicitly based on the type of EVP_PKEY associated with B<ctx>.
29See L<provider(7)/Implicit fetch> for more information about implict fetches.
30
31The EVP_PKEY_verify_init() function is the same as EVP_PKEY_verify_init_ex()
32except that the EVP_SIGNATURE algorithm is always implicitly fetched.
6535bd42
DSH
33
34The EVP_PKEY_verify() function performs a public key verification operation
35using B<ctx>. The signature is specified using the B<sig> and
36B<siglen> parameters. The verified data (i.e. the data believed originally
37signed) is specified using the B<tbs> and B<tbslen> parameters.
38
39=head1 NOTES
40
41After the call to EVP_PKEY_verify_init() algorithm specific control
42operations can be performed to set any appropriate parameters for the
43operation.
44
45The function EVP_PKEY_verify() can be called more than once on the same
46context if several operations are performed using the same parameters.
47
48=head1 RETURN VALUES
49
29cf84c6
DSH
50EVP_PKEY_verify_init() and EVP_PKEY_verify() return 1 if the verification was
51successful and 0 if it failed. Unlike other functions the return value 0 from
a970b14f 52EVP_PKEY_verify() only indicates that the signature did not verify
29cf84c6
DSH
53successfully (that is tbs did not match the original data or the signature was
54of invalid form) it is not an indication of a more serious error.
6535bd42
DSH
55
56A negative value indicates an error other that signature verification failure.
57In particular a return value of -2 indicates the operation is not supported by
58the public key algorithm.
59
cda77422 60=head1 EXAMPLES
6535bd42
DSH
61
62Verify signature using PKCS#1 and SHA256 digest:
63
43636910
DSH
64 #include <openssl/evp.h>
65 #include <openssl/rsa.h>
66
67 EVP_PKEY_CTX *ctx;
68 unsigned char *md, *sig;
1bc74519 69 size_t mdlen, siglen;
43636910 70 EVP_PKEY *verify_key;
e9b77246 71
2947af32
BB
72 /*
73 * NB: assumes verify_key, sig, siglen md and mdlen are already set up
43636910
DSH
74 * and that verify_key is an RSA public key
75 */
9db6673e 76 ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */);
43636910 77 if (!ctx)
2947af32 78 /* Error occurred */
43636910 79 if (EVP_PKEY_verify_init(ctx) <= 0)
2947af32 80 /* Error */
43636910 81 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
2947af32 82 /* Error */
43636910 83 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
2947af32 84 /* Error */
43636910
DSH
85
86 /* Perform operation */
6f413ef4 87 ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen);
43636910 88
2947af32
BB
89 /*
90 * ret == 1 indicates success, 0 verify failure and < 0 for some
43636910
DSH
91 * other error.
92 */
6535bd42
DSH
93
94=head1 SEE ALSO
95
9b86974e
RS
96L<EVP_PKEY_CTX_new(3)>,
97L<EVP_PKEY_encrypt(3)>,
98L<EVP_PKEY_decrypt(3)>,
99L<EVP_PKEY_sign(3)>,
100L<EVP_PKEY_verify_recover(3)>,
1bc74519 101L<EVP_PKEY_derive(3)>
6535bd42
DSH
102
103=head1 HISTORY
104
11031468
MC
105EVP_PKEY_verify_init_ex() was added in OpenSSL 3.0.
106All other functions were added in OpenSSL 1.0.0.
6535bd42 107
e2f92610
RS
108=head1 COPYRIGHT
109
48e5119a 110Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 111
4746f25a 112Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
113this file except in compliance with the License. You can obtain a copy
114in the file LICENSE in the source distribution or at
115L<https://www.openssl.org/source/license.html>.
116
117=cut