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)]