use tink_proto::{prost::Message, HashType, KeyTemplate, OutputPrefixType};
pub fn aes128_gcm_key_template() -> KeyTemplate {
create_aes_gcm_key_template(16, OutputPrefixType::Tink)
}
pub fn aes256_gcm_key_template() -> KeyTemplate {
create_aes_gcm_key_template(32, OutputPrefixType::Tink)
}
pub fn aes256_gcm_no_prefix_key_template() -> KeyTemplate {
create_aes_gcm_key_template(32, OutputPrefixType::Raw)
}
pub fn aes128_gcm_siv_key_template() -> KeyTemplate {
create_aes_gcm_siv_key_template(16, OutputPrefixType::Tink)
}
pub fn aes256_gcm_siv_key_template() -> KeyTemplate {
create_aes_gcm_siv_key_template(32, OutputPrefixType::Tink)
}
pub fn aes256_gcm_siv_no_prefix_key_template() -> KeyTemplate {
create_aes_gcm_siv_key_template(32, OutputPrefixType::Raw)
}
pub fn aes128_ctr_hmac_sha256_key_template() -> KeyTemplate {
create_aes_ctr_hmac_aead_key_template(16, 16, 32, 16, HashType::Sha256)
}
pub fn aes256_ctr_hmac_sha256_key_template() -> KeyTemplate {
create_aes_ctr_hmac_aead_key_template(32, 16, 32, 32, HashType::Sha256)
}
pub fn aes256_ctr_hmac_sha512_key_template() -> KeyTemplate {
create_aes_ctr_hmac_aead_key_template(32, 16, 64, 64, HashType::Sha512)
}
pub fn cha_cha20_poly1305_key_template() -> KeyTemplate {
KeyTemplate {
value: vec![],
type_url: crate::CHA_CHA20_POLY1305_TYPE_URL.to_string(),
output_prefix_type: OutputPrefixType::Tink as i32,
}
}
pub fn x_cha_cha20_poly1305_key_template() -> KeyTemplate {
KeyTemplate {
value: vec![],
type_url: crate::X_CHA_CHA20_POLY1305_TYPE_URL.to_string(),
output_prefix_type: OutputPrefixType::Tink as i32,
}
}
pub fn kms_envelope_aead_key_template(uri: &str, dek_t: KeyTemplate) -> KeyTemplate {
let f = tink_proto::KmsEnvelopeAeadKeyFormat {
kek_uri: uri.to_string(),
dek_template: Some(dek_t),
};
let mut serialized_format = Vec::new();
f.encode(&mut serialized_format).unwrap(); KeyTemplate {
value: serialized_format,
type_url: crate::KMS_ENVELOPE_AEAD_TYPE_URL.to_string(),
output_prefix_type: OutputPrefixType::Raw as i32,
}
}
fn create_aes_gcm_key_template(key_size: u32, output_prefix_type: OutputPrefixType) -> KeyTemplate {
let format = tink_proto::AesGcmKeyFormat {
version: crate::AES_GCM_KEY_VERSION,
key_size,
};
let mut serialized_format = Vec::new();
format.encode(&mut serialized_format).unwrap(); KeyTemplate {
type_url: crate::AES_GCM_TYPE_URL.to_string(),
value: serialized_format,
output_prefix_type: output_prefix_type as i32,
}
}
fn create_aes_gcm_siv_key_template(
key_size: u32,
output_prefix_type: OutputPrefixType,
) -> KeyTemplate {
let format = tink_proto::AesGcmSivKeyFormat {
version: crate::AES_GCM_SIV_KEY_VERSION,
key_size,
};
let mut serialized_format = Vec::new();
format.encode(&mut serialized_format).unwrap(); KeyTemplate {
type_url: crate::AES_GCM_SIV_TYPE_URL.to_string(),
value: serialized_format,
output_prefix_type: output_prefix_type as i32,
}
}
fn create_aes_ctr_hmac_aead_key_template(
aes_key_size: u32,
iv_size: u32,
hmac_key_size: u32,
tag_size: u32,
hash: HashType,
) -> KeyTemplate {
let format = tink_proto::AesCtrHmacAeadKeyFormat {
aes_ctr_key_format: Some(tink_proto::AesCtrKeyFormat {
params: Some(tink_proto::AesCtrParams { iv_size }),
key_size: aes_key_size,
}),
hmac_key_format: Some(tink_proto::HmacKeyFormat {
version: crate::AES_CTR_HMAC_AEAD_KEY_VERSION,
params: Some(tink_proto::HmacParams {
hash: hash as i32,
tag_size,
}),
key_size: hmac_key_size,
}),
};
let mut serialized_format = Vec::new();
format.encode(&mut serialized_format).unwrap(); KeyTemplate {
value: serialized_format,
type_url: crate::AES_CTR_HMAC_AEAD_TYPE_URL.to_string(),
output_prefix_type: OutputPrefixType::Tink as i32,
}
}