use crate::raw;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct CborMajorType(u8);
impl CborMajorType {
pub const UINT: Self = Self(raw::WOLFCOSE_CBOR_UINT as u8);
pub const NEGATIVE_INT: Self = Self(raw::WOLFCOSE_CBOR_NEGINT as u8);
pub const BYTES: Self = Self(raw::WOLFCOSE_CBOR_BSTR as u8);
pub const TEXT: Self = Self(raw::WOLFCOSE_CBOR_TSTR as u8);
pub const ARRAY: Self = Self(raw::WOLFCOSE_CBOR_ARRAY as u8);
pub const MAP: Self = Self(raw::WOLFCOSE_CBOR_MAP as u8);
pub const TAG: Self = Self(raw::WOLFCOSE_CBOR_TAG as u8);
pub const SIMPLE: Self = Self(raw::WOLFCOSE_CBOR_SIMPLE as u8);
pub fn from_raw(value: u8) -> Option<Self> {
if value <= raw::WOLFCOSE_CBOR_SIMPLE as u8 {
Some(Self(value))
} else {
None
}
}
pub fn raw(self) -> u8 {
self.0
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub struct Algorithm(i32);
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum AlgorithmClass {
Signature,
Encryption,
Mac,
KeyManagement,
Unknown,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum AlgorithmUse {
Sign,
Encrypt,
Mac,
KeyManagement,
}
impl Algorithm {
pub const UNSET: Self = Self(0);
pub const ES256: Self = Self(raw::WOLFCOSE_ALG_ES256);
pub const ES384: Self = Self(raw::WOLFCOSE_ALG_ES384);
pub const ES512: Self = Self(raw::WOLFCOSE_ALG_ES512);
pub const EDDSA: Self = Self(raw::WOLFCOSE_ALG_EDDSA);
pub const PS256: Self = Self(raw::WOLFCOSE_ALG_PS256);
pub const PS384: Self = Self(raw::WOLFCOSE_ALG_PS384);
pub const PS512: Self = Self(raw::WOLFCOSE_ALG_PS512);
pub const A128GCM: Self = Self(raw::WOLFCOSE_ALG_A128GCM as i32);
pub const A192GCM: Self = Self(raw::WOLFCOSE_ALG_A192GCM as i32);
pub const A256GCM: Self = Self(raw::WOLFCOSE_ALG_A256GCM as i32);
pub const HMAC256: Self = Self(raw::WOLFCOSE_ALG_HMAC_256_256 as i32);
pub const HMAC384: Self = Self(raw::WOLFCOSE_ALG_HMAC_384_384 as i32);
pub const HMAC512: Self = Self(raw::WOLFCOSE_ALG_HMAC_512_512 as i32);
pub const CHACHA20_POLY1305: Self = Self(raw::WOLFCOSE_ALG_CHACHA20_POLY1305 as i32);
pub const AES_CCM_16_64_128: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_16_64_128 as i32);
pub const AES_CCM_16_64_256: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_16_64_256 as i32);
pub const AES_CCM_64_64_128: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_64_64_128 as i32);
pub const AES_CCM_64_64_256: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_64_64_256 as i32);
pub const AES_CCM_16_128_128: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_16_128_128 as i32);
pub const AES_CCM_16_128_256: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_16_128_256 as i32);
pub const AES_CCM_64_128_128: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_64_128_128 as i32);
pub const AES_CCM_64_128_256: Self = Self(raw::WOLFCOSE_ALG_AES_CCM_64_128_256 as i32);
pub const AES_MAC_128_64: Self = Self(raw::WOLFCOSE_ALG_AES_MAC_128_64 as i32);
pub const AES_MAC_256_64: Self = Self(raw::WOLFCOSE_ALG_AES_MAC_256_64 as i32);
pub const AES_MAC_128_128: Self = Self(raw::WOLFCOSE_ALG_AES_MAC_128_128 as i32);
pub const AES_MAC_256_128: Self = Self(raw::WOLFCOSE_ALG_AES_MAC_256_128 as i32);
pub const A128KW: Self = Self(raw::WOLFCOSE_ALG_A128KW);
pub const A192KW: Self = Self(raw::WOLFCOSE_ALG_A192KW);
pub const A256KW: Self = Self(raw::WOLFCOSE_ALG_A256KW);
pub const DIRECT: Self = Self(raw::WOLFCOSE_ALG_DIRECT);
pub const ECDH_ES_HKDF_256: Self = Self(raw::WOLFCOSE_ALG_ECDH_ES_HKDF_256);
pub const ECDH_ES_HKDF_512: Self = Self(raw::WOLFCOSE_ALG_ECDH_ES_HKDF_512);
pub const ECDH_SS_HKDF_256: Self = Self(raw::WOLFCOSE_ALG_ECDH_SS_HKDF_256);
pub const ECDH_SS_HKDF_512: Self = Self(raw::WOLFCOSE_ALG_ECDH_SS_HKDF_512);
pub const ECDH_ES_A128KW: Self = Self(raw::WOLFCOSE_ALG_ECDH_ES_A128KW);
pub const ECDH_ES_A192KW: Self = Self(raw::WOLFCOSE_ALG_ECDH_ES_A192KW);
pub const ECDH_ES_A256KW: Self = Self(raw::WOLFCOSE_ALG_ECDH_ES_A256KW);
pub const ML_DSA_44: Self = Self(raw::WOLFCOSE_ALG_ML_DSA_44);
pub const ML_DSA_65: Self = Self(raw::WOLFCOSE_ALG_ML_DSA_65);
pub const ML_DSA_87: Self = Self(raw::WOLFCOSE_ALG_ML_DSA_87);
pub const fn from_id(id: i32) -> Self {
Self(id)
}
pub const fn id(self) -> i32 {
self.0
}
pub const fn class(self) -> AlgorithmClass {
match self {
Self::ES256
| Self::ES384
| Self::ES512
| Self::EDDSA
| Self::PS256
| Self::PS384
| Self::PS512
| Self::ML_DSA_44
| Self::ML_DSA_65
| Self::ML_DSA_87 => AlgorithmClass::Signature,
Self::A128GCM
| Self::A192GCM
| Self::A256GCM
| Self::CHACHA20_POLY1305
| Self::AES_CCM_16_64_128
| Self::AES_CCM_16_64_256
| Self::AES_CCM_64_64_128
| Self::AES_CCM_64_64_256
| Self::AES_CCM_16_128_128
| Self::AES_CCM_16_128_256
| Self::AES_CCM_64_128_128
| Self::AES_CCM_64_128_256 => AlgorithmClass::Encryption,
Self::HMAC256
| Self::HMAC384
| Self::HMAC512
| Self::AES_MAC_128_64
| Self::AES_MAC_256_64
| Self::AES_MAC_128_128
| Self::AES_MAC_256_128 => AlgorithmClass::Mac,
Self::A128KW
| Self::A192KW
| Self::A256KW
| Self::DIRECT
| Self::ECDH_ES_HKDF_256
| Self::ECDH_ES_HKDF_512
| Self::ECDH_SS_HKDF_256
| Self::ECDH_SS_HKDF_512
| Self::ECDH_ES_A128KW
| Self::ECDH_ES_A192KW
| Self::ECDH_ES_A256KW => AlgorithmClass::KeyManagement,
_ => AlgorithmClass::Unknown,
}
}
pub const fn is_signing(self) -> bool {
matches!(self.class(), AlgorithmClass::Signature)
}
pub const fn is_encryption(self) -> bool {
matches!(self.class(), AlgorithmClass::Encryption)
}
pub const fn is_mac(self) -> bool {
matches!(self.class(), AlgorithmClass::Mac)
}
pub const fn is_key_management(self) -> bool {
matches!(self.class(), AlgorithmClass::KeyManagement)
}
pub const fn key_bits_hint(self) -> Option<usize> {
match self {
Self::A128GCM
| Self::AES_CCM_16_64_128
| Self::AES_CCM_64_64_128
| Self::AES_CCM_16_128_128
| Self::AES_CCM_64_128_128
| Self::AES_MAC_128_64
| Self::AES_MAC_128_128
| Self::A128KW => Some(128),
Self::A192GCM | Self::A192KW => Some(192),
Self::A256GCM
| Self::CHACHA20_POLY1305
| Self::AES_CCM_16_64_256
| Self::AES_CCM_64_64_256
| Self::AES_CCM_16_128_256
| Self::AES_CCM_64_128_256
| Self::AES_MAC_256_64
| Self::AES_MAC_256_128
| Self::A256KW
| Self::HMAC256 => Some(256),
Self::HMAC384 => Some(384),
Self::HMAC512 => Some(512),
_ => None,
}
}
pub const fn iv_len_hint(self) -> Option<usize> {
match self {
Self::A128GCM | Self::A192GCM | Self::A256GCM | Self::CHACHA20_POLY1305 => Some(12),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub struct KeyType(i32);
impl KeyType {
pub const OKP: Self = Self(raw::WOLFCOSE_KTY_OKP as i32);
pub const EC2: Self = Self(raw::WOLFCOSE_KTY_EC2 as i32);
pub const RSA: Self = Self(raw::WOLFCOSE_KTY_RSA as i32);
pub const SYMMETRIC: Self = Self(raw::WOLFCOSE_KTY_SYMMETRIC as i32);
pub const fn id(self) -> i32 {
self.0
}
pub const fn from_id(id: i32) -> Self {
Self(id)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub struct Curve(i32);
impl Curve {
pub const P256: Self = Self(raw::WOLFCOSE_CRV_P256 as i32);
pub const P384: Self = Self(raw::WOLFCOSE_CRV_P384 as i32);
pub const P521: Self = Self(raw::WOLFCOSE_CRV_P521 as i32);
pub const ED25519: Self = Self(raw::WOLFCOSE_CRV_ED25519 as i32);
pub const ED448: Self = Self(raw::WOLFCOSE_CRV_ED448 as i32);
pub const ML_DSA_44: Self = Self(raw::WOLFCOSE_CRV_ML_DSA_44);
pub const ML_DSA_65: Self = Self(raw::WOLFCOSE_CRV_ML_DSA_65);
pub const ML_DSA_87: Self = Self(raw::WOLFCOSE_CRV_ML_DSA_87);
pub const fn id(self) -> i32 {
self.0
}
pub const fn from_id(id: i32) -> Self {
Self(id)
}
}