use std::convert::TryFrom;
use cryptoki_sys::*;
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)
}
}