Blame doc/man3/EVP_PKEY_verify.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
EVP_PKEY_verify_init, EVP_PKEY_verify - signature verification using a public key algorithm
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
Packit c4476c
 int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
Packit c4476c
 int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
Packit c4476c
                     const unsigned char *sig, size_t siglen,
Packit c4476c
                     const unsigned char *tbs, size_t tbslen);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The EVP_PKEY_verify_init() function initializes a public key algorithm
Packit c4476c
context using key B<pkey> for a signature verification operation.
Packit c4476c
Packit c4476c
The EVP_PKEY_verify() function performs a public key verification operation
Packit c4476c
using B<ctx>. The signature is specified using the B<sig> and
Packit c4476c
B<siglen> parameters. The verified data (i.e. the data believed originally
Packit c4476c
signed) is specified using the B<tbs> and B<tbslen> parameters.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
After the call to EVP_PKEY_verify_init() algorithm specific control
Packit c4476c
operations can be performed to set any appropriate parameters for the
Packit c4476c
operation.
Packit c4476c
Packit c4476c
The function EVP_PKEY_verify() can be called more than once on the same
Packit c4476c
context if several operations are performed using the same parameters.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
EVP_PKEY_verify_init() and EVP_PKEY_verify() return 1 if the verification was
Packit c4476c
successful and 0 if it failed. Unlike other functions the return value 0 from
Packit c4476c
EVP_PKEY_verify() only indicates that the signature did not verify
Packit c4476c
successfully (that is tbs did not match the original data or the signature was
Packit c4476c
of invalid form) it is not an indication of a more serious error.
Packit c4476c
Packit c4476c
A negative value indicates an error other that signature verification failure.
Packit c4476c
In particular a return value of -2 indicates the operation is not supported by
Packit c4476c
the public key algorithm.
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
Verify signature using PKCS#1 and SHA256 digest:
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
 #include <openssl/rsa.h>
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *ctx;
Packit c4476c
 unsigned char *md, *sig;
Packit c4476c
 size_t mdlen, siglen;
Packit c4476c
 EVP_PKEY *verify_key;
Packit c4476c
Packit c4476c
 /*
Packit c4476c
  * NB: assumes verify_key, sig, siglen md and mdlen are already set up
Packit c4476c
  * and that verify_key is an RSA public key
Packit c4476c
  */
Packit c4476c
 ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */);
Packit c4476c
 if (!ctx)
Packit c4476c
     /* Error occurred */
Packit c4476c
 if (EVP_PKEY_verify_init(ctx) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
Packit c4476c
 /* Perform operation */
Packit c4476c
 ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen);
Packit c4476c
Packit c4476c
 /*
Packit c4476c
  * ret == 1 indicates success, 0 verify failure and < 0 for some
Packit c4476c
  * other error.
Packit c4476c
  */
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<EVP_PKEY_CTX_new(3)>,
Packit c4476c
L<EVP_PKEY_encrypt(3)>,
Packit c4476c
L<EVP_PKEY_decrypt(3)>,
Packit c4476c
L<EVP_PKEY_sign(3)>,
Packit c4476c
L<EVP_PKEY_verify_recover(3)>,
Packit c4476c
L<EVP_PKEY_derive(3)>
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
These functions were added in OpenSSL 1.0.0.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut