use cryptoki_sys::*;
use std::convert::TryFrom;
use crate::util::attribute::{AttrData, AttributeError};
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
strum::EnumIter,
strum::FromRepr,
)]
#[repr(u64)]
pub enum KeyType {
#[serde(rename = "CKK_RSA")]
#[strum(serialize = "CKK_RSA", serialize = "Rsa", serialize = "rsa")]
Rsa = CKK_RSA,
#[serde(rename = "CKK_DSA")]
#[strum(serialize = "CKK_DSA", serialize = "Dsa", serialize = "dsa")]
Dsa = CKK_DSA,
#[serde(rename = "CKK_DH")]
#[strum(serialize = "CKK_DH", serialize = "Dh", serialize = "dh")]
Dh = CKK_DH,
#[serde(rename = "CKK_EC")]
#[strum(serialize = "CKK_EC", serialize = "Ec", serialize = "ec")]
Ec = CKK_EC,
#[serde(rename = "CKK_X9_42_DH")]
#[strum(
serialize = "CKK_X9_42_DH",
serialize = "X942Dh",
serialize = "x9_42_dh"
)]
X942Dh = CKK_X9_42_DH,
#[serde(rename = "CKK_KEA")]
#[strum(serialize = "CKK_KEA", serialize = "Kea", serialize = "kea")]
Kea = CKK_KEA,
#[serde(rename = "CKK_GENERIC_SECRET")]
#[strum(
serialize = "CKK_GENERIC_SECRET",
serialize = "GenericSecret",
serialize = "generic_secret"
)]
GenericSecret = CKK_GENERIC_SECRET,
#[serde(rename = "CKK_RC2")]
#[strum(serialize = "CKK_RC2", serialize = "Rc2", serialize = "rc2")]
Rc2 = CKK_RC2,
#[serde(rename = "CKK_RC4")]
#[strum(serialize = "CKK_RC4", serialize = "Rc4", serialize = "rc4")]
Rc4 = CKK_RC4,
#[serde(rename = "CKK_DES")]
#[strum(serialize = "CKK_DES", serialize = "Des", serialize = "des")]
Des = CKK_DES,
#[serde(rename = "CKK_DES2")]
#[strum(serialize = "CKK_DES2", serialize = "Des2", serialize = "des2")]
Des2 = CKK_DES2,
#[serde(rename = "CKK_DES3")]
#[strum(serialize = "CKK_DES3", serialize = "Des3", serialize = "des3")]
Des3 = CKK_DES3,
#[serde(rename = "CKK_CAST")]
#[strum(serialize = "CKK_CAST", serialize = "Cast", serialize = "cast")]
Cast = CKK_CAST,
#[serde(rename = "CKK_CAST3")]
#[strum(serialize = "CKK_CAST3", serialize = "Cast3", serialize = "cast3")]
Cast3 = CKK_CAST3,
#[serde(rename = "CKK_CAST128")]
#[strum(
serialize = "CKK_CAST128",
serialize = "Cast128",
serialize = "cast128"
)]
Cast128 = CKK_CAST128,
#[serde(rename = "CKK_RC5")]
#[strum(serialize = "CKK_RC5", serialize = "Rc5", serialize = "rc5")]
Rc5 = CKK_RC5,
#[serde(rename = "CKK_IDEA")]
#[strum(serialize = "CKK_IDEA", serialize = "Idea", serialize = "idea")]
Idea = CKK_IDEA,
#[serde(rename = "CKK_SKIPJACK")]
#[strum(
serialize = "CKK_SKIPJACK",
serialize = "Skipjack",
serialize = "skipjack"
)]
Skipjack = CKK_SKIPJACK,
#[serde(rename = "CKK_BATON")]
#[strum(serialize = "CKK_BATON", serialize = "Baton", serialize = "baton")]
Baton = CKK_BATON,
#[serde(rename = "CKK_JUNIPER")]
#[strum(
serialize = "CKK_JUNIPER",
serialize = "Juniper",
serialize = "juniper"
)]
Juniper = CKK_JUNIPER,
#[serde(rename = "CKK_CDMF")]
#[strum(serialize = "CKK_CDMF", serialize = "Cdmf", serialize = "cdmf")]
Cdmf = CKK_CDMF,
#[serde(rename = "CKK_AES")]
#[strum(serialize = "CKK_AES", serialize = "Aes", serialize = "aes")]
Aes = CKK_AES,
#[serde(rename = "CKK_BLOWFISH")]
#[strum(
serialize = "CKK_BLOWFISH",
serialize = "Blowfish",
serialize = "blowfish"
)]
Blowfish = CKK_BLOWFISH,
#[serde(rename = "CKK_TWOFISH")]
#[strum(
serialize = "CKK_TWOFISH",
serialize = "Twofish",
serialize = "twofish"
)]
Twofish = CKK_TWOFISH,
#[serde(rename = "CKK_SECURID")]
#[strum(
serialize = "CKK_SECURID",
serialize = "Securid",
serialize = "securid"
)]
Securid = CKK_SECURID,
#[serde(rename = "CKK_HOTP")]
#[strum(serialize = "CKK_HOTP", serialize = "Hotp", serialize = "hotp")]
Hotp = CKK_HOTP,
#[serde(rename = "CKK_ACTI")]
#[strum(serialize = "CKK_ACTI", serialize = "Acti", serialize = "acti")]
Acti = CKK_ACTI,
#[serde(rename = "CKK_CAMELLIA")]
#[strum(
serialize = "CKK_CAMELLIA",
serialize = "Camellia",
serialize = "camellia"
)]
Camellia = CKK_CAMELLIA,
#[serde(rename = "CKK_ARIA")]
#[strum(serialize = "CKK_ARIA", serialize = "Aria", serialize = "aria")]
Aria = CKK_ARIA,
#[serde(rename = "CKK_MD5_HMAC")]
#[strum(
serialize = "CKK_MD5_HMAC",
serialize = "Md5Hmac",
serialize = "md5_hmac"
)]
Md5Hmac = CKK_MD5_HMAC,
#[serde(rename = "CKK_SHA_1_HMAC")]
#[strum(
serialize = "CKK_SHA_1_HMAC",
serialize = "Sha1Hmac",
serialize = "sha_1_hmac"
)]
Sha1Hmac = CKK_SHA_1_HMAC,
#[serde(rename = "CKK_RIPEMD128_HMAC")]
#[strum(
serialize = "CKK_RIPEMD128_HMAC",
serialize = "Ripemd128Hmac",
serialize = "ripemd128_hmac"
)]
Ripemd128Hmac = CKK_RIPEMD128_HMAC,
#[serde(rename = "CKK_RIPEMD160_HMAC")]
#[strum(
serialize = "CKK_RIPEMD160_HMAC",
serialize = "Ripemd160Hmac",
serialize = "ripemd160_hmac"
)]
Ripemd160Hmac = CKK_RIPEMD160_HMAC,
#[serde(rename = "CKK_SHA256_HMAC")]
#[strum(
serialize = "CKK_SHA256_HMAC",
serialize = "Sha256Hmac",
serialize = "sha256_hmac"
)]
Sha256Hmac = CKK_SHA256_HMAC,
#[serde(rename = "CKK_SHA384_HMAC")]
#[strum(
serialize = "CKK_SHA384_HMAC",
serialize = "Sha384Hmac",
serialize = "sha384_hmac"
)]
Sha384Hmac = CKK_SHA384_HMAC,
#[serde(rename = "CKK_SHA512_HMAC")]
#[strum(
serialize = "CKK_SHA512_HMAC",
serialize = "Sha512Hmac",
serialize = "sha512_hmac"
)]
Sha512Hmac = CKK_SHA512_HMAC,
#[serde(rename = "CKK_SHA224_HMAC")]
#[strum(
serialize = "CKK_SHA224_HMAC",
serialize = "Sha224Hmac",
serialize = "sha224_hmac"
)]
Sha224Hmac = CKK_SHA224_HMAC,
#[serde(rename = "CKK_SEED")]
#[strum(serialize = "CKK_SEED", serialize = "Seed", serialize = "seed")]
Seed = CKK_SEED,
#[serde(rename = "CKK_GOSTR3410")]
#[strum(
serialize = "CKK_GOSTR3410",
serialize = "Gostr3410",
serialize = "gostr3410"
)]
Gostr3410 = CKK_GOSTR3410,
#[serde(rename = "CKK_GOSTR3411")]
#[strum(
serialize = "CKK_GOSTR3411",
serialize = "Gostr3411",
serialize = "gostr3411"
)]
Gostr3411 = CKK_GOSTR3411,
#[serde(rename = "CKK_GOST28147")]
#[strum(
serialize = "CKK_GOST28147",
serialize = "Gost28147",
serialize = "gost28147"
)]
Gost28147 = CKK_GOST28147,
#[serde(rename = "CKK_CHACHA20")]
#[strum(
serialize = "CKK_CHACHA20",
serialize = "Chacha20",
serialize = "chacha20"
)]
Chacha20 = CKK_CHACHA20,
#[serde(rename = "CKK_POLY1305")]
#[strum(
serialize = "CKK_POLY1305",
serialize = "Poly1305",
serialize = "poly1305"
)]
Poly1305 = CKK_POLY1305,
#[serde(rename = "CKK_AES_XTS")]
#[strum(serialize = "CKK_AES_XTS", serialize = "AesXts", serialize = "aes_xts")]
AesXts = CKK_AES_XTS,
#[serde(rename = "CKK_SHA3_224_HMAC")]
#[strum(
serialize = "CKK_SHA3_224_HMAC",
serialize = "Sha3224Hmac",
serialize = "sha3_224_hmac"
)]
Sha3224Hmac = CKK_SHA3_224_HMAC,
#[serde(rename = "CKK_SHA3_256_HMAC")]
#[strum(
serialize = "CKK_SHA3_256_HMAC",
serialize = "Sha3256Hmac",
serialize = "sha3_256_hmac"
)]
Sha3256Hmac = CKK_SHA3_256_HMAC,
#[serde(rename = "CKK_SHA3_384_HMAC")]
#[strum(
serialize = "CKK_SHA3_384_HMAC",
serialize = "Sha3384Hmac",
serialize = "sha3_384_hmac"
)]
Sha3384Hmac = CKK_SHA3_384_HMAC,
#[serde(rename = "CKK_SHA3_512_HMAC")]
#[strum(
serialize = "CKK_SHA3_512_HMAC",
serialize = "Sha3512Hmac",
serialize = "sha3_512_hmac"
)]
Sha3512Hmac = CKK_SHA3_512_HMAC,
#[serde(rename = "CKK_BLAKE2B_160_HMAC")]
#[strum(
serialize = "CKK_BLAKE2B_160_HMAC",
serialize = "Blake2b160Hmac",
serialize = "blake2b_160_hmac"
)]
Blake2b160Hmac = CKK_BLAKE2B_160_HMAC,
#[serde(rename = "CKK_BLAKE2B_256_HMAC")]
#[strum(
serialize = "CKK_BLAKE2B_256_HMAC",
serialize = "Blake2b256Hmac",
serialize = "blake2b_256_hmac"
)]
Blake2b256Hmac = CKK_BLAKE2B_256_HMAC,
#[serde(rename = "CKK_BLAKE2B_384_HMAC")]
#[strum(
serialize = "CKK_BLAKE2B_384_HMAC",
serialize = "Blake2b384Hmac",
serialize = "blake2b_384_hmac"
)]
Blake2b384Hmac = CKK_BLAKE2B_384_HMAC,
#[serde(rename = "CKK_BLAKE2B_512_HMAC")]
#[strum(
serialize = "CKK_BLAKE2B_512_HMAC",
serialize = "Blake2b512Hmac",
serialize = "blake2b_512_hmac"
)]
Blake2b512Hmac = CKK_BLAKE2B_512_HMAC,
#[serde(rename = "CKK_SALSA20")]
#[strum(
serialize = "CKK_SALSA20",
serialize = "Salsa20",
serialize = "salsa20"
)]
Salsa20 = CKK_SALSA20,
#[serde(rename = "CKK_X2RATCHET")]
#[strum(
serialize = "CKK_X2RATCHET",
serialize = "X2ratchet",
serialize = "x2ratchet"
)]
X2ratchet = CKK_X2RATCHET,
#[serde(rename = "CKK_EC_EDWARDS")]
#[strum(
serialize = "CKK_EC_EDWARDS",
serialize = "EcEdwards",
serialize = "ec_edwards"
)]
EcEdwards = CKK_EC_EDWARDS,
#[serde(rename = "CKK_EC_MONTGOMERY")]
#[strum(
serialize = "CKK_EC_MONTGOMERY",
serialize = "EcMontgomery",
serialize = "ec_montgomery"
)]
EcMontgomery = CKK_EC_MONTGOMERY,
#[serde(rename = "CKK_HKDF")]
#[strum(serialize = "CKK_HKDF", serialize = "Hkdf", serialize = "hkdf")]
Hkdf = CKK_HKDF,
#[serde(rename = "CKK_SHA512_224_HMAC")]
#[strum(
serialize = "CKK_SHA512_224_HMAC",
serialize = "Sha512224Hmac",
serialize = "sha512_224_hmac"
)]
Sha512224Hmac = CKK_SHA512_224_HMAC,
#[serde(rename = "CKK_SHA512_256_HMAC")]
#[strum(
serialize = "CKK_SHA512_256_HMAC",
serialize = "Sha512256Hmac",
serialize = "sha512_256_hmac"
)]
Sha512256Hmac = CKK_SHA512_256_HMAC,
#[serde(rename = "CKK_SHA512_T_HMAC")]
#[strum(
serialize = "CKK_SHA512_T_HMAC",
serialize = "Sha512THmac",
serialize = "sha512_t_hmac"
)]
Sha512THmac = CKK_SHA512_T_HMAC,
#[serde(rename = "CKK_VENDOR_DEFINED")]
#[strum(
serialize = "CKK_VENDOR_DEFINED",
serialize = "VendorDefined",
serialize = "vendor_defined"
)]
VendorDefined = CKK_VENDOR_DEFINED,
UnknownKeyType = u64::MAX,
}
impl From<u64> for KeyType {
fn from(val: u64) -> Self {
KeyType::from_repr(val).unwrap_or(KeyType::UnknownKeyType)
}
}
impl From<KeyType> for u64 {
fn from(val: KeyType) -> u64 {
val as u64
}
}
impl From<cryptoki::object::KeyType> for KeyType {
fn from(val: cryptoki::object::KeyType) -> Self {
let val = CK_KEY_TYPE::from(val);
Self::from(val)
}
}
impl TryFrom<KeyType> for cryptoki::object::KeyType {
type Error = cryptoki::error::Error;
fn try_from(val: KeyType) -> Result<Self, Self::Error> {
let val = CK_KEY_TYPE::from(val);
cryptoki::object::KeyType::try_from(val)
}
}
impl TryFrom<&AttrData> for KeyType {
type Error = AttributeError;
fn try_from(val: &AttrData) -> Result<Self, Self::Error> {
match val {
AttrData::KeyType(x) => Ok(*x),
_ => Err(AttributeError::EncodingError),
}
}
}
impl From<KeyType> for AttrData {
fn from(val: KeyType) -> Self {
AttrData::KeyType(val)
}
}