summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/man/engine.3
diff options
context:
space:
mode:
authorschwarze <>2018-04-15 17:02:03 +0000
committerschwarze <>2018-04-15 17:02:03 +0000
commit8e0d0015d803e2db303942ec42a2e187853cb399 (patch)
tree9e18009b3c6be0ebc7dcf5101e962cea04369f89 /src/lib/libcrypto/man/engine.3
parent83e8d72fcb33da2c34c5964418ed6fa3b12d08c7 (diff)
downloadopenbsd-8e0d0015d803e2db303942ec42a2e187853cb399.tar.gz
openbsd-8e0d0015d803e2db303942ec42a2e187853cb399.tar.bz2
openbsd-8e0d0015d803e2db303942ec42a2e187853cb399.zip
Rewrite the ENGINE_*(3) documentation from scratch - step 2,
covering the remaining functions that were documented in engine(3), except for seven functions that are completely pointless and that were merely listed but not really documented.
Diffstat (limited to 'src/lib/libcrypto/man/engine.3')
-rw-r--r--src/lib/libcrypto/man/engine.3385
1 files changed, 2 insertions, 383 deletions
diff --git a/src/lib/libcrypto/man/engine.3 b/src/lib/libcrypto/man/engine.3
index fac4fa13e1..ebcc95f310 100644
--- a/src/lib/libcrypto/man/engine.3
+++ b/src/lib/libcrypto/man/engine.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: engine.3,v 1.15 2018/04/15 01:43:45 schwarze Exp $ 1.\" $OpenBSD: engine.3,v 1.16 2018/04/15 17:02:03 schwarze Exp $
2.\" full merge up to: OpenSSL crypto/engine e6390aca Jul 21 10:06:03 2015 -0400 2.\" full merge up to: OpenSSL crypto/engine e6390aca Jul 21 10:06:03 2015 -0400
3.\" selective merge up to: man3/ENGINE_add 1f13ad31 Dec 25 17:50:39 2017 +0800 3.\" selective merge up to: man3/ENGINE_add 1f13ad31 Dec 25 17:50:39 2017 +0800
4.\" 4.\"
@@ -55,227 +55,8 @@
55.Dt ENGINE 3 55.Dt ENGINE 3
56.Os 56.Os
57.Sh NAME 57.Sh NAME
58.Nm ENGINE_load_openssl , 58.Nm engine
59.Nm ENGINE_load_dynamic ,
60.Nm ENGINE_load_builtin_engines ,
61.Nm ENGINE_cleanup ,
62.Nm ENGINE_new ,
63.Nm ENGINE_free ,
64.Nm ENGINE_up_ref ,
65.Nm ENGINE_set_id ,
66.Nm ENGINE_set_name ,
67.Nm ENGINE_set_RSA ,
68.Nm ENGINE_set_DSA ,
69.Nm ENGINE_set_ECDH ,
70.Nm ENGINE_set_ECDSA ,
71.Nm ENGINE_set_DH ,
72.Nm ENGINE_set_RAND ,
73.Nm ENGINE_set_STORE ,
74.Nm ENGINE_set_destroy_function ,
75.Nm ENGINE_set_load_privkey_function ,
76.Nm ENGINE_set_load_pubkey_function ,
77.Nm ENGINE_set_ciphers ,
78.Nm ENGINE_set_digests ,
79.Nm ENGINE_set_flags ,
80.Nm ENGINE_get_id ,
81.Nm ENGINE_get_name ,
82.Nm ENGINE_get_RSA ,
83.Nm ENGINE_get_DSA ,
84.Nm ENGINE_get_ECDH ,
85.Nm ENGINE_get_ECDSA ,
86.Nm ENGINE_get_DH ,
87.Nm ENGINE_get_RAND ,
88.Nm ENGINE_get_STORE ,
89.Nm ENGINE_get_destroy_function ,
90.Nm ENGINE_get_load_privkey_function ,
91.Nm ENGINE_get_load_pubkey_function ,
92.Nm ENGINE_get_ciphers ,
93.Nm ENGINE_get_digests ,
94.Nm ENGINE_get_cipher ,
95.Nm ENGINE_get_digest ,
96.Nm ENGINE_get_flags ,
97.Nm ENGINE_load_private_key ,
98.Nm ENGINE_load_public_key
99.Nd ENGINE cryptographic module support 59.Nd ENGINE cryptographic module support
100.Sh SYNOPSIS
101.In openssl/engine.h
102.Ft void
103.Fn ENGINE_load_openssl void
104.Ft void
105.Fn ENGINE_load_dynamic void
106.Ft void
107.Fn ENGINE_load_builtin_engines void
108.Ft void
109.Fn ENGINE_cleanup void
110.Ft ENGINE *
111.Fn ENGINE_new void
112.Ft int
113.Fo ENGINE_free
114.Fa "ENGINE *e"
115.Fc
116.Ft int
117.Fo ENGINE_up_ref
118.Fa "ENGINE *e"
119.Fc
120.Ft int
121.Fo ENGINE_set_id
122.Fa "ENGINE *e"
123.Fa "const char *id"
124.Fc
125.Ft int
126.Fo ENGINE_set_name
127.Fa "ENGINE *e"
128.Fa "const char *name"
129.Fc
130.Ft int
131.Fo ENGINE_set_RSA
132.Fa "ENGINE *e"
133.Fa "const RSA_METHOD *rsa_meth"
134.Fc
135.Ft int
136.Fo ENGINE_set_DSA
137.Fa "ENGINE *e"
138.Fa "const DSA_METHOD *dsa_meth"
139.Fc
140.Ft int
141.Fo ENGINE_set_ECDH
142.Fa "ENGINE *e"
143.Fa "const ECDH_METHOD *dh_meth"
144.Fc
145.Ft int
146.Fo ENGINE_set_ECDSA
147.Fa "ENGINE *e"
148.Fa "const ECDSA_METHOD *dh_meth"
149.Fc
150.Ft int
151.Fo ENGINE_set_DH
152.Fa "ENGINE *e"
153.Fa "const DH_METHOD *dh_meth"
154.Fc
155.Ft int
156.Fo ENGINE_set_RAND
157.Fa "ENGINE *e"
158.Fa "const RAND_METHOD *rand_meth"
159.Fc
160.Ft int
161.Fo ENGINE_set_STORE
162.Fa "ENGINE *e"
163.Fa "const STORE_METHOD *rand_meth"
164.Fc
165.Ft int
166.Fo ENGINE_set_destroy_function
167.Fa "ENGINE *e"
168.Fa "ENGINE_GEN_INT_FUNC_PTR destroy_f"
169.Fc
170.Ft int
171.Fo ENGINE_set_load_privkey_function
172.Fa "ENGINE *e"
173.Fa "ENGINE_LOAD_KEY_PTR loadpriv_f"
174.Fc
175.Ft int
176.Fo ENGINE_set_load_pubkey_function
177.Fa "ENGINE *e"
178.Fa "ENGINE_LOAD_KEY_PTR loadpub_f"
179.Fc
180.Ft int
181.Fo ENGINE_set_ciphers
182.Fa "ENGINE *e"
183.Fa "ENGINE_CIPHERS_PTR f"
184.Fc
185.Ft int
186.Fo ENGINE_set_digests
187.Fa "ENGINE *e"
188.Fa "ENGINE_DIGESTS_PTR f"
189.Fc
190.Ft int
191.Fo ENGINE_set_flags
192.Fa "ENGINE *e"
193.Fa "int flags"
194.Fc
195.Ft const char *
196.Fo ENGINE_get_id
197.Fa "const ENGINE *e"
198.Fc
199.Ft const char *
200.Fo ENGINE_get_name
201.Fa "const ENGINE *e"
202.Fc
203.Ft const RSA_METHOD *
204.Fo ENGINE_get_RSA
205.Fa "const ENGINE *e"
206.Fc
207.Ft const DSA_METHOD *
208.Fo ENGINE_get_DSA
209.Fa "const ENGINE *e"
210.Fc
211.Ft const ECDH_METHOD *
212.Fo ENGINE_get_ECDH
213.Fa "const ENGINE *e"
214.Fc
215.Ft const ECDSA_METHOD *
216.Fo ENGINE_get_ECDSA
217.Fa "const ENGINE *e"
218.Fc
219.Ft const DH_METHOD *
220.Fo ENGINE_get_DH
221.Fa "const ENGINE *e"
222.Fc
223.Ft const RAND_METHOD *
224.Fo ENGINE_get_RAND
225.Fa "const ENGINE *e"
226.Fc
227.Ft const STORE_METHOD *
228.Fo ENGINE_get_STORE
229.Fa "const ENGINE *e"
230.Fc
231.Ft ENGINE_GEN_INT_FUNC_PTR
232.Fo ENGINE_get_destroy_function
233.Fa "const ENGINE *e"
234.Fc
235.Ft ENGINE_LOAD_KEY_PTR
236.Fo ENGINE_get_load_privkey_function
237.Fa "const ENGINE *e"
238.Fc
239.Ft ENGINE_LOAD_KEY_PTR
240.Fo ENGINE_get_load_pubkey_function
241.Fa "const ENGINE *e"
242.Fc
243.Ft ENGINE_CIPHERS_PTR
244.Fo ENGINE_get_ciphers
245.Fa "const ENGINE *e"
246.Fc
247.Ft ENGINE_DIGESTS_PTR
248.Fo ENGINE_get_digests
249.Fa "const ENGINE *e"
250.Fc
251.Ft const EVP_CIPHER *
252.Fo ENGINE_get_cipher
253.Fa "ENGINE *e"
254.Fa "int nid"
255.Fc
256.Ft const EVP_MD *
257.Fo ENGINE_get_digest
258.Fa "ENGINE *e"
259.Fa "int nid"
260.Fc
261.Ft int
262.Fo ENGINE_get_flags
263.Fa "const ENGINE *e"
264.Fc
265.Ft EVP_PKEY *
266.Fo ENGINE_load_private_key
267.Fa "ENGINE *e"
268.Fa "const char *key_id"
269.Fa "UI_METHOD *ui_method"
270.Fa "void *callback_data"
271.Fc
272.Ft EVP_PKEY *
273.Fo ENGINE_load_public_key
274.Fa "ENGINE *e"
275.Fa "const char *key_id"
276.Fa "UI_METHOD *ui_method"
277.Fa "void *callback_data"
278.Fc
279.Sh DESCRIPTION 60.Sh DESCRIPTION
280These functions create, manipulate, and use cryptographic modules 61These functions create, manipulate, and use cryptographic modules
281in the form of 62in the form of
@@ -369,64 +150,6 @@ Essentially a structural reference is sufficient if you only need to
369query or manipulate the data of an 150query or manipulate the data of an
370.Vt ENGINE 151.Vt ENGINE
371implementation rather than use its functionality. 152implementation rather than use its functionality.
372.Pp
373.Fn ENGINE_new
374allocates and initializes an empty
375.Vt ENGINE
376object and sets its structural reference count to 1
377and its functional reference count to 0.
378Many functions increment the structural reference count by 1
379when successful.
380Some of them, including
381.Xr ENGINE_by_id 3 ,
382.Xr ENGINE_get_first 3 ,
383.Xr ENGINE_get_last 3 ,
384.Xr ENGINE_get_next 3 ,
385and
386.Xr ENGINE_get_prev 3 ,
387do so because they return a structural reference to the user.
388Other functions, including
389.Xr ENGINE_add 3 ,
390.Xr ENGINE_init 3 ,
391.Xr ENGINE_get_cipher_engine 3 ,
392.Xr ENGINE_get_digest_engine 3 ,
393and the
394.Xr ENGINE_get_default_RSA 3
395and
396.Xr ENGINE_set_default 3
397families of functions
398do so because they store a structural refence internally.
399.Fn ENGINE_up_ref
400explicitly increment the structural reference count by 1.
401.Pp
402.Fn ENGINE_free
403decrements the structural reference count by 1,
404and if it reaches 0, the cleanup function associated with
405.Fa e
406is called, and both the memory used internally by
407.Fa e
408and
409.Fa e
410itself are freed.
411If
412.Fa e
413is a
414.Dv NULL
415pointer, no action occurs.
416Many functions internally call the equivalent of
417.Fn ENGINE_free .
418Some of them, including
419.Xr ENGINE_get_next 3
420and
421.Xr ENGINE_get_prev 3 ,
422thus invalidate the structural reference passed in by the user.
423Other functions, including
424.Xr ENGINE_finish 3 ,
425.Xr ENGINE_remove 3 ,
426and the
427.Xr ENGINE_set_default 3
428family of functions
429do so when an internally stored structural reference is no longer needed.
430.Ss Application requirements 153.Ss Application requirements
431This section will explain the basic things an application programmer 154This section will explain the basic things an application programmer
432should support to make the most useful elements of the 155should support to make the most useful elements of the
@@ -450,15 +173,6 @@ code at all.
450So the first consideration is whether any/all available 173So the first consideration is whether any/all available
451.Vt ENGINE 174.Vt ENGINE
452implementations should be made visible to OpenSSL. 175implementations should be made visible to OpenSSL.
453This is controlled by calling the various "load" functions, e.g.
454.Fn ENGINE_load_builtin_engines
455to make all
456.Vt ENGINE
457implementations bundled with OpenSSL available.
458.Pp
459Note that
460.Fn ENGINE_load_dynamic
461is a placeholder and does not enable dynamic engine loading support.
462.Pp 176.Pp
463Having called any of these functions, 177Having called any of these functions,
464.Vt ENGINE 178.Vt ENGINE
@@ -466,33 +180,6 @@ objects would have been dynamically allocated and populated with
466these implementations and linked into OpenSSL's internal linked 180these implementations and linked into OpenSSL's internal linked
467list. 181list.
468.Pp 182.Pp
469If no
470.Nm engine
471API functions are called at all in an application, then there are
472no inherent memory leaks to worry about from the
473.Nm engine
474functionality, however if any
475.Vt ENGINE Ns s
476are loaded, even if they are never registered or used, it is necessary
477to use the
478.Fn ENGINE_cleanup
479function to correspondingly cleanup before program exit, if the caller
480wishes to avoid memory leaks.
481This mechanism uses an internal callback registration table so that any
482.Nm engine
483API functionality that knows it requires cleanup can register its
484cleanup details to be called during
485.Fn ENGINE_cleanup .
486This approach allows
487.Fn ENGINE_cleanup
488to clean up after any
489.Nm engine
490functionality at all that your program uses, yet doesn't automatically
491create linker dependencies to all possible
492.Nm engine
493functionality - only the cleanup callbacks required by the functionality
494you do use will be required by the linker.
495.Pp
496The fact that 183The fact that
497.Vt ENGINE Ns s 184.Vt ENGINE Ns s
498are made visible to OpenSSL (and thus are linked into the program 185are made visible to OpenSSL (and thus are linked into the program
@@ -836,74 +523,6 @@ to see if they implement "FOO_GET_VENDOR_LOGO_GIF" - and
836.Vt ENGINE 523.Vt ENGINE
837could therefore decide whether or not to support this "foo"-specific 524could therefore decide whether or not to support this "foo"-specific
838extension). 525extension).
839.Sh RETURN VALUES
840.Fn ENGINE_get_cipher_engine ,
841.Fn ENGINE_get_digest_engine ,
842and
843.Fn ENGINE_new
844return a valid
845.Vt ENGINE
846structure or
847.Dv NULL
848if an error occurred.
849.Pp
850.Fn ENGINE_free ,
851.Fn ENGINE_up_ref ,
852and all
853.Fn ENGINE_set_*
854functions return 1 on success or 0 on error.
855.Pp
856.Fn ENGINE_get_id
857and
858.Fn ENGINE_get_name
859return a pointer to an internal string representing the identifier
860and the name of
861.Fa e ,
862respectively.
863.Pp
864.Fn ENGINE_get_RSA ,
865.Fn ENGINE_get_DSA ,
866.Fn ENGINE_get_DH ,
867.Fn ENGINE_get_RAND ,
868and
869.Fn ENGINE_get_STORE
870return a method structure for the respective algorithm.
871.Pp
872.Fn ENGINE_get_destroy_function ,
873.Fn ENGINE_get_load_privkey_function ,
874.Fn ENGINE_get_load_pubkey_function ,
875.Fn ENGINE_get_ciphers ,
876and
877.Fn ENGINE_get_digests
878return a function pointer to the respective callback.
879.Pp
880.Fn ENGINE_get_cipher
881returns a valid
882.Vt EVP_CIPHER
883structure on success or
884.Dv NULL
885if an error occurred.
886.Pp
887.Fn ENGINE_get_digest
888returns a valid
889.Vt EVP_MD
890structure on success or
891.Dv NULL
892if an error occurred.
893.Pp
894.Fn ENGINE_get_flags
895returns an integer representing the flags
896which are used to control various behaviours of an
897.Vt ENGINE .
898.Pp
899.Fn ENGINE_load_private_key
900and
901.Fn ENGINE_load_public_key
902return a valid
903.Vt EVP_PKEY
904structure on success or
905.Dv NULL
906if an error occurred.
907.Sh SEE ALSO 526.Sh SEE ALSO
908.Xr DH_new 3 , 527.Xr DH_new 3 ,
909.Xr DSA_new 3 , 528.Xr DSA_new 3 ,