External Types
For interoperability this crate also defines a number of types and algorithm identifiers.
AEADs
The following AEADs are defined.
pub enum AeadType {
/// AES GCM 128
Aes128Gcm = 0x0001,
/// AES GCM 256
Aes256Gcm = 0x0002,
/// ChaCha20 Poly1305
ChaCha20Poly1305 = 0x0003,
}
An AEAD provides the following functions to get the according values for each algorithm.
tag_size
key_size
nonce_size
Hashing
The following hash algorithms are defined.
pub enum HashType {
Sha2_256 = 0x04,
Sha2_384 = 0x05,
Sha2_512 = 0x06,
}
An hash algorithm provides the following functions to get the according values for each algorithm.
size
Signatures
The following signature schemes are defined.
pub enum SignatureScheme {
/// ECDSA_SECP256R1_SHA256
ECDSA_SECP256R1_SHA256 = 0x0403,
/// ECDSA_SECP384R1_SHA384
ECDSA_SECP384R1_SHA384 = 0x0503,
/// ECDSA_SECP521R1_SHA512
ECDSA_SECP521R1_SHA512 = 0x0603,
/// ED25519
ED25519 = 0x0807,
/// ED448
ED448 = 0x0808,
}
HPKE Types
The HPKE implementation is part of the crypto provider as well. The crate therefore defines the necessary types too.
The HPKE algorithms are defined as follows.
#[repr(u16)]
pub enum HpkeKemType {
/// DH KEM on P256
DhKemP256 = 0x0010,
/// DH KEM on P384
DhKemP384 = 0x0011,
/// DH KEM on P521
DhKemP521 = 0x0012,
/// DH KEM on x25519
DhKem25519 = 0x0020,
/// DH KEM on x448
DhKem448 = 0x0021,
#[repr(u16)]
pub enum HpkeKdfType {
/// HKDF SHA 256
HkdfSha256 = 0x0001,
/// HKDF SHA 384
HkdfSha384 = 0x0002,
/// HKDF SHA 512
HkdfSha512 = 0x0003,
#[repr(u16)]
pub enum HpkeAeadType {
/// AES GCM 128
AesGcm128 = 0x0001,
/// AES GCM 256
AesGcm256 = 0x0002,
/// ChaCha20 Poly1305
ChaCha20Poly1305 = 0x0003,
/// Export-only
Export = 0xFFFF,
In addition helper structs for HpkeCiphertext
and HpkeKeyPair
are defined.
)]
pub struct HpkeCiphertext {
pub kem_output: TlsByteVecU16,
pub ciphertext: TlsByteVecU16,
#[derive(Debug, Clone)]
pub struct HpkeKeyPair {
pub private: Vec<u8>,
pub public: Vec<u8>,