Skip to content

Commit

Permalink
Merge pull request #33 from daxpedda/edward-montgomery-support
Browse files Browse the repository at this point in the history
EC Edward and Montgomery support
  • Loading branch information
hug-dev authored Jul 19, 2021
2 parents dbebce9 + 9e6ca1d commit 2d9ba34
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 0 deletions.
1 change: 1 addition & 0 deletions cryptoki-sys/pkcs11.h
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,7 @@ typedef unsigned long ck_mechanism_type_t;

/* From version 3.0 */
#define CKM_EC_EDWARDS_KEY_PAIR_GEN (0x1055UL)
#define CKM_EC_MONTGOMERY_KEY_PAIR_GEN (0x1056UL)
#define CKM_EDDSA (0x1057UL)

/* Attribute and other constants related to OTP */
Expand Down
4 changes: 4 additions & 0 deletions cryptoki-sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ pub const CKK_SEED: CK_KEY_TYPE = 0x0000002F;
pub const CKK_GOSTR3410: CK_KEY_TYPE = 0x00000030;
pub const CKK_GOSTR3411: CK_KEY_TYPE = 0x00000031;
pub const CKK_GOST28147: CK_KEY_TYPE = 0x00000032;
pub const CKK_EC_EDWARDS: CK_KEY_TYPE = 0x00000040;
pub const CKK_EC_MONTGOMERY: CK_KEY_TYPE = 0x00000041;
pub const CKK_VENDOR_DEFINED: CK_KEY_TYPE = 0x80000000;
pub const CKC_X_509: CK_CERTIFICATE_TYPE = 0x00000000;
pub const CKC_X_509_ATTR_CERT: CK_CERTIFICATE_TYPE = 0x00000001;
Expand Down Expand Up @@ -621,6 +623,8 @@ pub const CKM_AES_KEY_WRAP: CK_MECHANISM_TYPE = 0x00002109;
pub const CKM_AES_KEY_WRAP_PAD: CK_MECHANISM_TYPE = 0x0000210A;
pub const CKM_RSA_PKCS_TPM_1_1: CK_MECHANISM_TYPE = 0x00004001;
pub const CKM_RSA_PKCS_OAEP_TPM_1_1: CK_MECHANISM_TYPE = 0x00004002;
pub const CKM_EC_EDWARDS_KEY_PAIR_GEN: CK_MECHANISM_TYPE = 0x00001055;
pub const CKM_EC_MONTGOMERY_KEY_PAIR_GEN: CK_MECHANISM_TYPE = 0x00001056;
pub const CK_OTP_FORMAT_DECIMAL: CK_ULONG = 0;
pub const CK_OTP_FORMAT_HEXADECIMAL: CK_ULONG = 1;
pub const CK_OTP_FORMAT_ALPHANUMERIC: CK_ULONG = 2;
Expand Down
18 changes: 18 additions & 0 deletions cryptoki/src/types/mechanism/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ impl MechanismType {
pub const ECC_KEY_PAIR_GEN: MechanismType = MechanismType {
val: CKM_EC_KEY_PAIR_GEN,
};
/// EC edwards key pair generation mechanism
pub const ECC_EDWARDS_KEY_PAIR_GEN: MechanismType = MechanismType {
val: CKM_EC_EDWARDS_KEY_PAIR_GEN,
};
/// EC montgomery key pair generation mechanism
pub const ECC_MONTGOMERY_KEY_PAIR_GEN: MechanismType = MechanismType {
val: CKM_EC_MONTGOMERY_KEY_PAIR_GEN,
};

/// ECDH key derivation mechanism
pub const ECDH1_DERIVE: MechanismType = MechanismType {
Expand Down Expand Up @@ -110,6 +118,8 @@ impl TryFrom<CK_MECHANISM_TYPE> for MechanismType {
CKM_SHA384 => Ok(MechanismType::SHA384),
CKM_SHA512 => Ok(MechanismType::SHA512),
CKM_EC_KEY_PAIR_GEN => Ok(MechanismType::ECC_KEY_PAIR_GEN),
CKM_EC_EDWARDS_KEY_PAIR_GEN => Ok(MechanismType::ECC_EDWARDS_KEY_PAIR_GEN),
CKM_EC_MONTGOMERY_KEY_PAIR_GEN => Ok(MechanismType::ECC_MONTGOMERY_KEY_PAIR_GEN),
CKM_ECDH1_DERIVE => Ok(MechanismType::ECDH1_DERIVE),
CKM_ECDSA => Ok(MechanismType::ECDSA),
CKM_SHA256_RSA_PKCS => Ok(MechanismType::SHA256_RSA_PKCS),
Expand Down Expand Up @@ -143,6 +153,10 @@ pub enum Mechanism {
// ECC
/// EC key pair generation
EccKeyPairGen,
/// EC edwards key pair generation
EccEdwardsKeyPairGen,
/// EC montgomery key pair generation
EccMontgomeryKeyPairGen,
/// ECDH
Ecdh1Derive(elliptic_curve::Ecdh1DeriveParams),
/// ECDSA mechanism
Expand Down Expand Up @@ -177,6 +191,8 @@ impl Mechanism {
Mechanism::RsaPkcsOaep(_) => MechanismType::RSA_PKCS_OAEP,

Mechanism::EccKeyPairGen => MechanismType::ECC_KEY_PAIR_GEN,
Mechanism::EccEdwardsKeyPairGen => MechanismType::ECC_EDWARDS_KEY_PAIR_GEN,
Mechanism::EccMontgomeryKeyPairGen => MechanismType::ECC_MONTGOMERY_KEY_PAIR_GEN,
Mechanism::Ecdh1Derive(_) => MechanismType::ECDH1_DERIVE,
Mechanism::Ecdsa => MechanismType::ECDSA,

Expand Down Expand Up @@ -225,6 +241,8 @@ impl From<&Mechanism> for CK_MECHANISM {
| Mechanism::Sha384
| Mechanism::Sha512
| Mechanism::EccKeyPairGen
| Mechanism::EccEdwardsKeyPairGen
| Mechanism::EccMontgomeryKeyPairGen
| Mechanism::Ecdsa
| Mechanism::Sha256RsaPkcs
| Mechanism::Sha384RsaPkcs
Expand Down
10 changes: 10 additions & 0 deletions cryptoki/src/types/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,14 @@ impl KeyType {
pub const RSA: KeyType = KeyType { val: CKK_RSA };
/// EC key
pub const EC: KeyType = KeyType { val: CKK_EC };
/// EC edwards key
pub const EC_EDWARDS: KeyType = KeyType {
val: CKK_EC_EDWARDS,
};
/// EC montgomery key
pub const EC_MONTGOMERY: KeyType = KeyType {
val: CKK_EC_MONTGOMERY,
};
/// Generic secret
pub const GENERIC_SECRET: KeyType = KeyType {
val: CKK_GENERIC_SECRET,
Expand Down Expand Up @@ -545,6 +553,8 @@ impl TryFrom<CK_KEY_TYPE> for KeyType {
match key_type {
CKK_RSA => Ok(KeyType::RSA),
CKK_EC => Ok(KeyType::EC),
CKK_EC_EDWARDS => Ok(KeyType::EC_EDWARDS),
CKK_EC_MONTGOMERY => Ok(KeyType::EC_MONTGOMERY),
CKK_GENERIC_SECRET => Ok(KeyType::GENERIC_SECRET),
other => {
error!("Key type {} is not supported.", other);
Expand Down

0 comments on commit 2d9ba34

Please sign in to comment.