Skip to content

Commit 3dd1430

Browse files
committed
TODO(split that): Add support for SP.800-38F key wrapping
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf Signed-off-by: Arthur Gautier <[email protected]>
1 parent 7512207 commit 3dd1430

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

cryptoki-sys/pkcs11.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,7 @@ typedef unsigned long ck_mechanism_type_t;
879879

880880
#define CKM_AES_KEY_WRAP (0x2109UL)
881881
#define CKM_AES_KEY_WRAP_PAD (0x210aUL)
882+
#define CKM_AES_KEY_WRAP_KWP (0x210BUL)
882883

883884
#define CKM_RSA_PKCS_TPM_1_1 (0x4001UL)
884885
#define CKM_RSA_PKCS_OAEP_TPM_1_1 (0x4002UL)

cryptoki-sys/src/bindings/x86_64-unknown-linux-gnu.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ pub const CKM_CAMELLIA_ECB_ENCRYPT_DATA: CK_MECHANISM_TYPE = 1366;
525525
pub const CKM_CAMELLIA_CBC_ENCRYPT_DATA: CK_MECHANISM_TYPE = 1367;
526526
pub const CKM_AES_KEY_WRAP: CK_MECHANISM_TYPE = 8457;
527527
pub const CKM_AES_KEY_WRAP_PAD: CK_MECHANISM_TYPE = 8458;
528+
pub const CKM_AES_KEY_WRAP_KWP: CK_MECHANISM_TYPE = 8459;
528529
pub const CKM_RSA_PKCS_TPM_1_1: CK_MECHANISM_TYPE = 16385;
529530
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;

cryptoki/src/mechanism/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ impl MechanismType {
6363
pub const AES_KEY_WRAP_PAD: MechanismType = MechanismType {
6464
val: CKM_AES_KEY_WRAP_PAD,
6565
};
66+
/// AES key wrap mechanism. The CKM_AES_KEY_WRAP_KWP mechanism can wrap a key or encrypt block of data of any length.
67+
pub const AES_KEY_WRAP_KWP: MechanismType = MechanismType {
68+
val: CKM_AES_KEY_WRAP_KWP,
69+
};
6670
/// AES-GCM mechanism
6771
pub const AES_GCM: MechanismType = MechanismType { val: CKM_AES_GCM };
6872

@@ -609,6 +613,7 @@ impl MechanismType {
609613
}
610614
CKM_AES_KEY_WRAP => String::from(stringify!(CKM_AES_KEY_WRAP)),
611615
CKM_AES_KEY_WRAP_PAD => String::from(stringify!(CKM_AES_KEY_WRAP_PAD)),
616+
CKM_AES_KEY_WRAP_KWP => String::from(stringify!(CKM_AES_KEY_WRAP_KWP)),
612617
CKM_RSA_PKCS_TPM_1_1 => String::from(stringify!(CKM_RSA_PKCS_TPM_1_1)),
613618
CKM_RSA_PKCS_OAEP_TPM_1_1 => String::from(stringify!(CKM_RSA_PKCS_OAEP_TPM_1_1)),
614619
CKM_EC_EDWARDS_KEY_PAIR_GEN => String::from(stringify!(CKM_EC_EDWARDS_KEY_PAIR_GEN)),
@@ -708,6 +713,8 @@ pub enum Mechanism<'a> {
708713
AesKeyWrap,
709714
/// AES key wrap with padding block
710715
AesKeyWrapPad,
716+
/// AES key wrap with padding (CKM_AES_KEY_WRAP_KWP)
717+
AesKeyWrapWithPadding(Option<[u8; 4]>),
711718
/// AES-GCM mechanism
712719
AesGcm(aead::GcmParams<'a>),
713720
/// AES-CBC-ENCRYPT-DATA mechanism
@@ -863,6 +870,7 @@ impl Mechanism<'_> {
863870
Mechanism::AesCbcPad(_) => MechanismType::AES_CBC_PAD,
864871
Mechanism::AesKeyWrap => MechanismType::AES_KEY_WRAP,
865872
Mechanism::AesKeyWrapPad => MechanismType::AES_KEY_WRAP_PAD,
873+
Mechanism::AesKeyWrapWithPadding(_) => MechanismType::AES_KEY_WRAP_KWP,
866874
Mechanism::AesGcm(_) => MechanismType::AES_GCM,
867875
Mechanism::AesCbcEncryptData(_) => MechanismType::AES_CBC_ENCRYPT_DATA,
868876
Mechanism::AesCMac => MechanismType::AES_CMAC,
@@ -945,11 +953,13 @@ impl From<&Mechanism<'_>> for CK_MECHANISM {
945953
| Mechanism::Sha512RsaPkcsPss(params) => make_mechanism(mechanism, params),
946954
Mechanism::RsaPkcsOaep(params) => make_mechanism(mechanism, params),
947955
Mechanism::Ecdh1Derive(params) => make_mechanism(mechanism, params),
956+
Mechanism::AesKeyWrapWithPadding(Some(params)) => make_mechanism(mechanism, params),
948957
// Mechanisms without parameters
949958
Mechanism::AesKeyGen
950959
| Mechanism::AesEcb
951960
| Mechanism::AesKeyWrap
952961
| Mechanism::AesKeyWrapPad
962+
| Mechanism::AesKeyWrapWithPadding(None)
953963
| Mechanism::AesCMac
954964
| Mechanism::RsaPkcsKeyPairGen
955965
| Mechanism::RsaPkcs

0 commit comments

Comments
 (0)