@@ -840,7 +840,21 @@ fn KTHash(
840840 /// The block length, or rate, in bytes.
841841 pub const block_length = Variant .rate ;
842842
843- /// Options for KangarooTwelve can include a customization string for domain separation.
843+ /// Configuration options for KangarooTwelve hashing.
844+ ///
845+ /// Options include an optional customization string that provides domain separation,
846+ /// ensuring that identical inputs with different customization strings
847+ /// produce completely distinct hash outputs.
848+ ///
849+ /// This prevents hash collisions when the same data is hashed in different contexts.
850+ ///
851+ /// Customization strings can be of any length.
852+ ///
853+ /// Common options for customization::
854+ ///
855+ /// - Key derivation or MAC: 16-byte secret for KT128, 32-byte secret for KT256
856+ /// - Context Separation: domain-specific strings (e.g., "email", "password", "session")
857+ /// - Composite Keys: concatenation of secret key + context string
844858 pub const Options = struct {
845859 customization : ? []const u8 = null ,
846860 };
@@ -864,7 +878,20 @@ fn KTHash(
864878 pending_count : usize , // Number of complete chunks in pending_chunks
865879
866880 /// Initialize a KangarooTwelve hashing context.
867- /// The customization string is optional and used for domain separation.
881+ ///
882+ /// Options include an optional customization string that provides domain separation,
883+ /// ensuring that identical inputs with different customization strings
884+ /// produce completely distinct hash outputs.
885+ ///
886+ /// This prevents hash collisions when the same data is hashed in different contexts.
887+ ///
888+ /// Customization strings can be of any length.
889+ ///
890+ /// Common options for customization::
891+ ///
892+ /// - Key derivation or MAC: 16-byte secret for KT128, 32-byte secret for KT256
893+ /// - Context Separation: domain-specific strings (e.g., "email", "password", "session")
894+ /// - Composite Keys: concatenation of secret key + context string
868895 pub fn init (options : Options ) Self {
869896 const custom = options .customization orelse &[_ ]u8 {};
870897 return .{
@@ -971,7 +998,13 @@ fn KTHash(
971998 }
972999
9731000 /// Finalize the hash and produce output.
974- /// After calling this, the context should not be reused.
1001+ ///
1002+ /// Unlike traditional hash functions, the output can be of any length.
1003+ ///
1004+ /// When using as a regular hash function, use the recommended `digest_length` value (32 bytes for KT128, 64 bytes for KT256).
1005+ ///
1006+ /// After calling this method, the context should not be reused. However, the structure can be cloned before finalizing
1007+ /// to compute multiple hashes with the same prefix.
9751008 pub fn final (self : * Self , out : []u8 ) void {
9761009 const cv_size = Variant .cv_size ;
9771010
@@ -1063,12 +1096,11 @@ fn KTHash(
10631096 }
10641097
10651098 /// Hash a message using sequential processing with SIMD acceleration.
1066- /// Best performance for inputs under 10MB. Never allocates memory.
10671099 ///
10681100 /// Parameters:
10691101 /// - message: Input data to hash (any length)
1070- /// - out: Output buffer (any length, arbitrary output sizes supported)
1071- /// - options: Optional settings including customization string for domain separation
1102+ /// - out: Output buffer (any length, arbitrary output sizes supported, `digest_length` recommended for standard use )
1103+ /// - options: Optional settings to include a secret key or a context separation string
10721104 pub fn hash (message : []const u8 , out : []u8 , options : Options ) ! void {
10731105 const custom = options .customization orelse &[_ ]u8 {};
10741106
0 commit comments