1 /** 2 * Bindings for `<openssl/evp.h>` 3 * 4 * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. 5 * 6 * Licensed under the Apache License 2.0 (the "License"). You may not use 7 * this file except in compliance with the License. You can obtain a copy 8 * in the file LICENSE in the source distribution or at 9 * https://www.openssl.org/source/license.html 10 */ 11 module deimos.openssl.evp; 12 13 import deimos.openssl._d_util; 14 15 import deimos.openssl.x509; // Needed for X509_ATTRIBUTE. 16 17 //#ifdef OPENSSL_ALGORITHM_DEFINES 18 public import deimos.openssl.opensslconf; 19 //#else 20 //# define OPENSSL_ALGORITHM_DEFINES 21 //public import deimos.openssl.opensslconf; 22 //# undef OPENSSL_ALGORITHM_DEFINES 23 //#endif 24 25 public import deimos.openssl.types; 26 27 public import deimos.openssl.symhacks; 28 29 version(OPENSSL_NO_BIO) {} else { 30 public import deimos.openssl.bio; 31 } 32 33 /* 34 enum EVP_RC2_KEY_SIZE = 16; 35 enum EVP_RC4_KEY_SIZE = 16; 36 enum EVP_BLOWFISH_KEY_SIZE = 16; 37 enum EVP_CAST5_KEY_SIZE = 16; 38 enum EVP_RC5_32_12_16_KEY_SIZE = 16; 39 */ 40 enum EVP_MAX_MD_SIZE = 64; /* longest known is SHA512 */ 41 enum EVP_MAX_KEY_LENGTH = 64; 42 enum EVP_MAX_IV_LENGTH = 16; 43 enum EVP_MAX_BLOCK_LENGTH = 32; 44 45 enum PKCS5_SALT_LEN = 8; 46 /* Default PKCS#5 iteration count */ 47 enum PKCS5_DEFAULT_ITER = 2048; 48 49 public import deimos.openssl.objects; 50 51 enum EVP_PK_RSA = 0x0001; 52 enum EVP_PK_DSA = 0x0002; 53 enum EVP_PK_DH = 0x0004; 54 enum EVP_PK_EC = 0x0008; 55 enum EVP_PKT_SIGN = 0x0010; 56 enum EVP_PKT_ENC = 0x0020; 57 enum EVP_PKT_EXCH = 0x0040; 58 enum EVP_PKS_RSA = 0x0100; 59 enum EVP_PKS_DSA = 0x0200; 60 enum EVP_PKS_EC = 0x0400; 61 enum EVP_PKT_EXP = 0x1000; /* <= 512 bit key */ 62 63 alias EVP_PKEY_NONE = NID_undef; 64 alias EVP_PKEY_RSA = NID_rsaEncryption; 65 alias EVP_PKEY_RSA2 = NID_rsa; 66 alias EVP_PKEY_DSA = NID_dsa; 67 alias EVP_PKEY_DSA1 = NID_dsa_2; 68 alias EVP_PKEY_DSA2 = NID_dsaWithSHA; 69 alias EVP_PKEY_DSA3 = NID_dsaWithSHA1; 70 alias EVP_PKEY_DSA4 = NID_dsaWithSHA1_2; 71 alias EVP_PKEY_DH = NID_dhKeyAgreement; 72 alias EVP_PKEY_EC = NID_X9_62_id_ecPublicKey; 73 alias EVP_PKEY_HMAC = NID_hmac; 74 alias EVP_PKEY_CMAC = NID_cmac; 75 alias EVP_PKEY_TLS1_PRF = NID_tls1_prf; 76 alias EVP_PKEY_HKDF = NID_hkdf; 77 78 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 1)) 79 { 80 alias EVP_PKEY_SCRYPT = NID_id_scrypt; 81 alias EVP_PKEY_POLY1305 = NID_poly1305; 82 alias EVP_PKEY_SIPHASH = NID_siphash; 83 alias EVP_PKEY_X25519 = NID_X25519; 84 alias EVP_PKEY_ED25519 = NID_ED25519; 85 alias EVP_PKEY_X448 = NID_X448; 86 alias EVP_PKEY_ED448 = NID_ED448; 87 } 88 89 extern (C): 90 nothrow: 91 92 enum EVP_PKEY_MO_SIGN = 0x0001; 93 enum EVP_PKEY_MO_VERIFY = 0x0002; 94 enum EVP_PKEY_MO_ENCRYPT = 0x0004; 95 enum EVP_PKEY_MO_DECRYPT = 0x0008; 96 97 EVP_MD* EVP_MD_meth_new(int md_type, int pkey_type); 98 EVP_MD* EVP_MD_meth_dup(const(EVP_MD)* md); 99 void EVP_MD_meth_free(EVP_MD* md); 100 101 int EVP_MD_meth_set_input_blocksize(EVP_MD* md, int blocksize); 102 int EVP_MD_meth_set_result_size(EVP_MD* md, int resultsize); 103 int EVP_MD_meth_set_app_datasize(EVP_MD* md, int datasize); 104 int EVP_MD_meth_set_flags(EVP_MD* md, c_ulong flags); 105 106 int EVP_MD_meth_get_input_blocksize(const(EVP_MD)* md); 107 int EVP_MD_meth_get_result_size(const(EVP_MD)* md); 108 int EVP_MD_meth_get_app_datasize(const(EVP_MD)* md); 109 c_ulong EVP_MD_meth_get_flags(const(EVP_MD)* md); 110 111 // Internal types to help define the bindings 112 private alias EVP_MD_lifetime_fn = int function(EVP_MD_CTX* ctx); 113 private alias EVP_MD_update_fn = int function(EVP_MD_CTX* ctx, 114 const(void)* data, size_t count); 115 private alias EVP_MD_final_fn = int function(EVP_MD_CTX* ctx, ubyte* md); 116 private alias EVP_MD_copy_fn = int function(EVP_MD_CTX* ctx, const(EVP_MD_CTX)* from); 117 private alias EVP_MD_cleanup_fn = int function(EVP_MD_CTX* ctx, 118 const(void)* data, size_t count); 119 private alias EVP_MD_ctrl_fn = int function(EVP_MD_CTX* ctx, 120 int cmd, int p1, void* p2); 121 122 int EVP_MD_meth_set_init(EVP_MD* md, EVP_MD_lifetime_fn init); 123 int EVP_MD_meth_set_update(EVP_MD* md, EVP_MD_update_fn update); 124 int EVP_MD_meth_set_final(EVP_MD* md, EVP_MD_final_fn final_); 125 int EVP_MD_meth_set_copy(EVP_MD* md, EVP_MD_copy_fn copy); 126 int EVP_MD_meth_set_cleanup(EVP_MD* md, EVP_MD_lifetime_fn cleanup); 127 int EVP_MD_meth_set_ctrl(EVP_MD* md, EVP_MD_ctrl_fn ctrl); 128 129 EVP_MD_lifetime_fn EVP_MD_meth_get_init(const(EVP_MD)* md); 130 EVP_MD_update_fn EVP_MD_meth_get_update(const(EVP_MD)* md); 131 EVP_MD_final_fn EVP_MD_meth_get_final(const(EVP_MD)* md); 132 EVP_MD_copy_fn EVP_MD_meth_get_copy(const(EVP_MD)* md); 133 EVP_MD_lifetime_fn EVP_MD_meth_get_cleanup(const(EVP_MD)* md); 134 EVP_MD_ctrl_fn EVP_MD_meth_get_ctrl(const(EVP_MD)* md); 135 136 alias evp_sign_method = typeof(*(ExternC!(int function(int type,const(ubyte)* m, 137 uint m_length,ubyte* sigret, 138 uint* siglen, void* key))).init); 139 alias evp_verify_method = typeof(*(ExternC!(int function(int type,const(ubyte)* m, 140 uint m_length,const(ubyte)* sigbuf, 141 uint siglen, void* key))).init); 142 143 enum EVP_MD_FLAG_ONESHOT = 0x0001; /* digest can only handle a single 144 * block */ 145 146 enum EVP_MD_FLAG_PKEY_DIGEST = 0x0002; /* digest is a "clone" digest used 147 * which is a copy of an existing 148 * one for a specific public key type. 149 * EVP_dss1() etc */ 150 151 /* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ 152 153 enum EVP_MD_FLAG_PKEY_METHOD_SIGNATURE = 0x0004; 154 155 /* DigestAlgorithmIdentifier flags... */ 156 157 enum EVP_MD_FLAG_DIGALGID_MASK = 0x0018; 158 159 /* NULL or absent parameter accepted. Use NULL */ 160 161 enum EVP_MD_FLAG_DIGALGID_NULL = 0x0000; 162 163 /* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ 164 165 enum EVP_MD_FLAG_DIGALGID_ABSENT = 0x0008; 166 167 /* Custom handling via ctrl */ 168 169 enum EVP_MD_FLAG_DIGALGID_CUSTOM = 0x0018; 170 171 enum EVP_MD_FLAG_FIPS = 0x0400; /* Note if suitable for use in FIPS mode */ 172 173 /* Digest ctrls */ 174 175 enum EVP_MD_CTRL_DIGALGID = 0x1; 176 enum EVP_MD_CTRL_MICALG = 0x2; 177 178 /* Minimum Algorithm specific ctrl value */ 179 180 enum EVP_MD_CTRL_ALG_CTRL = 0x1000; 181 182 enum EVP_PKEY_NULL_method = "null,null,{0,0,0,0}"; 183 184 version (OPENSSL_NO_DSA) { 185 alias EVP_PKEY_DSA_method = EVP_PKEY_NULL_method; 186 } else { 187 enum EVP_PKEY_DSA_method = "cast(evp_sign_method*)&DSA_sign," ~ 188 "cast(evp_verify_method*)&DSA_verify,{EVP_PKEY_DSA,EVP_PKEY_DSA2," ~ 189 "EVP_PKEY_DSA3, EVP_PKEY_DSA4,0}"; 190 } 191 192 version(OPENSSL_NO_ECDSA) { 193 alias EVP_PKEY_ECDSA_method = EVP_PKEY_NULL_method; 194 } else { 195 enum EVP_PKEY_ECDSA_method = "cast(evp_sign_method*)&ECDSA_sign," ~ 196 "cast(evp_verify_method*)&ECDSA_verify,{EVP_PKEY_EC,0,0,0}"; 197 } 198 199 version (OPENSSL_NO_RSA) { 200 alias EVP_PKEY_RSA_method = EVP_PKEY_NULL_method; 201 alias EVP_PKEY_RSA_ASN1_OCTET_STRING_method = EVP_PKEY_NULL_method; 202 } else { 203 enum EVP_PKEY_RSA_method = "cast(evp_sign_method*)&RSA_sign," ~ 204 "cast(evp_verify_method*)RSA_verify,{EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}"; 205 enum EVP_PKEY_RSA_ASN1_OCTET_STRING_method = 206 "cast(evp_sign_method*)&RSA_sign_ASN1_OCTET_STRING," ~ 207 "cast(evp_verify_method*)RSA_verify_ASN1_OCTET_STRING," ~ 208 "{EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}"; 209 } 210 211 // #endif /* !EVP_MD */ 212 213 /* values for EVP_MD_CTX flags */ 214 215 enum EVP_MD_CTX_FLAG_ONESHOT = 0x0001; /* digest update will be called 216 * once only */ 217 enum EVP_MD_CTX_FLAG_CLEANED = 0x0002; /* context has already been 218 * cleaned */ 219 enum EVP_MD_CTX_FLAG_REUSE = 0x0004; /* Don't free up ctx->md_data 220 * in EVP_MD_CTX_reset */ 221 /* FIPS and pad options are ignored in 1.0.0, definitions are here 222 * so we don't accidentally reuse the values for other purposes. 223 */ 224 225 enum EVP_MD_CTX_FLAG_NON_FIPS_ALLOW = 0x0008; /* Allow use of non FIPS digest 226 * in FIPS mode */ 227 228 /* The following PAD options are also currently ignored in 1.0.0, digest 229 * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() 230 * instead. 231 */ 232 enum EVP_MD_CTX_FLAG_PAD_MASK = 0xF0; /* RSA mode to use */ 233 enum EVP_MD_CTX_FLAG_PAD_PKCS1 = 0x00; /* PKCS#1 v1.5 mode */ 234 enum EVP_MD_CTX_FLAG_PAD_X931 = 0x10; /* X9.31 mode */ 235 enum EVP_MD_CTX_FLAG_PAD_PSS = 0x20; /* PSS mode */ 236 237 enum EVP_MD_CTX_FLAG_NO_INIT = 0x0100; /* Don't initialize md_data */ 238 239 EVP_CIPHER* EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); 240 EVP_CIPHER* EVP_CIPHER_meth_dup(const(EVP_CIPHER)* cipher); 241 void EVP_CIPHER_meth_free(EVP_CIPHER* cipher); 242 243 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER* cipher, int iv_len); 244 int EVP_CIPHER_meth_set_flags(EVP_CIPHER* cipher, c_ulong flags); 245 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER* cipher, int ctx_size); 246 247 private alias EVP_CIPHER_init_fn = int function(EVP_CIPHER_CTX* ctx, 248 const(ubyte)* key, const(ubyte)* iv, int enc); 249 private alias EVP_CIPHER_do_fn = int function(EVP_CIPHER_CTX* ctx, 250 ubyte* out_, const(ubyte)* in_, size_t inl); 251 private alias EVP_CIPHER_cleanup_fn = int function(EVP_CIPHER_CTX* ctx); 252 private alias EVP_CIPHER_asn1_parameters_fn = int function(EVP_CIPHER_CTX* ctx, ASN1_TYPE* params); 253 private alias EVP_CIPHER_ctrl_fn = int function(EVP_CIPHER_CTX* ctx, 254 int type, int arg, void* ptr); 255 256 int EVP_CIPHER_meth_set_init(EVP_CIPHER* cipher, EVP_CIPHER_init_fn init); 257 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER* cipher, EVP_CIPHER_do_fn do_cipher); 258 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER* cipher, EVP_CIPHER_cleanup_fn cleanup); 259 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER* cipher, EVP_CIPHER_asn1_parameters_fn set); 260 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER* cipher, EVP_CIPHER_asn1_parameters_fn get); 261 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER* cipher, EVP_CIPHER_ctrl_fn ctrl); 262 263 EVP_CIPHER_init_fn EVP_CIPHER_meth_get_init(const(EVP_CIPHER)* cipher); 264 EVP_CIPHER_do_fn EVP_CIPHER_meth_get_do_cipher(const(EVP_CIPHER)* cipher); 265 EVP_CIPHER_cleanup_fn EVP_CIPHER_meth_get_cleanup(const(EVP_CIPHER)* cipher); 266 EVP_CIPHER_asn1_parameters_fn EVP_CIPHER_meth_get_set_asn1_params(const(EVP_CIPHER)* cipher); 267 EVP_CIPHER_asn1_parameters_fn EVP_CIPHER_meth_get_get_asn1_params(const(EVP_CIPHER)* cipher); 268 EVP_CIPHER_ctrl_fn EVP_CIPHER_meth_get_ctrl(const(EVP_CIPHER)* cipher); 269 270 /* Values for cipher flags */ 271 272 /* Modes for ciphers */ 273 274 enum EVP_CIPH_STREAM_CIPHER = 0x0; 275 enum EVP_CIPH_ECB_MODE = 0x1; 276 enum EVP_CIPH_CBC_MODE = 0x2; 277 enum EVP_CIPH_CFB_MODE = 0x3; 278 enum EVP_CIPH_OFB_MODE = 0x4; 279 enum EVP_CIPH_CTR_MODE = 0x5; 280 enum EVP_CIPH_GCM_MODE = 0x6; 281 enum EVP_CIPH_CCM_MODE = 0x7; 282 enum EVP_CIPH_XTS_MODE = 0x10001; 283 enum EVP_CIPH_WRAP_MODE = 0x10002; 284 enum EVP_CIPH_OCB_MODE = 0x10003; 285 enum EVP_CIPH_MODE = 0xF0007; 286 /* Set if variable length cipher */ 287 enum EVP_CIPH_VARIABLE_LENGTH = 0x8; 288 /* Set if the iv handling should be done by the cipher itself */ 289 enum EVP_CIPH_CUSTOM_IV = 0x10; 290 /* Set if the cipher's init() function should be called if key is NULL */ 291 enum EVP_CIPH_ALWAYS_CALL_INIT = 0x20; 292 /* Call ctrl() to init cipher parameters */ 293 enum EVP_CIPH_CTRL_INIT = 0x40; 294 /* Don't use standard key length function */ 295 enum EVP_CIPH_CUSTOM_KEY_LENGTH = 0x80; 296 /* Don't use standard block padding */ 297 enum EVP_CIPH_NO_PADDING = 0x100; 298 /* cipher handles random key generation */ 299 enum EVP_CIPH_RAND_KEY = 0x200; 300 /* cipher has its own additional copying logic */ 301 enum EVP_CIPH_CUSTOM_COPY = 0x400; 302 /* Allow use default ASN1 get/set iv */ 303 enum EVP_CIPH_FLAG_DEFAULT_ASN1 = 0x1000; 304 /* Buffer length in bits not bytes: CFB1 mode only */ 305 enum EVP_CIPH_FLAG_LENGTH_BITS = 0x2000; 306 /* Note if suitable for use in FIPS mode */ 307 enum EVP_CIPH_FLAG_FIPS = 0x4000; 308 /* Allow non FIPS cipher in FIPS mode */ 309 enum EVP_CIPH_FLAG_NON_FIPS_ALLOW = 0x8000; 310 /* Cipher handles any and all padding logic as well 311 * as finalisation. 312 */ 313 enum EVP_CIPH_FLAG_CUSTOM_CIPHER = 0x100000; 314 enum EVP_CIPH_FLAG_AEAD_CIPHER = 0x200000; 315 316 /* ctrl() values */ 317 318 enum EVP_CTRL_INIT = 0x0; 319 enum EVP_CTRL_SET_KEY_LENGTH = 0x1; 320 enum EVP_CTRL_GET_RC2_KEY_BITS = 0x2; 321 enum EVP_CTRL_SET_RC2_KEY_BITS = 0x3; 322 enum EVP_CTRL_GET_RC5_ROUNDS = 0x4; 323 enum EVP_CTRL_SET_RC5_ROUNDS = 0x5; 324 enum EVP_CTRL_RAND_KEY = 0x6; 325 enum EVP_CTRL_PBE_PRF_NID = 0x7; 326 enum EVP_CTRL_COPY = 0x8; 327 enum EVP_CTRL_GCM_SET_IVLEN = 0x9; 328 enum EVP_CTRL_GCM_GET_TAG = 0x10; 329 enum EVP_CTRL_GCM_SET_TAG = 0x11; 330 enum EVP_CTRL_GCM_SET_IV_FIXED = 0x12; 331 enum EVP_CTRL_GCM_IV_GEN = 0x13; 332 alias EVP_CTRL_CCM_SET_IVLEN = EVP_CTRL_GCM_SET_IVLEN; 333 alias EVP_CTRL_CCM_GET_TAG = EVP_CTRL_GCM_GET_TAG; 334 alias EVP_CTRL_CCM_SET_TAG = EVP_CTRL_GCM_SET_TAG; 335 enum EVP_CTRL_CCM_SET_L = 0x14; 336 enum EVP_CTRL_CCM_SET_MSGLEN = 0x15; 337 /* AEAD cipher deduces payload length and returns number of bytes 338 * required to store MAC and eventual padding. Subsequent call to 339 * EVP_Cipher even appends/verifies MAC. 340 */ 341 enum EVP_CTRL_AEAD_TLS1_AAD = 0x16; 342 /* Used by composite AEAD ciphers, no-op in GCM, CCM... */ 343 enum EVP_CTRL_AEAD_SET_MAC_KEY = 0x17; 344 /* Set the GCM invocation field, decrypt only */ 345 enum EVP_CTRL_GCM_SET_IV_INV = 0x18; 346 enum EVP_CTRL_TLS1_1_MULTIBLOCK_AAD = 0x19; 347 enum EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT = 0x1a; 348 enum EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT = 0x1b; 349 enum EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE = 0x1c; 350 351 enum EVP_CTRL_SSL3_MASTER_SECRET = 0x1d; 352 353 /* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ 354 enum EVP_CTRL_SET_SBOX = 0x1e; 355 /* 356 * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a 357 * pre-allocated buffer with specified size 358 */ 359 enum EVP_CTRL_SBOX_USED = 0x1f; 360 /* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, 361 * 0 switches meshing off 362 */ 363 enum EVP_CTRL_KEY_MESH = 0x20; 364 /* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ 365 enum EVP_CTRL_BLOCK_PADDING_MODE = 0x21; 366 367 /* Set the output buffers to use for a pipelined operation */ 368 enum EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS = 0x22; 369 /* Set the input buffers to use for a pipelined operation */ 370 enum EVP_CTRL_SET_PIPELINE_INPUT_BUFS = 0x23; 371 /* Set the input buffer lengths to use for a pipelined operation */ 372 enum EVP_CTRL_SET_PIPELINE_INPUT_LENS = 0x24; 373 374 /* Padding modes */ 375 enum EVP_PADDING_PKCS7 = 1; 376 enum EVP_PADDING_ISO7816_4 = 2; 377 enum EVP_PADDING_ANSI923 = 3; 378 enum EVP_PADDING_ISO10126 = 4; 379 enum EVP_PADDING_ZERO = 5; 380 381 /* RFC 5246 defines additional data to be 13 bytes in length */ 382 enum EVP_AEAD_TLS1_AAD_LEN = 13; 383 384 /* GCM TLS constants */ 385 /* Length of fixed part of IV derived from PRF */ 386 enum EVP_GCM_TLS_FIXED_IV_LEN = 4; 387 /* Length of explicit part of IV part of TLS records */ 388 enum EVP_GCM_TLS_EXPLICIT_IV_LEN = 8; 389 /* Length of tag for TLS */ 390 enum EVP_GCM_TLS_TAG_LEN = 16; 391 392 /* Length of fixed part of IV derived from PRF */ 393 enum EVP_CCM_TLS_FIXED_IV_LEN = 4; 394 /* Length of explicit part of IV part of TLS records */ 395 enum EVP_CCM_TLS_EXPLICIT_IV_LEN = 8; 396 397 struct evp_cipher_info_st { 398 const(EVP_CIPHER)* cipher; 399 ubyte[EVP_MAX_IV_LENGTH] iv; 400 } 401 alias EVP_CIPHER_INFO = evp_cipher_info_st; 402 403 struct evp_cipher_ctx_st 404 { 405 const(EVP_CIPHER)* cipher; 406 ENGINE* engine; /* functional reference if 'cipher' is ENGINE-provided */ 407 int encrypt; /* encrypt or decrypt */ 408 int buf_len; /* number we have left */ 409 410 ubyte[EVP_MAX_IV_LENGTH] oiv; /* original iv */ 411 ubyte[EVP_MAX_IV_LENGTH] iv; /* working iv */ 412 ubyte[EVP_MAX_BLOCK_LENGTH] buf;/* saved partial block */ 413 int num; /* used by cfb/ofb mode */ 414 415 void* app_data; /* application stuff */ 416 int key_len; /* May change for variable length cipher */ 417 c_ulong flags; /* Various flags */ 418 void* cipher_data; /* per EVP data */ 419 int final_used; 420 int block_mask; 421 ubyte[EVP_MAX_BLOCK_LENGTH] final_;/* possible final block */ 422 } /* EVP_CIPHER_CTX */; 423 424 struct evp_Encode_Ctx_st { 425 int num; /* number saved in a partial encode/decode */ 426 int length; /* The length is either the output line length 427 * (in input bytes) or the shortest input line 428 * length that is ok. Once decoding begins, 429 * the length is adjusted up each time a longer 430 * line is decoded */ 431 ubyte[80] enc_data; /* data to encode */ 432 int line_num; /* number read on current line */ 433 int expect_nl; 434 } 435 alias EVP_ENCODE_CTX = evp_Encode_Ctx_st; 436 437 /* Password based encryption function */ 438 alias typeof(*(ExternC!(int function(EVP_CIPHER_CTX* ctx, const(char)* pass, int passlen, 439 ASN1_TYPE* param, const(EVP_CIPHER)* cipher, 440 const(EVP_MD)* md, int en_de))).init) EVP_PBE_KEYGEN; 441 442 version(OPENSSL_NO_RSA) {} else { 443 auto EVP_PKEY_assign_RSA()(EVP_PKEY* pkey, RSA* key) { 444 return EVP_PKEY_assign(pkey,EVP_PKEY_RSA,cast(void*)key); 445 } 446 } 447 448 version(OPENSSL_NO_DSA) {} else { 449 auto EVP_PKEY_assign_RSA()(EVP_PKEY* pkey, DSA* key) { 450 return EVP_PKEY_assign(pkey,EVP_PKEY_DSA,cast(void*)key); 451 } 452 } 453 454 version(OPENSSL_NO_DH) {} else { 455 auto EVP_PKEY_assign_DH()(EVP_PKEY* pkey, DH* key) { 456 return EVP_PKEY_assign(pkey,EVP_PKEY_DH,cast(void*)key); 457 } 458 } 459 460 version(OPENSSL_NO_EC) {} else { 461 auto EVP_PKEY_assign_EC_KEY()(EVP_PKEY* pkey, EC_KEY* key) { 462 return EVP_PKEY_assign(pkey,EVP_PKEY_EC,cast(void*)key); 463 } 464 } 465 466 /* Add some extra combinations */ 467 auto EVP_get_digestbynid()(int a) { return EVP_get_digestbyname(OBJ_nid2sn(a)); } 468 auto EVP_get_digestbyobj()(const(ASN1_OBJECT)* a) { return EVP_get_digestbynid(OBJ_obj2nid(a)); } 469 auto EVP_get_cipherbynid()(int a) { return EVP_get_cipherbyname(OBJ_nid2sn(a)); } 470 auto EVP_get_cipherbyobj()(const(ASN1_OBJECT)* a) { return EVP_get_cipherbynid(OBJ_obj2nid(a)); } 471 472 int EVP_MD_type(const(EVP_MD)* md); 473 alias EVP_MD_nid = EVP_MD_type; 474 auto EVP_MD_name()(const(EVP_MD)* e) { return OBJ_nid2sn(EVP_MD_nid(e)); } 475 int EVP_MD_pkey_type(const(EVP_MD)* md); 476 int EVP_MD_size(const(EVP_MD)* md); 477 int EVP_MD_block_size(const(EVP_MD)* md); 478 c_ulong EVP_MD_flags(const(EVP_MD)* md); 479 480 const(EVP_MD)* EVP_MD_CTX_md(const(EVP_MD_CTX)* ctx); 481 auto EVP_MD_CTX_size()(const(EVP_MD_CTX)* e) { return EVP_MD_size(EVP_MD_CTX_md(e)); } 482 auto EVP_MD_CTX_block_size()(const(EVP_MD_CTX)* e) { return EVP_MD_block_size(EVP_MD_CTX_md(e)); } 483 auto EVP_MD_CTX_type()(const(EVP_MD_CTX)* e) { return EVP_MD_type(EVP_MD_CTX_md(e)); } 484 EVP_PKEY_CTX* EVP_MD_CTX_pkey_ctx(const(EVP_MD_CTX)* ctx); 485 void* EVP_MD_CTX_md_data(const(EVP_MD_CTX)* ctx); 486 487 int EVP_CIPHER_nid(const(EVP_CIPHER)* cipher); 488 auto EVP_CIPHER_name()(const(EVP_CIPHER)* e){ return OBJ_nid2sn(EVP_CIPHER_nid(e)); } 489 int EVP_CIPHER_block_size(const(EVP_CIPHER)* cipher); 490 int EVP_CIPHER_impl_ctx_size(const(EVP_CIPHER)* cipher); 491 int EVP_CIPHER_key_length(const(EVP_CIPHER)* cipher); 492 int EVP_CIPHER_iv_length(const(EVP_CIPHER)* cipher); 493 c_ulong EVP_CIPHER_flags(const(EVP_CIPHER)* cipher); 494 auto EVP_CIPHER_mode()(const(EVP_CIPHER)* e) { return (EVP_CIPHER_flags(e) & EVP_CIPH_MODE); } 495 496 const(EVP_CIPHER)* EVP_CIPHER_CTX_cipher(const(EVP_CIPHER_CTX)* ctx); 497 int EVP_CIPHER_CTX_encrypting(const(EVP_CIPHER_CTX)* ctx); 498 int EVP_CIPHER_CTX_nid(const(EVP_CIPHER_CTX)* ctx); 499 int EVP_CIPHER_CTX_block_size(const(EVP_CIPHER_CTX)* ctx); 500 int EVP_CIPHER_CTX_key_length(const(EVP_CIPHER_CTX)* ctx); 501 int EVP_CIPHER_CTX_iv_length(const(EVP_CIPHER_CTX)* ctx); 502 const(ubyte)* EVP_CIPHER_CTX_iv(const(EVP_CIPHER_CTX)* ctx); 503 const(ubyte)* EVP_CIPHER_CTX_original_iv(const(EVP_CIPHER_CTX)* ctx); 504 ubyte* EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX* ctx); 505 ubyte* EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX* ctx); 506 int EVP_CIPHER_CTX_num(const(EVP_CIPHER_CTX)* ctx); 507 void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX* ctx, int num); 508 int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX* out_, const(EVP_CIPHER_CTX)* in_); 509 void* EVP_CIPHER_CTX_get_app_data(const(EVP_CIPHER_CTX)* ctx); 510 void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX* ctx, void* data); 511 auto EVP_CIPHER_CTX_type()(const(EVP_CIPHER_CTX)* c) { return EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)); } 512 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 513 { 514 c_ulong EVP_CIPHER_CTX_flags(const(EVP_CIPHER_CTX)* ctx); 515 auto EVP_CIPHER_CTX_mode()(const(EVP_CIPHER_CTX)* e) { return (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE); } 516 } 517 else 518 { 519 auto EVP_CIPHER_CTX_flags()(const(EVP_CIPHER_CTX)* e) { return EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)); } 520 auto EVP_CIPHER_CTX_mode()(const(EVP_CIPHER_CTX)* e) { return EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)); } 521 } 522 523 auto EVP_ENCODE_LENGTH(T)(T l) { return (((l+2)/3*4)+(l/48+1)*2+80); } 524 auto EVP_DECODE_LENGTH(T)(T l) { return ((l+3)/4*3+80); } 525 526 alias EVP_SignInit_ex = EVP_DigestInit_ex; 527 alias EVP_SignInit = EVP_DigestInit; 528 alias EVP_SignUpdate = EVP_DigestUpdate; 529 alias EVP_VerifyInit_ex = EVP_DigestInit_ex; 530 alias EVP_VerifyInit = EVP_DigestInit; 531 alias EVP_VerifyUpdate = EVP_DigestUpdate; 532 alias EVP_OpenUpdate = EVP_DecryptUpdate; 533 alias EVP_SealUpdate = EVP_EncryptUpdate; 534 alias EVP_DigestSignUpdate = EVP_DigestUpdate; 535 alias EVP_DigestVerifyUpdate = EVP_DigestUpdate; 536 537 void BIO_set_md()(BIO* b,const(EVP_MD)* md) { return BIO_ctrl(b,BIO_C_SET_MD,0,md); } 538 auto BIO_get_md()(BIO* b,EVP_MD** mdp) { return BIO_ctrl(b,BIO_C_GET_MD,0,mdp); } 539 auto BIO_get_md_ctx()(BIO* b,EVP_MD_CTX** mdcp) { return BIO_ctrl(b,BIO_C_GET_MD_CTX,0,mdcp); } 540 auto BIO_set_md_ctx()(BIO* b,EVP_MD_CTX** mdcp) { return BIO_ctrl(b,BIO_C_SET_MD_CTX,0,mdcp); } 541 auto BIO_get_cipher_status()(BIO* b) { return BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,null); } 542 auto BIO_get_cipher_ctx()(BIO* b,EVP_CIPHER_CTX** c_pp) { return BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,c_pp); } 543 544 int EVP_Cipher(EVP_CIPHER_CTX* c, 545 ubyte* out_, 546 const(ubyte)* in_, 547 uint inl); 548 549 auto EVP_add_cipher_alias()(const(char)* n,const(char)* alias_) { 550 return OBJ_NAME_add(alias_,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)); 551 } 552 auto EVP_add_digest_alias()(const(char)* n,const(char)* alias_) { 553 return OBJ_NAME_add(alias_,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)); 554 } 555 auto EVP_delete_cipher_alias()(const(char)* alias_) { 556 return OBJ_NAME_remove(alias_,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); 557 } 558 auto EVP_delete_digest_alias()(const(char)* alias_) { 559 return OBJ_NAME_remove(alias_,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); 560 } 561 562 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 563 { 564 EVP_MD_CTX* EVP_MD_CTX_create(); 565 void EVP_MD_CTX_init(EVP_MD_CTX* ctx); 566 void EVP_MD_CTX_destroy(EVP_MD_CTX* ctx); 567 } 568 else 569 { 570 // https://github.com/openssl/openssl/commit/959ed5316c84d0e12ad18acfd40cefe15603ddfb 571 // https://github.com/openssl/openssl/commit/f8137a62d94c0a5809a4363b7b4aab3adcb8201c 572 EVP_MD_CTX* EVP_MD_CTX_new(); 573 int EVP_MD_CTX_reset(EVP_MD_CTX* ctx); 574 void EVP_MD_CTX_free(EVP_MD_CTX* ctx); 575 alias EVP_MD_CTX_create = EVP_MD_CTX_new; 576 alias EVP_MD_CTX_init = EVP_MD_CTX_reset; 577 alias EVP_MD_CTX_destroy = EVP_MD_CTX_free; 578 } 579 580 // https://github.com/openssl/openssl/commit/74cabf3fef77ab73c45e27cf6ed90f6db020e7c7 581 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 582 int EVP_MD_CTX_cleanup(EVP_MD_CTX* ctx); 583 584 int EVP_MD_CTX_ctrl(EVP_MD_CTX* ctx, int cmd, int p1, void* p2); 585 int EVP_MD_CTX_copy_ex(EVP_MD_CTX* out_,const(EVP_MD_CTX)* in_); 586 void EVP_MD_CTX_set_flags(EVP_MD_CTX* ctx, int flags); 587 void EVP_MD_CTX_clear_flags(EVP_MD_CTX* ctx, int flags); 588 int EVP_MD_CTX_test_flags(const(EVP_MD_CTX)* ctx,int flags); 589 int EVP_DigestInit_ex(EVP_MD_CTX* ctx, const(EVP_MD)* type, ENGINE* impl); 590 int EVP_DigestUpdate(EVP_MD_CTX* ctx,const(void)* d, 591 size_t cnt); 592 int EVP_DigestFinal_ex(EVP_MD_CTX* ctx,ubyte* md,uint* s); 593 int EVP_Digest(const(void)* data, size_t count, 594 ubyte* md, uint* size, const(EVP_MD)* type, ENGINE* impl); 595 596 int EVP_MD_CTX_copy(EVP_MD_CTX* out_,const(EVP_MD_CTX)* in_); 597 int EVP_DigestInit(EVP_MD_CTX* ctx, const(EVP_MD)* type); 598 int EVP_DigestFinal(EVP_MD_CTX* ctx,ubyte* md,uint* s); 599 600 int EVP_read_pw_string(char* buf,int length,const(char)* prompt,int verify); 601 int EVP_read_pw_string_min(char* buf,int minlen,int maxlen,const(char)* prompt,int verify); 602 void EVP_set_pw_prompt(const(char)* prompt); 603 char* EVP_get_pw_prompt(); 604 605 int EVP_BytesToKey(const(EVP_CIPHER)* type,const(EVP_MD)* md, 606 const(ubyte)* salt, const(ubyte)* data, 607 int datal, int count, ubyte* key,ubyte* iv); 608 609 void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX* ctx, int flags); 610 void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX* ctx, int flags); 611 int EVP_CIPHER_CTX_test_flags(const(EVP_CIPHER_CTX)* ctx,int flags); 612 613 int EVP_EncryptInit(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, 614 const(ubyte)* key, const(ubyte)* iv); 615 int EVP_EncryptInit_ex(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, ENGINE* impl, 616 const(ubyte)* key, const(ubyte)* iv); 617 int EVP_EncryptUpdate(EVP_CIPHER_CTX* ctx, ubyte* out_, 618 int* outl, const(ubyte)* in_, int inl); 619 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX* ctx, ubyte* out_, int* outl); 620 int EVP_EncryptFinal(EVP_CIPHER_CTX* ctx, ubyte* out_, int* outl); 621 622 int EVP_DecryptInit(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, 623 const(ubyte)* key, const(ubyte)* iv); 624 int EVP_DecryptInit_ex(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, ENGINE* impl, 625 const(ubyte)* key, const(ubyte)* iv); 626 int EVP_DecryptUpdate(EVP_CIPHER_CTX* ctx, ubyte* out_, 627 int* outl, const(ubyte)* in_, int inl); 628 int EVP_DecryptFinal(EVP_CIPHER_CTX* ctx, ubyte* outm, int* outl); 629 int EVP_DecryptFinal_ex(EVP_CIPHER_CTX* ctx, ubyte* outm, int* outl); 630 631 int EVP_CipherInit(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, 632 const(ubyte)* key,const(ubyte)* iv, 633 int enc); 634 int EVP_CipherInit_ex(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* cipher, ENGINE* impl, 635 const(ubyte)* key,const(ubyte)* iv, 636 int enc); 637 int EVP_CipherUpdate(EVP_CIPHER_CTX* ctx, ubyte* out_, 638 int* outl, const(ubyte)* in_, int inl); 639 int EVP_CipherFinal(EVP_CIPHER_CTX* ctx, ubyte* outm, int* outl); 640 int EVP_CipherFinal_ex(EVP_CIPHER_CTX* ctx, ubyte* outm, int* outl); 641 642 int EVP_SignFinal(EVP_MD_CTX* ctx,ubyte* md,uint* s, 643 EVP_PKEY* pkey); 644 645 int EVP_VerifyFinal(EVP_MD_CTX* ctx,const(ubyte)* sigbuf, 646 uint siglen,EVP_PKEY* pkey); 647 648 int EVP_DigestSignInit(EVP_MD_CTX* ctx, EVP_PKEY_CTX** pctx, 649 const(EVP_MD)* type, ENGINE* e, EVP_PKEY* pkey); 650 int EVP_DigestSignFinal(EVP_MD_CTX* ctx, 651 ubyte* sigret, size_t* siglen); 652 653 int EVP_DigestVerifyInit(EVP_MD_CTX* ctx, EVP_PKEY_CTX** pctx, 654 const(EVP_MD)* type, ENGINE* e, EVP_PKEY* pkey); 655 int EVP_DigestVerifyFinal(EVP_MD_CTX* ctx, 656 ubyte* sig, size_t siglen); 657 658 int EVP_OpenInit(EVP_CIPHER_CTX* ctx,const(EVP_CIPHER)* type, 659 const(ubyte)* ek, int ekl, const(ubyte)* iv, 660 EVP_PKEY* priv); 661 int EVP_OpenFinal(EVP_CIPHER_CTX* ctx, ubyte* out_, int* outl); 662 663 int EVP_SealInit(EVP_CIPHER_CTX* ctx, const(EVP_CIPHER)* type, 664 ubyte** ek, int* ekl, ubyte* iv, 665 EVP_PKEY** pubk, int npubk); 666 int EVP_SealFinal(EVP_CIPHER_CTX* ctx,ubyte* out_,int* outl); 667 668 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0)) 669 { 670 EVP_ENCODE_CTX* EVP_ENCODE_CTX_new(); 671 void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX* ctx); 672 int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX* ctx); 673 int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX* dctx, EVP_ENCODE_CTX* sctx); 674 int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX* ctx); 675 } 676 677 void EVP_EncodeInit(EVP_ENCODE_CTX* ctx); 678 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0)) 679 alias EVP_EncodeUpdateRT = int; 680 else 681 alias EVP_EncodeUpdateRT = void; 682 EVP_EncodeUpdateRT EVP_EncodeUpdate(EVP_ENCODE_CTX* ctx,ubyte* out_,int* outl, 683 const(ubyte)* in_,int inl); 684 void EVP_EncodeFinal(EVP_ENCODE_CTX* ctx,ubyte* out_,int* outl); 685 int EVP_EncodeBlock(ubyte* t, const(ubyte)* f, int n); 686 687 void EVP_DecodeInit(EVP_ENCODE_CTX* ctx); 688 int EVP_DecodeUpdate(EVP_ENCODE_CTX* ctx,ubyte* out_,int* outl, 689 const(ubyte)* in_, int inl); 690 int EVP_DecodeFinal(EVP_ENCODE_CTX* ctx, ubyte* out_, int* outl); 691 int EVP_DecodeBlock(ubyte* t, const(ubyte)* f, int n); 692 693 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 694 { 695 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX* a); 696 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX* a); 697 } 698 else 699 { 700 int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX* c); 701 702 alias EVP_CIPHER_CTX_init = EVP_CIPHER_CTX_reset; 703 alias EVP_CIPHER_CTX_cleanup = EVP_CIPHER_CTX_reset; 704 } 705 EVP_CIPHER_CTX* EVP_CIPHER_CTX_new(); 706 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX* a); 707 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX* x, int keylen); 708 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX* c, int pad); 709 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX* ctx, int type, int arg, void* ptr); 710 int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX* ctx, ubyte* key); 711 712 version(OPENSSL_NO_BIO) {} else { 713 BIO_METHOD* BIO_f_md(); 714 BIO_METHOD* BIO_f_base64(); 715 BIO_METHOD* BIO_f_cipher(); 716 BIO_METHOD* BIO_f_reliable(); 717 void BIO_set_cipher(BIO* b,const(EVP_CIPHER)* c,const(ubyte)* k, 718 const(ubyte)* i, int enc); 719 } 720 721 const(EVP_MD)* EVP_md_null(); 722 version(OPENSSL_NO_MD2) {} else { 723 const(EVP_MD)* EVP_md2(); 724 } 725 version(OPENSSL_NO_MD4) {} else { 726 const(EVP_MD)* EVP_md4(); 727 } 728 version(OPENSSL_NO_MD5) {} else { 729 const(EVP_MD)* EVP_md5(); 730 } 731 const(EVP_MD)* EVP_blake2b512(); 732 const(EVP_MD)* EVP_blake2s256(); 733 version(OPENSSL_NO_SHA) {} else { 734 const(EVP_MD)* EVP_sha(); 735 const(EVP_MD)* EVP_sha1(); 736 const(EVP_MD)* EVP_dss(); 737 const(EVP_MD)* EVP_dss1(); 738 const(EVP_MD)* EVP_ecdsa(); 739 } 740 version(OPENSSL_NO_SHA256) {} else { 741 const(EVP_MD)* EVP_sha224(); 742 const(EVP_MD)* EVP_sha256(); 743 } 744 version(OPENSSL_NO_SHA512) {} else { 745 const(EVP_MD)* EVP_sha384(); 746 const(EVP_MD)* EVP_sha512(); 747 } 748 version(OPENSSL_NO_MDC2) {} else { 749 const(EVP_MD)* EVP_mdc2(); 750 } 751 version(OPENSSL_NO_RIPEMD) {} else { 752 const(EVP_MD)* EVP_ripemd160(); 753 } 754 version(OPENSSL_NO_WHIRLPOOL) {} else { 755 const(EVP_MD)* EVP_whirlpool(); 756 } 757 const(EVP_CIPHER)* EVP_enc_null(); /* does nothing :-) */ 758 version (OPENSSL_NO_DES) {} else { 759 const(EVP_CIPHER)* EVP_des_ecb(); 760 const(EVP_CIPHER)* EVP_des_ede(); 761 const(EVP_CIPHER)* EVP_des_ede3(); 762 const(EVP_CIPHER)* EVP_des_ede_ecb(); 763 const(EVP_CIPHER)* EVP_des_ede3_ecb(); 764 const(EVP_CIPHER)* EVP_des_cfb64(); 765 alias EVP_des_cfb = EVP_des_cfb64; 766 const(EVP_CIPHER)* EVP_des_cfb1(); 767 const(EVP_CIPHER)* EVP_des_cfb8(); 768 const(EVP_CIPHER)* EVP_des_ede_cfb64(); 769 alias EVP_des_ede_cfb = EVP_des_ede_cfb64; 770 version (none) { 771 const(EVP_CIPHER)* EVP_des_ede_cfb1(); 772 const(EVP_CIPHER)* EVP_des_ede_cfb8(); 773 } 774 const(EVP_CIPHER)* EVP_des_ede3_cfb64(); 775 alias EVP_des_ede3_cfb = EVP_des_ede3_cfb64; 776 const(EVP_CIPHER)* EVP_des_ede3_cfb1(); 777 const(EVP_CIPHER)* EVP_des_ede3_cfb8(); 778 const(EVP_CIPHER)* EVP_des_ofb(); 779 const(EVP_CIPHER)* EVP_des_ede_ofb(); 780 const(EVP_CIPHER)* EVP_des_ede3_ofb(); 781 const(EVP_CIPHER)* EVP_des_cbc(); 782 const(EVP_CIPHER)* EVP_des_ede_cbc(); 783 const(EVP_CIPHER)* EVP_des_ede3_cbc(); 784 const(EVP_CIPHER)* EVP_desx_cbc(); 785 /* This should now be supported through the dev_crypto ENGINE. But also, why are 786 * rc4 and md5 declarations made here inside a "NO_DES" precompiler branch? */ 787 //#if 0 788 //# ifdef OPENSSL_OPENBSD_DEV_CRYPTO 789 //const(EVP_CIPHER)* EVP_dev_crypto_des_ede3_cbc(); 790 //const(EVP_CIPHER)* EVP_dev_crypto_rc4(); 791 //const(EVP_MD)* EVP_dev_crypto_md5(); 792 //# endif 793 //#endif 794 } 795 version(OPENSSL_NO_RC4) {} else { 796 const(EVP_CIPHER)* EVP_rc4(); 797 const(EVP_CIPHER)* EVP_rc4_40(); 798 version(OPENSSL_NO_MD5) {} else { 799 const(EVP_CIPHER)* EVP_rc4_hmac_md5(); 800 } 801 } 802 version(OPENSSL_NO_IDEA) {} else { 803 const(EVP_CIPHER)* EVP_idea_ecb(); 804 const(EVP_CIPHER)* EVP_idea_cfb64(); 805 alias EVP_idea_cfb = EVP_idea_cfb64; 806 const(EVP_CIPHER)* EVP_idea_ofb(); 807 const(EVP_CIPHER)* EVP_idea_cbc(); 808 } 809 version(OPENSSL_NO_RC2) {} else { 810 const(EVP_CIPHER)* EVP_rc2_ecb(); 811 const(EVP_CIPHER)* EVP_rc2_cbc(); 812 const(EVP_CIPHER)* EVP_rc2_40_cbc(); 813 const(EVP_CIPHER)* EVP_rc2_64_cbc(); 814 const(EVP_CIPHER)* EVP_rc2_cfb64(); 815 alias EVP_rc2_cfb = EVP_rc2_cfb64; 816 const(EVP_CIPHER)* EVP_rc2_ofb(); 817 } 818 version(OPENSSL_NO_BF) {} else { 819 const(EVP_CIPHER)* EVP_bf_ecb(); 820 const(EVP_CIPHER)* EVP_bf_cbc(); 821 const(EVP_CIPHER)* EVP_bf_cfb64(); 822 alias EVP_bf_cfb = EVP_bf_cfb64; 823 const(EVP_CIPHER)* EVP_bf_ofb(); 824 } 825 version(OPENSSL_NO_CAST) {} else { 826 const(EVP_CIPHER)* EVP_cast5_ecb(); 827 const(EVP_CIPHER)* EVP_cast5_cbc(); 828 const(EVP_CIPHER)* EVP_cast5_cfb64(); 829 alias EVP_cast5_cfb = EVP_cast5_cfb64; 830 const(EVP_CIPHER)* EVP_cast5_ofb(); 831 } 832 version(OPENSSL_NO_RC5) {} else { 833 const(EVP_CIPHER)* EVP_rc5_32_12_16_cbc(); 834 const(EVP_CIPHER)* EVP_rc5_32_12_16_ecb(); 835 const(EVP_CIPHER)* EVP_rc5_32_12_16_cfb64(); 836 alias EVP_rc5_32_12_16_cfb = EVP_rc5_32_12_16_cfb64; 837 const(EVP_CIPHER)* EVP_rc5_32_12_16_ofb(); 838 } 839 version(OPENSSL_NO_AES) {} else { 840 const(EVP_CIPHER)* EVP_aes_128_ecb(); 841 const(EVP_CIPHER)* EVP_aes_128_cbc(); 842 const(EVP_CIPHER)* EVP_aes_128_cfb1(); 843 const(EVP_CIPHER)* EVP_aes_128_cfb8(); 844 const(EVP_CIPHER)* EVP_aes_128_cfb128(); 845 alias EVP_aes_128_cfb = EVP_aes_128_cfb128; 846 const(EVP_CIPHER)* EVP_aes_128_ofb(); 847 const(EVP_CIPHER)* EVP_aes_128_ctr(); 848 const(EVP_CIPHER)* EVP_aes_128_ccm(); 849 const(EVP_CIPHER)* EVP_aes_128_gcm(); 850 const(EVP_CIPHER)* EVP_aes_128_xts(); 851 const(EVP_CIPHER)* EVP_aes_192_ecb(); 852 const(EVP_CIPHER)* EVP_aes_192_cbc(); 853 const(EVP_CIPHER)* EVP_aes_192_cfb1(); 854 const(EVP_CIPHER)* EVP_aes_192_cfb8(); 855 const(EVP_CIPHER)* EVP_aes_192_cfb128(); 856 alias EVP_aes_192_cfb = EVP_aes_192_cfb128; 857 const(EVP_CIPHER)* EVP_aes_192_ofb(); 858 const(EVP_CIPHER)* EVP_aes_192_ctr(); 859 const(EVP_CIPHER)* EVP_aes_192_ccm(); 860 const(EVP_CIPHER)* EVP_aes_192_gcm(); 861 const(EVP_CIPHER)* EVP_aes_256_ecb(); 862 const(EVP_CIPHER)* EVP_aes_256_cbc(); 863 const(EVP_CIPHER)* EVP_aes_256_cfb1(); 864 const(EVP_CIPHER)* EVP_aes_256_cfb8(); 865 const(EVP_CIPHER)* EVP_aes_256_cfb128(); 866 alias EVP_aes_256_cfb = EVP_aes_256_cfb128; 867 const(EVP_CIPHER)* EVP_aes_256_ofb(); 868 const(EVP_CIPHER)* EVP_aes_256_ctr(); 869 const(EVP_CIPHER)* EVP_aes_256_ccm(); 870 const(EVP_CIPHER)* EVP_aes_256_gcm(); 871 const(EVP_CIPHER)* EVP_aes_256_xts(); 872 version(OPENSSL_NO_SHA) {} else version(OPENSSL_NO_SHA1) {} else { 873 const(EVP_CIPHER)* EVP_aes_128_cbc_hmac_sha1(); 874 const(EVP_CIPHER)* EVP_aes_256_cbc_hmac_sha1(); 875 } 876 } 877 version(OPENSSL_NO_CAMELLIA) {} else { 878 const(EVP_CIPHER)* EVP_camellia_128_ecb(); 879 const(EVP_CIPHER)* EVP_camellia_128_cbc(); 880 const(EVP_CIPHER)* EVP_camellia_128_cfb1(); 881 const(EVP_CIPHER)* EVP_camellia_128_cfb8(); 882 const(EVP_CIPHER)* EVP_camellia_128_cfb128(); 883 alias EVP_camellia_128_cfb = EVP_camellia_128_cfb128; 884 const(EVP_CIPHER)* EVP_camellia_128_ofb(); 885 const(EVP_CIPHER)* EVP_camellia_128_ctr(); 886 const(EVP_CIPHER)* EVP_camellia_192_ecb(); 887 const(EVP_CIPHER)* EVP_camellia_192_cbc(); 888 const(EVP_CIPHER)* EVP_camellia_192_cfb1(); 889 const(EVP_CIPHER)* EVP_camellia_192_cfb8(); 890 const(EVP_CIPHER)* EVP_camellia_192_cfb128(); 891 alias EVP_camellia_192_cfb = EVP_camellia_192_cfb128; 892 const(EVP_CIPHER)* EVP_camellia_192_ofb(); 893 const(EVP_CIPHER)* EVP_camellia_192_ctr(); 894 const(EVP_CIPHER)* EVP_camellia_256_ecb(); 895 const(EVP_CIPHER)* EVP_camellia_256_cbc(); 896 const(EVP_CIPHER)* EVP_camellia_256_cfb1(); 897 const(EVP_CIPHER)* EVP_camellia_256_cfb8(); 898 const(EVP_CIPHER)* EVP_camellia_256_cfb128(); 899 alias EVP_camellia_256_cfb = EVP_camellia_256_cfb128; 900 const(EVP_CIPHER)* EVP_camellia_256_ofb(); 901 const(EVP_CIPHER)* EVP_camellia_256_ctr(); 902 } 903 904 const(EVP_CIPHER)* EVP_chacha20(); 905 const(EVP_CIPHER)* EVP_chacha20_poly1305(); 906 907 version(OPENSSL_NO_SEED) {} else { 908 const(EVP_CIPHER)* EVP_seed_ecb(); 909 const(EVP_CIPHER)* EVP_seed_cbc(); 910 const(EVP_CIPHER)* EVP_seed_cfb128(); 911 alias EVP_seed_cfb = EVP_seed_cfb128; 912 const(EVP_CIPHER)* EVP_seed_ofb(); 913 } 914 915 void OPENSSL_add_all_algorithms_noconf(); 916 void OPENSSL_add_all_algorithms_conf(); 917 918 version (OPENSSL_LOAD_CONF) { 919 alias OpenSSL_add_all_algorithms = OPENSSL_add_all_algorithms_conf; 920 } else { 921 alias OpenSSL_add_all_algorithms = OPENSSL_add_all_algorithms_noconf; 922 } 923 924 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 925 { 926 void OpenSSL_add_all_ciphers(); 927 void OpenSSL_add_all_digests(); 928 } 929 else 930 { 931 auto OpenSSL_add_all_ciphers() () 932 { 933 return OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_CIPHERS, null); 934 } 935 auto OpenSSL_add_all_digests() () 936 { 937 return OPENSSL_INIT_crypto_library_start(OPENSSL_INIT_ADD_ALL_DIGESTS, null); 938 } 939 } 940 941 int EVP_add_cipher(const(EVP_CIPHER)* cipher); 942 int EVP_add_digest(const(EVP_MD)* digest); 943 944 const(EVP_CIPHER)* EVP_get_cipherbyname(const(char)* name); 945 const(EVP_MD)* EVP_get_digestbyname(const(char)* name); 946 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 947 void EVP_cleanup(); 948 else 949 void EVP_cleanup()() {} 950 951 void EVP_CIPHER_do_all(ExternC!(void function(const(EVP_CIPHER)* ciph, 952 const(char)* from, const(char)* to, void* x)) fn, void* arg); 953 void EVP_CIPHER_do_all_sorted(ExternC!(void function(const(EVP_CIPHER)* ciph, 954 const(char)* from, const(char)* to, void* x)) fn, void* arg); 955 956 void EVP_MD_do_all(ExternC!(void function(const(EVP_MD)* ciph, 957 const(char)* from, const(char)* to, void* x)) fn, void* arg); 958 void EVP_MD_do_all_sorted(ExternC!(void function(const(EVP_MD)* ciph, 959 const(char)* from, const(char)* to, void* x)) fn, void* arg); 960 961 int EVP_PKEY_decrypt_old(ubyte* dec_key, 962 const(ubyte)* enc_key,int enc_key_len, 963 EVP_PKEY* private_key); 964 int EVP_PKEY_encrypt_old(ubyte* enc_key, 965 const(ubyte)* key,int key_len, 966 EVP_PKEY* pub_key); 967 int EVP_PKEY_type(int type); 968 int EVP_PKEY_id(const(EVP_PKEY)* pkey); 969 int EVP_PKEY_base_id(const(EVP_PKEY)* pkey); 970 int EVP_PKEY_bits(EVP_PKEY* pkey); 971 int EVP_PKEY_size(EVP_PKEY* pkey); 972 int EVP_PKEY_set_type(EVP_PKEY* pkey,int type); 973 int EVP_PKEY_set_type_str(EVP_PKEY* pkey, const(char)* str, int len); 974 int EVP_PKEY_assign(EVP_PKEY* pkey,int type,void* key); 975 void* EVP_PKEY_get0(EVP_PKEY* pkey); 976 const(ubyte)* EVP_PKEY_get0_hmac(const(EVP_PKEY)* pkey, size_t* len); 977 978 version(OPENSSL_NO_RSA) {} else { 979 import deimos.openssl.rsa; 980 int EVP_PKEY_set1_RSA(EVP_PKEY* pkey, RSA* key); 981 RSA* EVP_PKEY_get1_RSA(EVP_PKEY* pkey); 982 } 983 version(OPENSSL_NO_DSA) {} else { 984 import deimos.openssl.dsa; /*struct dsa_st;*/ 985 int EVP_PKEY_set1_DSA(EVP_PKEY* pkey,dsa_st* key); 986 dsa_st* EVP_PKEY_get1_DSA(EVP_PKEY* pkey); 987 } 988 version(OPENSSL_NO_DH) {} else { 989 import deimos.openssl.dh; /*struct dh_st;*/ 990 int EVP_PKEY_set1_DH(EVP_PKEY* pkey,dh_st* key); 991 dh_st* EVP_PKEY_get1_DH(EVP_PKEY* pkey); 992 } 993 version(OPENSSL_NO_EC) {} else { 994 struct ec_key_st; 995 int EVP_PKEY_set1_EC_KEY(EVP_PKEY* pkey,ec_key_st* key); 996 ec_key_st* EVP_PKEY_get1_EC_KEY(EVP_PKEY* pkey); 997 } 998 999 EVP_PKEY* EVP_PKEY_new(); 1000 int EVP_PKEY_up_ref(EVP_PKEY* pkey); 1001 void EVP_PKEY_free(EVP_PKEY* pkey); 1002 1003 EVP_PKEY* d2i_PublicKey(int type,EVP_PKEY** a, const(ubyte)** pp, 1004 c_long length); 1005 int i2d_PublicKey(EVP_PKEY* a, ubyte** pp); 1006 1007 EVP_PKEY* d2i_PrivateKey(int type,EVP_PKEY** a, const(ubyte)** pp, 1008 c_long length); 1009 EVP_PKEY* d2i_AutoPrivateKey(EVP_PKEY** a, const(ubyte)** pp, 1010 c_long length); 1011 int i2d_PrivateKey(EVP_PKEY* a, ubyte** pp); 1012 1013 int EVP_PKEY_copy_parameters(EVP_PKEY* to, const(EVP_PKEY)* from); 1014 int EVP_PKEY_missing_parameters(const(EVP_PKEY)* pkey); 1015 int EVP_PKEY_save_parameters(EVP_PKEY* pkey,int mode); 1016 int EVP_PKEY_cmp_parameters(const(EVP_PKEY)* a, const(EVP_PKEY)* b); 1017 1018 int EVP_PKEY_cmp(const(EVP_PKEY)* a, const(EVP_PKEY)* b); 1019 1020 int EVP_PKEY_print_public(BIO* out_, const(EVP_PKEY)* pkey, 1021 int indent, ASN1_PCTX* pctx); 1022 int EVP_PKEY_print_private(BIO* out_, const(EVP_PKEY)* pkey, 1023 int indent, ASN1_PCTX* pctx); 1024 int EVP_PKEY_print_params(BIO* out_, const(EVP_PKEY)* pkey, 1025 int indent, ASN1_PCTX* pctx); 1026 1027 int EVP_PKEY_get_default_digest_nid(EVP_PKEY* pkey, int* pnid); 1028 1029 int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY* pkey, 1030 const(ubyte)* pt, size_t ptlen); 1031 size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY* pkey, ubyte** ppt); 1032 1033 int EVP_CIPHER_type(const(EVP_CIPHER)* ctx); 1034 1035 /* calls methods */ 1036 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX* c, ASN1_TYPE* type); 1037 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX* c, ASN1_TYPE* type); 1038 1039 /* These are used by EVP_CIPHER methods */ 1040 int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX* c,ASN1_TYPE* type); 1041 int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX* c,ASN1_TYPE* type); 1042 1043 /* PKCS5 password based encryption */ 1044 int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX* ctx, const(char)* pass, int passlen, 1045 ASN1_TYPE* param, const(EVP_CIPHER)* cipher, const(EVP_MD)* md, 1046 int en_de); 1047 int PKCS5_PBKDF2_HMAC_SHA1(const(char)* pass, int passlen, 1048 const(ubyte)* salt, int saltlen, int iter, 1049 int keylen, ubyte* out_); 1050 int PKCS5_PBKDF2_HMAC(const(char)* pass, int passlen, 1051 const(ubyte)* salt, int saltlen, int iter, 1052 const(EVP_MD)* digest, 1053 int keylen, ubyte* out_); 1054 int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX* ctx, const(char)* pass, int passlen, 1055 ASN1_TYPE* param, const(EVP_CIPHER)* cipher, const(EVP_MD)* md, 1056 int en_de); 1057 1058 int EVP_PBE_scrypt(const(char)* pass, size_t passlen, 1059 const(ubyte)* salt, size_t saltlen, 1060 ulong N, ulong r, ulong p, ulong maxmem, 1061 ubyte* key, size_t keylen); 1062 1063 int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX* ctx, const(char)* pass, 1064 int passlen, ASN1_TYPE* param, 1065 const(EVP_CIPHER)* c, const(EVP_MD)* md, int en_de); 1066 1067 void PKCS5_PBE_add(); 1068 1069 int EVP_PBE_CipherInit (ASN1_OBJECT* pbe_obj, const(char)* pass, int passlen, 1070 ASN1_TYPE* param, EVP_CIPHER_CTX* ctx, int en_de); 1071 1072 /* PBE type */ 1073 1074 /* Can appear as the outermost AlgorithmIdentifier */ 1075 enum EVP_PBE_TYPE_OUTER = 0x0; 1076 /* Is an PRF type OID */ 1077 enum EVP_PBE_TYPE_PRF = 0x1; 1078 /* Is a PKCS#5 v2.0 KDF */ 1079 enum EVP_PBE_TYPE_KDF = 0x2; 1080 1081 int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid, 1082 EVP_PBE_KEYGEN* keygen); 1083 int EVP_PBE_alg_add(int nid, const(EVP_CIPHER)* cipher, const(EVP_MD)* md, 1084 EVP_PBE_KEYGEN* keygen); 1085 int EVP_PBE_find(int type, int pbe_nid, 1086 int* pcnid, int* pmnid, EVP_PBE_KEYGEN** pkeygen); 1087 void EVP_PBE_cleanup(); 1088 int EVP_PBE_get(int* ptype, int* ppbe_nid, size_t num); 1089 1090 enum ASN1_PKEY_ALIAS = 0x1; 1091 enum ASN1_PKEY_DYNAMIC = 0x2; 1092 enum ASN1_PKEY_SIGPARAM_NULL = 0x4; 1093 1094 enum ASN1_PKEY_CTRL_PKCS7_SIGN = 0x1; 1095 enum ASN1_PKEY_CTRL_PKCS7_ENCRYPT = 0x2; 1096 enum ASN1_PKEY_CTRL_DEFAULT_MD_NID = 0x3; 1097 enum ASN1_PKEY_CTRL_CMS_SIGN = 0x5; 1098 enum ASN1_PKEY_CTRL_CMS_ENVELOPE = 0x7; 1099 enum ASN1_PKEY_CTRL_CMS_RI_TYPE = 0x8; 1100 1101 enum ASN1_PKEY_CTRL_SET1_TLS_ENCPT = 0x9; 1102 enum ASN1_PKEY_CTRL_GET1_TLS_ENCPT = 0xa; 1103 1104 int EVP_PKEY_asn1_get_count(); 1105 const(EVP_PKEY_ASN1_METHOD)* EVP_PKEY_asn1_get0(int idx); 1106 const(EVP_PKEY_ASN1_METHOD)* EVP_PKEY_asn1_find(ENGINE** pe, int type); 1107 const(EVP_PKEY_ASN1_METHOD)* EVP_PKEY_asn1_find_str(ENGINE** pe, 1108 const(char)* str, int len); 1109 int EVP_PKEY_asn1_add0(const(EVP_PKEY_ASN1_METHOD)* ameth); 1110 int EVP_PKEY_asn1_add_alias(int to, int from); 1111 int EVP_PKEY_asn1_get0_info(int* ppkey_id, int* pkey_base_id, int* ppkey_flags, 1112 const(char)** pinfo, const(char)** ppem_str, 1113 const(EVP_PKEY_ASN1_METHOD)* ameth); 1114 1115 const(EVP_PKEY_ASN1_METHOD)* EVP_PKEY_get0_asn1(const(EVP_PKEY)* pkey); 1116 EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags, 1117 const(char)* pem_str, const(char)* info); 1118 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD* dst, 1119 const(EVP_PKEY_ASN1_METHOD)* src); 1120 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD* ameth); 1121 void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD* ameth, 1122 ExternC!(int function(EVP_PKEY* pk, X509_PUBKEY* pub)) pub_decode, 1123 ExternC!(int function(X509_PUBKEY* pub, const(EVP_PKEY)* pk)) pub_encode, 1124 ExternC!(int function(const(EVP_PKEY)* a, const(EVP_PKEY)* b)) pub_cmp, 1125 ExternC!(int function(BIO* out_, const(EVP_PKEY)* pkey, int indent, 1126 ASN1_PCTX* pctx)) pub_print, 1127 ExternC!(int function(const(EVP_PKEY)* pk)) pkey_size, 1128 ExternC!(int function(const(EVP_PKEY)* pk)) pkey_bits); 1129 void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD* ameth, 1130 ExternC!(int function(EVP_PKEY* pk, const(PKCS8_PRIV_KEY_INFO)* p8inf)) priv_decode, 1131 ExternC!(int function(PKCS8_PRIV_KEY_INFO* p8, const(EVP_PKEY)* pk)) priv_encode, 1132 ExternC!(int function(BIO* out_, const(EVP_PKEY)* pkey, int indent, 1133 ASN1_PCTX* pctx)) priv_print); 1134 void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD* ameth, 1135 ExternC!(int function(EVP_PKEY* pkey, 1136 const(ubyte)** pder, int derlen)) param_decode, 1137 ExternC!(int function(const(EVP_PKEY)* pkey, ubyte** pder)) param_encode, 1138 ExternC!(int function(const(EVP_PKEY)* pk)) param_missing, 1139 ExternC!(int function(EVP_PKEY* to, const(EVP_PKEY)* from)) param_copy, 1140 ExternC!(int function(const(EVP_PKEY)* a, const(EVP_PKEY)* b)) param_cmp, 1141 ExternC!(int function(BIO* out_, const(EVP_PKEY)* pkey, int indent, 1142 ASN1_PCTX* pctx)) param_print); 1143 1144 void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD* ameth, 1145 ExternC!(void function(EVP_PKEY* pkey)) pkey_free); 1146 void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD* ameth, 1147 ExternC!(int function(EVP_PKEY* pkey, int op, 1148 c_long arg1, void* arg2)) pkey_ctrl); 1149 1150 private alias EVP_PKEY_asn1_item_verify_fn = int function(EVP_MD_CTX* ctx, 1151 const(ASN1_ITEM)* it, void* asn, X509_ALGOR* a, ASN1_BIT_STRING* sig, EVP_PKEY* pkey); 1152 private alias EVP_PKEY_asn1_item_sign_fn = int function(EVP_MD_CTX* ctx, 1153 const(ASN1_ITEM)* it, void* asn, X509_ALGOR* alg1, X509_ALGOR* alg2, ASN1_BIT_STRING* sig); 1154 void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD* ameth, 1155 EVP_PKEY_asn1_item_verify_fn item_verify, EVP_PKEY_asn1_item_sign_fn item_sign); 1156 1157 private alias EVP_PKEY_asn1_security_bit_fn = int function(const(EVP_PKEY)* pk); 1158 void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD* ameth, 1159 EVP_PKEY_asn1_security_bit_fn pkey_security_bits); 1160 1161 enum EVP_PKEY_OP_UNDEFINED = 0; 1162 enum EVP_PKEY_OP_PARAMGEN = (1<<1); 1163 enum EVP_PKEY_OP_KEYGEN = (1<<2); 1164 enum EVP_PKEY_OP_SIGN = (1<<3); 1165 enum EVP_PKEY_OP_VERIFY = (1<<4); 1166 enum EVP_PKEY_OP_VERIFYRECOVER = (1<<5); 1167 enum EVP_PKEY_OP_SIGNCTX = (1<<6); 1168 enum EVP_PKEY_OP_VERIFYCTX = (1<<7); 1169 enum EVP_PKEY_OP_ENCRYPT = (1<<8); 1170 enum EVP_PKEY_OP_DECRYPT = (1<<9); 1171 enum EVP_PKEY_OP_DERIVE = (1<<10); 1172 1173 enum EVP_PKEY_OP_TYPE_SIG = 1174 (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER 1175 | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX); 1176 1177 enum EVP_PKEY_OP_TYPE_CRYPT = 1178 (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT); 1179 1180 /+ BUG in original headers: EVP_PKEY_OP_SIG, EVP_PKEY_OP_CRYPT are not defined. 1181 enum EVP_PKEY_OP_TYPE_NOGEN = 1182 (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE); 1183 +/ 1184 1185 enum EVP_PKEY_OP_TYPE_GEN = 1186 (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN); 1187 1188 auto EVP_PKEY_CTX_set_signature_md()(EVP_PKEY_CTX* ctx, void* md) { 1189 return EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, 1190 EVP_PKEY_CTRL_MD, 0, md); 1191 } 1192 1193 auto EVP_PKEY_CTX_set_mac_key()(EVP_PKEY_CTX* ctx, ubyte* key, int len) { 1194 return EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, 1195 EVP_PKEY_CTRL_SET_MAC_KEY, len, key); 1196 } 1197 1198 enum EVP_PKEY_CTRL_MD = 1; 1199 enum EVP_PKEY_CTRL_PEER_KEY = 2; 1200 1201 enum EVP_PKEY_CTRL_PKCS7_ENCRYPT = 3; 1202 enum EVP_PKEY_CTRL_PKCS7_DECRYPT = 4; 1203 1204 enum EVP_PKEY_CTRL_PKCS7_SIGN = 5; 1205 1206 enum EVP_PKEY_CTRL_SET_MAC_KEY = 6; 1207 1208 enum EVP_PKEY_CTRL_DIGESTINIT = 7; 1209 1210 /* Used by GOST key encryption in TLS */ 1211 enum EVP_PKEY_CTRL_SET_IV = 8; 1212 1213 enum EVP_PKEY_CTRL_CMS_ENCRYPT = 9; 1214 enum EVP_PKEY_CTRL_CMS_DECRYPT = 10; 1215 enum EVP_PKEY_CTRL_CMS_SIGN = 11; 1216 1217 enum EVP_PKEY_CTRL_CIPHER = 12; 1218 1219 enum EVP_PKEY_ALG_CTRL = 0x1000; 1220 1221 1222 enum EVP_PKEY_FLAG_AUTOARGLEN = 2; 1223 /* Method handles all operations: don't assume any digest related 1224 * defaults. 1225 */ 1226 enum EVP_PKEY_FLAG_SIGCTX_CUSTOM = 4; 1227 1228 const(EVP_PKEY_METHOD)* EVP_PKEY_meth_find(int type); 1229 EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags); 1230 void EVP_PKEY_meth_get0_info(int* ppkey_id, int* pflags, 1231 const(EVP_PKEY_METHOD)* meth); 1232 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD* dst, const(EVP_PKEY_METHOD)* src); 1233 void EVP_PKEY_meth_free(EVP_PKEY_METHOD* pmeth); 1234 int EVP_PKEY_meth_add0(const(EVP_PKEY_METHOD)* pmeth); 1235 1236 EVP_PKEY_CTX* EVP_PKEY_CTX_new(EVP_PKEY* pkey, ENGINE* e); 1237 EVP_PKEY_CTX* EVP_PKEY_CTX_new_id(int id, ENGINE* e); 1238 EVP_PKEY_CTX* EVP_PKEY_CTX_dup(EVP_PKEY_CTX* ctx); 1239 void EVP_PKEY_CTX_free(EVP_PKEY_CTX* ctx); 1240 1241 int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX* ctx, int keytype, int optype, 1242 int cmd, int p1, void* p2); 1243 int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX* ctx, const(char)* type, 1244 const(char)* value); 1245 int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX* ctx, int keytype, int optype, 1246 int cmd, ulong value); 1247 1248 int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX* ctx); 1249 void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX* ctx, int* dat, int datlen); 1250 1251 EVP_PKEY* EVP_PKEY_new_mac_key(int type, ENGINE* e, 1252 const(ubyte)* key, int keylen); 1253 1254 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 1)) 1255 { 1256 EVP_PKEY* EVP_PKEY_new_raw_private_key( 1257 int type, ENGINE* e, const(ubyte)* priv, size_t len); 1258 EVP_PKEY* EVP_PKEY_new_raw_public_key( 1259 int type, ENGINE* e, const(ubyte)* pub, size_t len); 1260 } 1261 1262 void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX* ctx, void* data); 1263 void* EVP_PKEY_CTX_get_data(EVP_PKEY_CTX* ctx); 1264 EVP_PKEY* EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX* ctx); 1265 1266 EVP_PKEY* EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX* ctx); 1267 1268 void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX* ctx, void* data); 1269 void* EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX* ctx); 1270 1271 int EVP_PKEY_sign_init(EVP_PKEY_CTX* ctx); 1272 int EVP_PKEY_sign(EVP_PKEY_CTX* ctx, 1273 ubyte* sig, size_t* siglen, 1274 const(ubyte)* tbs, size_t tbslen); 1275 int EVP_PKEY_verify_init(EVP_PKEY_CTX* ctx); 1276 int EVP_PKEY_verify(EVP_PKEY_CTX* ctx, 1277 const(ubyte)* sig, size_t siglen, 1278 const(ubyte)* tbs, size_t tbslen); 1279 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX* ctx); 1280 int EVP_PKEY_verify_recover(EVP_PKEY_CTX* ctx, 1281 ubyte* rout, size_t* routlen, 1282 const(ubyte)* sig, size_t siglen); 1283 int EVP_PKEY_encrypt_init(EVP_PKEY_CTX* ctx); 1284 int EVP_PKEY_encrypt(EVP_PKEY_CTX* ctx, 1285 ubyte* out_, size_t* outlen, 1286 const(ubyte)* in_, size_t inlen); 1287 int EVP_PKEY_decrypt_init(EVP_PKEY_CTX* ctx); 1288 int EVP_PKEY_decrypt(EVP_PKEY_CTX* ctx, 1289 ubyte* out_, size_t* outlen, 1290 const(ubyte)* in_, size_t inlen); 1291 1292 static if (OPENSSL_VERSION_AT_LEAST(3, 0, 0)) 1293 int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX* ctx, EVP_KEYEXCH* exchange); 1294 int EVP_PKEY_derive_init(EVP_PKEY_CTX* ctx); 1295 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX* ctx, EVP_PKEY* peer); 1296 int EVP_PKEY_derive(EVP_PKEY_CTX* ctx, ubyte* key, size_t* keylen); 1297 1298 alias EVP_PKEY_gen_cb = typeof(*(ExternC!(int function(EVP_PKEY_CTX* ctx))).init); 1299 1300 int EVP_PKEY_paramgen_init(EVP_PKEY_CTX* ctx); 1301 int EVP_PKEY_paramgen(EVP_PKEY_CTX* ctx, EVP_PKEY** ppkey); 1302 int EVP_PKEY_keygen_init(EVP_PKEY_CTX* ctx); 1303 int EVP_PKEY_keygen(EVP_PKEY_CTX* ctx, EVP_PKEY** ppkey); 1304 1305 void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX* ctx, EVP_PKEY_gen_cb* cb); 1306 EVP_PKEY_gen_cb* EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX* ctx); 1307 1308 int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX* ctx, int idx); 1309 1310 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD* pmeth, 1311 ExternC!(int function(EVP_PKEY_CTX* ctx)) init); 1312 1313 void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD* pmeth, 1314 ExternC!(int function(EVP_PKEY_CTX* dst, EVP_PKEY_CTX* src)) copy); 1315 1316 void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD* pmeth, 1317 ExternC!(void function(EVP_PKEY_CTX* ctx)) cleanup); 1318 1319 void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD* pmeth, 1320 ExternC!(int function(EVP_PKEY_CTX* ctx)) paramgen_init, 1321 ExternC!(int function(EVP_PKEY_CTX* ctx, EVP_PKEY* pkey)) paramgen); 1322 1323 void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD* pmeth, 1324 ExternC!(int function(EVP_PKEY_CTX* ctx)) keygen_init, 1325 ExternC!(int function(EVP_PKEY_CTX* ctx, EVP_PKEY* pkey)) keygen); 1326 1327 void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD* pmeth, 1328 ExternC!(int function(EVP_PKEY_CTX* ctx)) sign_init, 1329 ExternC!(int function(EVP_PKEY_CTX* ctx, ubyte* sig, size_t* siglen, 1330 const(ubyte)* tbs, size_t tbslen)) sign); 1331 1332 void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD* pmeth, 1333 ExternC!(int function(EVP_PKEY_CTX* ctx)) verify_init, 1334 ExternC!(int function(EVP_PKEY_CTX* ctx, const(ubyte)* sig, size_t siglen, 1335 const(ubyte)* tbs, size_t tbslen)) verify); 1336 1337 void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD* pmeth, 1338 ExternC!(int function(EVP_PKEY_CTX* ctx)) verify_recover_init, 1339 ExternC!(int function(EVP_PKEY_CTX* ctx, 1340 ubyte* sig, size_t* siglen, 1341 const(ubyte)* tbs, size_t tbslen)) verify_recover); 1342 1343 void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD* pmeth, 1344 ExternC!(int function(EVP_PKEY_CTX* ctx, EVP_MD_CTX* mctx)) signctx_init, 1345 ExternC!(int function(EVP_PKEY_CTX* ctx, ubyte* sig, size_t* siglen, 1346 EVP_MD_CTX* mctx)) signctx); 1347 1348 void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD* pmeth, 1349 ExternC!(int function(EVP_PKEY_CTX* ctx, EVP_MD_CTX* mctx)) verifyctx_init, 1350 ExternC!(int function(EVP_PKEY_CTX* ctx, const(ubyte)* sig,int siglen, 1351 EVP_MD_CTX* mctx)) verifyctx); 1352 1353 void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD* pmeth, 1354 ExternC!(int function(EVP_PKEY_CTX* ctx)) encrypt_init, 1355 ExternC!(int function(EVP_PKEY_CTX* ctx, ubyte* out_, size_t* outlen, 1356 const(ubyte)* in_, size_t inlen)) encryptfn); 1357 1358 void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD* pmeth, 1359 ExternC!(int function(EVP_PKEY_CTX* ctx)) decrypt_init, 1360 ExternC!(int function(EVP_PKEY_CTX* ctx, ubyte* out_, size_t* outlen, 1361 const(ubyte)* in_, size_t inlen)) decrypt); 1362 1363 void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD* pmeth, 1364 ExternC!(int function(EVP_PKEY_CTX* ctx)) derive_init, 1365 ExternC!(int function(EVP_PKEY_CTX* ctx, ubyte* key, size_t* keylen)) derive); 1366 1367 void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD* pmeth, 1368 ExternC!(int function(EVP_PKEY_CTX* ctx, int type, int p1, void* p2)) ctrl, 1369 ExternC!(int function(EVP_PKEY_CTX* ctx, 1370 const(char)* type, const(char)* value)) ctrl_str); 1371 1372 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 1)) 1373 { 1374 private alias EVP_PKEY_meth_digestsign_fn = int function( 1375 EVP_MD_CTX* ctx, ubyte* sig, size_t* siglen, const(ubyte)* tbs, size_t tbslen); 1376 private alias EVP_PKEY_meth_digestverify_fn = int function( 1377 EVP_MD_CTX*ctx, const(ubyte)* sig, size_t siglen, const(ubyte)* tbs, size_t tbslen); 1378 1379 void EVP_PKEY_meth_set_digestsign( 1380 EVP_PKEY_METHOD* pmeth, EVP_PKEY_meth_digestsign_fn digestsign); 1381 void EVP_PKEY_meth_set_digestverify( 1382 EVP_PKEY_METHOD* pmeth, EVP_PKEY_meth_digestverify_fn digestverify); 1383 void EVP_PKEY_meth_get_digestsign( 1384 EVP_PKEY_METHOD *pmeth, EVP_PKEY_meth_digestsign_fn* digestsign); 1385 void EVP_PKEY_meth_get_digestverify( 1386 EVP_PKEY_METHOD *pmeth, EVP_PKEY_meth_digestverify_fn* digestverify); 1387 } 1388 1389 static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0)) 1390 { 1391 private alias EVP_PKEY_meth_lifetime_fn = int function(EVP_PKEY_CTX* ctx); 1392 private alias EVP_PKEY_meth_lifetime2_fn = int function(EVP_PKEY_CTX* ctx, EVP_MD_CTX* mctx); 1393 1394 private alias EVP_PKEY_meth_copy_fn = int function (EVP_PKEY_CTX* dst, EVP_PKEY_CTX* src); 1395 private alias EVP_PKEY_meth_gen_fn = int function(EVP_PKEY_CTX* ctx, EVP_PKEY* pkey); 1396 private alias EVP_PKEY_meth_sign_fn = int function( 1397 EVP_PKEY_CTX* ctx, ubyte* sig, size_t* siglen, const(ubyte)* tbs, size_t tbslen); 1398 private alias EVP_PKEY_meth_verify_fn = int function( 1399 EVP_PKEY_CTX* ctx, const(ubyte)* sig, size_t siglen, const(ubyte)* tbs, size_t tbslen); 1400 private alias EVP_PKEY_meth_verify_recover_fn = int function( 1401 EVP_PKEY_CTX* ctx, ubyte* sig, size_t* siglen, const(ubyte)* tbs, size_t tbslen); 1402 private alias EVP_PKEY_meth_signctx_fn = int function( 1403 EVP_PKEY_CTX* ctx, ubyte* sig, size_t* siglen, EVP_MD_CTX* mctx); 1404 private alias EVP_PKEY_meth_verifyctx_fn = int function( 1405 EVP_PKEY_CTX* ctx, const(ubyte)* sig, int siglen, EVP_MD_CTX* mctx); 1406 private alias EVP_PKEY_meth_encrypt_fn = int function( 1407 EVP_PKEY_CTX *ctx, ubyte* out_, size_t* outlen, const(ubyte)* in_, size_t inlen); 1408 private alias EVP_PKEY_meth_decrypt_fn = int function( 1409 EVP_PKEY_CTX* ctx, ubyte* out_, size_t* outlen, const(ubyte)* in_, size_t inlen); 1410 private alias EVP_PKEY_meth_derive_fn = int function( 1411 EVP_PKEY_CTX* ctx, ubyte* key, size_t* keylen); 1412 private alias EVP_PKEY_meth_ctrl_fn = int function( 1413 EVP_PKEY_CTX* ctx, int type, int p1, void* p2); 1414 private alias EVP_PKEY_meth_ctrl_str_fn = int function( 1415 EVP_PKEY_CTX* ctx, const(char)* type, const(char)* value); 1416 1417 void EVP_PKEY_meth_get_init( 1418 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pinit); 1419 1420 void EVP_PKEY_meth_get_copy( 1421 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_copy_fn* pcopy); 1422 1423 void EVP_PKEY_meth_get_cleanup( 1424 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pcleanup); 1425 1426 void EVP_PKEY_meth_get_paramgen( 1427 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pparamgen_init, 1428 EVP_PKEY_meth_gen_fn* pparamgen); 1429 1430 void EVP_PKEY_meth_get_keygen( 1431 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pkeygen_init, 1432 EVP_PKEY_meth_gen_fn* pkeygen); 1433 1434 void EVP_PKEY_meth_get_sign( 1435 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* psign_init, 1436 EVP_PKEY_meth_sign_fn* psign); 1437 1438 void EVP_PKEY_meth_get_verify( 1439 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pverify_init, 1440 EVP_PKEY_meth_verify_fn* pverify); 1441 1442 void EVP_PKEY_meth_get_verify_recover( 1443 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pverify_recover_init, 1444 EVP_PKEY_meth_verify_recover_fn* pverify_recover); 1445 1446 void EVP_PKEY_meth_get_signctx( 1447 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime2_fn* psignctx_init, 1448 EVP_PKEY_meth_signctx_fn* psignctx); 1449 1450 void EVP_PKEY_meth_get_verifyctx( 1451 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime2_fn* pverifyctx_init, 1452 EVP_PKEY_meth_verifyctx_fn* pverifyctx); 1453 1454 void EVP_PKEY_meth_get_encrypt( 1455 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pencrypt_init, 1456 EVP_PKEY_meth_encrypt_fn* pencryptfn); 1457 1458 void EVP_PKEY_meth_get_decrypt( 1459 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pdecrypt_init, 1460 EVP_PKEY_meth_decrypt_fn* pdecrypt); 1461 1462 void EVP_PKEY_meth_get_derive( 1463 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_lifetime_fn* pderive_init, 1464 EVP_PKEY_meth_derive_fn* pderive); 1465 1466 void EVP_PKEY_meth_get_ctrl( 1467 const(EVP_PKEY_METHOD)* pmeth, EVP_PKEY_meth_ctrl_fn* pctrl, 1468 EVP_PKEY_meth_ctrl_str_fn* pctrl_str); 1469 } 1470 1471 static if (OPENSSL_VERSION_AT_LEAST(3, 0, 0)) 1472 { 1473 void EVP_KEYEXCH_free(EVP_KEYEXCH* exchange); 1474 int EVP_KEYEXCH_up_ref(EVP_KEYEXCH* exchange); 1475 EVP_KEYEXCH* EVP_KEYEXCH_fetch(OSSL_LIB_CTX* ctx, const(char)* algorithm, 1476 const(char)* properties); 1477 OSSL_PROVIDER* EVP_KEYEXCH_get0_provider(const(EVP_KEYEXCH)* exchange); 1478 int EVP_KEYEXCH_is_a(const(EVP_KEYEXCH)* keyexch, const(char)* name); 1479 const(char)* EVP_KEYEXCH_get0_name(const(EVP_KEYEXCH)* keyexch); 1480 const(char)* EVP_KEYEXCH_get0_description(const(EVP_KEYEXCH)* keyexch); 1481 1482 private alias EVP_KEYEXCH_apply_fn = void function(EVP_KEYEXCH* keyexch, void* data); 1483 private alias EVP_KEYEXCH_apply_names_fn = void function(const(char)* keyexch, void* data); 1484 void EVP_KEYEXCH_do_all_provided( 1485 OSSL_LIB_CTX* libctx, EVP_KEYEXCH_apply_fn fn, void* data); 1486 int EVP_KEYEXCH_names_do_all( 1487 const(EVP_KEYEXCH)* keyexch, EVP_KEYEXCH_apply_names_fn fn, void *data); 1488 const(OSSL_PARAM)* EVP_KEYEXCH_gettable_ctx_params(const(EVP_KEYEXCH)* keyexch); 1489 const(OSSL_PARAM)* EVP_KEYEXCH_settable_ctx_params(const(EVP_KEYEXCH)* keyexch); 1490 1491 int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX* ctx, const(char)* name); 1492 int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX* ctx, char* name, size_t namelen); 1493 int EVP_PKEY_get_group_name(const(EVP_PKEY)* pkey, char* name, size_t name_sz, 1494 size_t* gname_len); 1495 1496 OSSL_LIB_CTX* EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX* ctx); 1497 const(char)* EVP_PKEY_CTX_get0_propq(const(EVP_PKEY_CTX)* ctx); 1498 const(OSSL_PROVIDER)* EVP_PKEY_CTX_get0_provider(const(EVP_PKEY_CTX)* ctx); 1499 } 1500 1501 void EVP_add_alg_module(); 1502 1503 /* BEGIN ERROR CODES */ 1504 /* The following lines are auto generated by the script mkerr.pl. Any changes 1505 * made after this point may be overwritten when the script is next run. 1506 */ 1507 static if (OPENSSL_VERSION_BEFORE(1, 1, 0)) 1508 void ERR_load_EVP_strings(); 1509 else 1510 int ERR_load_EVP_strings(); 1511 1512 /* Error codes for the EVP functions. */ 1513 1514 /* Function codes. */ 1515 enum EVP_F_AESNI_INIT_KEY = 165; 1516 enum EVP_F_AESNI_XTS_CIPHER = 176; 1517 enum EVP_F_AES_INIT_KEY = 133; 1518 enum EVP_F_AES_XTS = 172; 1519 enum EVP_F_AES_XTS_CIPHER = 175; 1520 enum EVP_F_ALG_MODULE_INIT = 177; 1521 enum EVP_F_CAMELLIA_INIT_KEY = 159; 1522 enum EVP_F_CMAC_INIT = 173; 1523 enum EVP_F_D2I_PKEY = 100; 1524 enum EVP_F_DO_SIGVER_INIT = 161; 1525 enum EVP_F_DSAPKEY2PKCS8 = 134; 1526 enum EVP_F_DSA_PKEY2PKCS8 = 135; 1527 enum EVP_F_ECDSA_PKEY2PKCS8 = 129; 1528 enum EVP_F_ECKEY_PKEY2PKCS8 = 132; 1529 enum EVP_F_EVP_CIPHERINIT_EX = 123; 1530 enum EVP_F_EVP_CIPHER_CTX_COPY = 163; 1531 enum EVP_F_EVP_CIPHER_CTX_CTRL = 124; 1532 enum EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH = 122; 1533 enum EVP_F_EVP_DECRYPTFINAL_EX = 101; 1534 enum EVP_F_EVP_DIGESTINIT_EX = 128; 1535 enum EVP_F_EVP_ENCRYPTFINAL_EX = 127; 1536 enum EVP_F_EVP_MD_CTX_COPY_EX = 110; 1537 enum EVP_F_EVP_MD_SIZE = 162; 1538 enum EVP_F_EVP_OPENINIT = 102; 1539 enum EVP_F_EVP_PBE_ALG_ADD = 115; 1540 enum EVP_F_EVP_PBE_ALG_ADD_TYPE = 160; 1541 enum EVP_F_EVP_PBE_CIPHERINIT = 116; 1542 enum EVP_F_EVP_PKCS82PKEY = 111; 1543 enum EVP_F_EVP_PKCS82PKEY_BROKEN = 136; 1544 enum EVP_F_EVP_PKEY2PKCS8_BROKEN = 113; 1545 enum EVP_F_EVP_PKEY_COPY_PARAMETERS = 103; 1546 enum EVP_F_EVP_PKEY_CTX_CTRL = 137; 1547 enum EVP_F_EVP_PKEY_CTX_CTRL_STR = 150; 1548 enum EVP_F_EVP_PKEY_CTX_DUP = 156; 1549 enum EVP_F_EVP_PKEY_DECRYPT = 104; 1550 enum EVP_F_EVP_PKEY_DECRYPT_INIT = 138; 1551 enum EVP_F_EVP_PKEY_DECRYPT_OLD = 151; 1552 enum EVP_F_EVP_PKEY_DERIVE = 153; 1553 enum EVP_F_EVP_PKEY_DERIVE_INIT = 154; 1554 enum EVP_F_EVP_PKEY_DERIVE_SET_PEER = 155; 1555 enum EVP_F_EVP_PKEY_ENCRYPT = 105; 1556 enum EVP_F_EVP_PKEY_ENCRYPT_INIT = 139; 1557 enum EVP_F_EVP_PKEY_ENCRYPT_OLD = 152; 1558 enum EVP_F_EVP_PKEY_GET1_DH = 119; 1559 enum EVP_F_EVP_PKEY_GET1_DSA = 120; 1560 enum EVP_F_EVP_PKEY_GET1_ECDSA = 130; 1561 enum EVP_F_EVP_PKEY_GET1_EC_KEY = 131; 1562 enum EVP_F_EVP_PKEY_GET1_RSA = 121; 1563 enum EVP_F_EVP_PKEY_KEYGEN = 146; 1564 enum EVP_F_EVP_PKEY_KEYGEN_INIT = 147; 1565 enum EVP_F_EVP_PKEY_NEW = 106; 1566 enum EVP_F_EVP_PKEY_PARAMGEN = 148; 1567 enum EVP_F_EVP_PKEY_PARAMGEN_INIT = 149; 1568 enum EVP_F_EVP_PKEY_SIGN = 140; 1569 enum EVP_F_EVP_PKEY_SIGN_INIT = 141; 1570 enum EVP_F_EVP_PKEY_VERIFY = 142; 1571 enum EVP_F_EVP_PKEY_VERIFY_INIT = 143; 1572 enum EVP_F_EVP_PKEY_VERIFY_RECOVER = 144; 1573 enum EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT = 145; 1574 enum EVP_F_EVP_RIJNDAEL = 126; 1575 enum EVP_F_EVP_SIGNFINAL = 107; 1576 enum EVP_F_EVP_VERIFYFINAL = 108; 1577 enum EVP_F_FIPS_CIPHERINIT = 166; 1578 enum EVP_F_FIPS_CIPHER_CTX_COPY = 170; 1579 enum EVP_F_FIPS_CIPHER_CTX_CTRL = 167; 1580 enum EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH = 171; 1581 enum EVP_F_FIPS_DIGESTINIT = 168; 1582 enum EVP_F_FIPS_MD_CTX_COPY = 169; 1583 enum EVP_F_HMAC_INIT_EX = 174; 1584 enum EVP_F_INT_CTX_NEW = 157; 1585 enum EVP_F_PKCS5_PBE_KEYIVGEN = 117; 1586 enum EVP_F_PKCS5_V2_PBE_KEYIVGEN = 118; 1587 enum EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN = 164; 1588 enum EVP_F_PKCS8_SET_BROKEN = 112; 1589 enum EVP_F_PKEY_SET_TYPE = 158; 1590 enum EVP_F_RC2_MAGIC_TO_METH = 109; 1591 enum EVP_F_RC5_CTRL = 125; 1592 1593 /* Reason codes. */ 1594 enum EVP_R_AES_IV_SETUP_FAILED = 162; 1595 enum EVP_R_AES_KEY_SETUP_FAILED = 143; 1596 enum EVP_R_ASN1_LIB = 140; 1597 enum EVP_R_BAD_BLOCK_LENGTH = 136; 1598 enum EVP_R_BAD_DECRYPT = 100; 1599 enum EVP_R_BAD_KEY_LENGTH = 137; 1600 enum EVP_R_BN_DECODE_ERROR = 112; 1601 enum EVP_R_BN_PUBKEY_ERROR = 113; 1602 enum EVP_R_BUFFER_TOO_SMALL = 155; 1603 enum EVP_R_CAMELLIA_KEY_SETUP_FAILED = 157; 1604 enum EVP_R_CIPHER_PARAMETER_ERROR = 122; 1605 enum EVP_R_COMMAND_NOT_SUPPORTED = 147; 1606 enum EVP_R_CTRL_NOT_IMPLEMENTED = 132; 1607 enum EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED = 133; 1608 enum EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH = 138; 1609 enum EVP_R_DECODE_ERROR = 114; 1610 enum EVP_R_DIFFERENT_KEY_TYPES = 101; 1611 enum EVP_R_DIFFERENT_PARAMETERS = 153; 1612 enum EVP_R_DISABLED_FOR_FIPS = 163; 1613 enum EVP_R_ENCODE_ERROR = 115; 1614 enum EVP_R_ERROR_LOADING_SECTION = 165; 1615 enum EVP_R_ERROR_SETTING_FIPS_MODE = 166; 1616 enum EVP_R_EVP_PBE_CIPHERINIT_ERROR = 119; 1617 enum EVP_R_EXPECTING_AN_RSA_KEY = 127; 1618 enum EVP_R_EXPECTING_A_DH_KEY = 128; 1619 enum EVP_R_EXPECTING_A_DSA_KEY = 129; 1620 enum EVP_R_EXPECTING_A_ECDSA_KEY = 141; 1621 enum EVP_R_EXPECTING_A_EC_KEY = 142; 1622 enum EVP_R_FIPS_MODE_NOT_SUPPORTED = 167; 1623 enum EVP_R_INITIALIZATION_ERROR = 134; 1624 enum EVP_R_INPUT_NOT_INITIALIZED = 111; 1625 enum EVP_R_INVALID_DIGEST = 152; 1626 enum EVP_R_INVALID_FIPS_MODE = 168; 1627 enum EVP_R_INVALID_KEY_LENGTH = 130; 1628 enum EVP_R_INVALID_OPERATION = 148; 1629 enum EVP_R_IV_TOO_LARGE = 102; 1630 enum EVP_R_KEYGEN_FAILURE = 120; 1631 enum EVP_R_MESSAGE_DIGEST_IS_NULL = 159; 1632 enum EVP_R_METHOD_NOT_SUPPORTED = 144; 1633 enum EVP_R_MISSING_PARAMETERS = 103; 1634 enum EVP_R_NO_CIPHER_SET = 131; 1635 enum EVP_R_NO_DEFAULT_DIGEST = 158; 1636 enum EVP_R_NO_DIGEST_SET = 139; 1637 enum EVP_R_NO_DSA_PARAMETERS = 116; 1638 enum EVP_R_NO_KEY_SET = 154; 1639 enum EVP_R_NO_OPERATION_SET = 149; 1640 enum EVP_R_NO_SIGN_FUNCTION_CONFIGURED = 104; 1641 enum EVP_R_NO_VERIFY_FUNCTION_CONFIGURED = 105; 1642 enum EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE = 150; 1643 enum EVP_R_OPERATON_NOT_INITIALIZED = 151; 1644 enum EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE = 117; 1645 enum EVP_R_PRIVATE_KEY_DECODE_ERROR = 145; 1646 enum EVP_R_PRIVATE_KEY_ENCODE_ERROR = 146; 1647 enum EVP_R_PUBLIC_KEY_NOT_RSA = 106; 1648 enum EVP_R_TOO_LARGE = 164; 1649 enum EVP_R_UNKNOWN_CIPHER = 160; 1650 enum EVP_R_UNKNOWN_DIGEST = 161; 1651 enum EVP_R_UNKNOWN_OPTION = 169; 1652 enum EVP_R_UNKNOWN_PBE_ALGORITHM = 121; 1653 enum EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS = 135; 1654 enum EVP_R_UNSUPPORTED_ALGORITHM = 156; 1655 enum EVP_R_UNSUPPORTED_CIPHER = 107; 1656 enum EVP_R_UNSUPPORTED_KEYLENGTH = 123; 1657 enum EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION = 124; 1658 enum EVP_R_UNSUPPORTED_KEY_SIZE = 108; 1659 enum EVP_R_UNSUPPORTED_PRF = 125; 1660 enum EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM = 118; 1661 enum EVP_R_UNSUPPORTED_SALT_TYPE = 126; 1662 enum EVP_R_WRONG_FINAL_BLOCK_LENGTH = 109; 1663 enum EVP_R_WRONG_PUBLIC_KEY_TYPE = 110;