licentivo-launch 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +35 -0
  4. data/ext/launch_native/extconf.rb +28 -0
  5. data/lib/licentivo_launch/vendor/licentivo.rb +262 -0
  6. data/lib/licentivo_launch.rb +352 -0
  7. data/vendor/LICENSE +21 -0
  8. data/vendor/NOTICE +17 -0
  9. data/vendor/VERSION +1 -0
  10. data/vendor/c/app.c +33 -0
  11. data/vendor/c/demo.c +77 -0
  12. data/vendor/c/feature_tasks.h +72 -0
  13. data/vendor/c/licentivo.c +382 -0
  14. data/vendor/c/licentivo.h +67 -0
  15. data/vendor/c/quickstart.c +51 -0
  16. data/vendor/c/test_vectors.c +4 -0
  17. data/vendor/c/vendor/Monocypher-LICENCE.md +173 -0
  18. data/vendor/c/vendor/cJSON-LICENSE +20 -0
  19. data/vendor/c/vendor/cJSON.c +3191 -0
  20. data/vendor/c/vendor/cJSON.h +306 -0
  21. data/vendor/c/vendor/monocypher-ed25519.c +500 -0
  22. data/vendor/c/vendor/monocypher-ed25519.h +140 -0
  23. data/vendor/c/vendor/monocypher.c +2956 -0
  24. data/vendor/c/vendor/monocypher.h +321 -0
  25. data/vendor/curl/COPYING.txt +22 -0
  26. data/vendor/curl/bin/libcurl-x64.dll +0 -0
  27. data/vendor/curl/include/brotli/decode.h +409 -0
  28. data/vendor/curl/include/brotli/encode.h +505 -0
  29. data/vendor/curl/include/brotli/port.h +302 -0
  30. data/vendor/curl/include/brotli/shared_dictionary.h +100 -0
  31. data/vendor/curl/include/brotli/types.h +83 -0
  32. data/vendor/curl/include/curl/curl.h +3374 -0
  33. data/vendor/curl/include/curl/curlver.h +77 -0
  34. data/vendor/curl/include/curl/easy.h +123 -0
  35. data/vendor/curl/include/curl/header.h +74 -0
  36. data/vendor/curl/include/curl/mprintf.h +85 -0
  37. data/vendor/curl/include/curl/multi.h +561 -0
  38. data/vendor/curl/include/curl/options.h +70 -0
  39. data/vendor/curl/include/curl/stdcheaders.h +35 -0
  40. data/vendor/curl/include/curl/system.h +399 -0
  41. data/vendor/curl/include/curl/typecheck-gcc.h +964 -0
  42. data/vendor/curl/include/curl/urlapi.h +156 -0
  43. data/vendor/curl/include/curl/websockets.h +98 -0
  44. data/vendor/curl/include/libpsl.h +207 -0
  45. data/vendor/curl/include/libssh2.h +1516 -0
  46. data/vendor/curl/include/libssh2_publickey.h +128 -0
  47. data/vendor/curl/include/libssh2_sftp.h +382 -0
  48. data/vendor/curl/include/nghttp2/nghttp2.h +6878 -0
  49. data/vendor/curl/include/nghttp2/nghttp2ver.h +42 -0
  50. data/vendor/curl/include/nghttp3/nghttp3.h +3704 -0
  51. data/vendor/curl/include/nghttp3/version.h +46 -0
  52. data/vendor/curl/include/ngtcp2/ngtcp2.h +7485 -0
  53. data/vendor/curl/include/ngtcp2/ngtcp2_crypto.h +1071 -0
  54. data/vendor/curl/include/ngtcp2/ngtcp2_crypto_quictls.h +147 -0
  55. data/vendor/curl/include/ngtcp2/version.h +51 -0
  56. data/vendor/curl/include/openssl/aes.h +120 -0
  57. data/vendor/curl/include/openssl/asn1.h +1121 -0
  58. data/vendor/curl/include/openssl/asn1t.h +996 -0
  59. data/vendor/curl/include/openssl/bio.h +716 -0
  60. data/vendor/curl/include/openssl/blowfish.h +106 -0
  61. data/vendor/curl/include/openssl/bn.h +480 -0
  62. data/vendor/curl/include/openssl/buffer.h +102 -0
  63. data/vendor/curl/include/openssl/camellia.h +121 -0
  64. data/vendor/curl/include/openssl/cast.h +99 -0
  65. data/vendor/curl/include/openssl/chacha.h +54 -0
  66. data/vendor/curl/include/openssl/cmac.h +81 -0
  67. data/vendor/curl/include/openssl/cms.h +541 -0
  68. data/vendor/curl/include/openssl/comp.h +7 -0
  69. data/vendor/curl/include/openssl/conf.h +189 -0
  70. data/vendor/curl/include/openssl/crypto.h +458 -0
  71. data/vendor/curl/include/openssl/ct.h +567 -0
  72. data/vendor/curl/include/openssl/curve25519.h +104 -0
  73. data/vendor/curl/include/openssl/des.h +215 -0
  74. data/vendor/curl/include/openssl/dh.h +245 -0
  75. data/vendor/curl/include/openssl/dsa.h +263 -0
  76. data/vendor/curl/include/openssl/dtls1.h +107 -0
  77. data/vendor/curl/include/openssl/ec.h +675 -0
  78. data/vendor/curl/include/openssl/ecdh.h +6 -0
  79. data/vendor/curl/include/openssl/ecdsa.h +6 -0
  80. data/vendor/curl/include/openssl/engine.h +215 -0
  81. data/vendor/curl/include/openssl/err.h +325 -0
  82. data/vendor/curl/include/openssl/evp.h +1288 -0
  83. data/vendor/curl/include/openssl/hkdf.h +65 -0
  84. data/vendor/curl/include/openssl/hmac.h +101 -0
  85. data/vendor/curl/include/openssl/idea.h +99 -0
  86. data/vendor/curl/include/openssl/kdf.h +137 -0
  87. data/vendor/curl/include/openssl/lhash.h +179 -0
  88. data/vendor/curl/include/openssl/md4.h +105 -0
  89. data/vendor/curl/include/openssl/md5.h +99 -0
  90. data/vendor/curl/include/openssl/mlkem.h +236 -0
  91. data/vendor/curl/include/openssl/modes.h +118 -0
  92. data/vendor/curl/include/openssl/obj_mac.h +4646 -0
  93. data/vendor/curl/include/openssl/objects.h +137 -0
  94. data/vendor/curl/include/openssl/ocsp.h +484 -0
  95. data/vendor/curl/include/openssl/opensslconf.h +16 -0
  96. data/vendor/curl/include/openssl/opensslfeatures.h +153 -0
  97. data/vendor/curl/include/openssl/opensslv.h +18 -0
  98. data/vendor/curl/include/openssl/ossl_typ.h +196 -0
  99. data/vendor/curl/include/openssl/pem.h +542 -0
  100. data/vendor/curl/include/openssl/pkcs12.h +284 -0
  101. data/vendor/curl/include/openssl/pkcs7.h +523 -0
  102. data/vendor/curl/include/openssl/poly1305.h +45 -0
  103. data/vendor/curl/include/openssl/posix_time.h +54 -0
  104. data/vendor/curl/include/openssl/rand.h +118 -0
  105. data/vendor/curl/include/openssl/rc2.h +101 -0
  106. data/vendor/curl/include/openssl/rc4.h +88 -0
  107. data/vendor/curl/include/openssl/ripemd.h +107 -0
  108. data/vendor/curl/include/openssl/rsa.h +603 -0
  109. data/vendor/curl/include/openssl/safestack.h +1739 -0
  110. data/vendor/curl/include/openssl/sha.h +190 -0
  111. data/vendor/curl/include/openssl/sm3.h +49 -0
  112. data/vendor/curl/include/openssl/sm4.h +47 -0
  113. data/vendor/curl/include/openssl/srtp.h +148 -0
  114. data/vendor/curl/include/openssl/ssl.h +2336 -0
  115. data/vendor/curl/include/openssl/ssl3.h +441 -0
  116. data/vendor/curl/include/openssl/stack.h +99 -0
  117. data/vendor/curl/include/openssl/tls1.h +764 -0
  118. data/vendor/curl/include/openssl/ts.h +660 -0
  119. data/vendor/curl/include/openssl/txt_db.h +112 -0
  120. data/vendor/curl/include/openssl/ui.h +397 -0
  121. data/vendor/curl/include/openssl/x509.h +1037 -0
  122. data/vendor/curl/include/openssl/x509_vfy.h +464 -0
  123. data/vendor/curl/include/openssl/x509v3.h +1039 -0
  124. data/vendor/curl/include/zconf.h +206 -0
  125. data/vendor/curl/include/zdict.h +481 -0
  126. data/vendor/curl/include/zlib.h +1859 -0
  127. data/vendor/curl/include/zlib_name_mangling.h +8 -0
  128. data/vendor/curl/include/zstd.h +3198 -0
  129. data/vendor/curl/include/zstd_errors.h +107 -0
  130. data/vendor/curl/lib/libcurl.dll.a +0 -0
  131. data/vendor/curl/licenses/brotli/LICENSE.txt +19 -0
  132. data/vendor/curl/licenses/certdata/LICENSE.url +2 -0
  133. data/vendor/curl/licenses/libpsl/COPYING.txt +20 -0
  134. data/vendor/curl/licenses/libressl/COPYING.txt +133 -0
  135. data/vendor/curl/licenses/libssh2/COPYING.txt +43 -0
  136. data/vendor/curl/licenses/nghttp2/COPYING.txt +23 -0
  137. data/vendor/curl/licenses/nghttp3/COPYING.txt +22 -0
  138. data/vendor/curl/licenses/ngtcp2/COPYING.txt +22 -0
  139. data/vendor/curl/licenses/psl/LICENSE.txt +373 -0
  140. data/vendor/curl/licenses/trurl/COPYING.txt +22 -0
  141. data/vendor/curl/licenses/zlibng/LICENSE.md +19 -0
  142. data/vendor/curl/licenses/zstd/LICENSE.txt +30 -0
  143. metadata +205 -0
