Skip to content

Commit f2dfeeb

Browse files
committed
Make it possible to customize the KDF info for records
1 parent 72b0223 commit f2dfeeb

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

cddl/kdf_usage.cddl

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,45 @@
11
RRR_KdfUsage = {
2-
; RRR_KdfUsage_Fragment
3-
RRR_KdfUsage_SuccessionNonce // RRR_KdfUsage_Fragment
2+
RRR_KdfUsage_Custom
3+
// RRR_KdfUsage_SuccessionNonce
4+
// RRR_KdfUsage_Fragment
45
}
56

7+
RRR_KdfUsage_Custom = (
8+
custom: bstr, ; An arbitrary byte string
9+
)
10+
611
RRR_KdfUsage_SuccessionNonce = (
712
succession_nonce: {},
813
)
914

1015
RRR_KdfUsage_Fragment = (
1116
fragment: {
12-
usage: "encryption_key" / "file_name" / "file_tag",
17+
usage: {
18+
RRR_KdfUsage_Fragment_Usage_Custom
19+
// RRR_KdfUsage_Fragment_Usage_EncryptionKey
20+
// RRR_KdfUsage_Fragment_Usage_FileName
21+
// RRR_KdfUsage_Fragment_Usage_FileTag
22+
},
1323
parameters: {
1424
record_nonce: uint,
1525
segment_index: uint,
1626
record_version: uint,
1727
},
1828
},
1929
)
30+
31+
RRR_KdfUsage_Fragment_Usage_Custom = (
32+
custom: bstr, ; An arbitrary byte string
33+
)
34+
35+
RRR_KdfUsage_Fragment_Usage_EncryptionKey = (
36+
encryption_key: {},
37+
)
38+
39+
RRR_KdfUsage_Fragment_Usage_FileName = (
40+
file_name: {},
41+
)
42+
43+
RRR_KdfUsage_Fragment_Usage_FileTag = (
44+
file_tag: {},
45+
)

src/record/key.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl HashedRecordKey {
120120
let mut okm =
121121
vec![0_u8; kdf_params.get_file_name_length_in_bytes() as usize].into_boxed_slice();
122122
let usage = KdfUsage::Fragment {
123-
usage: KdfUsageFragmentUsage::FileName,
123+
usage: KdfUsageFragmentUsage::FileName {},
124124
parameters: fragment_parameters.clone(),
125125
};
126126

@@ -137,7 +137,7 @@ impl HashedRecordKey {
137137
let mut okm =
138138
vec![0_u8; kdf_params.get_file_tag_length_in_bytes() as usize].into_boxed_slice();
139139
let usage = KdfUsage::Fragment {
140-
usage: KdfUsageFragmentUsage::FileTag,
140+
usage: KdfUsageFragmentUsage::FileTag {},
141141
parameters: fragment_parameters.clone(),
142142
};
143143

@@ -154,7 +154,7 @@ impl HashedRecordKey {
154154
) -> Result<FragmentEncryptionKeyBytes> {
155155
let mut okm = vec![0_u8; encryption_alg.key_length_in_bytes()].into_boxed_slice();
156156
let usage = KdfUsage::Fragment {
157-
usage: KdfUsageFragmentUsage::EncryptionKey,
157+
usage: KdfUsageFragmentUsage::EncryptionKey {},
158158
parameters: fragment_parameters.clone(),
159159
};
160160

src/record/segment.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ impl FragmentKey {
104104
#[derive(Clone, Debug, Serialize, PartialEq, Arbitrary)]
105105
#[serde(rename_all = "snake_case")]
106106
pub enum KdfUsage {
107+
Custom(BytesOrHexString<Vec<u8>>),
107108
SuccessionNonce {},
108109
Fragment {
109110
usage: KdfUsageFragmentUsage,
@@ -114,9 +115,10 @@ pub enum KdfUsage {
114115
#[derive(Clone, Debug, Serialize, PartialEq, Arbitrary)]
115116
#[serde(rename_all = "snake_case")]
116117
pub enum KdfUsageFragmentUsage {
117-
EncryptionKey,
118-
FileName,
119-
FileTag,
118+
Custom(BytesOrHexString<Vec<u8>>),
119+
EncryptionKey {},
120+
FileName {},
121+
FileTag {},
120122
}
121123

122124
#[derive(Clone, Debug, Serialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop, Arbitrary)]

0 commit comments

Comments
 (0)