]>
Commit | Line | Data |
---|---|---|
1 | =pod | |
2 | ||
3 | =head1 NAME | |
4 | ||
5 | EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, | |
6 | EVP_SignFinal_ex, EVP_SignFinal | |
7 | - EVP signing functions | |
8 | ||
9 | =head1 SYNOPSIS | |
10 | ||
11 | #include <openssl/evp.h> | |
12 | ||
13 | int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); | |
14 | int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); | |
15 | int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, | |
16 | EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, const char *propq); | |
17 | int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sig, unsigned int *s, | |
18 | EVP_PKEY *pkey); | |
19 | ||
20 | void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type); | |
21 | ||
22 | =head1 DESCRIPTION | |
23 | ||
24 | The EVP signature routines are a high-level interface to digital | |
25 | signatures. | |
26 | ||
27 | EVP_SignInit_ex() sets up signing context I<ctx> to use digest | |
28 | I<type> from B<ENGINE> I<impl>. I<ctx> must be created with | |
29 | EVP_MD_CTX_new() before calling this function. | |
30 | ||
31 | EVP_SignUpdate() hashes I<cnt> bytes of data at I<d> into the | |
32 | signature context I<ctx>. This function can be called several times on the | |
33 | same I<ctx> to include additional data. | |
34 | ||
35 | EVP_SignFinal_ex() signs the data in I<ctx> using the private key | |
36 | I<pkey> and places the signature in I<sig>. The library context I<libctx> and | |
37 | property query I<propq> are used when creating a context to use with the key | |
38 | I<pkey>. I<sig> must be at least C<EVP_PKEY_get_size(pkey)> bytes in size. | |
39 | I<s> is an OUT parameter, and not used as an IN parameter. | |
40 | The number of bytes of data written (i.e. the length of the signature) | |
41 | will be written to the integer at I<s>, at most C<EVP_PKEY_get_size(pkey)> | |
42 | bytes will be written. | |
43 | ||
44 | EVP_SignFinal() is similar to EVP_SignFinal_ex() but uses default | |
45 | values of NULL for the library context I<libctx> and the property query I<propq>. | |
46 | ||
47 | EVP_SignInit() initializes a signing context I<ctx> to use the default | |
48 | implementation of digest I<type>. | |
49 | ||
50 | =head1 RETURN VALUES | |
51 | ||
52 | EVP_SignInit_ex(), EVP_SignUpdate(), EVP_SignFinal_ex() and | |
53 | EVP_SignFinal() return 1 for success and 0 for failure. | |
54 | ||
55 | The error codes can be obtained by L<ERR_get_error(3)>. | |
56 | ||
57 | =head1 NOTES | |
58 | ||
59 | The B<EVP> interface to digital signatures should almost always be used in | |
60 | preference to the low-level interfaces. This is because the code then becomes | |
61 | transparent to the algorithm used and much more flexible. | |
62 | ||
63 | When signing with some private key types the random number generator must | |
64 | be seeded. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails | |
65 | due to external circumstances (see L<RAND(7)>), the operation will fail. | |
66 | ||
67 | The call to EVP_SignFinal() internally finalizes a copy of the digest context. | |
68 | This means that calls to EVP_SignUpdate() and EVP_SignFinal() can be called | |
69 | later to digest and sign additional data.cApplications may disable this | |
70 | behavior by setting the EVP_MD_CTX_FLAG_FINALISE context flag via | |
71 | L<EVP_MD_CTX_set_flags(3)>. | |
72 | ||
73 | Since only a copy of the digest context is ever finalized the context must | |
74 | be cleaned up after use by calling EVP_MD_CTX_free() or a memory leak | |
75 | will occur. | |
76 | ||
77 | Note that not all providers support continuation, in case the selected | |
78 | provider does not allow to duplicate contexts EVP_SignFinal() will | |
79 | finalize the digest context and attempting to process additional data via | |
80 | EVP_SignUpdate() will result in an error. | |
81 | ||
82 | =head1 BUGS | |
83 | ||
84 | Older versions of this documentation wrongly stated that calls to | |
85 | EVP_SignUpdate() could not be made after calling EVP_SignFinal(). | |
86 | ||
87 | Since the private key is passed in the call to EVP_SignFinal() any error | |
88 | relating to the private key (for example an unsuitable key and digest | |
89 | combination) will not be indicated until after potentially large amounts of | |
90 | data have been passed through EVP_SignUpdate(). | |
91 | ||
92 | It is not possible to change the signing parameters using these function. | |
93 | ||
94 | The previous two bugs are fixed in the newer EVP_DigestSign*() functions. | |
95 | ||
96 | =head1 SEE ALSO | |
97 | ||
98 | L<EVP_PKEY_get_size(3)>, L<EVP_PKEY_get_bits(3)>, | |
99 | L<EVP_PKEY_get_security_bits(3)>, | |
100 | L<EVP_VerifyInit(3)>, | |
101 | L<EVP_DigestInit(3)>, | |
102 | L<evp(7)>, L<HMAC(3)>, L<MD2(3)>, | |
103 | L<MD5(3)>, L<MDC2(3)>, L<RIPEMD160(3)>, | |
104 | L<SHA1(3)>, L<openssl-dgst(1)> | |
105 | ||
106 | =head1 HISTORY | |
107 | ||
108 | The function EVP_SignFinal_ex() was added in OpenSSL 3.0. | |
109 | ||
110 | =head1 COPYRIGHT | |
111 | ||
112 | Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved. | |
113 | ||
114 | Licensed under the Apache License 2.0 (the "License"). You may not use | |
115 | this file except in compliance with the License. You can obtain a copy | |
116 | in the file LICENSE in the source distribution or at | |
117 | L<https://www.openssl.org/source/license.html>. | |
118 | ||
119 | =cut |