diff --git a/cddl/kdf_usage.cddl b/cddl/kdf_usage.cddl index dd333f7..fb62ce1 100644 --- a/cddl/kdf_usage.cddl +++ b/cddl/kdf_usage.cddl @@ -1,15 +1,25 @@ RRR_KdfUsage = { - ; RRR_KdfUsage_Fragment - RRR_KdfUsage_SuccessionNonce // RRR_KdfUsage_Fragment + RRR_KdfUsage_Custom + // RRR_KdfUsage_SuccessionNonce + // RRR_KdfUsage_Fragment } +RRR_KdfUsage_Custom = ( + custom: bstr, ; An arbitrary byte string +) + RRR_KdfUsage_SuccessionNonce = ( succession_nonce: {}, ) RRR_KdfUsage_Fragment = ( fragment: { - usage: "encryption_key" / "file_name" / "file_tag", + usage: { + RRR_KdfUsage_Fragment_Usage_Custom + // RRR_KdfUsage_Fragment_Usage_EncryptionKey + // RRR_KdfUsage_Fragment_Usage_FileName + // RRR_KdfUsage_Fragment_Usage_FileTag + }, parameters: { record_nonce: uint, segment_index: uint, @@ -17,3 +27,19 @@ RRR_KdfUsage_Fragment = ( }, }, ) + +RRR_KdfUsage_Fragment_Usage_Custom = ( + custom: bstr, ; An arbitrary byte string +) + +RRR_KdfUsage_Fragment_Usage_EncryptionKey = ( + encryption_key: {}, +) + +RRR_KdfUsage_Fragment_Usage_FileName = ( + file_name: {}, +) + +RRR_KdfUsage_Fragment_Usage_FileTag = ( + file_tag: {}, +) diff --git a/src/record/key.rs b/src/record/key.rs index 206abec..7bbc479 100644 --- a/src/record/key.rs +++ b/src/record/key.rs @@ -120,7 +120,7 @@ impl HashedRecordKey { let mut okm = vec![0_u8; kdf_params.get_file_name_length_in_bytes() as usize].into_boxed_slice(); let usage = KdfUsage::Fragment { - usage: KdfUsageFragmentUsage::FileName, + usage: KdfUsageFragmentUsage::FileName {}, parameters: fragment_parameters.clone(), }; @@ -137,7 +137,7 @@ impl HashedRecordKey { let mut okm = vec![0_u8; kdf_params.get_file_tag_length_in_bytes() as usize].into_boxed_slice(); let usage = KdfUsage::Fragment { - usage: KdfUsageFragmentUsage::FileTag, + usage: KdfUsageFragmentUsage::FileTag {}, parameters: fragment_parameters.clone(), }; @@ -154,7 +154,7 @@ impl HashedRecordKey { ) -> Result<FragmentEncryptionKeyBytes> { let mut okm = vec![0_u8; encryption_alg.key_length_in_bytes()].into_boxed_slice(); let usage = KdfUsage::Fragment { - usage: KdfUsageFragmentUsage::EncryptionKey, + usage: KdfUsageFragmentUsage::EncryptionKey {}, parameters: fragment_parameters.clone(), }; diff --git a/src/record/segment.rs b/src/record/segment.rs index 11aa1cc..6399197 100644 --- a/src/record/segment.rs +++ b/src/record/segment.rs @@ -104,6 +104,7 @@ impl FragmentKey { #[derive(Clone, Debug, Serialize, PartialEq, Arbitrary)] #[serde(rename_all = "snake_case")] pub enum KdfUsage { + Custom(BytesOrHexString<Vec<u8>>), SuccessionNonce {}, Fragment { usage: KdfUsageFragmentUsage, @@ -114,9 +115,10 @@ pub enum KdfUsage { #[derive(Clone, Debug, Serialize, PartialEq, Arbitrary)] #[serde(rename_all = "snake_case")] pub enum KdfUsageFragmentUsage { - EncryptionKey, - FileName, - FileTag, + Custom(BytesOrHexString<Vec<u8>>), + EncryptionKey {}, + FileName {}, + FileTag {}, } #[derive(Clone, Debug, Serialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop, Arbitrary)]