@@ -0,0 +1,1288 @@
1
+ /* $OpenBSD: evp.h,v 1.138 2025/07/02 06:36:52 tb Exp $ */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+
59
+ #ifndef HEADER_ENVELOPE_H
60
+ #define HEADER_ENVELOPE_H
61
+
62
+ #include <openssl/opensslconf.h>
63
+
64
+ #include <openssl/ossl_typ.h>
65
+
66
+ #ifndef OPENSSL_NO_BIO
67
+ #include <openssl/bio.h>
68
+ #endif
69
+
70
+ /*
71
+ #define EVP_RC2_KEY_SIZE 16
72
+ #define EVP_RC4_KEY_SIZE 16
73
+ #define EVP_BLOWFISH_KEY_SIZE 16
74
+ #define EVP_CAST5_KEY_SIZE 16
75
+ #define EVP_RC5_32_12_16_KEY_SIZE 16
76
+ */
77
+ #define EVP_MAX_MD_SIZE 64 /* longest known is SHA512 */
78
+ #define EVP_MAX_KEY_LENGTH 64
79
+ #define EVP_MAX_IV_LENGTH 16
80
+ #define EVP_MAX_BLOCK_LENGTH 32
81
+
82
+ #define PKCS5_SALT_LEN 8
83
+ /* Default PKCS#5 iteration count */
84
+ #define PKCS5_DEFAULT_ITER 2048
85
+
86
+ #include <openssl/objects.h>
87
+
88
+ #define EVP_PK_RSA 0x0001
89
+ #define EVP_PK_DSA 0x0002
90
+ #define EVP_PK_DH 0x0004
91
+ #define EVP_PK_EC 0x0008
92
+ #define EVP_PKT_SIGN 0x0010
93
+ #define EVP_PKT_ENC 0x0020
94
+ #define EVP_PKT_EXCH 0x0040
95
+ #define EVP_PKS_RSA 0x0100
96
+ #define EVP_PKS_DSA 0x0200
97
+ #define EVP_PKS_EC 0x0400
98
+ #define EVP_PKT_EXP 0x1000 /* <= 512 bit key */
99
+
100
+ #define EVP_PKEY_NONE NID_undef
101
+ #define EVP_PKEY_RSA NID_rsaEncryption
102
+ #define EVP_PKEY_RSA_PSS NID_rsassaPss
103
+ #define EVP_PKEY_RSA2 NID_rsa
104
+ #define EVP_PKEY_DSA NID_dsa
105
+ #define EVP_PKEY_DSA1 NID_dsa_2
106
+ #define EVP_PKEY_DSA2 NID_dsaWithSHA
107
+ #define EVP_PKEY_DSA3 NID_dsaWithSHA1
108
+ #define EVP_PKEY_DSA4 NID_dsaWithSHA1_2
109
+ #define EVP_PKEY_DH NID_dhKeyAgreement
110
+ #define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
111
+ #define EVP_PKEY_GOSTR01 NID_id_GostR3410_2001
112
+ #define EVP_PKEY_GOSTIMIT NID_id_Gost28147_89_MAC
113
+ #define EVP_PKEY_HMAC NID_hmac
114
+ #define EVP_PKEY_CMAC NID_cmac
115
+ #define EVP_PKEY_HKDF NID_hkdf
116
+ #define EVP_PKEY_TLS1_PRF NID_tls1_prf
117
+ #define EVP_PKEY_GOSTR12_256 NID_id_tc26_gost3410_2012_256
118
+ #define EVP_PKEY_GOSTR12_512 NID_id_tc26_gost3410_2012_512
119
+ #define EVP_PKEY_ED25519 NID_ED25519
120
+ #define EVP_PKEY_X25519 NID_X25519
121
+
122
+ #ifdef __cplusplus
123
+ extern "C" {
124
+ #endif
125
+
126
+ #define EVP_PKEY_MO_SIGN 0x0001
127
+ #define EVP_PKEY_MO_VERIFY 0x0002
128
+ #define EVP_PKEY_MO_ENCRYPT 0x0004
129
+ #define EVP_PKEY_MO_DECRYPT 0x0008
130
+
131
+ #ifndef EVP_MD
132
+ #define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single
133
+ * block */
134
+
135
+ /* DigestAlgorithmIdentifier flags... */
136
+
137
+ #define EVP_MD_FLAG_DIGALGID_MASK 0x0018
138
+
139
+ /* NULL or absent parameter accepted. Use NULL */
140
+
141
+ #define EVP_MD_FLAG_DIGALGID_NULL 0x0000
142
+
143
+ /* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */
144
+
145
+ #define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
146
+
147
+ /* Custom handling via ctrl */
148
+
149
+ #define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018
150
+
151
+ #define EVP_MD_FLAG_FIPS 0x0400 /* Note if suitable for use in FIPS mode */
152
+
153
+ /* Digest ctrls */
154
+
155
+ #define EVP_MD_CTRL_DIGALGID 0x1
156
+ #define EVP_MD_CTRL_MICALG 0x2
157
+ #define EVP_MD_CTRL_SET_KEY 0x3
158
+ #define EVP_MD_CTRL_GOST_SET_SBOX 0x4
159
+
160
+ /* Minimum Algorithm specific ctrl value */
161
+
162
+ #define EVP_MD_CTRL_ALG_CTRL 0x1000
163
+
164
+ #endif /* !EVP_MD */
165
+
166
+ /* values for EVP_MD_CTX flags */
167
+
168
+ #define EVP_MD_CTX_FLAG_ONESHOT 0x0001 /* digest update will be called
169
+ * once only */
170
+ #define EVP_MD_CTX_FLAG_CLEANED 0x0002 /* context has already been
171
+ * cleaned */
172
+ #define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data
173
+ * in EVP_MD_CTX_cleanup */
174
+ /* FIPS and pad options are ignored in 1.0.0, definitions are here
175
+ * so we don't accidentally reuse the values for other purposes.
176
+ */
177
+
178
+ #define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* Allow use of non FIPS digest
179
+ * in FIPS mode */
180
+
181
+ /* The following PAD options are also currently ignored in 1.0.0, digest
182
+ * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*()
183
+ * instead.
184
+ */
185
+ #define EVP_MD_CTX_FLAG_PAD_MASK 0xF0 /* RSA mode to use */
186
+ #define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00 /* PKCS#1 v1.5 mode */
187
+ #define EVP_MD_CTX_FLAG_PAD_PSS 0x20 /* PSS mode */
188
+
189
+ #define EVP_MD_CTX_FLAG_NO_INIT 0x0100 /* Don't initialize md_data */
190
+
191
+ /* Values for cipher flags */
192
+
193
+ /* Modes for ciphers */
194
+
195
+ #define EVP_CIPH_STREAM_CIPHER 0x0
196
+ #define EVP_CIPH_ECB_MODE 0x1
197
+ #define EVP_CIPH_CBC_MODE 0x2
198
+ #define EVP_CIPH_CFB_MODE 0x3
199
+ #define EVP_CIPH_OFB_MODE 0x4
200
+ #define EVP_CIPH_CTR_MODE 0x5
201
+ #define EVP_CIPH_GCM_MODE 0x6
202
+ #define EVP_CIPH_CCM_MODE 0x7
203
+ #define EVP_CIPH_XTS_MODE 0x10001
204
+ #define EVP_CIPH_WRAP_MODE 0x10002
205
+ #define EVP_CIPH_MODE 0xF0007
206
+ /* Set if variable length cipher */
207
+ #define EVP_CIPH_VARIABLE_LENGTH 0x8
208
+ /* Set if the iv handling should be done by the cipher itself */
209
+ #define EVP_CIPH_CUSTOM_IV 0x10
210
+ /* Set if the cipher's init() function should be called if key is NULL */
211
+ #define EVP_CIPH_ALWAYS_CALL_INIT 0x20
212
+ /* Call ctrl() to init cipher parameters */
213
+ #define EVP_CIPH_CTRL_INIT 0x40
214
+ /* Don't use standard block padding */
215
+ #define EVP_CIPH_NO_PADDING 0x100
216
+ /* cipher handles random key generation */
217
+ #define EVP_CIPH_RAND_KEY 0x200
218
+ /* cipher has its own additional copying logic */
219
+ #define EVP_CIPH_CUSTOM_COPY 0x400
220
+ /* Allow use default ASN1 get/set iv */
221
+ #define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000
222
+ /* Buffer length in bits not bytes: CFB1 mode only */
223
+ #define EVP_CIPH_FLAG_LENGTH_BITS 0x2000
224
+ /* Note if suitable for use in FIPS mode */
225
+ #define EVP_CIPH_FLAG_FIPS 0x4000
226
+ /* Allow non FIPS cipher in FIPS mode */
227
+ #define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000
228
+ /* Cipher handles any and all padding logic as well
229
+ * as finalisation.
230
+ */
231
+ #define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000
232
+ #define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
233
+
234
+ /*
235
+ * Cipher context flag to indicate that we can handle wrap mode: if allowed in
236
+ * older applications, it could overflow buffers.
237
+ */
238
+ #define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1
239
+
240
+ /* ctrl() values */
241
+
242
+ #define EVP_CTRL_INIT 0x0
243
+ #define EVP_CTRL_GET_RC2_KEY_BITS 0x2
244
+ #define EVP_CTRL_SET_RC2_KEY_BITS 0x3
245
+ #define EVP_CTRL_GET_RC5_ROUNDS 0x4
246
+ #define EVP_CTRL_SET_RC5_ROUNDS 0x5
247
+ #define EVP_CTRL_RAND_KEY 0x6
248
+ #define EVP_CTRL_PBE_PRF_NID 0x7
249
+ #define EVP_CTRL_COPY 0x8
250
+ #define EVP_CTRL_AEAD_SET_IVLEN 0x9
251
+ #define EVP_CTRL_AEAD_GET_TAG 0x10
252
+ #define EVP_CTRL_AEAD_SET_TAG 0x11
253
+ #define EVP_CTRL_AEAD_SET_IV_FIXED 0x12
254
+ #define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
255
+ #define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
256
+ #define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
257
+ #define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED
258
+ #define EVP_CTRL_GCM_IV_GEN 0x13
259
+ #define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
260
+ #define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
261
+ #define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
262
+ #define EVP_CTRL_CCM_SET_L 0x14
263
+ #define EVP_CTRL_CCM_SET_MSGLEN 0x15
264
+ /* AEAD cipher deduces payload length and returns number of bytes
265
+ * required to store MAC and eventual padding. Subsequent call to
266
+ * EVP_Cipher even appends/verifies MAC.
267
+ */
268
+ #define EVP_CTRL_AEAD_TLS1_AAD 0x16
269
+ /* Used by composite AEAD ciphers, no-op in GCM, CCM... */
270
+ #define EVP_CTRL_AEAD_SET_MAC_KEY 0x17
271
+ /* Set the GCM invocation field, decrypt only */
272
+ #define EVP_CTRL_GCM_SET_IV_INV 0x18
273
+ /* Set the S-BOX NID for GOST ciphers */
274
+ #define EVP_CTRL_GOST_SET_SBOX 0x19
275
+
276
+ /* GCM TLS constants */
277
+ /* Length of fixed part of IV derived from PRF */
278
+ #define EVP_GCM_TLS_FIXED_IV_LEN 4
279
+ /* Length of explicit part of IV part of TLS records */
280
+ #define EVP_GCM_TLS_EXPLICIT_IV_LEN 8
281
+ /* Length of tag for TLS */
282
+ #define EVP_GCM_TLS_TAG_LEN 16
283
+
284
+ /* CCM TLS constants */
285
+ /* Length of fixed part of IV derived from PRF */
286
+ #define EVP_CCM_TLS_FIXED_IV_LEN 4
287
+ /* Length of explicit part of IV part of TLS records */
288
+ #define EVP_CCM_TLS_EXPLICIT_IV_LEN 8
289
+ /* Total length of CCM IV length for TLS */
290
+ #define EVP_CCM_TLS_IV_LEN 12
291
+ /* Length of tag for TLS */
292
+ #define EVP_CCM_TLS_TAG_LEN 16
293
+ /* Length of CCM8 tag for TLS */
294
+ #define EVP_CCM8_TLS_TAG_LEN 8
295
+
296
+ /* Length of tag for TLS */
297
+ #define EVP_CHACHAPOLY_TLS_TAG_LEN 16
298
+
299
+ /* XXX - do we want to expose these? */
300
+ #if defined(LIBRESSL_INTERNAL)
301
+ #define ED25519_KEYLEN 32
302
+ #define X25519_KEYLEN 32
303
+ #endif
304
+
305
+ typedef struct evp_cipher_info_st {
306
+ const EVP_CIPHER *cipher;
307
+ unsigned char iv[EVP_MAX_IV_LENGTH];
308
+ } EVP_CIPHER_INFO;
309
+
310
+ /* Password based encryption function */
311
+ typedef int EVP_PBE_KEYGEN(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
312
+ ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de);
313
+
314
+ #ifndef OPENSSL_NO_RSA
315
+ #define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
316
+ (char *)(rsa))
317
+ #endif
318
+
319
+ #ifndef OPENSSL_NO_DSA
320
+ #define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
321
+ (char *)(dsa))
322
+ #endif
323
+
324
+ #ifndef OPENSSL_NO_DH
325
+ #define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\
326
+ (char *)(dh))
327
+ #endif
328
+
329
+ #ifndef OPENSSL_NO_EC
330
+ #define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\
331
+ (char *)(eckey))
332
+ #endif
333
+
334
+ /* Add some extra combinations */
335
+ #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
336
+ #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
337
+ #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
338
+ #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
339
+
340
+ int EVP_MD_type(const EVP_MD *md);
341
+ #define EVP_MD_nid(e) EVP_MD_type(e)
342
+ #define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e))
343
+ int EVP_MD_pkey_type(const EVP_MD *md);
344
+ int EVP_MD_size(const EVP_MD *md);
345
+ int EVP_MD_block_size(const EVP_MD *md);
346
+ unsigned long EVP_MD_flags(const EVP_MD *md);
347
+
348
+ const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
349
+ void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
350
+ EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx);
351
+ void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
352
+ #define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))
353
+ #define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e))
354
+ #define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e))
355
+
356
+ int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
357
+ #define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e))
358
+ int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
359
+ int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
360
+ int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher);
361
+ unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher);
362
+ #define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
363
+
364
+ const EVP_CIPHER * EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
365
+ int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx);
366
+ int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
367
+ int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
368
+ int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
369
+ int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
370
+ int EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx,
371
+ unsigned char *iv, size_t len);
372
+ int EVP_CIPHER_CTX_set_iv(EVP_CIPHER_CTX *ctx,
373
+ const unsigned char *iv, size_t len);
374
+ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
375
+ void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
376
+ void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
377
+ void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
378
+ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
379
+ unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx);
380
+ #define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
381
+ unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx);
382
+ #define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE)
383
+
384
+ EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len);
385
+ EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher);
386
+ void EVP_CIPHER_meth_free(EVP_CIPHER *cipher);
387
+
388
+ int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len);
389
+ int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags);
390
+ int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size);
391
+ int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
392
+ int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key,
393
+ const unsigned char *iv, int enc));
394
+ int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
395
+ int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out,
396
+ const unsigned char *in, size_t inl));
397
+ int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
398
+ int (*cleanup)(EVP_CIPHER_CTX *));
399
+ int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
400
+ int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *));
401
+ int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
402
+ int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *));
403
+ int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
404
+ int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr));
405
+
406
+ EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *engine,
407
+ const unsigned char *private_key, size_t len);
408
+ EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *engine,
409
+ const unsigned char *public_key, size_t len);
410
+ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey,
411
+ unsigned char *out_private_key, size_t *out_len);
412
+ int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey,
413
+ unsigned char *out_public_key, size_t *out_len);
414
+
415
+ #define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80)
416
+ #define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80)
417
+
418
+ #define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c)
419
+ #define EVP_SignInit(a,b) EVP_DigestInit(a,b)
420
+ #define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
421
+ #define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c)
422
+ #define EVP_VerifyInit(a,b) EVP_DigestInit(a,b)
423
+ #define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
424
+ #define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e)
425
+ #define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e)
426
+ #define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
427
+ #define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
428
+
429
+ #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md)
430
+ #define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp)
431
+ #define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp)
432
+ #define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp)
433
+ #define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)
434
+ #define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp)
435
+
436
+ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in,
437
+ unsigned int inl);
438
+
439
+ EVP_MD_CTX *EVP_MD_CTX_new(void);
440
+ void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
441
+ int EVP_MD_CTX_init(EVP_MD_CTX *ctx);
442
+ int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
443
+ EVP_MD_CTX *EVP_MD_CTX_create(void);
444
+ void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
445
+ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
446
+ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);
447
+ void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
448
+ void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
449
+ int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr);
450
+ int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
451
+
452
+ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
453
+ int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
454
+ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
455
+ int EVP_Digest(const void *data, size_t count, unsigned char *md,
456
+ unsigned int *size, const EVP_MD *type, ENGINE *impl);
457
+
458
+ int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);
459
+ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
460
+ int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
461
+
462
+ int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify);
463
+ int EVP_read_pw_string_min(char *buf, int minlen, int maxlen,
464
+ const char *prompt, int verify);
465
+ void EVP_set_pw_prompt(const char *prompt);
466
+ char *EVP_get_pw_prompt(void);
467
+
468
+ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
469
+ const unsigned char *salt, const unsigned char *data, int datal, int count,
470
+ unsigned char *key, unsigned char *iv);
471
+
472
+ void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
473
+ void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
474
+ int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);
475
+
476
+ int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
477
+ const unsigned char *key, const unsigned char *iv);
478
+ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
479
+ ENGINE *impl, const unsigned char *key, const unsigned char *iv);
480
+ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
481
+ const unsigned char *in, int inl);
482
+ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
483
+ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
484
+
485
+ int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
486
+ const unsigned char *key, const unsigned char *iv);
487
+ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
488
+ ENGINE *impl, const unsigned char *key, const unsigned char *iv);
489
+ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
490
+ const unsigned char *in, int inl);
491
+ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
492
+ int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
493
+
494
+ int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
495
+ const unsigned char *key, const unsigned char *iv, int enc);
496
+ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
497
+ ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc);
498
+ int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
499
+ const unsigned char *in, int inl);
500
+ int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
501
+ int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
502
+
503
+ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
504
+ EVP_PKEY *pkey);
505
+
506
+ int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
507
+ unsigned int siglen, EVP_PKEY *pkey);
508
+
509
+ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
510
+ const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
511
+ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen);
512
+
513
+ int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,
514
+ const unsigned char *tbs, size_t tbslen);
515
+
516
+ int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
517
+ const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
518
+ int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
519
+ size_t siglen);
520
+
521
+ int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
522
+ size_t siglen, const unsigned char *tbs, size_t tbslen);
523
+
524
+ int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
525
+ const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv);
526
+ int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
527
+
528
+ int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
529
+ unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk,
530
+ int npubk);
531
+ int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
532
+
533
+ EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
534
+ void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
535
+ void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
536
+ int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
537
+ const unsigned char *in, int inl);
538
+ void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
539
+ int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
540
+
541
+ void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
542
+ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
543
+ const unsigned char *in, int inl);
544
+ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
545
+ int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
546
+
547
+ int EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
548
+ int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
549
+ EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
550
+ void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
551
+ int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *a);
552
+ int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
553
+ int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
554
+ int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
555
+ int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
556
+
557
+ #ifndef OPENSSL_NO_BIO
558
+ const BIO_METHOD *BIO_f_md(void);
559
+ const BIO_METHOD *BIO_f_base64(void);
560
+ const BIO_METHOD *BIO_f_cipher(void);
561
+ int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
562
+ const unsigned char *i, int enc);
563
+ #endif
564
+
565
+ const EVP_MD *EVP_md_null(void);
566
+ #ifndef OPENSSL_NO_MD4
567
+ const EVP_MD *EVP_md4(void);
568
+ #endif
569
+ #ifndef OPENSSL_NO_MD5
570
+ const EVP_MD *EVP_md5(void);
571
+ const EVP_MD *EVP_md5_sha1(void);
572
+ #endif
573
+ #ifndef OPENSSL_NO_SHA
574
+ const EVP_MD *EVP_sha1(void);
575
+ #endif
576
+ #ifndef OPENSSL_NO_SHA256
577
+ const EVP_MD *EVP_sha224(void);
578
+ const EVP_MD *EVP_sha256(void);
579
+ #endif
580
+ #ifndef OPENSSL_NO_SHA512
581
+ const EVP_MD *EVP_sha384(void);
582
+ const EVP_MD *EVP_sha512(void);
583
+ const EVP_MD *EVP_sha512_224(void);
584
+ const EVP_MD *EVP_sha512_256(void);
585
+ #endif
586
+ #ifndef OPENSSL_NO_SHA3
587
+ const EVP_MD *EVP_sha3_224(void);
588
+ const EVP_MD *EVP_sha3_256(void);
589
+ const EVP_MD *EVP_sha3_384(void);
590
+ const EVP_MD *EVP_sha3_512(void);
591
+ #endif
592
+ #ifndef OPENSSL_NO_SM3
593
+ const EVP_MD *EVP_sm3(void);
594
+ #endif
595
+ #ifndef OPENSSL_NO_RIPEMD
596
+ const EVP_MD *EVP_ripemd160(void);
597
+ #endif
598
+ const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */
599
+ #ifndef OPENSSL_NO_DES
600
+ const EVP_CIPHER *EVP_des_ecb(void);
601
+ const EVP_CIPHER *EVP_des_ede(void);
602
+ const EVP_CIPHER *EVP_des_ede3(void);
603
+ const EVP_CIPHER *EVP_des_ede_ecb(void);
604
+ const EVP_CIPHER *EVP_des_ede3_ecb(void);
605
+ const EVP_CIPHER *EVP_des_cfb64(void);
606
+ # define EVP_des_cfb EVP_des_cfb64
607
+ const EVP_CIPHER *EVP_des_cfb1(void);
608
+ const EVP_CIPHER *EVP_des_cfb8(void);
609
+ const EVP_CIPHER *EVP_des_ede_cfb64(void);
610
+ # define EVP_des_ede_cfb EVP_des_ede_cfb64
611
+ const EVP_CIPHER *EVP_des_ede3_cfb64(void);
612
+ # define EVP_des_ede3_cfb EVP_des_ede3_cfb64
613
+ const EVP_CIPHER *EVP_des_ede3_cfb1(void);
614
+ const EVP_CIPHER *EVP_des_ede3_cfb8(void);
615
+ const EVP_CIPHER *EVP_des_ofb(void);
616
+ const EVP_CIPHER *EVP_des_ede_ofb(void);
617
+ const EVP_CIPHER *EVP_des_ede3_ofb(void);
618
+ const EVP_CIPHER *EVP_des_cbc(void);
619
+ const EVP_CIPHER *EVP_des_ede_cbc(void);
620
+ const EVP_CIPHER *EVP_des_ede3_cbc(void);
621
+ const EVP_CIPHER *EVP_desx_cbc(void);
622
+ #endif
623
+ #ifndef OPENSSL_NO_RC4
624
+ const EVP_CIPHER *EVP_rc4(void);
625
+ const EVP_CIPHER *EVP_rc4_40(void);
626
+ #endif
627
+ #ifndef OPENSSL_NO_IDEA
628
+ const EVP_CIPHER *EVP_idea_ecb(void);
629
+ const EVP_CIPHER *EVP_idea_cfb64(void);
630
+ # define EVP_idea_cfb EVP_idea_cfb64
631
+ const EVP_CIPHER *EVP_idea_ofb(void);
632
+ const EVP_CIPHER *EVP_idea_cbc(void);
633
+ #endif
634
+ #ifndef OPENSSL_NO_RC2
635
+ const EVP_CIPHER *EVP_rc2_ecb(void);
636
+ const EVP_CIPHER *EVP_rc2_cbc(void);
637
+ const EVP_CIPHER *EVP_rc2_40_cbc(void);
638
+ const EVP_CIPHER *EVP_rc2_64_cbc(void);
639
+ const EVP_CIPHER *EVP_rc2_cfb64(void);
640
+ # define EVP_rc2_cfb EVP_rc2_cfb64
641
+ const EVP_CIPHER *EVP_rc2_ofb(void);
642
+ #endif
643
+ #ifndef OPENSSL_NO_BF
644
+ const EVP_CIPHER *EVP_bf_ecb(void);
645
+ const EVP_CIPHER *EVP_bf_cbc(void);
646
+ const EVP_CIPHER *EVP_bf_cfb64(void);
647
+ # define EVP_bf_cfb EVP_bf_cfb64
648
+ const EVP_CIPHER *EVP_bf_ofb(void);
649
+ #endif
650
+ #ifndef OPENSSL_NO_CAST
651
+ const EVP_CIPHER *EVP_cast5_ecb(void);
652
+ const EVP_CIPHER *EVP_cast5_cbc(void);
653
+ const EVP_CIPHER *EVP_cast5_cfb64(void);
654
+ # define EVP_cast5_cfb EVP_cast5_cfb64
655
+ const EVP_CIPHER *EVP_cast5_ofb(void);
656
+ #endif
657
+ #ifndef OPENSSL_NO_AES
658
+ const EVP_CIPHER *EVP_aes_128_ecb(void);
659
+ const EVP_CIPHER *EVP_aes_128_cbc(void);
660
+ const EVP_CIPHER *EVP_aes_128_cfb1(void);
661
+ const EVP_CIPHER *EVP_aes_128_cfb8(void);
662
+ const EVP_CIPHER *EVP_aes_128_cfb128(void);
663
+ # define EVP_aes_128_cfb EVP_aes_128_cfb128
664
+ const EVP_CIPHER *EVP_aes_128_ofb(void);
665
+ const EVP_CIPHER *EVP_aes_128_ctr(void);
666
+ const EVP_CIPHER *EVP_aes_128_ccm(void);
667
+ const EVP_CIPHER *EVP_aes_128_gcm(void);
668
+ const EVP_CIPHER *EVP_aes_128_wrap(void);
669
+ const EVP_CIPHER *EVP_aes_128_xts(void);
670
+ const EVP_CIPHER *EVP_aes_192_ecb(void);
671
+ const EVP_CIPHER *EVP_aes_192_cbc(void);
672
+ const EVP_CIPHER *EVP_aes_192_cfb1(void);
673
+ const EVP_CIPHER *EVP_aes_192_cfb8(void);
674
+ const EVP_CIPHER *EVP_aes_192_cfb128(void);
675
+ # define EVP_aes_192_cfb EVP_aes_192_cfb128
676
+ const EVP_CIPHER *EVP_aes_192_ofb(void);
677
+ const EVP_CIPHER *EVP_aes_192_ctr(void);
678
+ const EVP_CIPHER *EVP_aes_192_ccm(void);
679
+ const EVP_CIPHER *EVP_aes_192_gcm(void);
680
+ const EVP_CIPHER *EVP_aes_192_wrap(void);
681
+ const EVP_CIPHER *EVP_aes_256_ecb(void);
682
+ const EVP_CIPHER *EVP_aes_256_cbc(void);
683
+ const EVP_CIPHER *EVP_aes_256_cfb1(void);
684
+ const EVP_CIPHER *EVP_aes_256_cfb8(void);
685
+ const EVP_CIPHER *EVP_aes_256_cfb128(void);
686
+ # define EVP_aes_256_cfb EVP_aes_256_cfb128
687
+ const EVP_CIPHER *EVP_aes_256_ofb(void);
688
+ const EVP_CIPHER *EVP_aes_256_ctr(void);
689
+ const EVP_CIPHER *EVP_aes_256_ccm(void);
690
+ const EVP_CIPHER *EVP_aes_256_gcm(void);
691
+ const EVP_CIPHER *EVP_aes_256_wrap(void);
692
+ const EVP_CIPHER *EVP_aes_256_xts(void);
693
+ #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
694
+ const EVP_CIPHER *EVP_chacha20_poly1305(void);
695
+ #endif
696
+ #endif
697
+ #ifndef OPENSSL_NO_CAMELLIA
698
+ const EVP_CIPHER *EVP_camellia_128_ecb(void);
699
+ const EVP_CIPHER *EVP_camellia_128_cbc(void);
700
+ const EVP_CIPHER *EVP_camellia_128_cfb1(void);
701
+ const EVP_CIPHER *EVP_camellia_128_cfb8(void);
702
+ const EVP_CIPHER *EVP_camellia_128_cfb128(void);
703
+ # define EVP_camellia_128_cfb EVP_camellia_128_cfb128
704
+ const EVP_CIPHER *EVP_camellia_128_ofb(void);
705
+ const EVP_CIPHER *EVP_camellia_192_ecb(void);
706
+ const EVP_CIPHER *EVP_camellia_192_cbc(void);
707
+ const EVP_CIPHER *EVP_camellia_192_cfb1(void);
708
+ const EVP_CIPHER *EVP_camellia_192_cfb8(void);
709
+ const EVP_CIPHER *EVP_camellia_192_cfb128(void);
710
+ # define EVP_camellia_192_cfb EVP_camellia_192_cfb128
711
+ const EVP_CIPHER *EVP_camellia_192_ofb(void);
712
+ const EVP_CIPHER *EVP_camellia_256_ecb(void);
713
+ const EVP_CIPHER *EVP_camellia_256_cbc(void);
714
+ const EVP_CIPHER *EVP_camellia_256_cfb1(void);
715
+ const EVP_CIPHER *EVP_camellia_256_cfb8(void);
716
+ const EVP_CIPHER *EVP_camellia_256_cfb128(void);
717
+ # define EVP_camellia_256_cfb EVP_camellia_256_cfb128
718
+ const EVP_CIPHER *EVP_camellia_256_ofb(void);
719
+ #endif
720
+
721
+ #ifndef OPENSSL_NO_CHACHA
722
+ const EVP_CIPHER *EVP_chacha20(void);
723
+ #endif
724
+
725
+ #ifndef OPENSSL_NO_SM4
726
+ const EVP_CIPHER *EVP_sm4_ecb(void);
727
+ const EVP_CIPHER *EVP_sm4_cbc(void);
728
+ const EVP_CIPHER *EVP_sm4_cfb128(void);
729
+ #define EVP_sm4_cfb EVP_sm4_cfb128
730
+ const EVP_CIPHER *EVP_sm4_ofb(void);
731
+ const EVP_CIPHER *EVP_sm4_ctr(void);
732
+ #endif
733
+
734
+ void OPENSSL_add_all_algorithms_noconf(void);
735
+ void OPENSSL_add_all_algorithms_conf(void);
736
+
737
+ #ifdef OPENSSL_LOAD_CONF
738
+ #define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf()
739
+ #else
740
+ #define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf()
741
+ #endif
742
+
743
+ void OpenSSL_add_all_ciphers(void);
744
+ void OpenSSL_add_all_digests(void);
745
+
746
+ #define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms()
747
+ #define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers()
748
+ #define SSLeay_add_all_digests() OpenSSL_add_all_digests()
749
+
750
+ const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
751
+ const EVP_MD *EVP_get_digestbyname(const char *name);
752
+ void EVP_cleanup(void);
753
+
754
+ void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph, const char *from,
755
+ const char *to, void *x), void *arg);
756
+ void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph,
757
+ const char *from, const char *to, void *x), void *arg);
758
+
759
+ void EVP_MD_do_all(void (*fn)(const EVP_MD *ciph, const char *from,
760
+ const char *to, void *x), void *arg);
761
+ void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *ciph, const char *from,
762
+ const char *to, void *x), void *arg);
763
+
764
+ int EVP_PKEY_decrypt_old(unsigned char *dec_key, const unsigned char *enc_key,
765
+ int enc_key_len, EVP_PKEY *private_key);
766
+ int EVP_PKEY_encrypt_old(unsigned char *enc_key, const unsigned char *key,
767
+ int key_len, EVP_PKEY *pub_key);
768
+ int EVP_PKEY_type(int type);
769
+ int EVP_PKEY_id(const EVP_PKEY *pkey);
770
+ int EVP_PKEY_base_id(const EVP_PKEY *pkey);
771
+ int EVP_PKEY_bits(const EVP_PKEY *pkey);
772
+ int EVP_PKEY_security_bits(const EVP_PKEY *pkey);
773
+ int EVP_PKEY_size(const EVP_PKEY *pkey);
774
+ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
775
+ int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);
776
+ int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
777
+ void *EVP_PKEY_get0(const EVP_PKEY *pkey);
778
+ const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
779
+
780
+ #ifndef OPENSSL_NO_RSA
781
+ RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
782
+ RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey);
783
+ int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
784
+ #endif
785
+ #ifndef OPENSSL_NO_DSA
786
+ DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
787
+ DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey);
788
+ int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
789
+ #endif
790
+ #ifndef OPENSSL_NO_DH
791
+ DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
792
+ DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey);
793
+ int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
794
+ #endif
795
+ #ifndef OPENSSL_NO_EC
796
+ EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
797
+ EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey);
798
+ int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
799
+ #endif
800
+
801
+ EVP_PKEY *EVP_PKEY_new(void);
802
+ void EVP_PKEY_free(EVP_PKEY *pkey);
803
+ int EVP_PKEY_up_ref(EVP_PKEY *pkey);
804
+
805
+ EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
806
+ long length);
807
+ int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
808
+
809
+ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
810
+ long length);
811
+ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
812
+ long length);
813
+ int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
814
+
815
+ int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
816
+ int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
817
+ int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode);
818
+ int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
819
+
820
+ int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
821
+
822
+ int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent,
823
+ ASN1_PCTX *pctx);
824
+ int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent,
825
+ ASN1_PCTX *pctx);
826
+ int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent,
827
+ ASN1_PCTX *pctx);
828
+
829
+ int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);
830
+
831
+ int EVP_CIPHER_type(const EVP_CIPHER *ctx);
832
+
833
+ /* PKCS5 password based encryption */
834
+ int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
835
+ const unsigned char *salt, int saltlen, int iter, int keylen,
836
+ unsigned char *out);
837
+ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt,
838
+ int saltlen, int iter, const EVP_MD *digest, int keylen,
839
+ unsigned char *out);
840
+
841
+ #define ASN1_PKEY_ALIAS 0x1
842
+ #define ASN1_PKEY_DYNAMIC 0x2
843
+ #define ASN1_PKEY_SIGPARAM_NULL 0x4
844
+
845
+ #define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1
846
+ #define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2
847
+ #define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3
848
+ #define ASN1_PKEY_CTRL_CMS_SIGN 0x5
849
+ #define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7
850
+ #define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8
851
+
852
+ int EVP_PKEY_asn1_get_count(void);
853
+ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
854
+ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
855
+ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
856
+ const char *str, int len);
857
+ int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, int *ppkey_flags,
858
+ const char **pinfo, const char **ppem_str,
859
+ const EVP_PKEY_ASN1_METHOD *ameth);
860
+
861
+ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
862
+
863
+ #define EVP_PKEY_OP_UNDEFINED 0
864
+ #define EVP_PKEY_OP_PARAMGEN (1<<1)
865
+ #define EVP_PKEY_OP_KEYGEN (1<<2)
866
+ #define EVP_PKEY_OP_SIGN (1<<3)
867
+ #define EVP_PKEY_OP_VERIFY (1<<4)
868
+ #define EVP_PKEY_OP_VERIFYRECOVER (1<<5)
869
+ #define EVP_PKEY_OP_SIGNCTX (1<<6)
870
+ #define EVP_PKEY_OP_VERIFYCTX (1<<7)
871
+ #define EVP_PKEY_OP_ENCRYPT (1<<8)
872
+ #define EVP_PKEY_OP_DECRYPT (1<<9)
873
+ #define EVP_PKEY_OP_DERIVE (1<<10)
874
+
875
+ #define EVP_PKEY_OP_TYPE_SIG \
876
+ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \
877
+ | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)
878
+
879
+ #define EVP_PKEY_OP_TYPE_CRYPT \
880
+ (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)
881
+
882
+ #define EVP_PKEY_OP_TYPE_NOGEN \
883
+ (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE)
884
+
885
+ #define EVP_PKEY_OP_TYPE_GEN \
886
+ (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)
887
+
888
+ #define EVP_PKEY_CTX_set_signature_md(ctx, md) \
889
+ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \
890
+ EVP_PKEY_CTRL_MD, 0, (void *)md)
891
+
892
+ #define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \
893
+ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \
894
+ EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd))
895
+
896
+ #define EVP_PKEY_CTRL_MD 1
897
+ #define EVP_PKEY_CTRL_PEER_KEY 2
898
+
899
+ #define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3
900
+ #define EVP_PKEY_CTRL_PKCS7_DECRYPT 4
901
+
902
+ #define EVP_PKEY_CTRL_PKCS7_SIGN 5
903
+
904
+ #define EVP_PKEY_CTRL_SET_MAC_KEY 6
905
+
906
+ #define EVP_PKEY_CTRL_DIGESTINIT 7
907
+
908
+ /* Used by GOST key encryption in TLS */
909
+ #define EVP_PKEY_CTRL_SET_IV 8
910
+
911
+ #define EVP_PKEY_CTRL_CMS_ENCRYPT 9
912
+ #define EVP_PKEY_CTRL_CMS_DECRYPT 10
913
+ #define EVP_PKEY_CTRL_CMS_SIGN 11
914
+
915
+ #define EVP_PKEY_CTRL_CIPHER 12
916
+
917
+ #define EVP_PKEY_CTRL_GET_MD 13
918
+
919
+ #define EVP_PKEY_ALG_CTRL 0x1000
920
+
921
+
922
+ #define EVP_PKEY_FLAG_AUTOARGLEN 2
923
+ /* Method handles all operations: don't assume any digest related
924
+ * defaults.
925
+ */
926
+ #define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4
927
+
928
+ EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
929
+ EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
930
+ EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
931
+ void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
932
+
933
+ int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd,
934
+ int p1, void *p2);
935
+ int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
936
+ const char *value);
937
+
938
+ int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);
939
+ void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);
940
+
941
+ EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key,
942
+ int keylen);
943
+ EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv,
944
+ size_t len, const EVP_CIPHER *cipher);
945
+
946
+ void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);
947
+ void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx);
948
+ EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
949
+
950
+ EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);
951
+
952
+ void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
953
+ void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
954
+
955
+ int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
956
+ int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
957
+ const unsigned char *tbs, size_t tbslen);
958
+ int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
959
+ int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,
960
+ const unsigned char *tbs, size_t tbslen);
961
+ int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
962
+ int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout,
963
+ size_t *routlen, const unsigned char *sig, size_t siglen);
964
+ int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
965
+ int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
966
+ const unsigned char *in, size_t inlen);
967
+ int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
968
+ int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
969
+ const unsigned char *in, size_t inlen);
970
+
971
+ int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
972
+ int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
973
+ int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
974
+
975
+ typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
976
+
977
+ int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
978
+ int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
979
+ int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
980
+ int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
981
+
982
+ void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
983
+ EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
984
+
985
+ int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
986
+
987
+ /* Authenticated Encryption with Additional Data.
988
+ *
989
+ * AEAD couples confidentiality and integrity in a single primtive. AEAD
990
+ * algorithms take a key and then can seal and open individual messages. Each
991
+ * message has a unique, per-message nonce and, optionally, additional data
992
+ * which is authenticated but not included in the output. */
993
+
994
+ typedef struct evp_aead_st EVP_AEAD;
995
+
996
+ #ifndef OPENSSL_NO_AES
997
+ /* EVP_aes_128_gcm is AES-128 in Galois Counter Mode. */
998
+ const EVP_AEAD *EVP_aead_aes_128_gcm(void);
999
+ /* EVP_aes_256_gcm is AES-256 in Galois Counter Mode. */
1000
+ const EVP_AEAD *EVP_aead_aes_256_gcm(void);
1001
+ #endif
1002
+
1003
+ #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1004
+ /* EVP_aead_chacha20_poly1305 is ChaCha20 with a Poly1305 authenticator. */
1005
+ const EVP_AEAD *EVP_aead_chacha20_poly1305(void);
1006
+ /* EVP_aead_xchacha20_poly1305 is XChaCha20 with a Poly1305 authenticator. */
1007
+ const EVP_AEAD *EVP_aead_xchacha20_poly1305(void);
1008
+ #endif
1009
+
1010
+ /* EVP_AEAD_key_length returns the length of the keys used. */
1011
+ size_t EVP_AEAD_key_length(const EVP_AEAD *aead);
1012
+
1013
+ /* EVP_AEAD_nonce_length returns the length of the per-message nonce. */
1014
+ size_t EVP_AEAD_nonce_length(const EVP_AEAD *aead);
1015
+
1016
+ /* EVP_AEAD_max_overhead returns the maximum number of additional bytes added
1017
+ * by the act of sealing data with the AEAD. */
1018
+ size_t EVP_AEAD_max_overhead(const EVP_AEAD *aead);
1019
+
1020
+ /* EVP_AEAD_max_tag_len returns the maximum tag length when using this AEAD.
1021
+ * This * is the largest value that can be passed as a tag length to
1022
+ * EVP_AEAD_CTX_init. */
1023
+ size_t EVP_AEAD_max_tag_len(const EVP_AEAD *aead);
1024
+
1025
+ /* An EVP_AEAD_CTX represents an AEAD algorithm configured with a specific key
1026
+ * and message-independent IV. */
1027
+ typedef struct evp_aead_ctx_st EVP_AEAD_CTX;
1028
+
1029
+ /* EVP_AEAD_MAX_TAG_LENGTH is the maximum tag length used by any AEAD
1030
+ * defined in this header. */
1031
+ #define EVP_AEAD_MAX_TAG_LENGTH 16
1032
+
1033
+ /* EVP_AEAD_DEFAULT_TAG_LENGTH is a magic value that can be passed to
1034
+ * EVP_AEAD_CTX_init to indicate that the default tag length for an AEAD
1035
+ * should be used. */
1036
+ #define EVP_AEAD_DEFAULT_TAG_LENGTH 0
1037
+
1038
+ /* EVP_AEAD_CTX_new allocates a new context for use with EVP_AEAD_CTX_init.
1039
+ * It can be cleaned up for reuse with EVP_AEAD_CTX_cleanup and must be freed
1040
+ * with EVP_AEAD_CTX_free. */
1041
+ EVP_AEAD_CTX *EVP_AEAD_CTX_new(void);
1042
+
1043
+ /* EVP_AEAD_CTX_free releases all memory owned by the context. */
1044
+ void EVP_AEAD_CTX_free(EVP_AEAD_CTX *ctx);
1045
+
1046
+ /* EVP_AEAD_CTX_init initializes the context for the given AEAD algorithm.
1047
+ * The implementation argument may be NULL to choose the default implementation.
1048
+ * Authentication tags may be truncated by passing a tag length. A tag length
1049
+ * of zero indicates the default tag length should be used. */
1050
+ int EVP_AEAD_CTX_init(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
1051
+ const unsigned char *key, size_t key_len, size_t tag_len, ENGINE *impl);
1052
+
1053
+ /* EVP_AEAD_CTX_cleanup frees any data allocated for this context. */
1054
+ void EVP_AEAD_CTX_cleanup(EVP_AEAD_CTX *ctx);
1055
+
1056
+ /* EVP_AEAD_CTX_seal encrypts and authenticates the input and authenticates
1057
+ * any additional data (AD), the result being written as output. One is
1058
+ * returned on success, otherwise zero.
1059
+ *
1060
+ * This function may be called (with the same EVP_AEAD_CTX) concurrently with
1061
+ * itself or EVP_AEAD_CTX_open.
1062
+ *
1063
+ * At most max_out_len bytes are written as output and, in order to ensure
1064
+ * success, this value should be the length of the input plus the result of
1065
+ * EVP_AEAD_overhead. On successful return, out_len is set to the actual
1066
+ * number of bytes written.
1067
+ *
1068
+ * The length of the nonce is must be equal to the result of
1069
+ * EVP_AEAD_nonce_length for this AEAD.
1070
+ *
1071
+ * EVP_AEAD_CTX_seal never results in a partial output. If max_out_len is
1072
+ * insufficient, zero will be returned and out_len will be set to zero.
1073
+ *
1074
+ * If the input and output are aliased then out must be <= in. */
1075
+ int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, unsigned char *out,
1076
+ size_t *out_len, size_t max_out_len, const unsigned char *nonce,
1077
+ size_t nonce_len, const unsigned char *in, size_t in_len,
1078
+ const unsigned char *ad, size_t ad_len);
1079
+
1080
+ /* EVP_AEAD_CTX_open authenticates the input and additional data, decrypting
1081
+ * the input and writing it as output. One is returned on success, otherwise
1082
+ * zero.
1083
+ *
1084
+ * This function may be called (with the same EVP_AEAD_CTX) concurrently with
1085
+ * itself or EVP_AEAD_CTX_seal.
1086
+ *
1087
+ * At most the number of input bytes are written as output. In order to ensure
1088
+ * success, max_out_len should be at least the same as the input length. On
1089
+ * successful return out_len is set to the actual number of bytes written.
1090
+ *
1091
+ * The length of nonce must be equal to the result of EVP_AEAD_nonce_length
1092
+ * for this AEAD.
1093
+ *
1094
+ * EVP_AEAD_CTX_open never results in a partial output. If max_out_len is
1095
+ * insufficient, zero will be returned and out_len will be set to zero.
1096
+ *
1097
+ * If the input and output are aliased then out must be <= in. */
1098
+ int EVP_AEAD_CTX_open(const EVP_AEAD_CTX *ctx, unsigned char *out,
1099
+ size_t *out_len, size_t max_out_len, const unsigned char *nonce,
1100
+ size_t nonce_len, const unsigned char *in, size_t in_len,
1101
+ const unsigned char *ad, size_t ad_len);
1102
+
1103
+ void ERR_load_EVP_strings(void);
1104
+
1105
+ /* Error codes for the EVP functions. */
1106
+
1107
+ /* Function codes. */
1108
+ #define EVP_F_AEAD_AES_GCM_INIT 187
1109
+ #define EVP_F_AEAD_AES_GCM_OPEN 188
1110
+ #define EVP_F_AEAD_AES_GCM_SEAL 189
1111
+ #define EVP_F_AEAD_CHACHA20_POLY1305_INIT 192
1112
+ #define EVP_F_AEAD_CHACHA20_POLY1305_OPEN 193
1113
+ #define EVP_F_AEAD_CHACHA20_POLY1305_SEAL 194
1114
+ #define EVP_F_AEAD_CTX_OPEN 185
1115
+ #define EVP_F_AEAD_CTX_SEAL 186
1116
+ #define EVP_F_AESNI_INIT_KEY 165
1117
+ #define EVP_F_AESNI_XTS_CIPHER 176
1118
+ #define EVP_F_AES_INIT_KEY 133
1119
+ #define EVP_F_AES_XTS 172
1120
+ #define EVP_F_AES_XTS_CIPHER 175
1121
+ #define EVP_F_ALG_MODULE_INIT 177
1122
+ #define EVP_F_CAMELLIA_INIT_KEY 159
1123
+ #define EVP_F_CMAC_INIT 173
1124
+ #define EVP_F_D2I_PKEY 100
1125
+ #define EVP_F_DO_SIGVER_INIT 161
1126
+ #define EVP_F_DSAPKEY2PKCS8 134
1127
+ #define EVP_F_DSA_PKEY2PKCS8 135
1128
+ #define EVP_F_ECDSA_PKEY2PKCS8 129
1129
+ #define EVP_F_ECKEY_PKEY2PKCS8 132
1130
+ #define EVP_F_EVP_AEAD_CTX_INIT 180
1131
+ #define EVP_F_EVP_AEAD_CTX_OPEN 190
1132
+ #define EVP_F_EVP_AEAD_CTX_SEAL 191
1133
+ #define EVP_F_EVP_BYTESTOKEY 200
1134
+ #define EVP_F_EVP_CIPHERINIT_EX 123
1135
+ #define EVP_F_EVP_CIPHER_CTX_COPY 163
1136
+ #define EVP_F_EVP_CIPHER_CTX_CTRL 124
1137
+ #define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122
1138
+ #define EVP_F_EVP_CIPHER_GET_ASN1_IV 201
1139
+ #define EVP_F_EVP_CIPHER_SET_ASN1_IV 202
1140
+ #define EVP_F_EVP_DECRYPTFINAL_EX 101
1141
+ #define EVP_F_EVP_DECRYPTUPDATE 199
1142
+ #define EVP_F_EVP_DIGESTFINAL_EX 196
1143
+ #define EVP_F_EVP_DIGESTINIT_EX 128
1144
+ #define EVP_F_EVP_ENCRYPTFINAL_EX 127
1145
+ #define EVP_F_EVP_ENCRYPTUPDATE 198
1146
+ #define EVP_F_EVP_MD_CTX_COPY_EX 110
1147
+ #define EVP_F_EVP_MD_CTX_CTRL 195
1148
+ #define EVP_F_EVP_MD_SIZE 162
1149
+ #define EVP_F_EVP_OPENINIT 102
1150
+ #define EVP_F_EVP_PBE_ALG_ADD 115
1151
+ #define EVP_F_EVP_PBE_ALG_ADD_TYPE 160
1152
+ #define EVP_F_EVP_PBE_CIPHERINIT 116
1153
+ #define EVP_F_EVP_PKCS82PKEY 111
1154
+ #define EVP_F_EVP_PKCS82PKEY_BROKEN 136
1155
+ #define EVP_F_EVP_PKEY2PKCS8_BROKEN 113
1156
+ #define EVP_F_EVP_PKEY_COPY_PARAMETERS 103
1157
+ #define EVP_F_EVP_PKEY_CTX_CTRL 137
1158
+ #define EVP_F_EVP_PKEY_CTX_CTRL_STR 150
1159
+ #define EVP_F_EVP_PKEY_CTX_DUP 156
1160
+ #define EVP_F_EVP_PKEY_DECRYPT 104
1161
+ #define EVP_F_EVP_PKEY_DECRYPT_INIT 138
1162
+ #define EVP_F_EVP_PKEY_DECRYPT_OLD 151
1163
+ #define EVP_F_EVP_PKEY_DERIVE 153
1164
+ #define EVP_F_EVP_PKEY_DERIVE_INIT 154
1165
+ #define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155
1166
+ #define EVP_F_EVP_PKEY_ENCRYPT 105
1167
+ #define EVP_F_EVP_PKEY_ENCRYPT_INIT 139
1168
+ #define EVP_F_EVP_PKEY_ENCRYPT_OLD 152
1169
+ #define EVP_F_EVP_PKEY_GET1_DH 119
1170
+ #define EVP_F_EVP_PKEY_GET1_DSA 120
1171
+ #define EVP_F_EVP_PKEY_GET1_ECDSA 130
1172
+ #define EVP_F_EVP_PKEY_GET1_EC_KEY 131
1173
+ #define EVP_F_EVP_PKEY_GET1_RSA 121
1174
+ #define EVP_F_EVP_PKEY_KEYGEN 146
1175
+ #define EVP_F_EVP_PKEY_KEYGEN_INIT 147
1176
+ #define EVP_F_EVP_PKEY_NEW 106
1177
+ #define EVP_F_EVP_PKEY_PARAMGEN 148
1178
+ #define EVP_F_EVP_PKEY_PARAMGEN_INIT 149
1179
+ #define EVP_F_EVP_PKEY_SIGN 140
1180
+ #define EVP_F_EVP_PKEY_SIGN_INIT 141
1181
+ #define EVP_F_EVP_PKEY_VERIFY 142
1182
+ #define EVP_F_EVP_PKEY_VERIFY_INIT 143
1183
+ #define EVP_F_EVP_PKEY_VERIFY_RECOVER 144
1184
+ #define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145
1185
+ #define EVP_F_EVP_RIJNDAEL 126
1186
+ #define EVP_F_EVP_SIGNFINAL 107
1187
+ #define EVP_F_EVP_VERIFYFINAL 108
1188
+ #define EVP_F_FIPS_CIPHERINIT 166
1189
+ #define EVP_F_FIPS_CIPHER_CTX_COPY 170
1190
+ #define EVP_F_FIPS_CIPHER_CTX_CTRL 167
1191
+ #define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171
1192
+ #define EVP_F_FIPS_DIGESTINIT 168
1193
+ #define EVP_F_FIPS_MD_CTX_COPY 169
1194
+ #define EVP_F_HMAC_INIT_EX 174
1195
+ #define EVP_F_INT_CTX_NEW 157
1196
+ #define EVP_F_PKCS5_PBE_KEYIVGEN 117
1197
+ #define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118
1198
+ #define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164
1199
+ #define EVP_F_PKCS8_SET_BROKEN 112
1200
+ #define EVP_F_PKEY_SET_TYPE 158
1201
+ #define EVP_F_RC2_GET_ASN1_TYPE_AND_IV 197
1202
+ #define EVP_F_RC2_MAGIC_TO_METH 109
1203
+ #define EVP_F_RC5_CTRL 125
1204
+
1205
+ /* Reason codes. */
1206
+ #define EVP_R_AES_IV_SETUP_FAILED 162
1207
+ #define EVP_R_AES_KEY_SETUP_FAILED 143
1208
+ #define EVP_R_ASN1_LIB 140
1209
+ #define EVP_R_BAD_BLOCK_LENGTH 136
1210
+ #define EVP_R_BAD_DECRYPT 100
1211
+ #define EVP_R_BAD_KEY_LENGTH 137
1212
+ #define EVP_R_BN_DECODE_ERROR 112
1213
+ #define EVP_R_BN_PUBKEY_ERROR 113
1214
+ #define EVP_R_BUFFER_TOO_SMALL 155
1215
+ #define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157
1216
+ #define EVP_R_CIPHER_PARAMETER_ERROR 122
1217
+ #define EVP_R_COMMAND_NOT_SUPPORTED 147
1218
+ #define EVP_R_CTRL_NOT_IMPLEMENTED 132
1219
+ #define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133
1220
+ #define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138
1221
+ #define EVP_R_DECODE_ERROR 114
1222
+ #define EVP_R_DIFFERENT_KEY_TYPES 101
1223
+ #define EVP_R_DIFFERENT_PARAMETERS 153
1224
+ #define EVP_R_DISABLED_FOR_FIPS 163
1225
+ #define EVP_R_ENCODE_ERROR 115
1226
+ #define EVP_R_ERROR_LOADING_SECTION 165
1227
+ #define EVP_R_ERROR_SETTING_FIPS_MODE 166
1228
+ #define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119
1229
+ #define EVP_R_EXPECTING_AN_HMAC_KEY 174
1230
+ #define EVP_R_EXPECTING_AN_RSA_KEY 127
1231
+ #define EVP_R_EXPECTING_A_DH_KEY 128
1232
+ #define EVP_R_EXPECTING_A_DSA_KEY 129
1233
+ #define EVP_R_EXPECTING_A_ECDSA_KEY 141
1234
+ #define EVP_R_EXPECTING_A_EC_KEY 142
1235
+ #define EVP_R_FIPS_MODE_NOT_SUPPORTED 167
1236
+ #define EVP_R_GET_RAW_KEY_FAILED 182
1237
+ #define EVP_R_INITIALIZATION_ERROR 134
1238
+ #define EVP_R_INPUT_NOT_INITIALIZED 111
1239
+ #define EVP_R_INVALID_DIGEST 152
1240
+ #define EVP_R_INVALID_FIPS_MODE 168
1241
+ #define EVP_R_INVALID_IV_LENGTH 194
1242
+ #define EVP_R_INVALID_KEY_LENGTH 130
1243
+ #define EVP_R_INVALID_OPERATION 148
1244
+ #define EVP_R_IV_TOO_LARGE 102
1245
+ #define EVP_R_KEYGEN_FAILURE 120
1246
+ #define EVP_R_KEY_SETUP_FAILED 180
1247
+ #define EVP_R_MESSAGE_DIGEST_IS_NULL 159
1248
+ #define EVP_R_METHOD_NOT_SUPPORTED 144
1249
+ #define EVP_R_MISSING_PARAMETERS 103
1250
+ #define EVP_R_NO_CIPHER_SET 131
1251
+ #define EVP_R_NO_DEFAULT_DIGEST 158
1252
+ #define EVP_R_NO_DIGEST_SET 139
1253
+ #define EVP_R_NO_DSA_PARAMETERS 116
1254
+ #define EVP_R_NO_KEY_SET 154
1255
+ #define EVP_R_NO_OPERATION_SET 149
1256
+ #define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104
1257
+ #define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105
1258
+ #define EVP_R_ONLY_ONESHOT_SUPPORTED 177
1259
+ #define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150
1260
+ #define EVP_R_OPERATON_NOT_INITIALIZED 151
1261
+ #define EVP_R_OUTPUT_ALIASES_INPUT 172
1262
+ #define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117
1263
+ #define EVP_R_PRIVATE_KEY_DECODE_ERROR 145
1264
+ #define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146
1265
+ #define EVP_R_PUBLIC_KEY_NOT_RSA 106
1266
+ #define EVP_R_TAG_TOO_LARGE 171
1267
+ #define EVP_R_TOO_LARGE 164
1268
+ #define EVP_R_UNKNOWN_CIPHER 160
1269
+ #define EVP_R_UNKNOWN_DIGEST 161
1270
+ #define EVP_R_UNKNOWN_OPTION 169
1271
+ #define EVP_R_UNKNOWN_PBE_ALGORITHM 121
1272
+ #define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135
1273
+ #define EVP_R_UNSUPPORTED_ALGORITHM 156
1274
+ #define EVP_R_UNSUPPORTED_CIPHER 107
1275
+ #define EVP_R_UNSUPPORTED_KEYLENGTH 123
1276
+ #define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124
1277
+ #define EVP_R_UNSUPPORTED_KEY_SIZE 108
1278
+ #define EVP_R_UNSUPPORTED_PRF 125
1279
+ #define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118
1280
+ #define EVP_R_WRAP_MODE_NOT_ALLOWED 170
1281
+ #define EVP_R_UNSUPPORTED_SALT_TYPE 126
1282
+ #define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109
1283
+ #define EVP_R_WRONG_PUBLIC_KEY_TYPE 110
1284
+
1285
+ #ifdef __cplusplus
1286
+ }
1287
+ #endif
1288
+ #endif