summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/man
diff options
context:
space:
mode:
authorschwarze <>2016-11-03 09:35:34 +0000
committerschwarze <>2016-11-03 09:35:34 +0000
commit4d607f17ea3eb38ed9f7703afd423f6055c686d4 (patch)
tree58d82d0d7f6aeee380eaadbcfaa231ecbe6b90a0 /src/lib/libcrypto/man
parentcf67afe5881727d740e9f6c772aa478123f7d698 (diff)
downloadopenbsd-4d607f17ea3eb38ed9f7703afd423f6055c686d4.tar.gz
openbsd-4d607f17ea3eb38ed9f7703afd423f6055c686d4.tar.bz2
openbsd-4d607f17ea3eb38ed9f7703afd423f6055c686d4.zip
convert EVP manuals from pod to mdoc
Diffstat (limited to 'src/lib/libcrypto/man')
-rw-r--r--src/lib/libcrypto/man/EVP_BytesToKey.382
-rw-r--r--src/lib/libcrypto/man/EVP_DigestInit.3520
-rw-r--r--src/lib/libcrypto/man/EVP_DigestSignInit.3152
-rw-r--r--src/lib/libcrypto/man/EVP_DigestVerifyInit.3132
-rw-r--r--src/lib/libcrypto/man/EVP_EncryptInit.3939
-rw-r--r--src/lib/libcrypto/man/EVP_OpenInit.398
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3245
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_CTX_new.385
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_cmp.392
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_decrypt.3117
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_derive.3120
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_encrypt.3117
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_get_default_digest.339
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_keygen.3235
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_new.344
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_print_private.376
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_set1_RSA.3171
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_sign.3120
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_verify.3109
-rw-r--r--src/lib/libcrypto/man/EVP_PKEY_verify_recover.3131
-rw-r--r--src/lib/libcrypto/man/EVP_SealInit.3131
-rw-r--r--src/lib/libcrypto/man/EVP_SignInit.3167
-rw-r--r--src/lib/libcrypto/man/EVP_VerifyInit.3146
-rw-r--r--src/lib/libcrypto/man/Makefile20
-rw-r--r--src/lib/libcrypto/man/evp.3151
25 files changed, 4229 insertions, 10 deletions
diff --git a/src/lib/libcrypto/man/EVP_BytesToKey.3 b/src/lib/libcrypto/man/EVP_BytesToKey.3
new file mode 100644
index 0000000000..45a3d9bf33
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_BytesToKey.3
@@ -0,0 +1,82 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_BYTESTOKEY 3
3.Os
4.Sh NAME
5.Nm EVP_BytesToKey
6.Nd password based encryption routine
7.Sh SYNOPSIS
8.In openssl/evp.h
9.Ft int
10.Fo EVP_BytesToKey
11.Fa "const EVP_CIPHER *type"
12.Fa "const EVP_MD *md"
13.Fa "const unsigned char *salt"
14.Fa "const unsigned char *data"
15.Fa "int datal"
16.Fa "int count"
17.Fa "unsigned char *key"
18.Fa "unsigned char *iv"
19.Fc
20.Sh DESCRIPTION
21.Fn EVP_BytesToKey
22derives a key and IV from various parameters.
23.Fa type
24is the cipher to derive the key and IV for.
25.Fa md
26is the message digest to use.
27The
28.Fa salt
29parameter is used as a salt in the derivation: it should point to an 8
30byte buffer or
31.Dv NULL
32if no salt is used.
33.Fa data
34is a buffer containing
35.Fa datal
36bytes which is used to derive the keying data.
37.Fa count
38is the iteration count to use.
39The derived key and IV will be written to
40.Fa key
41and
42.Fa iv ,
43respectively.
44.Pp
45A typical application of this function is to derive keying material for
46an encryption algorithm from a password in the
47.Fa data
48parameter.
49.Pp
50Increasing the
51.Fa count
52parameter slows down the algorithm which makes it harder for an attacker
53to perform a brute force attack using a large number of candidate
54passwords.
55.Pp
56If the total key and IV length is less than the digest length and MD5
57is used, then the derivation algorithm is compatible with PKCS#5 v1.5.
58Otherwise, a non standard extension is used to derive the extra data.
59.Pp
60Newer applications should use more standard algorithms such as PBKDF2 as
61defined in PKCS#5v2.1 for key derivation.
62.Sh KEY DERIVATION ALGORITHM
63The key and IV is derived by concatenating D_1, D_2, etc until enough
64data is available for the key and IV.
65D_i is defined recursively as:
66.Pp
67.Dl D_i = HASH^count(D_(i-1) || data || salt)
68.Pp
69where || denotes concatenation, D_0 is empty, HASH is the digest
70algorithm in use, HASH^1(data) is simply HASH(data), HASH^2(data) is
71HASH(HASH(data)) and so on.
72.Pp
73The initial bytes are used for the key and the subsequent bytes for the
74IV.
75.Sh RETURN VALUES
76.Fn EVP_BytesToKey
77returns the size of the derived key in bytes.
78.Sh SEE ALSO
79.Xr evp 3 ,
80.Xr EVP_EncryptInit 3 ,
81.Xr PKCS5_PBKDF2_HMAC 3 ,
82.Xr rand 3
diff --git a/src/lib/libcrypto/man/EVP_DigestInit.3 b/src/lib/libcrypto/man/EVP_DigestInit.3
new file mode 100644
index 0000000000..9bcf79241c
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_DigestInit.3
@@ -0,0 +1,520 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_DIGESTINIT 3
3.Os
4.Sh NAME
5.Nm EVP_MD_CTX_init ,
6.Nm EVP_MD_CTX_create ,
7.Nm EVP_DigestInit_ex ,
8.Nm EVP_DigestUpdate ,
9.Nm EVP_DigestFinal_ex ,
10.Nm EVP_MD_CTX_cleanup ,
11.Nm EVP_MD_CTX_destroy ,
12.Nm EVP_MAX_MD_SIZE ,
13.Nm EVP_MD_CTX_copy_ex ,
14.Nm EVP_MD_CTX_copy ,
15.Nm EVP_MD_type ,
16.Nm EVP_MD_pkey_type ,
17.Nm EVP_MD_size ,
18.Nm EVP_MD_block_size ,
19.Nm EVP_MD_CTX_md ,
20.Nm EVP_MD_CTX_size ,
21.Nm EVP_MD_CTX_block_size ,
22.Nm EVP_MD_CTX_type ,
23.Nm EVP_md_null ,
24.Nm EVP_md2 ,
25.Nm EVP_md5 ,
26.Nm EVP_sha1 ,
27.Nm EVP_sha224 ,
28.Nm EVP_sha256 ,
29.Nm EVP_sha384 ,
30.Nm EVP_sha512 ,
31.Nm EVP_dss ,
32.Nm EVP_dss1 ,
33.Nm EVP_ripemd160 ,
34.Nm EVP_get_digestbyname ,
35.Nm EVP_get_digestbynid ,
36.Nm EVP_get_digestbyobj ,
37.Nm EVP_DigestInit ,
38.Nm EVP_DigestFinal
39.Nd EVP digest routines
40.Sh SYNOPSIS
41.In openssl/evp.h
42.Ft void
43.Fo EVP_MD_CTX_init
44.Fa "EVP_MD_CTX *ctx"
45.Fc
46.Ft EVP_MD_CTX *
47.Fn EVP_MD_CTX_create void
48.Ft int
49.Fo EVP_DigestInit_ex
50.Fa "EVP_MD_CTX *ctx"
51.Fa "const EVP_MD *type"
52.Fa "ENGINE *impl"
53.Fc
54.Ft int
55.Fo EVP_DigestUpdate
56.Fa "EVP_MD_CTX *ctx"
57.Fa "const void *d"
58.Fa "size_t cnt"
59.Fc
60.Ft int
61.Fo EVP_DigestFinal_ex
62.Fa "EVP_MD_CTX *ctx"
63.Fa "unsigned char *md"
64.Fa "unsigned int *s"
65.Fc
66.Ft int
67.Fo EVP_MD_CTX_cleanup
68.Fa "EVP_MD_CTX *ctx"
69.Fc
70.Ft void
71.Fo EVP_MD_CTX_destroy
72.Fa "EVP_MD_CTX *ctx"
73.Fc
74.Ft int
75.Fo EVP_MD_CTX_copy_ex
76.Fa "EVP_MD_CTX *out"
77.Fa "const EVP_MD_CTX *in"
78.Fc
79.Ft int
80.Fo EVP_DigestInit
81.Fa "EVP_MD_CTX *ctx"
82.Fa "const EVP_MD *type"
83.Fc
84.Ft int
85.Fo EVP_DigestFinal
86.Fa "EVP_MD_CTX *ctx"
87.Fa "unsigned char *md"
88.Fa "unsigned int *s"
89.Fc
90.Ft int
91.Fo EVP_MD_CTX_copy
92.Fa "EVP_MD_CTX *out"
93.Fa "EVP_MD_CTX *in"
94.Fc
95.Fd #define EVP_MAX_MD_SIZE 64 /* SHA512 */
96.Ft int
97.Fo EVP_MD_type
98.Fa "const EVP_MD *md"
99.Fc
100.Ft int
101.Fo EVP_MD_pkey_type
102.Fa "const EVP_MD *md"
103.Fc
104.Ft int
105.Fo EVP_MD_size
106.Fa "const EVP_MD *md"
107.Fc
108.Ft int
109.Fo EVP_MD_block_size
110.Fa "const EVP_MD *md"
111.Fc
112.Ft const EVP_MD *
113.Fo EVP_MD_CTX_md
114.Fa "const EVP_MD_CTX *ctx"
115.Fc
116.Fd #define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))
117.Fd #define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)->digest)
118.Fd #define EVP_MD_CTX_type(e) EVP_MD_type((e)->digest)
119.Ft const EVP_MD *
120.Fn EVP_md_null void
121.Ft const EVP_MD *
122.Fn EVP_md2 void
123.Ft const EVP_MD *
124.Fn EVP_md5 void
125.Ft const EVP_MD *
126.Fn EVP_sha1 void
127.Ft const EVP_MD *
128.Fn EVP_dss void
129.Ft const EVP_MD *
130.Fn EVP_dss1 void
131.Ft const EVP_MD *
132.Fn EVP_ripemd160 void
133.Ft const EVP_MD *
134.Fn EVP_sha224 void
135.Ft const EVP_MD *
136.Fn EVP_sha256 void
137.Ft const EVP_MD *
138.Fn EVP_sha384 void
139.Ft const EVP_MD *
140.Fn EVP_sha512 void
141.Ft const EVP_MD *
142.Fo EVP_get_digestbyname
143.Fa "const char *name"
144.Fc
145.Fd #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
146.Fd #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
147.Sh DESCRIPTION
148The EVP digest routines are a high level interface to message digests.
149.Pp
150.Fn EVP_MD_CTX_init
151initializes the digest context
152.Fa ctx .
153.Pp
154.Fn EVP_MD_CTX_create
155allocates, initializes, and returns a digest context.
156.Pp
157.Fn EVP_DigestInit_ex
158sets up digest context
159.Fa ctx
160to use a digest
161.Fa type
162from
163.Vt ENGINE
164.Fa impl .
165.Fa ctx
166must be initialized before calling this function.
167.Fa type
168will typically be supplied by a function such as
169.Fn EVP_sha1 .
170If
171.Fa impl
172is
173.Dv NULL ,
174then the default implementation of digest
175.Fa type
176is used.
177.Pp
178.Fn EVP_DigestUpdate
179hashes
180.Fa cnt
181bytes of data at
182.Fa d
183into the digest context
184.Fa ctx .
185This function can be called several times on the same
186.Fa ctx
187to hash additional data.
188.Pp
189.Fn EVP_DigestFinal_ex
190retrieves the digest value from
191.Fa ctx
192and places it in
193.Fa md .
194If the
195.Fa s
196parameter is not
197.Dv NULL ,
198then the number of bytes of data written (i.e. the length of the
199digest) will be written to the integer at
200.Fa s ,
201at most
202.Dv EVP_MAX_MD_SIZE
203bytes will be written.
204After calling
205.Fn EVP_DigestFinal_ex ,
206no additional calls to
207.Fn EVP_DigestUpdate
208can be made, but
209.Fn EVP_DigestInit_ex
210can be called to initialize a new digest operation.
211.Pp
212.Fn EVP_MD_CTX_cleanup
213cleans up the digest context
214.Fa ctx .
215It should be called after a digest context is no longer needed.
216.Pp
217.Fn EVP_MD_CTX_destroy
218cleans up the digest context
219.Fa ctx
220and frees up the space allocated to it.
221It should be called only on a context created using
222.Fn EVP_MD_CTX_create .
223.Pp
224.Fn EVP_MD_CTX_copy_ex
225can be used to copy the message digest state from
226.Fa in
227to
228.Fa out .
229This is useful if large amounts of data are to be hashed which only
230differ in the last few bytes.
231.Fa out
232must be initialized before calling this function.
233.Pp
234.Fn EVP_DigestInit
235behaves in the same way as
236.Fn EVP_DigestInit_ex
237except the passed context
238.Fa ctx
239does not have to be initialized, and it always uses the default digest
240implementation.
241.Pp
242.Fn EVP_DigestFinal
243is similar to
244.Fn EVP_DigestFinal_ex
245except the digest context
246.Fa ctx
247is automatically cleaned up.
248.Pp
249.Fn EVP_MD_CTX_copy
250is similar to
251.Fn EVP_MD_CTX_copy_ex
252except the destination
253.Fa out
254does not have to be initialized.
255.Pp
256.Fn EVP_MD_size
257and
258.Fn EVP_MD_CTX_size
259return the size of the message digest when passed an
260.Vt EVP_MD
261or an
262.Vt EVP_MD_CTX
263structure, i.e. the size of the hash.
264.Pp
265.Fn EVP_MD_block_size
266and
267.Fn EVP_MD_CTX_block_size
268return the block size of the message digest when passed an
269.Vt EVP_MD
270or an
271.Vt EVP_MD_CTX
272structure.
273.Pp
274.Fn EVP_MD_type
275and
276.Fn EVP_MD_CTX_type
277return the NID of the OBJECT IDENTIFIER representing the given message
278digest when passed an
279.Vt EVP_MD
280structure.
281For example
282.Fn EVP_MD_type EVP_sha1()
283returns
284.Dv NID_sha1 .
285This function is normally used when setting ASN1 OIDs.
286.Pp
287.Fn EVP_MD_CTX_md
288returns the
289.Vt EVP_MD
290structure corresponding to the passed
291.Vt EVP_MD_CTX .
292.Pp
293.Fn EVP_MD_pkey_type
294returns the NID of the public key signing algorithm associated with this
295digest.
296For example
297.Fn EVP_sha1
298is associated with RSA so this will return
299.Dv NID_sha1WithRSAEncryption .
300Since digests and signature algorithms are no longer linked this
301function is only retained for compatibility reasons.
302.Pp
303.Fn EVP_md2 ,
304.Fn EVP_md5 ,
305.Fn EVP_sha1 ,
306.Fn EVP_sha224 ,
307.Fn EVP_sha256 ,
308.Fn EVP_sha384 ,
309.Fn EVP_sha512 ,
310and
311.Fn EVP_ripemd160
312return
313.Vt EVP_MD
314structures for the MD2, MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and
315RIPEMD160 digest algorithms respectively.
316.Pp
317.Fn EVP_dss
318and
319.Fn EVP_dss1
320return
321.Vt EVP_MD
322structures for SHA1 digest algorithms but using DSS (DSA) for the
323signature algorithm.
324Note: there is no need to use these pseudo-digests in OpenSSL 1.0.0 and
325later, they are however retained for compatibility.
326.Pp
327.Fn EVP_md_null
328is a "null" message digest that does nothing:
329i.e. the hash it returns is of zero length.
330.Pp
331.Fn EVP_get_digestbyname ,
332.Fn EVP_get_digestbynid ,
333and
334.Fn EVP_get_digestbyobj
335return an
336.Vt EVP_MD
337structure when passed a digest name, a digest NID, or an ASN1_OBJECT
338structure respectively.
339The digest table must be initialized using, for example,
340.Xr OpenSSL_add_all_digests 3
341for these functions to work.
342.Pp
343The EVP interface to message digests should almost always be used
344in preference to the low level interfaces.
345This is because the code then becomes transparent to the digest used and
346much more flexible.
347.Pp
348New applications should use the SHA2 digest algorithms such as SHA256.
349The other digest algorithms are still in common use.
350.Pp
351For most applications the
352.Fa impl
353parameter to
354.Fn EVP_DigestInit_ex
355will be set to NULL to use the default digest implementation.
356.Pp
357The functions
358.Fn EVP_DigestInit ,
359.Fn EVP_DigestFinal ,
360and
361.Fn EVP_MD_CTX_copy
362are obsolete but are retained to maintain compatibility with existing
363code.
364New applications should use
365.Fn EVP_DigestInit_ex ,
366.Fn EVP_DigestFinal_ex ,
367and
368.Fn EVP_MD_CTX_copy_ex
369because they can efficiently reuse a digest context instead of
370initializing and cleaning it up on each call and allow non default
371implementations of digests to be specified.
372.Pp
373In OpenSSL 0.9.7 and later if digest contexts are not cleaned up after
374use memory leaks will occur.
375.Pp
376Stack allocation of
377.Vt EVP_MD_CTX
378structures is common, for example:
379.Bd -literal -offset indent
380EVP_MD_CTX mctx;
381EVP_MD_CTX_init(&mctx);
382.Ed
383.Pp
384This will cause binary compatibility issues if the size of
385.Vt EVP_MD_CTX
386structure changes (this will only happen with a major release of OpenSSL).
387Applications wishing to avoid this should use
388.Fn EVP_MD_CTX_create
389instead:
390.Bd -literal -offset indent
391EVP_MD_CTX *mctx;
392mctx = EVP_MD_CTX_create();
393.Ed
394.Sh RETURN VALUES
395.Fn EVP_DigestInit_ex ,
396.Fn EVP_DigestUpdate ,
397.Fn EVP_DigestFinal_ex ,
398and
399.Fn EVP_MD_CTX_copy_ex
400return 1 for success or 0 for failure.
401.Pp
402.Fn EVP_MD_type ,
403.Fn EVP_MD_pkey_type ,
404and
405.Fn EVP_MD_type
406return the NID of the corresponding OBJECT IDENTIFIER or
407.Dv NID_undef
408if none exists.
409.Pp
410.Fn EVP_MD_size ,
411.Fn EVP_MD_block_size ,
412.Fn EVP_MD_CTX_size ,
413and
414.Fn EVP_MD_CTX_block_size
415return the digest or block size in bytes.
416.Pp
417.Fn EVP_md_null ,
418.Fn EVP_md2 ,
419.Fn EVP_md5 ,
420.Fn EVP_sha1 ,
421.Fn EVP_dss ,
422.Fn EVP_dss1 ,
423and
424.Fn EVP_ripemd160
425return pointers to the corresponding
426.Vt EVP_MD
427structures.
428.Pp
429.Fn EVP_get_digestbyname ,
430.Fn EVP_get_digestbynid ,
431and
432.Fn EVP_get_digestbyobj
433return either an
434.Vt EVP_MD
435structure or
436.Dv NULL
437if an error occurs.
438.Sh EXAMPLES
439This example digests the data "Test Message\en" and "Hello World\en",
440using the digest name passed on the command line.
441.Bd -literal
442#include <stdio.h>
443#include <openssl/evp.h>
444
445int
446main(int argc, char *argv[])
447{
448 EVP_MD_CTX *mdctx;
449 const EVP_MD *md;
450 const char mess1[] = "Test Message\en";
451 const char mess2[] = "Hello World\en";
452 unsigned char md_value[EVP_MAX_MD_SIZE];
453 int md_len, i;
454
455 OpenSSL_add_all_digests();
456
457 if (argc <= 1) {
458 printf("Usage: mdtest digestname\en");
459 exit(1);
460 }
461
462 md = EVP_get_digestbyname(argv[1]);
463 if (md == NULL) {
464 printf("Unknown message digest %s\en", argv[1]);
465 exit(1);
466 }
467
468 mdctx = EVP_MD_CTX_create();
469 EVP_DigestInit_ex(mdctx, md, NULL);
470 EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
471 EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
472 EVP_DigestFinal_ex(mdctx, md_value, &md_len);
473 EVP_MD_CTX_destroy(mdctx);
474
475 printf("Digest is: ");
476 for(i = 0; i < md_len; i++)
477 printf("%02x", md_value[i]);
478 printf("\en");
479}
480.Ed
481.Sh SEE ALSO
482.Xr evp 3
483.Sh HISTORY
484.Fn EVP_DigestInit ,
485.Fn EVP_DigestUpdate ,
486and
487.Fn EVP_DigestFinal
488are available in all versions of SSLeay and OpenSSL.
489.Pp
490.Fn EVP_MD_CTX_init ,
491.Fn EVP_MD_CTX_create ,
492.Fn EVP_MD_CTX_copy_ex ,
493.Fn EVP_MD_CTX_cleanup ,
494.Fn EVP_MD_CTX_destroy ,
495.Fn EVP_DigestInit_ex ,
496and
497.Fn EVP_DigestFinal_ex
498were added in OpenSSL 0.9.7.
499.Pp
500.Fn EVP_md_null ,
501.Fn EVP_md2 ,
502.Fn EVP_md5 ,
503.Fn EVP_sha1 ,
504.Fn EVP_dss ,
505.Fn EVP_dss1 ,
506and
507.Fn EVP_ripemd160
508were changed to return truely const
509.Vt EVP_MD
510pointers in OpenSSL 0.9.7.
511.Pp
512The link between digests and signing algorithms was fixed in OpenSSL 1.0
513and later, so now
514.Fn EVP_sha1
515can be used with RSA and DSA, there is no need to use
516.Fn EVP_dss1
517any more.
518.Pp
519OpenSSL 1.0 and later does not include the MD2 digest algorithm in the
520default configuration due to its security weaknesses.
diff --git a/src/lib/libcrypto/man/EVP_DigestSignInit.3 b/src/lib/libcrypto/man/EVP_DigestSignInit.3
new file mode 100644
index 0000000000..89a2d7afbd
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_DigestSignInit.3
@@ -0,0 +1,152 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_DIGESTSIGNINIT 3
3.Os
4.Sh NAME
5.Nm EVP_DigestSignInit ,
6.Nm EVP_DigestSignUpdate ,
7.Nm EVP_DigestSignFinal
8.Nd EVP signing functions
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_DigestSignInit
13.Fa "EVP_MD_CTX *ctx"
14.Fa "EVP_PKEY_CTX **pctx"
15.Fa "const EVP_MD *type"
16.Fa "ENGINE *e"
17.Fa "EVP_PKEY *pkey"
18.Fc
19.Ft int
20.Fo EVP_DigestSignUpdate
21.Fa "EVP_MD_CTX *ctx"
22.Fa "const void *d"
23.Fa "unsigned int cnt"
24.Fc
25.Ft int
26.Fo EVP_DigestSignFinal
27.Fa "EVP_MD_CTX *ctx"
28.Fa "unsigned char *sig"
29.Fa "size_t *siglen"
30.Fc
31.Sh DESCRIPTION
32The EVP signature routines are a high level interface to digital
33signatures.
34.Pp
35.Fn EVP_DigestSignInit
36sets up the signing context
37.Fa ctx
38to use the digest
39.Fa type
40from
41.Vt ENGINE
42.Fa e
43and private key
44.Fa pkey .
45.Fa ctx
46must be initialized with
47.Xr EVP_MD_CTX_init 3
48before calling this function.
49If
50.Fa pctx
51is not
52.Dv NULL ,
53the
54.Vt EVP_PKEY_CTX
55of the signing operation will be written to
56.Pf * Fa pctx :
57this can be used to set alternative signing options.
58.Pp
59.Fn EVP_DigestSignUpdate
60hashes
61.Fa cnt
62bytes of data at
63.Fa d
64into the signature context
65.Fa ctx .
66This function can be called several times on the same
67.Fa ctx
68to include additional data.
69This function is currently implemented using a macro.
70.Pp
71.Fn EVP_DigestSignFinal
72signs the data in
73.Fa ctx
74and places the signature in
75.Fa sig .
76If
77.Fa sig
78is
79.Dv NULL ,
80then the maximum size of the output buffer is written to
81.Pf * Fa siglen .
82If
83.Fa sig
84is not
85.Dv NULL ,
86then before the call
87.Fa siglen
88should contain the length of the
89.Fa sig
90buffer.
91If the call is successful, the signature is written to
92.Fa sig
93and the amount of data written to
94.Fa siglen .
95.Pp
96The EVP interface to digital signatures should almost always be
97used in preference to the low level interfaces.
98This is because the code then becomes transparent to the algorithm used
99and much more flexible.
100.Pp
101In previous versions of OpenSSL, there was a link between message digest
102types and public key algorithms.
103This meant that "clone" digests such as
104.Xr EVP_dss1 3
105needed to be used to sign using SHA1 and DSA.
106This is no longer necessary and the use of clone digest is now
107discouraged.
108.Pp
109The call to
110.Fn EVP_DigestSignFinal
111internally finalizes a copy of the digest context.
112This means that
113.Fn EVP_DigestSignUpdate
114and
115.Fn EVP_DigestSignFinal
116can be called later to digest and sign additional data.
117.Pp
118Since only a copy of the digest context is ever finalized, the context
119must be cleaned up after use by calling
120.Xr EVP_MD_CTX_cleanup 3 ,
121or a memory leak will occur.
122.Pp
123The use of
124.Xr EVP_PKEY_size 3
125with these functions is discouraged because some signature operations
126may have a signature length which depends on the parameters set.
127As a result,
128.Xr EVP_PKEY_size 3
129would have to return a value which indicates the maximum possible
130signature for any set of parameters.
131.Sh RETURN VALUES
132.Fn EVP_DigestSignInit ,
133.Fn EVP_DigestSignUpdate ,
134and
135.Fn EVP_DigestSignFinal
136return 1 for success and 0 or a negative value for failure.
137In particular, a return value of -2 indicates the operation is not
138supported by the public key algorithm.
139.Pp
140The error codes can be obtained from
141.Xr ERR_get_error 3 .
142.Sh SEE ALSO
143.Xr ERR 3 ,
144.Xr evp 3 ,
145.Xr EVP_DigestInit 3 ,
146.Xr EVP_DigestVerifyInit 3
147.Sh HISTORY
148.Fn EVP_DigestSignInit ,
149.Fn EVP_DigestSignUpdate ,
150and
151.Fn EVP_DigestSignFinal
152were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_DigestVerifyInit.3 b/src/lib/libcrypto/man/EVP_DigestVerifyInit.3
new file mode 100644
index 0000000000..0b26eb617e
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_DigestVerifyInit.3
@@ -0,0 +1,132 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_DIGESTVERIFYINIT 3
3.Os
4.Sh NAME
5.Nm EVP_DigestVerifyInit ,
6.Nm EVP_DigestVerifyUpdate ,
7.Nm EVP_DigestVerifyFinal
8.Nd EVP signature verification functions
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_DigestVerifyInit
13.Fa "EVP_MD_CTX *ctx"
14.Fa "EVP_PKEY_CTX **pctx"
15.Fa "const EVP_MD *type"
16.Fa "ENGINE *e"
17.Fa "EVP_PKEY *pkey"
18.Fc
19.Ft int
20.Fo EVP_DigestVerifyUpdate
21.Fa "EVP_MD_CTX *ctx"
22.Fa "const void *d"
23.Fa "unsigned int cnt"
24.Fc
25.Ft int
26.Fo EVP_DigestVerifyFinal
27.Fa "EVP_MD_CTX *ctx"
28.Fa "unsigned char *sig"
29.Fa "size_t siglen"
30.Fc
31.Sh DESCRIPTION
32The EVP signature routines are a high level interface to digital
33signatures.
34.Pp
35.Fn EVP_DigestVerifyInit
36sets up verification context
37.Fa ctx
38to use digest
39.Fa type
40from
41.Vt ENGINE
42.Fa e
43and public key
44.Fa pkey .
45.Fa ctx
46must be initialized with
47.Xr EVP_MD_CTX_init 3
48before calling this function.
49If
50.Fa pctx
51is not
52.Dv NULL ,
53the
54.Vt EVP_PKEY_CTX
55of the verification operation will be written to
56.Pf * Fa pctx :
57this can be used to set alternative verification options.
58.Pp
59.Fn EVP_DigestVerifyUpdate
60hashes
61.Fa cnt
62bytes of data at
63.Fa d
64into the verification context
65.Fa ctx .
66This function can be called several times on the same
67.Fa ctx
68to include additional data.
69This function is currently implemented using a macro.
70.Pp
71.Fn EVP_DigestVerifyFinal
72verifies the data in
73.Fa ctx
74against the signature in
75.Fa sig
76of length
77.Fa siglen .
78.Pp
79The EVP interface to digital signatures should almost always be
80used in preference to the low level interfaces.
81This is because the code then becomes transparent to the algorithm used
82and much more flexible.
83.Pp
84In previous versions of OpenSSL, there was a link between message digest
85types and public key algorithms.
86This meant that "clone" digests such as
87.Xr EVP_dss1 3
88needed to be used to sign using SHA1 and DSA.
89This is no longer necessary and the use of clone digest is now
90discouraged.
91.Pp
92The call to
93.Fn EVP_DigestVerifyFinal
94internally finalizes a copy of the digest context.
95This means that calls to
96.Xr EVP_VerifyUpdate 3
97and
98.Xr EVP_VerifyFinal 3
99can be called later to digest and verify additional data.
100.Pp
101Since only a copy of the digest context is ever finalized, the context
102must be cleaned up after use by calling
103.Xr EVP_MD_CTX_cleanup 3
104or a memory leak will occur.
105.Sh RETURN VALUES
106.Fn EVP_DigestVerifyInit
107and
108.Fn EVP_DigestVerifyUpdate
109return 1 for success and 0 or a negative value for failure.
110In particular a return value of -2 indicates the operation is not
111supported by the public key algorithm.
112.Pp
113Unlike other functions, the return value 0 from
114.Fn EVP_DigestVerifyFinal
115only indicates that the signature did not verify successfully.
116That is it did not match the original data or the signature was of
117invalid form.
118It is not an indication of a more serious error.
119.Pp
120The error codes can be obtained from
121.Xr ERR_get_error 3 .
122.Sh SEE ALSO
123.Xr ERR 3 ,
124.Xr evp 3 ,
125.Xr EVP_DigestInit 3 ,
126.Xr EVP_DigestSignInit 3
127.Sh HISTORY
128.Fn EVP_DigestVerifyInit ,
129.Fn EVP_DigestVerifyUpdate ,
130and
131.Fn EVP_DigestVerifyFinal
132were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_EncryptInit.3 b/src/lib/libcrypto/man/EVP_EncryptInit.3
new file mode 100644
index 0000000000..44967f863f
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_EncryptInit.3
@@ -0,0 +1,939 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_ENCRYPTINIT 3
3.Os
4.Sh NAME
5.Nm EVP_CIPHER_CTX_init ,
6.Nm EVP_EncryptInit_ex ,
7.Nm EVP_EncryptUpdate ,
8.Nm EVP_EncryptFinal_ex ,
9.Nm EVP_DecryptInit_ex ,
10.Nm EVP_DecryptUpdate ,
11.Nm EVP_DecryptFinal_ex ,
12.Nm EVP_CipherInit_ex ,
13.Nm EVP_CipherUpdate ,
14.Nm EVP_CipherFinal_ex ,
15.Nm EVP_CIPHER_CTX_set_key_length ,
16.Nm EVP_CIPHER_CTX_ctrl ,
17.Nm EVP_CIPHER_CTX_cleanup ,
18.Nm EVP_EncryptInit ,
19.Nm EVP_EncryptFinal ,
20.Nm EVP_DecryptInit ,
21.Nm EVP_DecryptFinal ,
22.Nm EVP_CipherInit ,
23.Nm EVP_CipherFinal ,
24.Nm EVP_get_cipherbyname ,
25.Nm EVP_get_cipherbynid ,
26.Nm EVP_get_cipherbyobj ,
27.Nm EVP_CIPHER_nid ,
28.Nm EVP_CIPHER_block_size ,
29.Nm EVP_CIPHER_key_length ,
30.Nm EVP_CIPHER_iv_length ,
31.Nm EVP_CIPHER_flags ,
32.Nm EVP_CIPHER_mode ,
33.Nm EVP_CIPHER_type ,
34.Nm EVP_CIPHER_CTX_cipher ,
35.Nm EVP_CIPHER_CTX_nid ,
36.Nm EVP_CIPHER_CTX_block_size ,
37.Nm EVP_CIPHER_CTX_key_length ,
38.Nm EVP_CIPHER_CTX_iv_length ,
39.Nm EVP_CIPHER_CTX_get_app_data ,
40.Nm EVP_CIPHER_CTX_set_app_data ,
41.Nm EVP_CIPHER_CTX_type ,
42.Nm EVP_CIPHER_CTX_flags ,
43.Nm EVP_CIPHER_CTX_mode ,
44.Nm EVP_CIPHER_param_to_asn1 ,
45.Nm EVP_CIPHER_asn1_to_param ,
46.Nm EVP_CIPHER_CTX_set_padding ,
47.Nm EVP_enc_null ,
48.Nm EVP_des_cbc ,
49.Nm EVP_des_ecb ,
50.Nm EVP_des_cfb ,
51.Nm EVP_des_ofb ,
52.Nm EVP_des_ede_cbc ,
53.Nm EVP_des_ede ,
54.Nm EVP_des_ede_ofb ,
55.Nm EVP_des_ede_cfb ,
56.Nm EVP_des_ede3_cbc ,
57.Nm EVP_des_ede3 ,
58.Nm EVP_des_ede3_ofb ,
59.Nm EVP_des_ede3_cfb ,
60.Nm EVP_desx_cbc ,
61.Nm EVP_rc4 ,
62.Nm EVP_rc4_40 ,
63.Nm EVP_idea_cbc ,
64.Nm EVP_idea_ecb ,
65.Nm EVP_idea_cfb ,
66.Nm EVP_idea_ofb ,
67.Nm EVP_idea_cbc ,
68.Nm EVP_rc2_cbc ,
69.Nm EVP_rc2_ecb ,
70.Nm EVP_rc2_cfb ,
71.Nm EVP_rc2_ofb ,
72.Nm EVP_rc2_40_cbc ,
73.Nm EVP_rc2_64_cbc ,
74.Nm EVP_bf_cbc ,
75.Nm EVP_bf_ecb ,
76.Nm EVP_bf_cfb ,
77.Nm EVP_bf_ofb ,
78.Nm EVP_cast5_cbc ,
79.Nm EVP_cast5_ecb ,
80.Nm EVP_cast5_cfb ,
81.Nm EVP_cast5_ofb ,
82.Nm EVP_aes_128_gcm ,
83.Nm EVP_aes_192_gcm ,
84.Nm EVP_aes_256_gcm ,
85.Nm EVP_aes_128_ccm ,
86.Nm EVP_aes_192_ccm ,
87.Nm EVP_aes_256_ccm ,
88.Nm EVP_rc5_32_12_16_cbc ,
89.Nm EVP_rc5_32_12_16_cfb ,
90.Nm EVP_rc5_32_12_16_ecb ,
91.Nm EVP_rc5_32_12_16_ofb
92.Nd EVP cipher routines
93.Sh SYNOPSIS
94.In openssl/evp.h
95.Ft void
96.Fo EVP_CIPHER_CTX_init
97.Fa "EVP_CIPHER_CTX *ctx"
98.Fc
99.Ft int
100.Fo EVP_EncryptInit_ex
101.Fa "EVP_CIPHER_CTX *ctx"
102.Fa "const EVP_CIPHER *type"
103.Fa "ENGINE *impl"
104.Fa "unsigned char *key"
105.Fa "unsigned char *iv"
106.Fc
107.Ft int
108.Fo EVP_EncryptUpdate
109.Fa "EVP_CIPHER_CTX *ctx"
110.Fa "unsigned char *out"
111.Fa "int *outl"
112.Fa "unsigned char *in"
113.Fa "int inl"
114.Fc
115.Ft int
116.Fo EVP_EncryptFinal_ex
117.Fa "EVP_CIPHER_CTX *ctx"
118.Fa "unsigned char *out"
119.Fa "int *outl"
120.Fc
121.Ft int
122.Fo EVP_DecryptInit_ex
123.Fa "EVP_CIPHER_CTX *ctx"
124.Fa "const EVP_CIPHER *type"
125.Fa "ENGINE *impl"
126.Fa "unsigned char *key"
127.Fa "unsigned char *iv"
128.Fc
129.Ft int
130.Fo EVP_DecryptUpdate
131.Fa "EVP_CIPHER_CTX *ctx"
132.Fa "unsigned char *out"
133.Fa "int *outl"
134.Fa "unsigned char *in"
135.Fa "int inl"
136.Fc
137.Ft int
138.Fo EVP_DecryptFinal_ex
139.Fa "EVP_CIPHER_CTX *ctx"
140.Fa "unsigned char *outm"
141.Fa "int *outl"
142.Fc
143.Ft int
144.Fo EVP_CipherInit_ex
145.Fa "EVP_CIPHER_CTX *ctx"
146.Fa "const EVP_CIPHER *type"
147.Fa "ENGINE *impl"
148.Fa "unsigned char *key"
149.Fa "unsigned char *iv"
150.Fa "int enc"
151.Fc
152.Ft int
153.Fo EVP_CipherUpdate
154.Fa "EVP_CIPHER_CTX *ctx"
155.Fa "unsigned char *out"
156.Fa "int *outl"
157.Fa "unsigned char *in"
158.Fa "int inl"
159.Fc
160.Ft int
161.Fo EVP_CipherFinal_ex
162.Fa "EVP_CIPHER_CTX *ctx"
163.Fa "unsigned char *outm"
164.Fa "int *outl"
165.Fc
166.Ft int
167.Fo EVP_EncryptInit
168.Fa "EVP_CIPHER_CTX *ctx"
169.Fa "const EVP_CIPHER *type"
170.Fa "unsigned char *key"
171.Fa "unsigned char *iv"
172.Fc
173.Ft int
174.Fo EVP_EncryptFinal
175.Fa "EVP_CIPHER_CTX *ctx"
176.Fa "unsigned char *out"
177.Fa "int *outl"
178.Fc
179.Ft int
180.Fo EVP_DecryptInit
181.Fa "EVP_CIPHER_CTX *ctx"
182.Fa "const EVP_CIPHER *type"
183.Fa "unsigned char *key"
184.Fa "unsigned char *iv"
185.Fc
186.Ft int
187.Fo EVP_DecryptFinal
188.Fa "EVP_CIPHER_CTX *ctx"
189.Fa "unsigned char *outm"
190.Fa "int *outl"
191.Fc
192.Ft int
193.Fo EVP_CipherInit
194.Fa "EVP_CIPHER_CTX *ctx"
195.Fa "const EVP_CIPHER *type"
196.Fa "unsigned char *key"
197.Fa "unsigned char *iv"
198.Fa "int enc"
199.Fc
200.Ft int
201.Fo EVP_CipherFinal
202.Fa "EVP_CIPHER_CTX *ctx"
203.Fa "unsigned char *outm"
204.Fa "int *outl"
205.Fc
206.Ft int
207.Fo EVP_CIPHER_CTX_set_padding
208.Fa "EVP_CIPHER_CTX *x"
209.Fa "int padding"
210.Fc
211.Ft int
212.Fo EVP_CIPHER_CTX_set_key_length
213.Fa "EVP_CIPHER_CTX *x"
214.Fa "int keylen"
215.Fc
216.Ft int
217.Fo EVP_CIPHER_CTX_ctrl
218.Fa "EVP_CIPHER_CTX *ctx"
219.Fa "int type"
220.Fa "int arg"
221.Fa "void *ptr"
222.Fc
223.Ft int
224.Fo EVP_CIPHER_CTX_cleanup
225.Fa "EVP_CIPHER_CTX *ctx"
226.Fc
227.Ft const EVP_CIPHER *
228.Fo EVP_get_cipherbyname
229.Fa "const char *name"
230.Fc
231.Fd #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
232.Fd #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
233.Fd #define EVP_CIPHER_nid(e) ((e)->nid)
234.Fd #define EVP_CIPHER_block_size(e) ((e)->block_size)
235.Fd #define EVP_CIPHER_key_length(e) ((e)->key_len)
236.Fd #define EVP_CIPHER_iv_length(e) ((e)->iv_len)
237.Fd #define EVP_CIPHER_flags(e) ((e)->flags)
238.Fd #define EVP_CIPHER_mode(e) ((e)->flags) & EVP_CIPH_MODE)
239.Ft int
240.Fo EVP_CIPHER_type
241.Fa "const EVP_CIPHER *ctx"
242.Fc
243.Fd #define EVP_CIPHER_CTX_cipher(e) ((e)->cipher)
244.Fd #define EVP_CIPHER_CTX_nid(e) ((e)->cipher->nid)
245.Fd #define EVP_CIPHER_CTX_block_size(e) ((e)->cipher->block_size)
246.Fd #define EVP_CIPHER_CTX_key_length(e) ((e)->key_len)
247.Fd #define EVP_CIPHER_CTX_iv_length(e) ((e)->cipher->iv_len)
248.Fd #define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data)
249.Fd #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d))
250.Fd #define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
251.Fd #define EVP_CIPHER_CTX_flags(e) ((e)->cipher->flags)
252.Fd #define EVP_CIPHER_CTX_mode(e) ((e)->cipher->flags & EVP_CIPH_MODE)
253.Ft int
254.Fo EVP_CIPHER_param_to_asn1
255.Fa "EVP_CIPHER_CTX *c"
256.Fa "ASN1_TYPE *type"
257.Fc
258.Ft int
259.Fo EVP_CIPHER_asn1_to_param
260.Fa "EVP_CIPHER_CTX *c"
261.Fa "ASN1_TYPE *type"
262.Fc
263.Sh DESCRIPTION
264The EVP cipher routines are a high level interface to certain symmetric
265ciphers.
266.Pp
267.Fn EVP_CIPHER_CTX_init
268initializes the cipher context
269.Fa ctx .
270.Pp
271.Fn EVP_EncryptInit_ex
272sets up the cipher context
273.Fa ctx
274for encryption with cipher
275.Fa type
276from
277.Vt ENGINE
278.Fa impl .
279.Fa ctx
280must be initialized before calling this function.
281.Fa type
282is normally supplied by a function such as
283.Fn EVP_aes_256_cbc .
284If
285.Fa impl
286is
287.Dv NULL ,
288then the default implementation is used.
289.Fa key
290is the symmetric key to use and
291.Fa iv
292is the IV to use (if necessary), the actual number of bytes used for the
293key and IV depends on the cipher.
294It is possible to set all parameters to
295.Dv NULL
296except
297.Fa type
298in an initial call and supply the remaining parameters in subsequent
299calls, all of which have
300.Fa type
301set to
302.Dv NULL .
303This is done when the default cipher parameters are not appropriate.
304.Pp
305.Fn EVP_EncryptUpdate
306encrypts
307.Fa inl
308bytes from the buffer
309.Fa in
310and writes the encrypted version to
311.Fa out .
312This function can be called multiple times to encrypt successive blocks
313of data.
314The amount of data written depends on the block alignment of the
315encrypted data: as a result the amount of data written may be anything
316from zero bytes to (inl + cipher_block_size - 1) so
317.Fa outl
318should contain sufficient room.
319The actual number of bytes written is placed in
320.Fa outl .
321.Pp
322If padding is enabled (the default) then
323.Fn EVP_EncryptFinal_ex
324encrypts the "final" data, that is any data that remains in a partial
325block.
326It uses NOTES (aka PKCS padding).
327The encrypted final data is written to
328.Fa out
329which should have sufficient space for one cipher block.
330The number of bytes written is placed in
331.Fa outl .
332After this function is called the encryption operation is finished and
333no further calls to
334.Fn EVP_EncryptUpdate
335should be made.
336.Pp
337If padding is disabled then
338.Fn EVP_EncryptFinal_ex
339will not encrypt any more data and it will return an error if any data
340remains in a partial block: that is if the total data length is not a
341multiple of the block size.
342.Pp
343.Fn EVP_DecryptInit_ex ,
344.Fn EVP_DecryptUpdate ,
345and
346.Fn EVP_DecryptFinal_ex
347are the corresponding decryption operations.
348.Fn EVP_DecryptFinal
349will return an error code if padding is enabled and the final block is
350not correctly formatted.
351The parameters and restrictions are identical to the encryption
352operations except that if padding is enabled the decrypted data buffer
353.Fa out
354passed to
355.Fn EVP_DecryptUpdate
356should have sufficient room for (inl + cipher_block_size) bytes
357unless the cipher block size is 1 in which case
358.Fa inl
359bytes is sufficient.
360.Pp
361.Fn EVP_CipherInit_ex ,
362.Fn EVP_CipherUpdate ,
363and
364.Fn EVP_CipherFinal_ex
365are functions that can be used for decryption or encryption.
366The operation performed depends on the value of the
367.Fa enc
368parameter.
369It should be set to 1 for encryption, 0 for decryption and -1 to leave
370the value unchanged (the actual value of
371.Fa enc
372being supplied in a previous call).
373.Pp
374.Fn EVP_CIPHER_CTX_cleanup
375clears all information from a cipher context and free up any allocated
376memory associate with it.
377It should be called after all operations using a cipher are complete so
378sensitive information does not remain in memory.
379.Pp
380.Fn EVP_EncryptInit ,
381.Fn EVP_DecryptInit ,
382and
383.Fn EVP_CipherInit
384behave in a similar way to
385.Fn EVP_EncryptInit_ex ,
386.Fn EVP_DecryptInit_ex ,
387and
388.Fn EVP_CipherInit_ex
389except the
390.Fa ctx
391parameter does not need to be initialized and they always use the
392default cipher implementation.
393.Pp
394.Fn EVP_EncryptFinal ,
395.Fn EVP_DecryptFinal ,
396and
397.Fn EVP_CipherFinal
398are identical to
399.Fn EVP_EncryptFinal_ex ,
400.Fn EVP_DecryptFinal_ex ,
401and
402.Fn EVP_CipherFinal_ex .
403In previous releases of OpenSSL, they also used to clean up the
404.Fa ctx ,
405but this is no longer done and
406.Fn EVP_CIPHER_CTX_cleanup
407must be called to free any context resources.
408.Pp
409.Fn EVP_get_cipherbyname ,
410.Fn EVP_get_cipherbynid ,
411and
412.Fn EVP_get_cipherbyobj
413return an
414.Vt EVP_CIPHER
415structure when passed a cipher name, a NID or an
416.Vt ASN1_OBJECT
417structure.
418.Pp
419.Fn EVP_CIPHER_nid
420and
421.Fn EVP_CIPHER_CTX_nid
422return the NID of a cipher when passed an
423.Vt EVP_CIPHER
424or
425.Vt EVP_CIPHER_CTX
426structure.
427The actual NID value is an internal value which may not have a
428corresponding OBJECT IDENTIFIER.
429.Pp
430.Fn EVP_CIPHER_CTX_set_padding
431enables or disables padding.
432By default encryption operations are padded using standard block padding
433and the padding is checked and removed when decrypting.
434If the
435.Sy padding
436parameter is zero, then no padding is performed, the total amount of data
437encrypted or decrypted must then be a multiple of the block size or an
438error will occur.
439.Pp
440.Fn EVP_CIPHER_key_length
441and
442.Fn EVP_CIPHER_CTX_key_length
443return the key length of a cipher when passed an
444.Vt EVP_CIPHER
445or
446.Vt EVP_CIPHER_CTX
447structure.
448The constant
449.Dv EVP_MAX_KEY_LENGTH
450is the maximum key length for all ciphers.
451Note: although
452.Fn EVP_CIPHER_key_length
453is fixed for a given cipher, the value of
454.Fn EVP_CIPHER_CTX_key_length
455may be different for variable key length ciphers.
456.Pp
457.Fn EVP_CIPHER_CTX_set_key_length
458sets the key length of the cipher ctx.
459If the cipher is a fixed length cipher, then attempting to set the key
460length to any value other than the fixed value is an error.
461.Pp
462.Fn EVP_CIPHER_iv_length
463and
464.Fn EVP_CIPHER_CTX_iv_length
465return the IV length of a cipher when passed an
466.Vt EVP_CIPHER
467or
468.Vt EVP_CIPHER_CTX .
469It will return zero if the cipher does not use an IV.
470The constant
471.Dv EVP_MAX_IV_LENGTH
472is the maximum IV length for all ciphers.
473.Pp
474.Fn EVP_CIPHER_block_size
475and
476.Fn EVP_CIPHER_CTX_block_size
477return the block size of a cipher when passed an
478.Vt EVP_CIPHER
479or
480.Vt EVP_CIPHER_CTX
481structure.
482The constant
483.Dv EVP_MAX_IV_LENGTH
484is also the maximum block length for all ciphers.
485.Pp
486.Fn EVP_CIPHER_type
487and
488.Fn EVP_CIPHER_CTX_type
489return the type of the passed cipher or context.
490This "type" is the actual NID of the cipher OBJECT IDENTIFIER as such it
491ignores the cipher parameters and 40 bit RC2 and 128 bit RC2 have the
492same NID. If the cipher does not have an object identifier or does not
493have ASN1 support this function will return
494.Dv NID_undef .
495.Pp
496.Fn EVP_CIPHER_CTX_cipher
497returns the
498.Vt EVP_CIPHER
499structure when passed an
500.Vt EVP_CIPHER_CTX
501structure.
502.Pp
503.Fn EVP_CIPHER_mode
504and
505.Fn EVP_CIPHER_CTX_mode
506return the block cipher mode:
507.Dv EVP_CIPH_ECB_MODE ,
508.Dv EVP_CIPH_CBC_MODE ,
509.Dv EVP_CIPH_CFB_MODE ,
510or
511.Dv EVP_CIPH_OFB_MODE .
512If the cipher is a stream cipher then
513.Dv EVP_CIPH_STREAM_CIPHER
514is returned.
515.Pp
516.Fn EVP_CIPHER_param_to_asn1
517sets the AlgorithmIdentifier "parameter" based on the passed cipher.
518This will typically include any parameters and an IV.
519The cipher IV (if any) must be set when this call is made.
520This call should be made before the cipher is actually "used" (before any
521.Fn EVP_EncryptUpdate ,
522.Fn EVP_DecryptUpdate
523calls for example).
524This function may fail if the cipher does not have any ASN1 support.
525.Pp
526.Fn EVP_CIPHER_asn1_to_param
527sets the cipher parameters based on an ASN1 AlgorithmIdentifier
528"parameter".
529The precise effect depends on the cipher.
530In the case of RC2, for example, it will set the IV and effective
531key length.
532This function should be called after the base cipher type is set but
533before the key is set.
534For example
535.Fn EVP_CipherInit
536will be called with the IV and key set to
537.Dv NULL ,
538.Fn EVP_CIPHER_asn1_to_param
539will be called and finally
540.Fn EVP_CipherInit
541again with all parameters except the key set to
542.Dv NULL .
543It is possible for this function to fail if the cipher does not
544have any ASN1 support or the parameters cannot be set (for example
545the RC2 effective key length is not supported).
546.Pp
547.Fn EVP_CIPHER_CTX_ctrl
548allows various cipher specific parameters to be determined and set.
549Currently only the RC2 effective key length and the number of rounds of
550RC5 can be set.
551.Sh RETURN VALUES
552.Fn EVP_EncryptInit_ex ,
553.Fn EVP_EncryptUpdate ,
554and
555.Fn EVP_EncryptFinal_ex
556return 1 for success and 0 for failure.
557.Pp
558.Fn EVP_DecryptInit_ex
559and
560.Fn EVP_DecryptUpdate
561return 1 for success and 0 for failure.
562.Fn EVP_DecryptFinal_ex
563returns 0 if the decrypt failed or 1 for success.
564.Pp
565.Fn EVP_CipherInit_ex
566and
567.Fn EVP_CipherUpdate
568return 1 for success and 0 for failure.
569.Fn EVP_CipherFinal_ex
570returns 0 for a decryption failure or 1 for success.
571.Pp
572.Fn EVP_CIPHER_CTX_cleanup
573returns 1 for success and 0 for failure.
574.Pp
575.Fn EVP_get_cipherbyname ,
576.Fn EVP_get_cipherbynid ,
577and
578.Fn EVP_get_cipherbyobj
579return an
580.Vt EVP_CIPHER
581structure or
582.Dv NULL
583on error.
584.Pp
585.Fn EVP_CIPHER_nid
586and
587.Fn EVP_CIPHER_CTX_nid
588return a NID.
589.Pp
590.Fn EVP_CIPHER_block_size
591and
592.Fn EVP_CIPHER_CTX_block_size
593return the block size.
594.Pp
595.Fn EVP_CIPHER_key_length
596and
597.Fn EVP_CIPHER_CTX_key_length
598return the key length.
599.Pp
600.Fn EVP_CIPHER_CTX_set_padding
601always returns 1.
602.Pp
603.Fn EVP_CIPHER_iv_length
604and
605.Fn EVP_CIPHER_CTX_iv_length
606return the IV length or zero if the cipher does not use an IV.
607.Pp
608.Fn EVP_CIPHER_type
609and
610.Fn EVP_CIPHER_CTX_type
611return the NID of the cipher's OBJECT IDENTIFIER or
612.Dv NID_undef
613if it has no defined OBJECT IDENTIFIER.
614.Pp
615.Fn EVP_CIPHER_CTX_cipher
616returns an
617.Vt EVP_CIPHER
618structure.
619.Pp
620.Fn EVP_CIPHER_param_to_asn1
621and
622.Fn EVP_CIPHER_asn1_to_param
623return 1 for success or 0 for failure.
624.Pp
625Where possible the EVP interface to symmetric ciphers should be
626used in preference to the low level interfaces.
627This is because the code then becomes transparent to the cipher used and
628much more flexible.
629.Pp
630PKCS padding works by adding n padding bytes of value n to make the
631total length of the encrypted data a multiple of the block size.
632Padding is always added so if the data is already a multiple of the
633block size n will equal the block size.
634For example if the block size is 8 and 11 bytes are to be encrypted then
6355 padding bytes of value 5 will be added.
636.Pp
637When decrypting the final block is checked to see if it has the correct
638form.
639.Pp
640Although the decryption operation can produce an error if padding is
641enabled, it is not a strong test that the input data or key is correct.
642A random block has better than 1 in 256 chance of being of the correct
643format and problems with the input data earlier on will not produce a
644final decrypt error.
645.Pp
646If padding is disabled then the decryption operation will always succeed
647if the total amount of data decrypted is a multiple of the block size.
648.Pp
649The functions
650.Fn EVP_EncryptInit ,
651.Fn EVP_EncryptFinal ,
652.Fn EVP_DecryptInit ,
653.Fn EVP_CipherInit ,
654and
655.Fn EVP_CipherFinal
656are obsolete but are retained for compatibility with existing code.
657New code should use
658.Fn EVP_EncryptInit_ex ,
659.Fn EVP_EncryptFinal_ex ,
660.Fn EVP_DecryptInit_ex ,
661.Fn EVP_DecryptFinal_ex ,
662.Fn EVP_CipherInit_ex ,
663and
664.Fn EVP_CipherFinal_ex
665because they can reuse an existing context without allocating and
666freeing it up on each call.
667.Sh CIPHER LISTING
668All algorithms have a fixed key length unless otherwise stated.
669.Bl -tag -width Ds
670.It Fn EVP_enc_null void
671Null cipher: does nothing.
672.It Xo
673.Fn EVP_aes_128_cbc void ,
674.Fn EVP_aes_128_ecb void ,
675.Fn EVP_aes_128_cfb void ,
676.Fn EVP_aes_128_ofb void
677.Xc
678128-bit AES in CBC, ECB, CFB and OFB modes respectively.
679.It Xo
680.Fn EVP_aes_192_cbc void ,
681.Fn EVP_aes_192_ecb void ,
682.Fn EVP_aes_192_cfb void ,
683.Fn EVP_aes_192_ofb void
684.Xc
685192-bit AES in CBC, ECB, CFB and OFB modes respectively.
686.It Xo
687.Fn EVP_aes_256_cbc void ,
688.Fn EVP_aes_256_ecb void ,
689.Fn EVP_aes_256_cfb void ,
690.Fn EVP_aes_256_ofb void
691.Xc
692256-bit AES in CBC, ECB, CFB and OFB modes respectively.
693.It Xo
694.Fn EVP_des_cbc void ,
695.Fn EVP_des_ecb void ,
696.Fn EVP_des_cfb void ,
697.Fn EVP_des_ofb void
698.Xc
699DES in CBC, ECB, CFB and OFB modes respectively.
700.It Xo
701.Fn EVP_des_ede_cbc void ,
702.Fn EVP_des_ede void ,
703.Fn EVP_des_ede_ofb void ,
704.Fn EVP_des_ede_cfb void
705.Xc
706Two key triple DES in CBC, ECB, CFB and OFB modes respectively.
707.It Xo
708.Fn EVP_des_ede3_cbc void ,
709.Fn EVP_des_ede3 void ,
710.Fn EVP_des_ede3_ofb void ,
711.Fn EVP_des_ede3_cfb void
712.Xc
713Three key triple DES in CBC, ECB, CFB and OFB modes respectively.
714.It Fn EVP_desx_cbc void
715DESX algorithm in CBC mode.
716.It Fn EVP_rc4 void
717RC4 stream cipher.
718This is a variable key length cipher with default key length 128 bits.
719.It Fn EVP_rc4_40 void
720RC4 stream cipher with 40 bit key length.
721This is obsolete and new code should use
722.Fn EVP_rc4
723and the
724.Fn EVP_CIPHER_CTX_set_key_length
725function.
726.It Xo
727.Fn EVP_idea_cbc void ,
728.Fn EVP_idea_ecb void ,
729.Fn EVP_idea_cfb void ,
730.Fn EVP_idea_ofb void
731.Xc
732IDEA encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
733.It Xo
734.Fn EVP_rc2_cbc void ,
735.Fn EVP_rc2_ecb void ,
736.Fn EVP_rc2_cfb void ,
737.Fn EVP_rc2_ofb void
738.Xc
739RC2 encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
740This is a variable key length cipher with an additional parameter called
741"effective key bits" or "effective key length".
742By default both are set to 128 bits.
743.It Xo
744.Fn EVP_rc2_40_cbc void ,
745.Fn EVP_rc2_64_cbc void
746.Xc
747RC2 algorithm in CBC mode with a default key length and effective key
748length of 40 and 64 bits.
749These are obsolete and new code should use
750.Fn EVP_rc2_cbc ,
751.Fn EVP_CIPHER_CTX_set_key_length ,
752and
753.Fn EVP_CIPHER_CTX_ctrl
754to set the key length and effective key length.
755.It Xo
756.Fn EVP_bf_cbc void ,
757.Fn EVP_bf_ecb void ,
758.Fn EVP_bf_cfb void ,
759.Fn EVP_bf_ofb void
760.Xc
761Blowfish encryption algorithm in CBC, ECB, CFB and OFB modes
762respectively.
763This is a variable key length cipher.
764.It Xo
765.Fn EVP_cast5_cbc void ,
766.Fn EVP_cast5_ecb void ,
767.Fn EVP_cast5_cfb void ,
768.Fn EVP_cast5_ofb void
769.Xc
770CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
771This is a variable key length cipher.
772.It Xo
773.Fn EVP_rc5_32_12_16_cbc void ,
774.Fn EVP_rc5_32_12_16_ecb void ,
775.Fn EVP_rc5_32_12_16_cfb void ,
776.Fn EVP_rc5_32_12_16_ofb void
777.Xc
778RC5 encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
779This is a variable key length cipher with an additional "number of
780rounds" parameter.
781By default the key length is set to 128 bits and 12 rounds.
782.El
783.Sh EXAMPLES
784Get the number of rounds used in RC5:
785.Bd -literal
786int nrounds;
787EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC5_ROUNDS, 0, &nrounds);
788.Ed
789.Pp
790Get the RC2 effective key length:
791.Bd -literal
792int key_bits;
793EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC2_KEY_BITS, 0, &key_bits);
794.Ed
795.Pp
796Set the number of rounds used in RC5:
797.Bd -literal
798int nrounds;
799EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC5_ROUNDS, nrounds, NULL);
800.Ed
801.Pp
802Set the effective key length used in RC2:
803.Bd -literal
804int key_bits;
805EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC2_KEY_BITS, key_bits, NULL);
806.Ed
807.Pp
808Encrypt a string using blowfish:
809.Bd -literal
810int
811do_crypt(char *outfile)
812{
813 unsigned char outbuf[1024];
814 int outlen, tmplen;
815 /*
816 * Bogus key and IV: we'd normally set these from
817 * another source.
818 */
819 unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
820 unsigned char iv[] = {1,2,3,4,5,6,7,8};
821 const char intext[] = "Some Crypto Text";
822 EVP_CIPHER_CTX ctx;
823 FILE *out;
824 EVP_CIPHER_CTX_init(&ctx);
825 EVP_EncryptInit_ex(&ctx, EVP_bf_cbc(), NULL, key, iv);
826
827 if (!EVP_EncryptUpdate(&ctx, outbuf, &outlen, intext,
828 strlen(intext))) {
829 /* Error */
830 return 0;
831 }
832 /*
833 * Buffer passed to EVP_EncryptFinal() must be after data just
834 * encrypted to avoid overwriting it.
835 */
836 if (!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen)) {
837 /* Error */
838 return 0;
839 }
840 outlen += tmplen;
841 EVP_CIPHER_CTX_cleanup(&ctx);
842 /*
843 * Need binary mode for fopen because encrypted data is
844 * binary data. Also cannot use strlen() on it because
845 * it won't be NUL terminated and may contain embedded
846 * NULs.
847 */
848 out = fopen(outfile, "wb");
849 fwrite(outbuf, 1, outlen, out);
850 fclose(out);
851 return 1;
852}
853.Ed
854.Pp
855The ciphertext from the above example can be decrypted using the
856.Xr openssl 1
857utility with the command line:
858.Bd -literal
859openssl bf -in cipher.bin -K 000102030405060708090A0B0C0D0E0F \e
860 -iv 0102030405060708 -d
861.Ed
862.Pp
863General encryption, decryption function example using FILE I/O and RC2
864with an 80 bit key:
865.Bd -literal
866int
867do_crypt(FILE *in, FILE *out, int do_encrypt)
868{
869 /* Allow enough space in output buffer for additional block */
870 inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
871 int inlen, outlen;
872 /*
873 * Bogus key and IV: we'd normally set these from
874 * another source.
875 */
876 unsigned char key[] = "0123456789";
877 unsigned char iv[] = "12345678";
878
879 /* Don't set key or IV because we will modify the parameters */
880 EVP_CIPHER_CTX_init(&ctx);
881 EVP_CipherInit_ex(&ctx, EVP_rc2(), NULL, NULL, NULL, do_encrypt);
882 EVP_CIPHER_CTX_set_key_length(&ctx, 10);
883 /* We finished modifying parameters so now we can set key and IV */
884 EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);
885
886 for(;;) {
887 inlen = fread(inbuf, 1, 1024, in);
888 if (inlen <= 0)
889 break;
890 if (!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf,
891 inlen)) {
892 /* Error */
893 EVP_CIPHER_CTX_cleanup(&ctx);
894 return 0;
895 }
896 fwrite(outbuf, 1, outlen, out);
897 }
898 if (!EVP_CipherFinal_ex(&ctx, outbuf, &outlen)) {
899 /* Error */
900 EVP_CIPHER_CTX_cleanup(&ctx);
901 return 0;
902 }
903 fwrite(outbuf, 1, outlen, out);
904
905 EVP_CIPHER_CTX_cleanup(&ctx);
906 return 1;
907}
908.Ed
909.Sh SEE ALSO
910.Xr evp 3
911.Sh HISTORY
912.Fn EVP_CIPHER_CTX_init ,
913.Fn EVP_EncryptInit_ex ,
914.Fn EVP_EncryptFinal_ex ,
915.Fn EVP_DecryptInit_ex ,
916.Fn EVP_DecryptFinal_ex ,
917.Fn EVP_CipherInit_ex ,
918.Fn EVP_CipherFinal_ex ,
919and
920.Fn EVP_CIPHER_CTX_set_padding
921appeared in OpenSSL 0.9.7.
922.Sh BUGS
923For RC5 the number of rounds can currently only be set to 8, 12 or 16.
924This is a limitation of the current RC5 code rather than the EVP
925interface.
926.Pp
927.Dv EVP_MAX_KEY_LENGTH
928and
929.Dv EVP_MAX_IV_LENGTH
930only refer to the internal ciphers with default key lengths.
931If custom ciphers exceed these values the results are unpredictable.
932This is because it has become standard practice to define a generic key
933as a fixed unsigned char array containing
934.Dv EVP_MAX_KEY_LENGTH
935bytes.
936.Pp
937The ASN1 code is incomplete (and sometimes inaccurate) it has only been
938tested for certain common S/MIME ciphers (RC2, DES, triple DES) in CBC
939mode.
diff --git a/src/lib/libcrypto/man/EVP_OpenInit.3 b/src/lib/libcrypto/man/EVP_OpenInit.3
new file mode 100644
index 0000000000..92873ac453
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_OpenInit.3
@@ -0,0 +1,98 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_OPENINIT 3
3.Os
4.Sh NAME
5.Nm EVP_OpenInit ,
6.Nm EVP_OpenUpdate ,
7.Nm EVP_OpenFinal
8.Nd EVP envelope decryption
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_OpenInit
13.Fa "EVP_CIPHER_CTX *ctx"
14.Fa "EVP_CIPHER *type"
15.Fa "unsigned char *ek"
16.Fa "int ekl"
17.Fa "unsigned char *iv"
18.Fa "EVP_PKEY *priv"
19.Fc
20.Ft int
21.Fo EVP_OpenUpdate
22.Fa "EVP_CIPHER_CTX *ctx"
23.Fa "unsigned char *out"
24.Fa "int *outl"
25.Fa "unsigned char *in"
26.Fa "int inl"
27.Fc
28.Ft int
29.Fo EVP_OpenFinal
30.Fa "EVP_CIPHER_CTX *ctx"
31.Fa "unsigned char *out"
32.Fa "int *outl"
33.Fc
34.Sh DESCRIPTION
35The EVP envelope routines are a high level interface to envelope
36decryption.
37They decrypt a public key encrypted symmetric key and then decrypt data
38using it.
39.Pp
40.Fn EVP_OpenInit
41initializes a cipher context
42.Fa ctx
43for decryption with cipher
44.Fa type .
45It decrypts the encrypted symmetric key of length
46.Fa ekl
47bytes passed in the
48.Fa ek
49parameter using the private key
50.Fa priv .
51The IV is supplied in the
52.Fa iv
53parameter.
54.Pp
55.Fn EVP_OpenUpdate
56and
57.Fn EVP_OpenFinal
58have exactly the same properties as the
59.Xr EVP_DecryptUpdate 3
60and
61.Xr EVP_DecryptFinal 3
62routines.
63.Pp
64It is possible to call
65.Fn EVP_OpenInit
66twice in the same way as
67.Xr EVP_DecryptInit 3 .
68The first call should have
69.Fa priv
70set to
71.Dv NULL
72and (after setting any cipher parameters) it should be
73called again with
74.Fa type
75set to
76.Dv NULL .
77.Pp
78If the cipher passed in the
79.Fa type
80parameter is a variable length cipher then the key length will be set to
81the value of the recovered key length.
82If the cipher is a fixed length cipher then the recovered key length
83must match the fixed cipher length.
84.Sh RETURN VALUES
85.Fn EVP_OpenInit
86returns 0 on error or a non zero integer (actually the recovered secret
87key size) if successful.
88.Pp
89.Fn EVP_OpenUpdate
90returns 1 for success or 0 for failure.
91.Pp
92.Fn EVP_OpenFinal
93returns 0 if the decrypt failed or 1 for success.
94.Sh SEE ALSO
95.Xr evp 3 ,
96.Xr EVP_EncryptInit 3 ,
97.Xr EVP_SealInit 3 ,
98.Xr rand 3
diff --git a/src/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3 b/src/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
new file mode 100644
index 0000000000..5b1b94653a
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
@@ -0,0 +1,245 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_CTX_CTRL 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_CTX_ctrl ,
6.Nm EVP_PKEY_CTX_ctrl_str ,
7.Nm EVP_PKEY_get_default_digest_nid ,
8.Nm EVP_PKEY_CTX_set_signature_md ,
9.Nm EVP_PKEY_CTX_set_rsa_padding ,
10.Nm EVP_PKEY_CTX_set_rsa_pss_saltlen ,
11.Nm EVP_PKEY_CTX_set_rsa_rsa_keygen_bits ,
12.Nm EVP_PKEY_CTX_set_rsa_keygen_pubexp ,
13.Nm EVP_PKEY_CTX_set_dsa_paramgen_bits ,
14.Nm EVP_PKEY_CTX_set_dh_paramgen_prime_len ,
15.Nm EVP_PKEY_CTX_set_dh_paramgen_generator ,
16.Nm EVP_PKEY_CTX_set_ec_paramgen_curve_nid
17.Nd algorithm specific control operations
18.Sh SYNOPSIS
19.In openssl/evp.h
20.Ft int
21.Fo EVP_PKEY_CTX_ctrl
22.Fa "EVP_PKEY_CTX *ctx"
23.Fa "int keytype"
24.Fa "int optype"
25.Fa "int cmd"
26.Fa "int p1"
27.Fa "void *p2"
28.Fc
29.Ft int
30.Fo EVP_PKEY_CTX_ctrl_str
31.Fa "EVP_PKEY_CTX *ctx"
32.Fa "const char *type"
33.Fa "const char *value"
34.Fc
35.Ft int
36.Fo EVP_PKEY_get_default_digest_nid
37.Fa "EVP_PKEY *pkey"
38.Fa "int *pnid"
39.Fc
40.In openssl/rsa.h
41.Ft int
42.Fo EVP_PKEY_CTX_set_signature_md
43.Fa "EVP_PKEY_CTX *ctx"
44.Fa "const EVP_MD *md"
45.Fc
46.Ft int
47.Fo EVP_PKEY_CTX_set_rsa_padding
48.Fa "EVP_PKEY_CTX *ctx"
49.Fa "int pad"
50.Fc
51.Ft int
52.Fo EVP_PKEY_CTX_set_rsa_pss_saltlen
53.Fa "EVP_PKEY_CTX *ctx"
54.Fa "int len"
55.Fc
56.Ft int
57.Fo EVP_PKEY_CTX_set_rsa_rsa_keygen_bits
58.Fa "EVP_PKEY_CTX *ctx"
59.Fa "int mbits"
60.Fc
61.Ft int
62.Fo EVP_PKEY_CTX_set_rsa_keygen_pubexp
63.Fa "EVP_PKEY_CTX *ctx"
64.Fa "BIGNUM *pubexp"
65.Fc
66.In openssl/dsa.h
67.Ft int
68.Fo EVP_PKEY_CTX_set_dsa_paramgen_bits
69.Fa "EVP_PKEY_CTX *ctx"
70.Fa "int nbits"
71.Fc
72.In openssl/dh.h
73.Ft int
74.Fo EVP_PKEY_CTX_set_dh_paramgen_prime_len
75.Fa "EVP_PKEY_CTX *ctx"
76.Fa "int len"
77.Fc
78.Ft int
79.Fo EVP_PKEY_CTX_set_dh_paramgen_generator
80.Fa "EVP_PKEY_CTX *ctx"
81.Fa "int gen"
82.Fc
83.In openssl/ec.h
84.Ft int
85.Fo EVP_PKEY_CTX_set_ec_paramgen_curve_nid
86.Fa "EVP_PKEY_CTX *ctx"
87.Fa "int nid"
88.Fc
89.Sh DESCRIPTION
90The function
91.Fn EVP_PKEY_CTX_ctrl
92sends a control operation to the context
93.Fa ctx .
94The key type used must match
95.Fa keytype
96if it is not -1.
97The parameter
98.Fa optype
99is a mask indicating which operations the control can be applied to.
100The control command is indicated in
101.Fa cmd
102and any additional arguments in
103.Fa p1
104and
105.Fa p2 .
106.Pp
107Applications will not normally call
108.Fn EVP_PKEY_CTX_ctrl
109directly but will instead call one of the algorithm specific macros
110below.
111.Pp
112The function
113.Fn EVP_PKEY_CTX_ctrl_str
114allows an application to send an algorithm specific control operation to
115a context
116.Fa ctx
117in string form.
118This is intended to be used for options specified on the command line or
119in text files.
120The commands supported are documented in the
121.Xr openssl 1
122utility command line pages for the option
123.Fl pkeyopt
124which is supported by the
125.Cm pkeyutl ,
126.Cm genpkey ,
127and
128.Cm req
129commands.
130.Pp
131All the remaining "functions" are implemented as macros.
132.Pp
133The
134.Fn EVP_PKEY_CTX_set_signature_md
135macro sets the message digest type used in a signature.
136It can be used with any public key algorithm supporting signature
137operations.
138.Pp
139The macro
140.Fn EVP_PKEY_CTX_set_rsa_padding
141sets the RSA padding mode for
142.Fa ctx .
143The
144.Fa pad
145parameter can take the value
146.Dv RSA_PKCS1_PADDING
147for PKCS#1 padding,
148.Dv RSA_SSLV23_PADDING
149for SSLv23 padding,
150.Dv RSA_NO_PADDING
151for no padding,
152.Dv RSA_PKCS1_OAEP_PADDING
153for OAEP padding (encrypt and decrypt only),
154.Dv RSA_X931_PADDING
155for X9.31 padding (signature operations only) and
156.Dv RSA_PKCS1_PSS_PADDING
157(sign and verify only).
158.Pp
159Two RSA padding modes behave differently if
160.Fn EVP_PKEY_CTX_set_signature_md
161is used.
162If this macro is called for PKCS#1 padding, the plaintext buffer is an
163actual digest value and is encapsulated in a DigestInfo structure
164according to PKCS#1 when signing and this structure is expected (and
165stripped off) when verifying.
166If this control is not used with RSA and PKCS#1 padding then the
167supplied data is used directly and not encapsulated.
168In the case of X9.31 padding for RSA the algorithm identifier byte is
169added or checked and removed if this control is called.
170If it is not called then the first byte of the plaintext buffer is
171expected to be the algorithm identifier byte.
172.Pp
173The
174.Fn EVP_PKEY_CTX_set_rsa_pss_saltlen
175macro sets the RSA PSS salt length to
176.Fa len
177as its name implies it is only supported for PSS padding.
178Two special values are supported: -1 sets the salt length to the digest
179length.
180When signing -2 sets the salt length to the maximum permissible value.
181When verifying -2 causes the salt length to be automatically determined
182based on the PSS block structure.
183If this macro is not called a salt length value of -2 is used by
184default.
185.Pp
186The
187.Fn EVP_PKEY_CTX_set_rsa_rsa_keygen_bits
188macro sets the RSA key length for RSA key generation to
189.Fa mbits .
190If not specified, 1024 bits is used.
191.Pp
192The
193.Fn EVP_PKEY_CTX_set_rsa_keygen_pubexp
194macro sets the public exponent value for RSA key generation to
195.Fa pubexp .
196Currently, it should be an odd integer.
197The
198.Fa pubexp
199pointer is used internally by this function, so it should not be modified
200or freed after the call.
201If this macro is not called, then 65537 is used.
202.Pp
203The macro
204.Fn EVP_PKEY_CTX_set_dsa_paramgen_bits
205sets the number of bits used for DSA parameter generation to
206.Fa nbits .
207If not specified, 1024 is used.
208.Pp
209The macro
210.Fn EVP_PKEY_CTX_set_dh_paramgen_prime_len
211sets the length of the DH prime parameter
212.Fa len
213for DH parameter generation.
214If this macro is not called, then 1024 is used.
215.Pp
216The
217.Fn EVP_PKEY_CTX_set_dh_paramgen_generator
218macro sets DH generator to
219.Fa gen
220for DH parameter generation.
221If not specified, 2 is used.
222.Pp
223The
224.Fn EVP_PKEY_CTX_set_ec_paramgen_curve_nid
225sets the EC curve for EC parameter generation to
226.Fa nid .
227For EC parameter generation, this macro must be called or an error occurs
228because there is no default curve.
229.Sh RETURN VALUES
230.Fn EVP_PKEY_CTX_ctrl
231and its macros return a positive value for success and 0 or a negative
232value for failure.
233In particular, a return value of -2 indicates the operation is not
234supported by the public key algorithm.
235.Sh SEE ALSO
236.Xr EVP_PKEY_CTX_new 3 ,
237.Xr EVP_PKEY_decrypt 3 ,
238.Xr EVP_PKEY_derive 3 ,
239.Xr EVP_PKEY_encrypt 3 ,
240.Xr EVP_PKEY_keygen 3 ,
241.Xr EVP_PKEY_sign 3 ,
242.Xr EVP_PKEY_verify 3 ,
243.Xr EVP_PKEY_verify_recover 3
244.Sh HISTORY
245These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_CTX_new.3 b/src/lib/libcrypto/man/EVP_PKEY_CTX_new.3
new file mode 100644
index 0000000000..c08db1eb21
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_CTX_new.3
@@ -0,0 +1,85 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_CTX_NEW 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_CTX_new ,
6.Nm EVP_PKEY_CTX_new_id ,
7.Nm EVP_PKEY_CTX_dup ,
8.Nm EVP_PKEY_CTX_free
9.Nd public key algorithm context functions
10.Sh SYNOPSIS
11.In openssl/evp.h
12.Ft EVP_PKEY_CTX *
13.Fo EVP_PKEY_CTX_new
14.Fa "EVP_PKEY *pkey"
15.Fa "ENGINE *e"
16.Fc
17.Ft EVP_PKEY_CTX *
18.Fo EVP_PKEY_CTX_new_id
19.Fa "int id"
20.Fa "ENGINE *e"
21.Fc
22.Ft EVP_PKEY_CTX *
23.Fo EVP_PKEY_CTX_dup
24.Fa "EVP_PKEY_CTX *ctx"
25.Fc
26.Ft void
27.Fo EVP_PKEY_CTX_free
28.Fa "EVP_PKEY_CTX *ctx"
29.Fc
30.Sh DESCRIPTION
31The
32.Fn EVP_PKEY_CTX_new
33function allocates a public key algorithm context using the algorithm
34specified in
35.Fa pkey
36and the
37.Vt ENGINE
38.Fa e .
39.Pp
40The
41.Fn EVP_PKEY_CTX_new_id
42function allocates a public key algorithm context using the algorithm
43specified by
44.Fa id
45and
46.Vt ENGINE
47.Fa e .
48It is normally used when no
49.Vt EVP_PKEY
50structure is associated with the operations, for example during
51parameter generation of key generation for some algorithms.
52.Pp
53.Fn EVP_PKEY_CTX_dup
54duplicates the context
55.Fa ctx .
56.Pp
57.Fn EVP_PKEY_CTX_free
58frees up the context
59.Fa ctx .
60.Sh RETURN VALUES
61.Fn EVP_PKEY_CTX_new ,
62.Fn EVP_PKEY_CTX_new_id ,
63.Fn EVP_PKEY_CTX_dup
64returns either the newly allocated
65.Vt EVP_PKEY_CTX
66structure of
67.Dv NULL
68if an error occurred.
69.Pp
70.Fn EVP_PKEY_CTX_free
71does not return a value.
72.Sh SEE ALSO
73.Xr EVP_PKEY_new 3
74.Sh HISTORY
75These functions were first added to OpenSSL 1.0.0.
76.Sh CAVEATS
77The
78.Vt EVP_PKEY_CTX
79structure is an opaque public key algorithm context used by the OpenSSL
80high level public key API.
81Contexts
82.Sy MUST NOT
83be shared between threads.
84It is not permissible to use the same context simultaneously in two
85threads.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_cmp.3 b/src/lib/libcrypto/man/EVP_PKEY_cmp.3
new file mode 100644
index 0000000000..a3c3ba4fec
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_cmp.3
@@ -0,0 +1,92 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_CMP 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_copy_parameters ,
6.Nm EVP_PKEY_missing_parameters ,
7.Nm EVP_PKEY_cmp_parameters ,
8.Nm EVP_PKEY_cmp
9.Nd public key parameter and comparison functions
10.Sh SYNOPSIS
11.In openssl/evp.h
12.Ft int
13.Fo EVP_PKEY_missing_parameters
14.Fa "const EVP_PKEY *pkey"
15.Fc
16.Ft int
17.Fo EVP_PKEY_copy_parameters
18.Fa "EVP_PKEY *to"
19.Fa "const EVP_PKEY *from"
20.Fc
21.Ft int
22.Fo EVP_PKEY_cmp_parameters
23.Fa "const EVP_PKEY *a"
24.Fa "const EVP_PKEY *b"
25.Fc
26.Ft int
27.Fo EVP_PKEY_cmp
28.Fa "const EVP_PKEY *a"
29.Fa "const EVP_PKEY *b"
30.Fc
31.Sh DESCRIPTION
32The function
33.Fn EVP_PKEY_missing_parameters
34returns 1 if the public key parameters of
35.Fa pkey
36are missing and 0 if they are present or the algorithm doesn't use
37parameters.
38.Pp
39The function
40.Fn EVP_PKEY_copy_parameters
41copies the parameters from key
42.Fa from
43to key
44.Fa to .
45.Pp
46The function
47.Fn EVP_PKEY_cmp_parameters
48compares the parameters of keys
49.Fa a
50and
51.Fa b .
52.Pp
53The function
54.Fn EVP_PKEY_cmp
55compares the public key components and parameters (if present) of keys
56.Fa a
57and
58.Fa b .
59.Pp
60The main purpose of the functions
61.Fn EVP_PKEY_missing_parameters
62and
63.Fn EVP_PKEY_copy_parameters
64is to handle public keys in certificates where the parameters are
65sometimes omitted from a public key if they are inherited from the CA
66that signed it.
67.Pp
68Since OpenSSL private keys contain public key components too, the
69function
70.Fn EVP_PKEY_cmp
71can also be used to determine if a private key matches a public key.
72.Sh RETURN VALUES
73The function
74.Fn EVP_PKEY_missing_parameters
75returns 1 if the public key parameters of
76.Fa pkey
77are missing and 0 if they are present or the algorithm doesn't use
78parameters.
79.Pp
80The function
81.Fn EVP_PKEY_copy_parameters
82returns 1 for success and 0 for failure.
83.Pp
84The function
85.Fn EVP_PKEY_cmp_parameters
86and
87.Fn EVP_PKEY_cmp
88return 1 if the keys match, 0 if they don't match, -1 if the key types
89are different and -2 if the operation is not supported.
90.Sh SEE ALSO
91.Xr EVP_PKEY_CTX_new 3 ,
92.Xr EVP_PKEY_keygen 3
diff --git a/src/lib/libcrypto/man/EVP_PKEY_decrypt.3 b/src/lib/libcrypto/man/EVP_PKEY_decrypt.3
new file mode 100644
index 0000000000..28c343838d
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_decrypt.3
@@ -0,0 +1,117 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_DECRYPT 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_decrypt_init ,
6.Nm EVP_PKEY_decrypt
7.Nd decrypt using a public key algorithm
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft int
11.Fo EVP_PKEY_decrypt_init
12.Fa "EVP_PKEY_CTX *ctx"
13.Fc
14.Ft int
15.Fo EVP_PKEY_decrypt
16.Fa "EVP_PKEY_CTX *ctx"
17.Fa "unsigned char *out"
18.Fa "size_t *outlen"
19.Fa "const unsigned char *in"
20.Fa "size_t inlen"
21.Fc
22.Sh DESCRIPTION
23The
24.Fn EVP_PKEY_decrypt_init
25function initializes a public key algorithm context using key
26.Fa ctx->pkey
27for a decryption operation.
28.Pp
29The
30.Fn EVP_PKEY_decrypt
31function performs a public key decryption operation using
32.Fa ctx .
33The data to be decrypted is specified using the
34.Fa in
35and
36.Fa inlen
37parameters.
38If
39.Fa out
40is
41.Dv NULL
42then the maximum size of the output buffer is written to the
43.Fa outlen
44parameter.
45If
46.Fa out
47is not
48.Dv NULL
49then before the call the
50.Fa outlen
51parameter should contain the length of the
52.Fa out
53buffer, if the call is successful the decrypted data is written to
54.Fa out
55and the amount of data written to
56.Fa outlen .
57.Pp
58After the call to
59.Fn EVP_PKEY_decrypt_init ,
60algorithm specific control operations can be performed to set any
61appropriate parameters for the operation.
62.Pp
63The function
64.Fn EVP_PKEY_decrypt
65can be called more than once on the same context if several operations
66are performed using the same parameters.
67.Sh RETURN VALUES
68.Fn EVP_PKEY_decrypt_init
69and
70.Fn EVP_PKEY_decrypt
71return 1 for success and 0 or a negative value for failure.
72In particular, a return value of -2 indicates the operation is not
73supported by the public key algorithm.
74.Sh EXAMPLE
75Decrypt data using OAEP (for RSA keys):
76.Bd -literal
77#include <openssl/evp.h>
78#include <openssl/rsa.h>
79
80EVP_PKEY_CTX *ctx;
81unsigned char *out, *in;
82size_t outlen, inlen;
83EVP_PKEY *key;
84/* NB: assumes key in, inlen are already set up
85 * and that key is an RSA private key
86 */
87ctx = EVP_PKEY_CTX_new(key);
88if (!ctx)
89 /* Error occurred */
90if (EVP_PKEY_decrypt_init(ctx) <= 0)
91 /* Error */
92if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0)
93 /* Error */
94
95/* Determine buffer length */
96if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0)
97 /* Error */
98
99out = malloc(outlen);
100
101if (!out)
102 /* malloc failure */
103
104if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0)
105 /* Error */
106
107/* Decrypted data is outlen bytes written to buffer out */
108.Ed
109.Sh SEE ALSO
110.Xr EVP_PKEY_CTX_new 3 ,
111.Xr EVP_PKEY_derive 3 ,
112.Xr EVP_PKEY_encrypt 3 ,
113.Xr EVP_PKEY_sign 3 ,
114.Xr EVP_PKEY_verify 3 ,
115.Xr EVP_PKEY_verify_recover 3
116.Sh HISTORY
117These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_derive.3 b/src/lib/libcrypto/man/EVP_PKEY_derive.3
new file mode 100644
index 0000000000..e67280cf20
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_derive.3
@@ -0,0 +1,120 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_DERIVE 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_derive_init ,
6.Nm EVP_PKEY_derive_set_peer ,
7.Nm EVP_PKEY_derive
8.Nd derive public key algorithm shared secret
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_PKEY_derive_init
13.Fa "EVP_PKEY_CTX *ctx"
14.Fc
15.Ft int
16.Fo EVP_PKEY_derive_set_peer
17.Fa "EVP_PKEY_CTX *ctx"
18.Fa "EVP_PKEY *peer"
19.Fc
20.Ft int
21.Fo EVP_PKEY_derive
22.Fa "EVP_PKEY_CTX *ctx"
23.Fa "unsigned char *key"
24.Fa "size_t *keylen"
25.Fc
26.Sh DESCRIPTION
27The
28.Fn EVP_PKEY_derive_init
29function initializes a public key algorithm context using key
30.Fa ctx->pkey
31for shared secret derivation.
32.Pp
33The
34.Fn EVP_PKEY_derive_set_peer
35function sets the peer key: this will normally be a public key.
36.Pp
37The
38.Fn EVP_PKEY_derive
39derives a shared secret using
40.Fa ctx .
41If
42.Fa key
43is
44.Dv NULL ,
45then the maximum size of the output buffer is written to the
46.Fa keylen
47parameter.
48If
49.Fa key
50is not
51.Dv NULL
52then before the call the
53.Fa keylen
54parameter should contain the length of the
55.Fa key
56buffer.
57If the call is successful, the shared secret is written to
58.Fa key
59and the amount of data written to
60.Fa keylen .
61.Pp
62After the call to
63.Fn EVP_PKEY_derive_init ,
64algorithm specific control operations can be performed to set any
65appropriate parameters for the operation.
66.Pp
67The function
68.Fn EVP_PKEY_derive
69can be called more than once on the same context if several operations
70are performed using the same parameters.
71.Sh RETURN VALUES
72.Fn EVP_PKEY_derive_init
73and
74.Fn EVP_PKEY_derive
75return 1 for success and 0 or a negative value for failure.
76In particular, a return value of -2 indicates the operation is not
77supported by the public key algorithm.
78.Sh EXAMPLES
79Derive shared secret (for example DH or EC keys):
80.Bd -literal
81#include <openssl/evp.h>
82#include <openssl/rsa.h>
83
84EVP_PKEY_CTX *ctx;
85unsigned char *skey;
86size_t skeylen;
87EVP_PKEY *pkey, *peerkey;
88/* NB: assumes pkey, peerkey have been already set up */
89
90ctx = EVP_PKEY_CTX_new(pkey);
91if (!ctx)
92 /* Error occurred */
93if (EVP_PKEY_derive_init(ctx) <= 0)
94 /* Error */
95if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0)
96 /* Error */
97
98/* Determine buffer length */
99if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0)
100 /* Error */
101
102skey = malloc(skeylen);
103
104if (!skey)
105 /* malloc failure */
106
107if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0)
108 /* Error */
109
110/* Shared secret is skey bytes written to buffer skey */
111.Ed
112.Sh SEE ALSO
113.Xr EVP_PKEY_CTX_new 3 ,
114.Xr EVP_PKEY_decrypt 3 ,
115.Xr EVP_PKEY_encrypt 3 ,
116.Xr EVP_PKEY_sign 3 ,
117.Xr EVP_PKEY_verify 3 ,
118.Xr EVP_PKEY_verify_recover 3
119.Sh HISTORY
120These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_encrypt.3 b/src/lib/libcrypto/man/EVP_PKEY_encrypt.3
new file mode 100644
index 0000000000..bda37ef160
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_encrypt.3
@@ -0,0 +1,117 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_ENCRYPT 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_encrypt_init ,
6.Nm EVP_PKEY_encrypt
7.Nd encrypt using a public key algorithm
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft int
11.Fo EVP_PKEY_encrypt_init
12.Fa "EVP_PKEY_CTX *ctx"
13.Fc
14.Ft int
15.Fo EVP_PKEY_encrypt
16.Fa "EVP_PKEY_CTX *ctx"
17.Fa "unsigned char *out"
18.Fa "size_t *outlen"
19.Fa "const unsigned char *in"
20.Fa "size_t inlen"
21.Fc
22.Sh DESCRIPTION
23The
24.Fn EVP_PKEY_encrypt_init
25function initializes a public key algorithm context using key
26.Fa ctx->pkey
27for an encryption operation.
28.Pp
29The
30.Fn EVP_PKEY_encrypt
31function performs a public key encryption operation using
32.Fa ctx .
33The data to be encrypted is specified using the
34.Fa in
35and
36.Fa inlen
37parameters.
38If
39.Fa out
40is
41.Dv NULL ,
42then the maximum size of the output buffer is written to the
43.Fa outlen
44parameter.
45If
46.Fa out
47is not
48.Dv NULL ,
49then before the call the
50.Fa outlen
51parameter should contain the length of the
52.Fa out
53buffer, if the call is successful the encrypted data is written to
54.Fa out
55and the amount of data written to
56.Fa outlen .
57.Pp
58After the call to
59.Fn EVP_PKEY_encrypt_init ,
60algorithm specific control operations can be performed to set any
61appropriate parameters for the operation.
62.Pp
63The function
64.Fn EVP_PKEY_encrypt
65can be called more than once on the same context if several operations
66are performed using the same parameters.
67.Sh RETURN VALUES
68.Fn EVP_PKEY_encrypt_init
69and
70.Fn EVP_PKEY_encrypt
71return 1 for success and 0 or a negative value for failure.
72In particular, a return value of -2 indicates the operation is not
73supported by the public key algorithm.
74.Sh EXAMPLES
75Encrypt data using OAEP (for RSA keys):
76.Bd -literal
77#include <openssl/evp.h>
78#include <openssl/rsa.h>
79
80EVP_PKEY_CTX *ctx;
81unsigned char *out, *in;
82size_t outlen, inlen;
83EVP_PKEY *key;
84/* NB: assumes key in, inlen are already set up
85 * and that key is an RSA public key
86 */
87ctx = EVP_PKEY_CTX_new(key);
88if (!ctx)
89 /* Error occurred */
90if (EVP_PKEY_encrypt_init(ctx) <= 0)
91 /* Error */
92if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0)
93 /* Error */
94
95/* Determine buffer length */
96if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0)
97 /* Error */
98
99out = malloc(outlen);
100
101if (!out)
102 /* malloc failure */
103
104if (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0)
105 /* Error */
106
107/* Encrypted data is outlen bytes written to buffer out */
108.Ed
109.Sh SEE ALSO
110.Xr EVP_PKEY_CTX_new 3 ,
111.Xr EVP_PKEY_decrypt 3 ,
112.Xr EVP_PKEY_derive 3 ,
113.Xr EVP_PKEY_sign 3 ,
114.Xr EVP_PKEY_verify 3 ,
115.Xr EVP_PKEY_verify_recover 3
116.Sh HISTORY
117These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_get_default_digest.3 b/src/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
new file mode 100644
index 0000000000..2266adadf3
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
@@ -0,0 +1,39 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_GET_DEFAULT_DIGEST 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_get_default_digest_nid
6.Nd get default signature digest
7.Sh SYNOPSIS
8.In openssl/evp.h
9.Ft int
10.Fo EVP_PKEY_get_default_digest_nid
11.Fa "EVP_PKEY *pkey"
12.Fa "int *pnid"
13.Fc
14.Sh DESCRIPTION
15The
16.Fn EVP_PKEY_get_default_digest_nid
17function sets
18.Fa pnid
19to the default message digest NID for the public key signature
20operations associated with key
21.Fa pkey .
22.Pp
23For all current standard OpenSSL public key algorithms, SHA1 is returned.
24.Sh RETURN VALUES
25The
26.Fn EVP_PKEY_get_default_digest_nid
27function returns 1 if the message digest is advisory (that is other
28digests can be used) and 2 if it is mandatory (other digests cannot be
29used).
30It returns 0 or a negative value for failure.
31In particular, a return value of -2 indicates the operation is not
32supported by the public key algorithm.
33.Sh SEE ALSO
34.Xr EVP_PKEY_CTX_new 3 ,
35.Xr EVP_PKEY_sign 3 ,
36.Xr EVP_PKEY_verify 3 ,
37.Xr EVP_PKEY_verify_recover 3
38.Sh HISTORY
39This function was first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_keygen.3 b/src/lib/libcrypto/man/EVP_PKEY_keygen.3
new file mode 100644
index 0000000000..8a5c7be0c6
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_keygen.3
@@ -0,0 +1,235 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_KEYGEN 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_keygen_init ,
6.Nm EVP_PKEY_keygen ,
7.Nm EVP_PKEY_paramgen_init ,
8.Nm EVP_PKEY_paramgen ,
9.Nm EVP_PKEY_CTX_set_cb ,
10.Nm EVP_PKEY_CTX_get_cb ,
11.Nm EVP_PKEY_CTX_get_keygen_info ,
12.Nm EVP_PKEY_CTX_set_app_data ,
13.Nm EVP_PKEY_CTX_get_app_data
14.Nd key and parameter generation functions
15.Sh SYNOPSIS
16.In openssl/evp.h
17.Ft int
18.Fo EVP_PKEY_keygen_init
19.Fa "EVP_PKEY_CTX *ctx"
20.Fc
21.Ft int
22.Fo EVP_PKEY_keygen
23.Fa "EVP_PKEY_CTX *ctx"
24.Fa "EVP_PKEY **ppkey"
25.Fc
26.Ft int
27.Fo EVP_PKEY_paramgen_init
28.Fa "EVP_PKEY_CTX *ctx"
29.Fc
30.Ft int
31.Fo EVP_PKEY_paramgen
32.Fa "EVP_PKEY_CTX *ctx"
33.Fa "EVP_PKEY **ppkey"
34.Fc
35.Ft typedef int
36.Fo EVP_PKEY_gen_cb
37.Fa "EVP_PKEY_CTX *ctx"
38.Fc
39.Ft void
40.Fo EVP_PKEY_CTX_set_cb
41.Fa "EVP_PKEY_CTX *ctx"
42.Fa "EVP_PKEY_gen_cb *cb"
43.Fc
44.Ft EVP_PKEY_gen_cb *
45.Fo EVP_PKEY_CTX_get_cb
46.Fa "EVP_PKEY_CTX *ctx"
47.Fc
48.Ft int
49.Fo EVP_PKEY_CTX_get_keygen_info
50.Fa "EVP_PKEY_CTX *ctx"
51.Fa "int idx"
52.Fc
53.Ft void
54.Fo EVP_PKEY_CTX_set_app_data
55.Fa "EVP_PKEY_CTX *ctx"
56.Fa "void *data"
57.Fc
58.Ft void *
59.Fo EVP_PKEY_CTX_get_app_data
60.Fa "EVP_PKEY_CTX *ctx"
61.Fc
62.Sh DESCRIPTION
63The
64.Fn EVP_PKEY_keygen_init
65function initializes a public key algorithm context using key
66.Fa ctx->pkey
67for a key generation operation.
68.Pp
69The
70.Fn EVP_PKEY_keygen
71function performs a key generation operation, the generated key is
72written to
73.Fa ppkey .
74.Pp
75The functions
76.Fn EVP_PKEY_paramgen_init
77and
78.Fn EVP_PKEY_paramgen
79are similar except parameters are generated.
80.Pp
81The function
82.Fn EVP_PKEY_CTX_set_cb
83sets the key or parameter generation callback to
84.Fa cb .
85The function
86.Fn EVP_PKEY_CTX_get_cb
87returns the key or parameter generation callback.
88.Pp
89The function
90.Fn EVP_PKEY_CTX_get_keygen_info
91returns parameters associated with the generation operation.
92If
93.Fa idx
94is -1, the total number of parameters available is returned.
95Any non negative value returns the value of that parameter.
96.Fn EVP_PKEY_CTX_get_keygen_info
97with a non-negative value for
98.Fa idx
99should only be called within the generation callback.
100.Pp
101If the callback returns 0, then the key generation operation is aborted
102and an error occurs.
103This might occur during a time consuming operation where a user clicks
104on a "cancel" button.
105.Pp
106The functions
107.Fn EVP_PKEY_CTX_set_app_data
108and
109.Fn EVP_PKEY_CTX_get_app_data
110set and retrieve an opaque pointer.
111This can be used to set some application defined value which can be
112retrieved in the callback: for example a handle which is used to update
113a "progress dialog".
114.Pp
115After the call to
116.Fn EVP_PKEY_keygen_init
117or
118.Fn EVP_PKEY_paramgen_init ,
119algorithm specific control operations can be performed to set any
120appropriate parameters for the operation.
121.Pp
122The functions
123.Fn EVP_PKEY_keygen
124and
125.Fn EVP_PKEY_paramgen
126can be called more than once on the same context if several operations
127are performed using the same parameters.
128.Pp
129The meaning of the parameters passed to the callback will depend on the
130algorithm and the specific implementation of the algorithm.
131Some might not give any useful information at all during key or
132parameter generation.
133Others might not even call the callback.
134.Pp
135The operation performed by key or parameter generation depends on the
136algorithm used.
137In some cases (e.g. EC with a supplied named curve) the "generation"
138option merely sets the appropriate fields in an
139.Vt EVP_PKEY
140structure.
141.Pp
142In OpenSSL, an
143.Vt EVP_PKEY
144structure containing a private key also contains the public key
145components and parameters (if any).
146An OpenSSL private key is equivalent to what some libraries call a "key
147pair".
148A private key can be used in functions which require the use of a public
149key or parameters.
150.Sh RETURN VALUES
151.Fn EVP_PKEY_keygen_init ,
152.Fn EVP_PKEY_paramgen_init ,
153.Fn EVP_PKEY_keygen ,
154and
155.Fn EVP_PKEY_paramgen
156return 1 for success and 0 or a negative value for failure.
157In particular, a return value of -2 indicates the operation is not
158supported by the public key algorithm.
159.Sh EXAMPLES
160Generate a 2048 bit RSA key:
161.Bd -literal
162#include <openssl/evp.h>
163#include <openssl/rsa.h>
164
165EVP_PKEY_CTX *ctx;
166EVP_PKEY *pkey = NULL;
167ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
168if (!ctx)
169 /* Error occurred */
170if (EVP_PKEY_keygen_init(ctx) <= 0)
171 /* Error */
172if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0)
173 /* Error */
174
175/* Generate key */
176if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
177 /* Error */
178.Ed
179.Pp
180Generate a key from a set of parameters:
181.Bd -literal
182#include <openssl/evp.h>
183#include <openssl/rsa.h>
184
185EVP_PKEY_CTX *ctx;
186EVP_PKEY *pkey = NULL, *param;
187/* Assumed param is set up already */
188ctx = EVP_PKEY_CTX_new(param);
189if (!ctx)
190 /* Error occurred */
191if (EVP_PKEY_keygen_init(ctx) <= 0)
192 /* Error */
193
194/* Generate key */
195if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
196 /* Error */
197.Ed
198.Pp
199Example of generation callback for OpenSSL public key implementations:
200.Bd -literal
201/* Application data is a BIO to output status to */
202
203EVP_PKEY_CTX_set_app_data(ctx, status_bio);
204
205static int
206genpkey_cb(EVP_PKEY_CTX *ctx)
207{
208 char c = '*';
209 BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
210 int p;
211
212 p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
213 if (p == 0)
214 c='.';
215 if (p == 1)
216 c='+';
217 if (p == 2)
218 c='*';
219 if (p == 3)
220 c='\en';
221 BIO_write(b,&c,1);
222 (void)BIO_flush(b);
223 return 1;
224}
225.Ed
226.Sh SEE ALSO
227.Xr EVP_PKEY_CTX_new 3 ,
228.Xr EVP_PKEY_decrypt 3 ,
229.Xr EVP_PKEY_derive 3 ,
230.Xr EVP_PKEY_encrypt 3 ,
231.Xr EVP_PKEY_sign 3 ,
232.Xr EVP_PKEY_verify 3 ,
233.Xr EVP_PKEY_verify_recover 3
234.Sh HISTORY
235These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_new.3 b/src/lib/libcrypto/man/EVP_PKEY_new.3
new file mode 100644
index 0000000000..155ca9ad24
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_new.3
@@ -0,0 +1,44 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_NEW 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_new ,
6.Nm EVP_PKEY_free
7.Nd private key allocation functions
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft EVP_PKEY *
11.Fn EVP_PKEY_new void
12.Ft void
13.Fo EVP_PKEY_free
14.Fa "EVP_PKEY *key"
15.Fc
16.Sh DESCRIPTION
17The
18.Vt EVP_PKEY
19structure is used by various OpenSSL functions which require a general
20private key without reference to any particular algorithm.
21.Pp
22The
23.Fn EVP_PKEY_new
24function allocates an empty
25.Vt EVP_PKEY
26structure.
27To add a private key to it, use the functions described in
28.Xr EVP_PKEY_set1_RSA 3 .
29.Pp
30.Fn EVP_PKEY_free
31frees up the private key
32.Fa key .
33.Sh RETURN VALUES
34.Fn EVP_PKEY_new
35returns either the newly allocated
36.Vt EVP_PKEY
37structure or
38.Dv NULL
39if an error occurred.
40.Pp
41.Fn EVP_PKEY_free
42does not return a value.
43.Sh SEE ALSO
44.Xr EVP_PKEY_set1_RSA 3
diff --git a/src/lib/libcrypto/man/EVP_PKEY_print_private.3 b/src/lib/libcrypto/man/EVP_PKEY_print_private.3
new file mode 100644
index 0000000000..d1f627c6a0
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_print_private.3
@@ -0,0 +1,76 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_PRINT_PRIVATE 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_print_public ,
6.Nm EVP_PKEY_print_private ,
7.Nm EVP_PKEY_print_params
8.Nd public key algorithm printing routines
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_PKEY_print_public
13.Fa "BIO *out"
14.Fa "const EVP_PKEY *pkey"
15.Fa "int indent"
16.Fa "ASN1_PCTX *pctx"
17.Fc
18.Ft int
19.Fo EVP_PKEY_print_private
20.Fa "BIO *out"
21.Fa "const EVP_PKEY *pkey"
22.Fa "int indent"
23.Fa "ASN1_PCTX *pctx"
24.Fc
25.Ft int
26.Fo EVP_PKEY_print_params
27.Fa "BIO *out"
28.Fa "const EVP_PKEY *pkey"
29.Fa "int indent"
30.Fa "ASN1_PCTX *pctx"
31.Fc
32.Sh DESCRIPTION
33The functions
34.Fn EVP_PKEY_print_public ,
35.Fn EVP_PKEY_print_private ,
36and
37.Fn EVP_PKEY_print_params
38print out the public, private or parameter components of key
39.Fa pkey ,
40respectively.
41The key is sent to
42.Vt BIO
43.Fa out
44in human readable form.
45The parameter
46.Fa indent
47indicates how far the printout should be indented.
48.Pp
49The
50.Fa pctx
51parameter allows the print output to be finely tuned by using ASN1
52printing options.
53If
54.Fa pctx
55is set to
56.Dv NULL ,
57then default values will be used.
58Currently, no public key algorithms include any options in the
59.Fa pctx
60parameter.
61.Pp
62If the key does not include all the components indicated by the function,
63then only those contained in the key will be printed.
64For example, passing a public key to
65.Fn EVP_PKEY_print_private
66will only print the public components.
67.Sh RETURN VALUES
68These functions all return 1 for success and 0 or a negative value for
69failure.
70In particular, a return value of -2 indicates the operation is not
71supported by the public key algorithm.
72.Sh SEE ALSO
73.Xr EVP_PKEY_CTX_new 3 ,
74.Xr EVP_PKEY_keygen 3
75.Sh HISTORY
76These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_set1_RSA.3 b/src/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
new file mode 100644
index 0000000000..986918dc2f
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
@@ -0,0 +1,171 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_SET1_RSA 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_set1_RSA ,
6.Nm EVP_PKEY_set1_DSA ,
7.Nm EVP_PKEY_set1_DH ,
8.Nm EVP_PKEY_set1_EC_KEY ,
9.Nm EVP_PKEY_get1_RSA ,
10.Nm EVP_PKEY_get1_DSA ,
11.Nm EVP_PKEY_get1_DH ,
12.Nm EVP_PKEY_get1_EC_KEY ,
13.Nm EVP_PKEY_assign_RSA ,
14.Nm EVP_PKEY_assign_DSA ,
15.Nm EVP_PKEY_assign_DH ,
16.Nm EVP_PKEY_assign_EC_KEY ,
17.Nm EVP_PKEY_type
18.Nd EVP_PKEY assignment functions
19.Sh SYNOPSIS
20.In openssl/evp.h
21.Ft int
22.Fo EVP_PKEY_set1_RSA
23.Fa "EVP_PKEY *pkey"
24.Fa "RSA *key"
25.Fc
26.Ft int
27.Fo EVP_PKEY_set1_DSA
28.Fa "EVP_PKEY *pkey"
29.Fa "DSA *key"
30.Fc
31.Ft int
32.Fo EVP_PKEY_set1_DH
33.Fa "EVP_PKEY *pkey"
34.Fa "DH *key"
35.Fc
36.Ft int
37.Fo EVP_PKEY_set1_EC_KEY
38.Fa "EVP_PKEY *pkey"
39.Fa "EC_KEY *key"
40.Fc
41.Ft RSA *
42.Fo EVP_PKEY_get1_RSA
43.Fa "EVP_PKEY *pkey"
44.Fc
45.Ft DSA *
46.Fo EVP_PKEY_get1_DSA
47.Fa "EVP_PKEY *pkey"
48.Fc
49.Ft DH *
50.Fo EVP_PKEY_get1_DH
51.Fa "EVP_PKEY *pkey"
52.Fc
53.Ft EC_KEY *
54.Fo EVP_PKEY_get1_EC_KEY
55.Fa "EVP_PKEY *pkey"
56.Fc
57.Ft int
58.Fo EVP_PKEY_assign_RSA
59.Fa "EVP_PKEY *pkey"
60.Fa "RSA *key"
61.Fc
62.Ft int
63.Fo EVP_PKEY_assign_DSA
64.Fa "EVP_PKEY *pkey"
65.Fa "DSA *key"
66.Fc
67.Ft int
68.Fo EVP_PKEY_assign_DH
69.Fa "EVP_PKEY *pkey"
70.Fa "DH *key"
71.Fc
72.Ft int
73.Fo EVP_PKEY_assign_EC_KEY
74.Fa "EVP_PKEY *pkey"
75.Fa "EC_KEY *key"
76.Fc
77.Ft int
78.Fo EVP_PKEY_type
79.Fa "int type"
80.Fc
81.Sh DESCRIPTION
82.Fn EVP_PKEY_set1_RSA ,
83.Fn EVP_PKEY_set1_DSA ,
84.Fn EVP_PKEY_set1_DH ,
85and
86.Fn EVP_PKEY_set1_EC_KEY
87set the key referenced by
88.Fa pkey
89to
90.Fa key .
91.Pp
92.Fn EVP_PKEY_get1_RSA ,
93.Fn EVP_PKEY_get1_DSA ,
94.Fn EVP_PKEY_get1_DH ,
95and
96.Fn EVP_PKEY_get1_EC_KEY
97return the key referenced in
98.Fa pkey
99or
100.Dv NULL
101if the key is not of the correct type.
102.Pp
103.Fn EVP_PKEY_assign_RSA ,
104.Fn EVP_PKEY_assign_DSA ,
105.Fn EVP_PKEY_assign_DH ,
106and
107.Fn EVP_PKEY_assign_EC_KEY
108also set the referenced key to
109.Fa key ;
110however these use the supplied
111.Fa key
112internally and so
113.Fa key
114will be freed when the parent
115.Fa pkey
116is freed.
117.Pp
118.Fn EVP_PKEY_type
119returns the type of key corresponding to the value
120.Fa type .
121The type of a key can be obtained with
122.Fn EVP_PKEY_type pkey->type .
123The return value will be
124.Dv EVP_PKEY_RSA ,
125.Dv EVP_PKEY_DSA ,
126.Dv EVP_PKEY_DH ,
127or
128.Dv EVP_PKEY_EC
129for the corresponding key types or
130.Dv NID_undef
131if the key type is unassigned.
132.Pp
133In accordance with the OpenSSL naming convention, the key obtained from
134or assigned to
135.Fa pkey
136using the
137.Sy 1
138functions must be freed as well as
139.Fa pkey .
140.Pp
141.Fn EVP_PKEY_assign_RSA ,
142.Fn EVP_PKEY_assign_DSA ,
143.Fn EVP_PKEY_assign_DH ,
144and
145.Fn EVP_PKEY_assign_EC_KEY
146are implemented as macros.
147.Sh RETURN VALUES
148.Fn EVP_PKEY_set1_RSA ,
149.Fn EVP_PKEY_set1_DSA ,
150.Fn EVP_PKEY_set1_DH ,
151and
152.Fn EVP_PKEY_set1_EC_KEY
153return 1 for success or 0 for failure.
154.Pp
155.Fn EVP_PKEY_get1_RSA ,
156.Fn EVP_PKEY_get1_DSA ,
157.Fn EVP_PKEY_get1_DH ,
158and
159.Fn EVP_PKEY_get1_EC_KEY
160return the referenced key or
161.Dv NULL
162if an error occurred.
163.Pp
164.Fn EVP_PKEY_assign_RSA ,
165.Fn EVP_PKEY_assign_DSA ,
166.Fn EVP_PKEY_assign_DH ,
167and
168.Fn EVP_PKEY_assign_EC_KEY
169return 1 for success and 0 for failure.
170.Sh SEE ALSO
171.Xr EVP_PKEY_new 3
diff --git a/src/lib/libcrypto/man/EVP_PKEY_sign.3 b/src/lib/libcrypto/man/EVP_PKEY_sign.3
new file mode 100644
index 0000000000..f8e4da7a9d
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_sign.3
@@ -0,0 +1,120 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_SIGN 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_sign_init ,
6.Nm EVP_PKEY_sign
7.Nd sign using a public key algorithm
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft int
11.Fo EVP_PKEY_sign_init
12.Fa "EVP_PKEY_CTX *ctx"
13.Fc
14.Ft int
15.Fo EVP_PKEY_sign
16.Fa "EVP_PKEY_CTX *ctx"
17.Fa "unsigned char *sig"
18.Fa "size_t *siglen"
19.Fa "const unsigned char *tbs"
20.Fa "size_t tbslen"
21.Fc
22.Sh DESCRIPTION
23The
24.Fn EVP_PKEY_sign_init
25function initializes a public key algorithm context using the key
26.Fa ctx->pkey
27for a signing operation.
28.Pp
29The
30.Fn EVP_PKEY_sign
31function performs a public key signing operation using
32.Fa ctx .
33The data to be signed is specified using the
34.Fa tbs
35and
36.Fa tbslen
37parameters.
38If
39.Fa sig
40is
41.Dv NULL ,
42then the maximum size of the output buffer is written to the
43.Fa siglen
44parameter.
45If
46.Fa sig
47is not
48.Dv NULL ,
49then before the call the
50.Fa siglen
51parameter should contain the length of the
52.Fa sig
53buffer.
54If the call is successful the signature is written to
55.Fa sig
56and the amount of data written to
57.Fa siglen .
58.Pp
59After the call to
60.Fn EVP_PKEY_sign_init ,
61algorithm specific control operations can be performed to set any
62appropriate parameters for the operation.
63.Pp
64The function
65.Fn EVP_PKEY_sign
66can be called more than once on the same context if several operations
67are performed using the same parameters.
68.Sh RETURN VALUES
69.Fn EVP_PKEY_sign_init
70and
71.Fn EVP_PKEY_sign
72return 1 for success and 0 or a negative value for failure.
73In particular, a return value of -2 indicates the operation is not
74supported by the public key algorithm.
75.Sh EXAMPLES
76Sign data using RSA with PKCS#1 padding and SHA256 digest:
77.Bd -literal
78#include <openssl/evp.h>
79#include <openssl/rsa.h>
80
81EVP_PKEY_CTX *ctx;
82unsigned char *md, *sig;
83size_t mdlen, siglen;
84EVP_PKEY *signing_key;
85/* NB: assumes signing_key, md and mdlen are already set up
86 * and that signing_key is an RSA private key
87 */
88ctx = EVP_PKEY_CTX_new(signing_key);
89if (!ctx)
90 /* Error occurred */
91if (EVP_PKEY_sign_init(ctx) <= 0)
92 /* Error */
93if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
94 /* Error */
95if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
96 /* Error */
97
98/* Determine buffer length */
99if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
100 /* Error */
101
102sig = malloc(siglen);
103
104if (!sig)
105 /* malloc failure */
106
107if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0)
108 /* Error */
109
110/* Signature is siglen bytes written to buffer sig */
111.Ed
112.Sh SEE ALSO
113.Xr EVP_PKEY_CTX_new 3 ,
114.Xr EVP_PKEY_decrypt 3 ,
115.Xr EVP_PKEY_derive 3 ,
116.Xr EVP_PKEY_encrypt 3 ,
117.Xr EVP_PKEY_verify 3 ,
118.Xr EVP_PKEY_verify_recover 3
119.Sh HISTORY
120These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_verify.3 b/src/lib/libcrypto/man/EVP_PKEY_verify.3
new file mode 100644
index 0000000000..bec3283349
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_verify.3
@@ -0,0 +1,109 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_VERIFY 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_verify_init ,
6.Nm EVP_PKEY_verify
7.Nd signature verification using a public key algorithm
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft int
11.Fo EVP_PKEY_verify_init
12.Fa "EVP_PKEY_CTX *ctx"
13.Fc
14.Ft int
15.Fo EVP_PKEY_verify
16.Fa "EVP_PKEY_CTX *ctx"
17.Fa "const unsigned char *sig"
18.Fa "size_t siglen"
19.Fa "const unsigned char *tbs"
20.Fa "size_t tbslen"
21.Fc
22.Sh DESCRIPTION
23The
24.Fn EVP_PKEY_verify_init
25function initializes a public key algorithm context using key
26.Fa ctx->pkey
27for a signature verification operation.
28.Pp
29The
30.Fn EVP_PKEY_verify
31function performs a public key verification operation using
32.Fa ctx .
33The signature is specified using the
34.Fa sig
35and
36.Fa siglen
37parameters.
38The verified data (i.e. the data believed originally signed) is
39specified using the
40.Fa tbs
41and
42.Fa tbslen
43parameters.
44.Pp
45After the call to
46.Fn EVP_PKEY_verify_init ,
47algorithm specific control operations can be performed to set any
48appropriate parameters for the operation.
49.Pp
50The function
51.Fn EVP_PKEY_verify
52can be called more than once on the same context if several operations
53are performed using the same parameters.
54.Sh RETURN VALUES
55.Fn EVP_PKEY_verify_init
56and
57.Fn EVP_PKEY_verify
58return 1 if the verification was successful and 0 if it failed.
59Unlike other functions the return value 0 from
60.Fn EVP_PKEY_verify
61only indicates that the signature did not verify successfully.
62That is,
63.Fa tbs
64did not match the original data or the signature was of invalid form.
65It is not an indication of a more serious error.
66.Pp
67A negative value indicates an error other that signature verification
68failure.
69In particular, a return value of -2 indicates the operation is not
70supported by the public key algorithm.
71.Sh EXAMPLES
72Verify signature using PKCS#1 and SHA256 digest:
73.Bd -literal
74#include <openssl/evp.h>
75#include <openssl/rsa.h>
76
77EVP_PKEY_CTX *ctx;
78unsigned char *md, *sig;
79size_t mdlen, siglen;
80EVP_PKEY *verify_key;
81/* NB: assumes verify_key, sig, siglen md and mdlen are already set up
82 * and that verify_key is an RSA public key
83 */
84ctx = EVP_PKEY_CTX_new(verify_key);
85if (!ctx)
86 /* Error occurred */
87if (EVP_PKEY_verify_init(ctx) <= 0)
88 /* Error */
89if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
90 /* Error */
91if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
92 /* Error */
93
94/* Perform operation */
95ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen);
96
97/* ret == 1 indicates success, 0 verify failure and < 0 for some
98 * other error.
99 */
100.Ed
101.Sh SEE ALSO
102.Xr EVP_PKEY_CTX_new 3 ,
103.Xr EVP_PKEY_decrypt 3 ,
104.Xr EVP_PKEY_derive 3 ,
105.Xr EVP_PKEY_encrypt 3 ,
106.Xr EVP_PKEY_sign 3 ,
107.Xr EVP_PKEY_verify_recover 3
108.Sh HISTORY
109These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_PKEY_verify_recover.3 b/src/lib/libcrypto/man/EVP_PKEY_verify_recover.3
new file mode 100644
index 0000000000..fc26152ae6
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_PKEY_verify_recover.3
@@ -0,0 +1,131 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_PKEY_VERIFY_RECOVER 3
3.Os
4.Sh NAME
5.Nm EVP_PKEY_verify_recover_init ,
6.Nm EVP_PKEY_verify_recover
7.Nd recover signature using a public key algorithm
8.Sh SYNOPSIS
9.In openssl/evp.h
10.Ft int
11.Fo EVP_PKEY_verify_recover_init
12.Fa "EVP_PKEY_CTX *ctx"
13.Fc
14.Ft int
15.Fo EVP_PKEY_verify_recover
16.Fa "EVP_PKEY_CTX *ctx"
17.Fa "unsigned char *rout"
18.Fa "size_t *routlen"
19.Fa "const unsigned char *sig"
20.Fa "size_t siglen"
21.Fc
22.Sh DESCRIPTION
23The
24.Fn EVP_PKEY_verify_recover_init
25function initializes a public key algorithm context using key
26.Fa ctx->pkey
27for a verify recover operation.
28.Pp
29The
30.Fn EVP_PKEY_verify_recover
31function recovers signed data using
32.Fa ctx .
33The signature is specified using the
34.Fa sig
35and
36.Fa siglen
37parameters.
38If
39.Fa rout
40is
41.Dv NULL ,
42then the maximum size of the output buffer is written to the
43.Fa routlen
44parameter.
45If
46.Fa rout
47is not
48.Dv NULL ,
49then before the call the
50.Fa routlen
51parameter should contain the length of the
52.Fa rout
53buffer.
54If the call is successful, recovered data is written to
55.Fa rout
56and the amount of data written to
57.Fa routlen .
58.Pp
59Normally an application is only interested in whether a signature
60verification operation is successful.
61In those cases, the
62.Xr EVP_verify 3
63function should be used.
64.Pp
65Sometimes however it is useful to obtain the data originally signed
66using a signing operation.
67Only certain public key algorithms can recover a signature in this way
68(for example RSA in PKCS padding mode).
69.Pp
70After the call to
71.Fn EVP_PKEY_verify_recover_init ,
72algorithm specific control operations can be performed to set any
73appropriate parameters for the operation.
74.Pp
75The function
76.Fn EVP_PKEY_verify_recover
77can be called more than once on the same context if several operations
78are performed using the same parameters.
79.Sh RETURN VALUES
80.Fn EVP_PKEY_verify_recover_init
81and
82.Fn EVP_PKEY_verify_recover
83return 1 for success and 0 or a negative value for failure.
84In particular, a return value of -2 indicates the operation is not
85supported by the public key algorithm.
86.Sh EXAMPLES
87Recover digest originally signed using PKCS#1 and SHA256 digest:
88.Bd -literal
89#include <openssl/evp.h>
90#include <openssl/rsa.h>
91
92EVP_PKEY_CTX *ctx;
93unsigned char *rout, *sig;
94size_t routlen, siglen;
95EVP_PKEY *verify_key;
96/* NB: assumes verify_key, sig and siglen are already set up
97 * and that verify_key is an RSA public key
98 */
99ctx = EVP_PKEY_CTX_new(verify_key);
100if (!ctx)
101 /* Error occurred */
102if (EVP_PKEY_verify_recover_init(ctx) <= 0)
103 /* Error */
104if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
105 /* Error */
106if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
107 /* Error */
108
109/* Determine buffer length */
110if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0)
111 /* Error */
112
113rout = malloc(routlen);
114
115if (!rout)
116 /* malloc failure */
117
118if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0)
119 /* Error */
120
121/* Recovered data is routlen bytes written to buffer rout */
122.Ed
123.Sh SEE ALSO
124.Xr EVP_PKEY_CTX_new 3 ,
125.Xr EVP_PKEY_encrypt 3 ,
126.Xr EVP_PKEY_decrypt 3 ,
127.Xr EVP_PKEY_sign 3 ,
128.Xr EVP_PKEY_verify 3 ,
129.Xr EVP_PKEY_derive 3
130.Sh HISTORY
131These functions were first added to OpenSSL 1.0.0.
diff --git a/src/lib/libcrypto/man/EVP_SealInit.3 b/src/lib/libcrypto/man/EVP_SealInit.3
new file mode 100644
index 0000000000..9511111486
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_SealInit.3
@@ -0,0 +1,131 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_SEALINIT 3
3.Os
4.Sh NAME
5.Nm EVP_SealInit ,
6.Nm EVP_SealUpdate ,
7.Nm EVP_SealFinal
8.Nd EVP envelope encryption
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_SealInit
13.Fa "EVP_CIPHER_CTX *ctx"
14.Fa "const EVP_CIPHER *type"
15.Fa "unsigned char **ek"
16.Fa "int *ekl"
17.Fa "unsigned char *iv"
18.Fa "EVP_PKEY **pubk"
19.Fa "int npubk"
20.Fc
21.Ft int
22.Fo EVP_SealUpdate
23.Fa "EVP_CIPHER_CTX *ctx"
24.Fa "unsigned char *out"
25.Fa "int *outl"
26.Fa "unsigned char *in"
27.Fa "int inl"
28.Fc
29.Ft int
30.Fo EVP_SealFinal
31.Fa "EVP_CIPHER_CTX *ctx"
32.Fa "unsigned char *out"
33.Fa "int *outl"
34.Fc
35.Sh DESCRIPTION
36The EVP envelope routines are a high level interface to envelope
37encryption.
38They generate a random key and IV (if required) then "envelope" it by
39using public key encryption.
40Data can then be encrypted using this key.
41.Pp
42.Fn EVP_SealInit
43initializes a cipher context
44.Fa ctx
45for encryption with cipher
46.Fa type
47using a random secret key and IV.
48.Fa type
49is normally supplied by a function such as
50.Fn EVP_aes_256_cbc 3 ;
51see
52.Xr EVP_EncryptInit 3
53for details.
54The secret key is encrypted using one or more public keys.
55This allows the same encrypted data to be decrypted using any of
56the corresponding private keys.
57.Fa ek
58is an array of buffers where the public key encrypted secret key will be
59written.
60Each buffer must contain enough room for the corresponding encrypted
61key: that is
62.Fa ek[i]
63must have room for
64.Fn EVP_PKEY_size pubk[i]
65bytes.
66The actual size of each encrypted secret key is written to the array
67.Fa ekl .
68.Fa pubk
69is an array of
70.Fa npubk
71public keys.
72.Pp
73The
74.Fa iv
75parameter is a buffer where the generated IV is written to.
76It must contain enough room for the corresponding cipher's IV, as
77determined by (for example)
78.Fn EVP_CIPHER_iv_length type .
79.Pp
80If the cipher does not require an IV then the
81.Fa iv
82parameter is ignored and can be
83.Dv NULL .
84.Pp
85.Fn EVP_SealUpdate
86and
87.Fn EVP_SealFinal
88have exactly the same properties as the
89.Xr EVP_EncryptUpdate 3
90and
91.Xr EVP_EncryptFinal 3
92routines.
93.Pp
94The public key must be RSA because it is the only OpenSSL public key
95algorithm that supports key transport.
96.Pp
97Envelope encryption is the usual method of using public key encryption
98on large amounts of data.
99This is because public key encryption is slow but symmetric encryption
100is fast.
101So symmetric encryption is used for bulk encryption and the small random
102symmetric key used is transferred using public key encryption.
103.Pp
104It is possible to call
105.Fn EVP_SealInit
106twice in the same way as
107.Xr EVP_EncryptInit 3 .
108The first call should have
109.Fa npubk
110set to 0 and (after setting any cipher parameters) it should be called
111again with
112.Fa type
113set to NULL.
114.Sh RETURN VALUES
115.Fn EVP_SealInit
116returns 0 on error or
117.Fa npubk
118if successful.
119.Pp
120.Fn EVP_SealUpdate
121and
122.Fn EVP_SealFinal
123return 1 for success and 0 for failure.
124.Sh SEE ALSO
125.Xr evp 3 ,
126.Xr EVP_EncryptInit 3 ,
127.Xr EVP_OpenInit 3 ,
128.Xr rand 3
129.Sh HISTORY
130.Fn EVP_SealFinal
131did not return a value before OpenSSL 0.9.7.
diff --git a/src/lib/libcrypto/man/EVP_SignInit.3 b/src/lib/libcrypto/man/EVP_SignInit.3
new file mode 100644
index 0000000000..22f81148a2
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_SignInit.3
@@ -0,0 +1,167 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_SIGNINIT 3
3.Os
4.Sh NAME
5.Nm EVP_SignInit ,
6.Nm EVP_SignUpdate ,
7.Nm EVP_SignFinal ,
8.Nm EVP_PKEY_size
9.Nd EVP signing functions
10.Sh SYNOPSIS
11.In openssl/evp.h
12.Ft int
13.Fo EVP_SignInit_ex
14.Fa "EVP_MD_CTX *ctx"
15.Fa "const EVP_MD *type"
16.Fa "ENGINE *impl"
17.Fc
18.Ft int
19.Fo EVP_SignUpdate
20.Fa "EVP_MD_CTX *ctx"
21.Fa "const void *d"
22.Fa "unsigned int cnt"
23.Fc
24.Ft int
25.Fo EVP_SignFinal
26.Fa "EVP_MD_CTX *ctx"
27.Fa "unsigned char *sig"
28.Fa "unsigned int *s"
29.Fa "EVP_PKEY *pkey"
30.Fc
31.Ft void
32.Fo EVP_SignInit
33.Fa "EVP_MD_CTX *ctx"
34.Fa "const EVP_MD *type"
35.Fc
36.Ft int
37.Fo EVP_PKEY_size
38.Fa "EVP_PKEY *pkey"
39.Fc
40.Sh DESCRIPTION
41The EVP signature routines are a high level interface to digital
42signatures.
43.Pp
44.Fn EVP_SignInit_ex
45sets up a signing context
46.Fa ctx
47to use the digest
48.Fa type
49from
50.Vt ENGINE
51.Fa impl .
52.Fa ctx
53must be initialized with
54.Xr EVP_MD_CTX_init 3
55before calling this function.
56.Pp
57.Fn EVP_SignUpdate
58hashes
59.Fa cnt
60bytes of data at
61.Fa d
62into the signature context
63.Fa ctx .
64This function can be called several times on the same
65.Fa ctx
66to include additional data.
67.Pp
68.Fn EVP_SignFinal
69signs the data in
70.Fa ctx
71using the private key
72.Fa pkey
73and places the signature in
74.Fa sig .
75.Fa sig
76must be at least
77.Fn EVP_PKEY_size pkey
78bytes in size.
79.Fa s
80is an OUT parameter, and not used as an IN parameter.
81The number of bytes of data written (i.e.
82the length of the signature) will be written to the integer at
83.Fa s .
84At most
85.Fn EVP_PKEY_size pkey
86bytes will be written.
87.Pp
88.Fn EVP_SignInit
89initializes a signing context
90.Fa ctx
91to use the default implementation of digest
92.Fa type .
93.Pp
94.Fn EVP_PKEY_size
95returns the maximum size of a signature in bytes.
96The actual signature returned by
97.Fn EVP_SignFinal
98may be smaller.
99.Pp
100The EVP interface to digital signatures should almost always be
101used in preference to the low level interfaces.
102This is because the code then becomes transparent to the algorithm used
103and much more flexible.
104.Pp
105Due to the link between message digests and public key algorithms the
106correct digest algorithm must be used with the correct public key type.
107A list of algorithms and associated public key algorithms appears in
108.Xr EVP_DigestInit 3 .
109.Pp
110The call to
111.Fn EVP_SignFinal
112internally finalizes a copy of the digest context.
113This means that calls to
114.Fn EVP_SignUpdate
115and
116.Fn EVP_SignFinal
117can be called later to digest and sign additional data.
118.Pp
119Since only a copy of the digest context is ever finalized, the context
120must be cleaned up after use by calling
121.Xr EVP_MD_CTX_cleanup 3
122or a memory leak will occur.
123.Sh RETURN VALUES
124.Fn EVP_SignInit_ex ,
125.Fn EVP_SignUpdate ,
126and
127.Fn EVP_SignFinal
128return 1 for success and 0 for failure.
129.Pp
130.Fn EVP_PKEY_size
131returns the maximum size of a signature in bytes.
132.Pp
133The error codes can be obtained by
134.Xr ERR_get_error 3 .
135.Sh SEE ALSO
136.Xr ERR 3 ,
137.Xr evp 3 ,
138.Xr EVP_DigestInit 3 ,
139.Xr EVP_VerifyInit 3
140.Sh HISTORY
141.Fn EVP_SignInit ,
142.Fn EVP_SignUpdate ,
143and
144.Fn EVP_SignFinal
145are available in all versions of SSLeay and OpenSSL.
146.Pp
147.Fn EVP_SignInit_ex
148was added in OpenSSL 0.9.7.
149.Sh BUGS
150Older versions of this documentation wrongly stated that calls to
151.Fn EVP_SignUpdate
152could not be made after calling
153.Fn EVP_SignFinal .
154.Pp
155Since the private key is passed in the call to
156.Fn EVP_SignFinal
157any error relating to the private key (for example an unsuitable key and
158digest combination) will not be indicated until after potentially large
159amounts of data have been passed through
160.Fn EVP_SignUpdate .
161.Pp
162It is not possible to change the signing parameters using these
163function.
164.Pp
165The previous two bugs are fixed in the newer
166.Xr EVP_SignDigest* 3
167function.
diff --git a/src/lib/libcrypto/man/EVP_VerifyInit.3 b/src/lib/libcrypto/man/EVP_VerifyInit.3
new file mode 100644
index 0000000000..b1635d4cac
--- /dev/null
+++ b/src/lib/libcrypto/man/EVP_VerifyInit.3
@@ -0,0 +1,146 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP_VERIFYINIT 3
3.Os
4.Sh NAME
5.Nm EVP_VerifyInit ,
6.Nm EVP_VerifyUpdate ,
7.Nm EVP_VerifyFinal
8.Nd EVP signature verification functions
9.Sh SYNOPSIS
10.In openssl/evp.h
11.Ft int
12.Fo EVP_VerifyInit_ex
13.Fa "EVP_MD_CTX *ctx"
14.Fa "const EVP_MD *type"
15.Fa "ENGINE *impl"
16.Fc
17.Ft int
18.Fo EVP_VerifyUpdate
19.Fa "EVP_MD_CTX *ctx"
20.Fa "const void *d"
21.Fa "unsigned int cnt"
22.Fc
23.Ft int
24.Fo EVP_VerifyFinal
25.Fa "EVP_MD_CTX *ctx"
26.Fa "unsigned char *sigbuf"
27.Fa "unsigned int siglen"
28.Fa "EVP_PKEY *pkey"
29.Fc
30.Ft int
31.Fo EVP_VerifyInit
32.Fa "EVP_MD_CTX *ctx"
33.Fa "const EVP_MD *type"
34.Fc
35.Sh DESCRIPTION
36The EVP signature verification routines are a high level interface to
37digital signatures.
38.Pp
39.Fn EVP_VerifyInit_ex
40sets up a verification context
41.Fa ctx
42to use the digest
43.Fa type
44from
45.Vt ENGINE
46.Fa impl .
47.Fa ctx
48must be initialized by calling
49.Xr EVP_MD_CTX_init 3
50before calling this function.
51.Pp
52.Fn EVP_VerifyUpdate
53hashes
54.Fa cnt
55bytes of data at
56.Fa d
57into the verification context
58.Fa ctx .
59This function can be called several times on the same
60.Fa ctx
61to include additional data.
62.Pp
63.Fn EVP_VerifyFinal
64verifies the data in
65.Fa ctx
66using the public key
67.Fa pkey
68and against the
69.Fa siglen
70bytes at
71.Fa sigbuf .
72.Pp
73.Fn EVP_VerifyInit
74initializes a verification context
75.Fa ctx
76to use the default implementation of digest
77.Fa type .
78.Pp
79The EVP interface to digital signatures should almost always be
80used in preference to the low level interfaces.
81This is because the code then becomes transparent to the algorithm used
82and much more flexible.
83.Pp
84Due to the link between message digests and public key algorithms, the
85correct digest algorithm must be used with the correct public key type.
86A list of algorithms and associated public key algorithms appears in
87.Xr EVP_DigestInit 3 .
88.Pp
89The call to
90.Fn EVP_VerifyFinal
91internally finalizes a copy of the digest context.
92This means that calls to
93.Fn EVP_VerifyUpdate
94and
95.Fn EVP_VerifyFinal
96can be called later to digest and verify additional data.
97.Pp
98Since only a copy of the digest context is ever finalized, the context
99must be cleaned up after use by calling
100.Xr EVP_MD_CTX_cleanup 3 ,
101or a memory leak will occur.
102.Sh RETURN VALUES
103.Fn EVP_VerifyInit_ex
104and
105.Fn EVP_VerifyUpdate
106return 1 for success and 0 for failure.
107.Pp
108.Fn EVP_VerifyFinal
109returns 1 for a correct signature, 0 for failure, and -1 if some other
110error occurred.
111.Pp
112The error codes can be obtained by
113.Xr ERR_get_error 3 .
114.Sh SEE ALSO
115.Xr ERR 3 ,
116.Xr evp 3 ,
117.Xr EVP_DigestInit 3 ,
118.Xr EVP_SignInit 3
119.Sh HISTORY
120.Fn EVP_VerifyInit ,
121.Fn EVP_VerifyUpdate ,
122and
123.Fn EVP_VerifyFinal
124are available in all versions of SSLeay and OpenSSL.
125.Pp
126.Fn EVP_VerifyInit_ex
127was added in OpenSSL 0.9.7.
128.Sh BUGS
129Older versions of this documentation wrongly stated that calls to
130.Fn EVP_VerifyUpdate
131could not be made after calling
132.Fn EVP_VerifyFinal .
133.Pp
134Since the public key is passed in the call to
135.Xr EVP_SignFinal 3 ,
136any error relating to the private key (for example an unsuitable key and
137digest combination) will not be indicated until after potentially large
138amounts of data have been passed through
139.Xr EVP_SignUpdate 3 .
140.Pp
141It is not possible to change the signing parameters using these
142functions.
143.Pp
144The previous two bugs are fixed in the newer functions of the
145.Xr EVP_DigestVerifyInit 3
146family.
diff --git a/src/lib/libcrypto/man/Makefile b/src/lib/libcrypto/man/Makefile
index 5d19e023ab..f4fd152ff7 100644
--- a/src/lib/libcrypto/man/Makefile
+++ b/src/lib/libcrypto/man/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.37 2016/11/02 15:23:41 schwarze Exp $ 1# $OpenBSD: Makefile,v 1.38 2016/11/03 09:35:34 schwarze Exp $
2 2
3.include <bsd.own.mk> # for NOMAN 3.include <bsd.own.mk> # for NOMAN
4 4
@@ -92,14 +92,6 @@ MAN= \
92 ERR_remove_state.3 \ 92 ERR_remove_state.3 \
93 ERR_set_mark.3 \ 93 ERR_set_mark.3 \
94 EVP_AEAD_CTX_init.3 \ 94 EVP_AEAD_CTX_init.3 \
95 UI_new.3 \
96 bn_dump.3 \
97 crypto.3 \
98 d2i_PKCS8PrivateKey_bio.3 \
99 des_read_pw.3 \
100 lh_new.3 \
101
102GENMAN= \
103 EVP_BytesToKey.3 \ 95 EVP_BytesToKey.3 \
104 EVP_DigestInit.3 \ 96 EVP_DigestInit.3 \
105 EVP_DigestSignInit.3 \ 97 EVP_DigestSignInit.3 \
@@ -123,6 +115,15 @@ GENMAN= \
123 EVP_SealInit.3 \ 115 EVP_SealInit.3 \
124 EVP_SignInit.3 \ 116 EVP_SignInit.3 \
125 EVP_VerifyInit.3 \ 117 EVP_VerifyInit.3 \
118 UI_new.3 \
119 bn_dump.3 \
120 crypto.3 \
121 d2i_PKCS8PrivateKey_bio.3 \
122 des_read_pw.3 \
123 evp.3 \
124 lh_new.3 \
125
126GENMAN= \
126 HMAC.3 \ 127 HMAC.3 \
127 MD5.3 \ 128 MD5.3 \
128 OBJ_nid2obj.3 \ 129 OBJ_nid2obj.3 \
@@ -192,7 +193,6 @@ GENMAN= \
192 dsa.3 \ 193 dsa.3 \
193 ec.3 \ 194 ec.3 \
194 engine.3 \ 195 engine.3 \
195 evp.3 \
196 i2d_PKCS7_bio_stream.3 \ 196 i2d_PKCS7_bio_stream.3 \
197 lh_stats.3 \ 197 lh_stats.3 \
198 rsa.3 \ 198 rsa.3 \
diff --git a/src/lib/libcrypto/man/evp.3 b/src/lib/libcrypto/man/evp.3
new file mode 100644
index 0000000000..7bf7dfec81
--- /dev/null
+++ b/src/lib/libcrypto/man/evp.3
@@ -0,0 +1,151 @@
1.Dd $Mdocdate: November 3 2016 $
2.Dt EVP 3
3.Os
4.Sh NAME
5.Nm evp
6.Nd high-level cryptographic functions
7.Sh SYNOPSIS
8.In openssl/evp.h
9.Sh DESCRIPTION
10The EVP library provides a high-level interface to cryptographic
11functions.
12.Pp
13.Xr EVP_SealInit 3
14and
15.Xr EVP_OpenInit 3
16provide public key encryption and decryption to implement digital
17"envelopes".
18.Pp
19The
20.Xr EVP_DigestSignInit 3
21and
22.Xr EVP_DigestVerifyInit 3
23functions implement digital signatures and Message Authentication Codes
24(MACs).
25Also see the older
26.Xr EVP_SignInit 3
27and
28.Xr EVP_VerifyInit 3
29functions.
30.Pp
31Symmetric encryption is available with the
32.Xr EVP_EncryptInit 3
33functions.
34The
35.Xr EVP_DigestInit 3
36functions provide message digests.
37.Pp
38Authenticated encryption with additional data (AEAD) is available with
39the
40.Xr EVP_AEAD_CTX_init 3
41functions.
42.Pp
43The
44.Fn EVP_PKEY_*
45functions provide a high level interface to asymmetric algorithms.
46To create a new
47.Vt EVP_PKEY ,
48see
49.Xr EVP_PKEY_new 3 .
50.Vt EVP_PKEY Ns s
51can be associated with a private key of a particular algorithm
52by using the functions described in the
53.Xr EVP_PKEY_set1_RSA 3
54page, or new keys can be generated using
55.Xr EVP_PKEY_keygen 3 .
56.Vt EVP_PKEY Ns s
57can be compared using
58.Xr EVP_PKEY_cmp 3
59or printed using
60.Xr EVP_PKEY_print_private 3 .
61.Pp
62The
63.Fn EVP_PKEY_*
64functions support the full range of asymmetric algorithm operations:
65.Bl -bullet
66.It
67For key agreement, see
68.Xr EVP_PKEY_derive 3 .
69.It
70For signing and verifying, see
71.Xr EVP_PKEY_sign 3 ,
72.Xr EVP_PKEY_verify 3 ,
73and
74.Xr EVP_PKEY_verify_recover 3 .
75However, note that these functions do not perform a digest of the
76data to be signed.
77Therefore normally you would use the
78.Xr EVP_DigestSignInit 3
79functions for this purpose.
80.It
81For encryption and decryption see
82.Xr EVP_PKEY_encrypt 3
83and
84.Xr EVP_PKEY_decrypt 3 ,
85respectively.
86However, note that these functions perform encryption and decryption only.
87As public key encryption is an expensive operation, normally you
88would wrap an encrypted message in a digital envelope using the
89.Xr EVP_SealInit 3
90and
91.Xr EVP_OpenInit 3
92functions.
93.El
94.Pp
95The
96.Xr EVP_BytesToKey 3
97function provides some limited support for password based encryption.
98Careful selection of the parameters will provide a PKCS#5 PBKDF1
99compatible implementation.
100However, new applications should typically not use this (preferring, for
101example, PBKDF2 from PCKS#5).
102.Pp
103Algorithms are loaded with
104.Xr OpenSSL_add_all_algorithms 3 .
105.Pp
106All the symmetric algorithms (ciphers), digests and asymmetric
107algorithms (public key algorithms) can be replaced by
108.Xr engine 3
109modules providing alternative implementations.
110If
111.Vt ENGINE
112implementations of ciphers or digests are registered as defaults,
113then the various EVP functions will automatically use those
114implementations in preference to built in software implementations.
115For more information, consult the
116.Xr engine 3
117manual page.
118.Pp
119Although low level algorithm specific functions exist for many
120algorithms, their use is discouraged.
121They cannot be used with an
122.Vt ENGINE ,
123and
124.Vt ENGINE
125versions of new algorithms cannot be accessed using the low level
126functions.
127Using them also makes code harder to adapt to new algorithms, some
128options are not cleanly supported at the low level, and some
129operations are more efficient using the high level interfaces.
130.Sh SEE ALSO
131.Xr engine 3 ,
132.Xr EVP_AEAD_CTX_init 3 ,
133.Xr EVP_BytesToKey 3 ,
134.Xr EVP_DigestInit 3 ,
135.Xr EVP_DigestSignInit 3 ,
136.Xr EVP_EncryptInit 3 ,
137.Xr EVP_OpenInit 3 ,
138.Xr EVP_PKEY_decrypt 3 ,
139.Xr EVP_PKEY_derive 3 ,
140.Xr EVP_PKEY_encrypt 3 ,
141.Xr EVP_PKEY_keygen 3 ,
142.Xr EVP_PKEY_new 3 ,
143.Xr EVP_PKEY_print_private 3 ,
144.Xr EVP_PKEY_set1_RSA 3 ,
145.Xr EVP_PKEY_sign 3 ,
146.Xr EVP_PKEY_verify 3 ,
147.Xr EVP_PKEY_verify_recover 3 ,
148.Xr EVP_SealInit 3 ,
149.Xr EVP_SignInit 3 ,
150.Xr EVP_VerifyInit 3 ,
151.Xr OpenSSL_add_all_algorithms 3