1use super::*; 2use libc::*; 3 4pub const EVP_MAX_MD_SIZE: c_uint = 64; 5 6pub const PKCS5_SALT_LEN: c_int = 8; 7pub const PKCS12_DEFAULT_ITER: c_int = 2048; 8 9pub const EVP_PKEY_RSA: c_int = NID_rsaEncryption; 10pub const EVP_PKEY_DSA: c_int = NID_dsa; 11pub const EVP_PKEY_DH: c_int = NID_dhKeyAgreement; 12pub const EVP_PKEY_EC: c_int = NID_X9_62_id_ecPublicKey; 13#[cfg(ossl111)] 14pub const EVP_PKEY_SM2: c_int = NID_sm2; 15#[cfg(any(ossl111, libressl370))] 16pub const EVP_PKEY_X25519: c_int = NID_X25519; 17#[cfg(any(ossl111, libressl370))] 18pub const EVP_PKEY_ED25519: c_int = NID_ED25519; 19#[cfg(ossl111)] 20pub const EVP_PKEY_X448: c_int = NID_X448; 21#[cfg(ossl111)] 22pub const EVP_PKEY_ED448: c_int = NID_ED448; 23pub const EVP_PKEY_HMAC: c_int = NID_hmac; 24pub const EVP_PKEY_CMAC: c_int = NID_cmac; 25#[cfg(ossl111)] 26pub const EVP_PKEY_POLY1305: c_int = NID_poly1305; 27#[cfg(ossl110)] 28pub const EVP_PKEY_HKDF: c_int = NID_hkdf; 29 30#[cfg(ossl102)] 31pub const EVP_CIPHER_CTX_FLAG_WRAP_ALLOW: c_int = 0x1; 32 33pub const EVP_CTRL_GCM_SET_IVLEN: c_int = 0x9; 34pub const EVP_CTRL_GCM_GET_TAG: c_int = 0x10; 35pub const EVP_CTRL_GCM_SET_TAG: c_int = 0x11; 36 37pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD { 38 EVP_get_digestbyname(OBJ_nid2sn(type_)) 39} 40 41cfg_if! { 42 if #[cfg(ossl300)] { 43 #[inline] 44 pub unsafe fn EVP_MD_CTX_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD { 45 EVP_MD_CTX_get0_md(ctx) 46 } 47 48 #[inline] 49 pub unsafe fn EVP_MD_CTX_get_size(ctx: *const EVP_MD_CTX) -> c_int { 50 EVP_MD_get_size(EVP_MD_CTX_get0_md(ctx)) 51 } 52 53 #[inline] 54 pub unsafe fn EVP_MD_CTX_size(ctx: *const EVP_MD_CTX) -> c_int { 55 EVP_MD_CTX_get_size(ctx) 56 } 57 58 #[inline] 59 pub unsafe fn EVP_MD_block_size(md: *const EVP_MD) -> c_int { 60 EVP_MD_get_block_size(md) 61 } 62 63 #[inline] 64 pub unsafe fn EVP_MD_size(md: *const EVP_MD) -> c_int { 65 EVP_MD_get_size(md) 66 } 67 68 #[inline] 69 pub unsafe fn EVP_MD_type(md: *const EVP_MD) -> c_int { 70 EVP_MD_get_type(md) 71 } 72 73 #[inline] 74 pub unsafe fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int { 75 EVP_CIPHER_get_key_length(cipher) 76 } 77 78 #[inline] 79 pub unsafe fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int { 80 EVP_CIPHER_get_block_size(cipher) 81 } 82 83 #[inline] 84 pub unsafe fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int { 85 EVP_CIPHER_get_iv_length(cipher) 86 } 87 88 #[inline] 89 pub unsafe fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int { 90 EVP_CIPHER_get_nid(cipher) 91 } 92 93 #[inline] 94 pub unsafe fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int { 95 EVP_CIPHER_CTX_get_block_size(ctx) 96 } 97 98 #[inline] 99 pub unsafe fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int { 100 EVP_CIPHER_CTX_get_key_length(ctx) 101 } 102 103 #[inline] 104 pub unsafe fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int { 105 EVP_CIPHER_CTX_get_iv_length(ctx) 106 } 107 108 #[inline] 109 pub unsafe fn EVP_CIPHER_CTX_num(ctx: *const EVP_CIPHER_CTX) -> c_int { 110 EVP_CIPHER_CTX_get_num(ctx) 111 } 112 } else { 113 pub unsafe fn EVP_MD_CTX_size(ctx: *const EVP_MD_CTX) -> c_int { 114 EVP_MD_size(EVP_MD_CTX_md(ctx)) 115 } 116 } 117} 118#[cfg(not(ossl300))] 119#[inline] 120pub unsafe fn EVP_DigestSignUpdate( 121 ctx: *mut EVP_MD_CTX, 122 data: *const c_void, 123 dsize: size_t, 124) -> c_int { 125 EVP_DigestUpdate(ctx, data, dsize) 126} 127#[cfg(not(ossl300))] 128#[inline] 129pub unsafe fn EVP_DigestVerifyUpdate( 130 ctx: *mut EVP_MD_CTX, 131 data: *const c_void, 132 dsize: size_t, 133) -> c_int { 134 EVP_DigestUpdate(ctx, data, dsize) 135} 136#[cfg(ossl300)] 137#[inline] 138pub unsafe fn EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int { 139 EVP_PKEY_get_size(pkey) 140} 141 142cfg_if! { 143 if #[cfg(ossl300)] { 144 #[inline] 145 pub unsafe fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int { 146 EVP_PKEY_get_id(pkey) 147 } 148 149 #[inline] 150 pub unsafe fn EVP_PKEY_bits(pkey: *const EVP_PKEY) -> c_int { 151 EVP_PKEY_get_bits(pkey) 152 } 153 154 #[inline] 155 pub unsafe fn EVP_PKEY_security_bits(pkey: *const EVP_PKEY) -> c_int { 156 EVP_PKEY_get_security_bits(pkey) 157 } 158 } 159} 160 161pub const EVP_PKEY_OP_KEYGEN: c_int = 1 << 2; 162cfg_if! { 163 if #[cfg(ossl300)] { 164 pub const EVP_PKEY_OP_SIGN: c_int = 1 << 4; 165 pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 5; 166 pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 6; 167 pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 7; 168 pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 8; 169 pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 9; 170 pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 10; 171 pub const EVP_PKEY_OP_DERIVE: c_int = 1 << 11; 172 } else { 173 pub const EVP_PKEY_OP_SIGN: c_int = 1 << 3; 174 pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 4; 175 pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 5; 176 pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 6; 177 pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 7; 178 pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 8; 179 pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 9; 180 pub const EVP_PKEY_OP_DERIVE: c_int = 1 << 10; 181 } 182} 183 184pub const EVP_PKEY_OP_TYPE_SIG: c_int = EVP_PKEY_OP_SIGN 185 | EVP_PKEY_OP_VERIFY 186 | EVP_PKEY_OP_VERIFYRECOVER 187 | EVP_PKEY_OP_SIGNCTX 188 | EVP_PKEY_OP_VERIFYCTX; 189 190pub const EVP_PKEY_OP_TYPE_CRYPT: c_int = EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT; 191 192pub const EVP_PKEY_CTRL_MD: c_int = 1; 193 194pub const EVP_PKEY_CTRL_SET_MAC_KEY: c_int = 6; 195 196pub const EVP_PKEY_CTRL_CIPHER: c_int = 12; 197 198pub const EVP_PKEY_ALG_CTRL: c_int = 0x1000; 199 200#[cfg(ossl111)] 201pub const EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND: c_int = 0; 202 203#[cfg(ossl111)] 204pub const EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY: c_int = 1; 205 206#[cfg(ossl111)] 207pub const EVP_PKEY_HKDEF_MODE_EXPAND_ONLY: c_int = 2; 208 209#[cfg(ossl110)] 210pub const EVP_PKEY_CTRL_HKDF_MD: c_int = EVP_PKEY_ALG_CTRL + 3; 211 212#[cfg(ossl110)] 213pub const EVP_PKEY_CTRL_HKDF_SALT: c_int = EVP_PKEY_ALG_CTRL + 4; 214 215#[cfg(ossl110)] 216pub const EVP_PKEY_CTRL_HKDF_KEY: c_int = EVP_PKEY_ALG_CTRL + 5; 217 218#[cfg(ossl110)] 219pub const EVP_PKEY_CTRL_HKDF_INFO: c_int = EVP_PKEY_ALG_CTRL + 6; 220 221#[cfg(ossl111)] 222pub const EVP_PKEY_CTRL_HKDF_MODE: c_int = EVP_PKEY_ALG_CTRL + 7; 223 224#[cfg(all(ossl111, not(ossl300)))] 225pub unsafe fn EVP_PKEY_CTX_set_hkdf_mode(ctx: *mut EVP_PKEY_CTX, mode: c_int) -> c_int { 226 EVP_PKEY_CTX_ctrl( 227 ctx, 228 -1, 229 EVP_PKEY_OP_DERIVE, 230 EVP_PKEY_CTRL_HKDF_MODE, 231 mode, 232 std::ptr::null_mut(), 233 ) 234} 235 236#[cfg(all(ossl110, not(ossl300)))] 237pub unsafe fn EVP_PKEY_CTX_set_hkdf_md(ctx: *mut EVP_PKEY_CTX, md: *const EVP_MD) -> c_int { 238 EVP_PKEY_CTX_ctrl( 239 ctx, 240 -1, 241 EVP_PKEY_OP_DERIVE, 242 EVP_PKEY_CTRL_HKDF_MD, 243 0, 244 md as *mut c_void, 245 ) 246} 247 248#[cfg(all(ossl110, not(ossl300)))] 249pub unsafe fn EVP_PKEY_CTX_set1_hkdf_salt( 250 ctx: *mut EVP_PKEY_CTX, 251 salt: *const u8, 252 saltlen: c_int, 253) -> c_int { 254 EVP_PKEY_CTX_ctrl( 255 ctx, 256 -1, 257 EVP_PKEY_OP_DERIVE, 258 EVP_PKEY_CTRL_HKDF_SALT, 259 saltlen, 260 salt as *mut c_void, 261 ) 262} 263 264#[cfg(all(ossl110, not(ossl300)))] 265pub unsafe fn EVP_PKEY_CTX_set1_hkdf_key( 266 ctx: *mut EVP_PKEY_CTX, 267 key: *const u8, 268 keylen: c_int, 269) -> c_int { 270 EVP_PKEY_CTX_ctrl( 271 ctx, 272 -1, 273 EVP_PKEY_OP_DERIVE, 274 EVP_PKEY_CTRL_HKDF_KEY, 275 keylen, 276 key as *mut c_void, 277 ) 278} 279 280#[cfg(all(ossl110, not(ossl300)))] 281pub unsafe fn EVP_PKEY_CTX_add1_hkdf_info( 282 ctx: *mut EVP_PKEY_CTX, 283 info: *const u8, 284 infolen: c_int, 285) -> c_int { 286 EVP_PKEY_CTX_ctrl( 287 ctx, 288 -1, 289 EVP_PKEY_OP_DERIVE, 290 EVP_PKEY_CTRL_HKDF_INFO, 291 infolen, 292 info as *mut c_void, 293 ) 294} 295 296#[cfg(all(not(ossl300), not(boringssl)))] 297pub unsafe fn EVP_PKEY_CTX_set_signature_md(cxt: *mut EVP_PKEY_CTX, md: *mut EVP_MD) -> c_int { 298 EVP_PKEY_CTX_ctrl( 299 cxt, 300 -1, 301 EVP_PKEY_OP_TYPE_SIG, 302 EVP_PKEY_CTRL_MD, 303 0, 304 md as *mut c_void, 305 ) 306} 307 308pub unsafe fn EVP_PKEY_assign_RSA(pkey: *mut EVP_PKEY, rsa: *mut RSA) -> c_int { 309 EVP_PKEY_assign(pkey, EVP_PKEY_RSA, rsa as *mut c_void) 310} 311 312pub unsafe fn EVP_PKEY_assign_DSA(pkey: *mut EVP_PKEY, dsa: *mut DSA) -> c_int { 313 EVP_PKEY_assign(pkey, EVP_PKEY_DSA, dsa as *mut c_void) 314} 315 316pub unsafe fn EVP_PKEY_assign_DH(pkey: *mut EVP_PKEY, dh: *mut DH) -> c_int { 317 EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh as *mut c_void) 318} 319 320pub unsafe fn EVP_PKEY_assign_EC_KEY(pkey: *mut EVP_PKEY, ec_key: *mut EC_KEY) -> c_int { 321 EVP_PKEY_assign(pkey, EVP_PKEY_EC, ec_key as *mut c_void) 322} 323