]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/EVP_PKEY_sign.pod
Update copyright year
[thirdparty/openssl.git] / doc / man3 / EVP_PKEY_sign.pod
CommitLineData
ba544377
DSH
1=pod
2
3=head1 NAME
4
ee22fca5 5EVP_PKEY_sign_init, EVP_PKEY_sign_init_ex, EVP_PKEY_sign
11031468 6- sign using a public key algorithm
ba544377
DSH
7
8=head1 SYNOPSIS
9
10 #include <openssl/evp.h>
11
12 int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
ee22fca5 13 int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
ba544377 14 int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
e9b77246
BB
15 unsigned char *sig, size_t *siglen,
16 const unsigned char *tbs, size_t tbslen);
ba544377
DSH
17
18=head1 DESCRIPTION
19
0e521004
RL
20EVP_PKEY_sign_init() initializes a public key algorithm context I<ctx> for
21signing using the algorithm given when the context was created
22using L<EVP_PKEY_CTX_new(3)> or variants thereof. The algorithm is used to
23fetch a B<EVP_SIGNATURE> method implicitly, see L<provider(7)/Implicit fetch>
8c1cbc72 24for more information about implicit fetches.
ba544377 25
ee22fca5
P
26EVP_PKEY_sign_init_ex() is the same as EVP_PKEY_sign_init() but additionally
27sets the passed parameters I<params> on the context before returning.
28
ba544377 29The EVP_PKEY_sign() function performs a public key signing operation
0e521004
RL
30using I<ctx>. The data to be signed is specified using the I<tbs> and
31I<tbslen> parameters. If I<sig> is NULL then the maximum size of the output
32buffer is written to the I<siglen> parameter. If I<sig> is not NULL then
33before the call the I<siglen> parameter should contain the length of the
34I<sig> buffer, if the call is successful the signature is written to
35I<sig> and the amount of data written to I<siglen>.
ba544377
DSH
36
37=head1 NOTES
38
d64c533a
EK
39EVP_PKEY_sign() does not hash the data to be signed, and therefore is
40normally used to sign digests. For signing arbitrary messages, see the
9b86974e
RS
41L<EVP_DigestSignInit(3)> and
42L<EVP_SignInit(3)> signing interfaces instead.
d64c533a 43
ba544377
DSH
44After the call to EVP_PKEY_sign_init() algorithm specific control
45operations can be performed to set any appropriate parameters for the
9b86974e 46operation (see L<EVP_PKEY_CTX_ctrl(3)>).
ba544377
DSH
47
48The function EVP_PKEY_sign() can be called more than once on the same
49context if several operations are performed using the same parameters.
50
51=head1 RETURN VALUES
52
53EVP_PKEY_sign_init() and EVP_PKEY_sign() return 1 for success and 0
54or a negative value for failure. In particular a return value of -2
55indicates the operation is not supported by the public key algorithm.
56
cda77422 57=head1 EXAMPLES
ba544377 58
43636910
DSH
59Sign data using RSA with PKCS#1 padding and SHA256 digest:
60
61 #include <openssl/evp.h>
62 #include <openssl/rsa.h>
63
64 EVP_PKEY_CTX *ctx;
d64c533a 65 /* md is a SHA-256 digest in this example. */
43636910 66 unsigned char *md, *sig;
d64c533a 67 size_t mdlen = 32, siglen;
43636910 68 EVP_PKEY *signing_key;
d64c533a
EK
69
70 /*
71 * NB: assumes signing_key and md are set up before the next
72 * step. signing_key must be an RSA private key and md must
73 * point to the SHA-256 digest to be signed.
43636910 74 */
d64c533a 75 ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
43636910 76 if (!ctx)
2947af32 77 /* Error occurred */
43636910 78 if (EVP_PKEY_sign_init(ctx) <= 0)
2947af32 79 /* Error */
43636910 80 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
2947af32 81 /* Error */
43636910 82 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
2947af32 83 /* Error */
43636910
DSH
84
85 /* Determine buffer length */
86 if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
2947af32 87 /* Error */
43636910
DSH
88
89 sig = OPENSSL_malloc(siglen);
90
91 if (!sig)
2947af32 92 /* malloc failure */
1bc74519 93
43636910 94 if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0)
2947af32 95 /* Error */
43636910
DSH
96
97 /* Signature is siglen bytes written to buffer sig */
ba544377 98
ba544377
DSH
99
100=head1 SEE ALSO
101
9b86974e
RS
102L<EVP_PKEY_CTX_new(3)>,
103L<EVP_PKEY_CTX_ctrl(3)>,
104L<EVP_PKEY_encrypt(3)>,
105L<EVP_PKEY_decrypt(3)>,
106L<EVP_PKEY_verify(3)>,
107L<EVP_PKEY_verify_recover(3)>,
1bc74519 108L<EVP_PKEY_derive(3)>
ba544377
DSH
109
110=head1 HISTORY
111
ee22fca5
P
112The EVP_PKEY_sign_init() and EVP_PKEY_sign() functions were added in
113OpenSSL 1.0.0.
114
115The EVP_PKEY_sign_init_ex() function was added in OpenSSL 3.0.
ba544377 116
e2f92610
RS
117=head1 COPYRIGHT
118
3c2bdd7d 119Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 120
4746f25a 121Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
122this file except in compliance with the License. You can obtain a copy
123in the file LICENSE in the source distribution or at
124L<https://www.openssl.org/source/license.html>.
125
126=cut