Skip to content

Commit 9e4fe4b

Browse files
committed
feat: add HKDF mechanisms
Signed-off-by: Direktor799 <[email protected]>
1 parent 024976f commit 9e4fe4b

15 files changed

+1586
-1
lines changed

cryptoki-sys/pkcs11.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,15 @@ extern "C" {
207207
#define string_data pData
208208
#define string_data_len ulLen
209209
#define data_params pData
210+
#define extract bExtract
211+
#define expand bExpand
212+
#define prf_hash_mechanism prfHashMechanism
213+
#define salt_type ulSaltType
214+
#define salt_ptr pSalt
215+
#define salt_len ulSaltLen
216+
#define salt_key hSaltKey
217+
#define info_ptr pInfo
218+
#define info_len ulInfoLen
210219
#endif /* CRYPTOKI_COMPAT */
211220

212221

@@ -402,6 +411,10 @@ typedef unsigned long ck_key_type_t;
402411
#define CKK_GOSTR3411 (0x31UL)
403412
#define CKK_GOST28147 (0x32UL)
404413
#define CKK_EC_EDWARDS (0x40UL)
414+
415+
/* From version 3.0 */
416+
#define CKK_HKDF (0x42UL)
417+
405418
#define CKK_VENDOR_DEFINED ((unsigned long) (1UL << 31))
406419

407420

@@ -888,6 +901,10 @@ typedef unsigned long ck_mechanism_type_t;
888901
#define CKM_EC_MONTGOMERY_KEY_PAIR_GEN (0x1056UL)
889902
#define CKM_EDDSA (0x1057UL)
890903

904+
#define CKM_HKDF_DERIVE (0x402aUL)
905+
#define CKM_HKDF_DATA (0x402bUL)
906+
#define CKM_HKDF_KEY_GEN (0x402cUL)
907+
891908
/* Attribute and other constants related to OTP */
892909
#define CK_OTP_FORMAT_DECIMAL (0UL)
893910
#define CK_OTP_FORMAT_HEXADECIMAL (1UL)
@@ -1029,6 +1046,22 @@ struct ck_aes_cbc_encrypt_data_params {
10291046
unsigned long length;
10301047
};
10311048

1049+
#define CKF_HKDF_SALT_NULL (0x01UL)
1050+
#define CKF_HKDF_SALT_DATA (0x02UL)
1051+
#define CKF_HKDF_SALT_KEY (0x04UL)
1052+
1053+
struct ck_hkdf_params {
1054+
unsigned char extract;
1055+
unsigned char expand;
1056+
ck_mechanism_type_t prf_hash_mechanism;
1057+
unsigned long salt_type;
1058+
unsigned char *salt_ptr;
1059+
unsigned long salt_len;
1060+
ck_object_handle_t salt_key;
1061+
unsigned char *info_ptr;
1062+
unsigned long info_len;
1063+
};
1064+
10321065
#define CKF_HW (1UL << 0)
10331066
#define CKF_ENCRYPT (1UL << 8)
10341067
#define CKF_DECRYPT (1UL << 9)
@@ -1644,6 +1677,9 @@ typedef struct ck_des_cbc_encrypt_data_params *CK_DES_CBC_ENCRYPT_DATA_PARAMS_PT
16441677
typedef struct ck_aes_cbc_encrypt_data_params CK_AES_CBC_ENCRYPT_DATA_PARAMS;
16451678
typedef struct ck_aes_cbc_encrypt_data_params *CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
16461679

1680+
typedef struct ck_hkdf_params CK_HKDF_PARAMS;
1681+
typedef struct ck_hkdf_params *CK_HKDF_PARAMS_PTR;
1682+
16471683
#ifndef NULL_PTR
16481684
#define NULL_PTR NULL
16491685
#endif

cryptoki-sys/src/bindings/aarch64-apple-darwin.rs

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ pub const CKK_GOSTR3410: CK_KEY_TYPE = 48;
9191
pub const CKK_GOSTR3411: CK_KEY_TYPE = 49;
9292
pub const CKK_GOST28147: CK_KEY_TYPE = 50;
9393
pub const CKK_EC_EDWARDS: CK_KEY_TYPE = 64;
94+
pub const CKK_HKDF: CK_KEY_TYPE = 66;
9495
pub const CKC_X_509: CK_CERTIFICATE_TYPE = 0;
9596
pub const CKC_X_509_ATTR_CERT: CK_CERTIFICATE_TYPE = 1;
9697
pub const CKC_WTLS: CK_CERTIFICATE_TYPE = 2;
@@ -530,6 +531,9 @@ pub const CKM_RSA_PKCS_OAEP_TPM_1_1: CK_MECHANISM_TYPE = 16386;
530531
pub const CKM_EC_EDWARDS_KEY_PAIR_GEN: CK_MECHANISM_TYPE = 4181;
531532
pub const CKM_EC_MONTGOMERY_KEY_PAIR_GEN: CK_MECHANISM_TYPE = 4182;
532533
pub const CKM_EDDSA: CK_MECHANISM_TYPE = 4183;
534+
pub const CKM_HKDF_DERIVE: CK_MECHANISM_TYPE = 16426;
535+
pub const CKM_HKDF_DATA: CK_MECHANISM_TYPE = 16427;
536+
pub const CKM_HKDF_KEY_GEN: CK_MECHANISM_TYPE = 16428;
533537
pub const CK_OTP_FORMAT_DECIMAL: CK_ULONG = 0;
534538
pub const CK_OTP_FORMAT_HEXADECIMAL: CK_ULONG = 1;
535539
pub const CK_OTP_FORMAT_ALPHANUMERIC: CK_ULONG = 2;
@@ -566,6 +570,9 @@ pub const CKD_SHA256_KDF: CK_EC_KDF_TYPE = 6;
566570
pub const CKD_SHA384_KDF: CK_EC_KDF_TYPE = 7;
567571
pub const CKD_SHA512_KDF: CK_EC_KDF_TYPE = 8;
568572
pub const CKD_CPDIVERSIFY_KDF: CK_EC_KDF_TYPE = 9;
573+
pub const CKF_HKDF_SALT_NULL: CK_FLAGS = 1;
574+
pub const CKF_HKDF_SALT_DATA: CK_FLAGS = 2;
575+
pub const CKF_HKDF_SALT_KEY: CK_FLAGS = 4;
569576
pub const CKF_HW: CK_FLAGS = 1;
570577
pub const CKF_ENCRYPT: CK_FLAGS = 256;
571578
pub const CKF_DECRYPT: CK_FLAGS = 512;
@@ -2105,6 +2112,133 @@ impl Default for ck_aes_cbc_encrypt_data_params {
21052112
}
21062113
}
21072114
}
2115+
#[repr(C)]
2116+
#[derive(Debug, Copy, Clone)]
2117+
pub struct ck_hkdf_params {
2118+
pub bExtract: ::std::os::raw::c_uchar,
2119+
pub bExpand: ::std::os::raw::c_uchar,
2120+
pub prfHashMechanism: CK_MECHANISM_TYPE,
2121+
pub ulSaltType: ::std::os::raw::c_ulong,
2122+
pub pSalt: *mut ::std::os::raw::c_uchar,
2123+
pub ulSaltLen: ::std::os::raw::c_ulong,
2124+
pub hSaltKey: CK_OBJECT_HANDLE,
2125+
pub pInfo: *mut ::std::os::raw::c_uchar,
2126+
pub ulInfoLen: ::std::os::raw::c_ulong,
2127+
}
2128+
#[test]
2129+
fn bindgen_test_layout_ck_hkdf_params() {
2130+
const UNINIT: ::std::mem::MaybeUninit<ck_hkdf_params> = ::std::mem::MaybeUninit::uninit();
2131+
let ptr = UNINIT.as_ptr();
2132+
assert_eq!(
2133+
::std::mem::size_of::<ck_hkdf_params>(),
2134+
64usize,
2135+
concat!("Size of: ", stringify!(ck_hkdf_params))
2136+
);
2137+
assert_eq!(
2138+
::std::mem::align_of::<ck_hkdf_params>(),
2139+
8usize,
2140+
concat!("Alignment of ", stringify!(ck_hkdf_params))
2141+
);
2142+
assert_eq!(
2143+
unsafe { ::std::ptr::addr_of!((*ptr).bExtract) as usize - ptr as usize },
2144+
0usize,
2145+
concat!(
2146+
"Offset of field: ",
2147+
stringify!(ck_hkdf_params),
2148+
"::",
2149+
stringify!(bExtract)
2150+
)
2151+
);
2152+
assert_eq!(
2153+
unsafe { ::std::ptr::addr_of!((*ptr).bExpand) as usize - ptr as usize },
2154+
1usize,
2155+
concat!(
2156+
"Offset of field: ",
2157+
stringify!(ck_hkdf_params),
2158+
"::",
2159+
stringify!(bExpand)
2160+
)
2161+
);
2162+
assert_eq!(
2163+
unsafe { ::std::ptr::addr_of!((*ptr).prfHashMechanism) as usize - ptr as usize },
2164+
8usize,
2165+
concat!(
2166+
"Offset of field: ",
2167+
stringify!(ck_hkdf_params),
2168+
"::",
2169+
stringify!(prfHashMechanism)
2170+
)
2171+
);
2172+
assert_eq!(
2173+
unsafe { ::std::ptr::addr_of!((*ptr).ulSaltType) as usize - ptr as usize },
2174+
16usize,
2175+
concat!(
2176+
"Offset of field: ",
2177+
stringify!(ck_hkdf_params),
2178+
"::",
2179+
stringify!(ulSaltType)
2180+
)
2181+
);
2182+
assert_eq!(
2183+
unsafe { ::std::ptr::addr_of!((*ptr).pSalt) as usize - ptr as usize },
2184+
24usize,
2185+
concat!(
2186+
"Offset of field: ",
2187+
stringify!(ck_hkdf_params),
2188+
"::",
2189+
stringify!(pSalt)
2190+
)
2191+
);
2192+
assert_eq!(
2193+
unsafe { ::std::ptr::addr_of!((*ptr).ulSaltLen) as usize - ptr as usize },
2194+
32usize,
2195+
concat!(
2196+
"Offset of field: ",
2197+
stringify!(ck_hkdf_params),
2198+
"::",
2199+
stringify!(ulSaltLen)
2200+
)
2201+
);
2202+
assert_eq!(
2203+
unsafe { ::std::ptr::addr_of!((*ptr).hSaltKey) as usize - ptr as usize },
2204+
40usize,
2205+
concat!(
2206+
"Offset of field: ",
2207+
stringify!(ck_hkdf_params),
2208+
"::",
2209+
stringify!(hSaltKey)
2210+
)
2211+
);
2212+
assert_eq!(
2213+
unsafe { ::std::ptr::addr_of!((*ptr).pInfo) as usize - ptr as usize },
2214+
48usize,
2215+
concat!(
2216+
"Offset of field: ",
2217+
stringify!(ck_hkdf_params),
2218+
"::",
2219+
stringify!(pInfo)
2220+
)
2221+
);
2222+
assert_eq!(
2223+
unsafe { ::std::ptr::addr_of!((*ptr).ulInfoLen) as usize - ptr as usize },
2224+
56usize,
2225+
concat!(
2226+
"Offset of field: ",
2227+
stringify!(ck_hkdf_params),
2228+
"::",
2229+
stringify!(ulInfoLen)
2230+
)
2231+
);
2232+
}
2233+
impl Default for ck_hkdf_params {
2234+
fn default() -> Self {
2235+
let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
2236+
unsafe {
2237+
::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
2238+
s.assume_init()
2239+
}
2240+
}
2241+
}
21082242
pub type CK_RV = ::std::os::raw::c_ulong;
21092243
pub type CK_NOTIFY = ::std::option::Option<
21102244
unsafe extern "C" fn(
@@ -3517,6 +3651,8 @@ pub type CK_DES_CBC_ENCRYPT_DATA_PARAMS = ck_des_cbc_encrypt_data_params;
35173651
pub type CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR = *mut ck_des_cbc_encrypt_data_params;
35183652
pub type CK_AES_CBC_ENCRYPT_DATA_PARAMS = ck_aes_cbc_encrypt_data_params;
35193653
pub type CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR = *mut ck_aes_cbc_encrypt_data_params;
3654+
pub type CK_HKDF_PARAMS = ck_hkdf_params;
3655+
pub type CK_HKDF_PARAMS_PTR = *mut ck_hkdf_params;
35203656
extern crate libloading;
35213657
pub struct Pkcs11 {
35223658
__library: ::libloading::Library,

0 commit comments

Comments
 (0)