@@ -184,7 +184,7 @@ mod test_key_material {
184184
185185 key. zeroize ( ) ;
186186 let key_len = key. key_len ( ) ;
187- assert_eq ! ( key_len4 , 0 ) ;
187+ assert_eq ! ( key_len , 0 ) ;
188188 assert_eq ! ( key. key_type( ) , KeyType :: Zeroized ) ;
189189
190190 // zeroize() must wipe the entire backing buffer.
@@ -702,22 +702,49 @@ mod test_key_material {
702702
703703 #[ test]
704704 fn eq ( ) {
705- // On instances of the same exact type (size).
706- let key1 = KeyMaterial256 :: from_bytes (
707- b" \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0A \x0B \x0C \x0D \x0E \x0F " ,
708- )
709- . unwrap ( ) ;
710- let key2 = KeyMaterial256 :: from_bytes (
711- b" \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0A \x0B \x0C \x0D \x0E \x0F " ,
712- )
713- . unwrap ( ) ;
705+ // For context:
706+ // DUMMY_KEY: &[u8; 64] = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\
707+ // \x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\
708+ // \x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\
709+ // \x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" ;
710+
711+ // Same bytes, full capacity. Should be equal.
712+ let key1 = KeyMaterial256 :: from_bytes ( & DUMMY_KEY [ .. 32 ] ) . unwrap ( ) ;
713+ let key2 = KeyMaterial256 :: from_bytes ( & DUMMY_KEY [ .. 32 ] ) . unwrap ( ) ;
714714 assert_eq ! ( key1, key2) ;
715715
716- let key3 = KeyMaterial256 :: from_bytes (
717- b"\x0F \x0E \x0D \x0C \x0B \x0A \x10 \x09 \x08 \x07 \x06 \x05 \x04 \x03 \x02 \x01 \x00 " ,
718- )
719- . unwrap ( ) ;
716+ // Same length, different content. Should NOT be equal.
717+ let key3 = KeyMaterial256 :: from_bytes ( & [ 0xFFu8 ; 32 ] ) . unwrap ( ) ;
720718 assert_ne ! ( key1, key3) ;
719+
720+ // Different length, overlapping prefix. Should NOT be equal.
721+ let key_short = KeyMaterial256 :: from_bytes ( & DUMMY_KEY [ ..16 ] ) . unwrap ( ) ;
722+ assert_ne ! ( key1, key_short) ;
723+
724+ // PartialEq ignores key_type: same bytes, different KeyType. Should be equal.
725+ let key_low = KeyMaterial256 :: from_bytes_as_type ( & DUMMY_KEY [ ..32 ] , KeyType :: BytesLowEntropy ) . unwrap ( ) ;
726+ let key_mac = KeyMaterial256 :: from_bytes_as_type ( & DUMMY_KEY [ ..32 ] , KeyType :: MACKey ) . unwrap ( ) ;
727+ assert_eq ! ( key_low, key_mac) ;
728+
729+ // PartialEq ignores security_strength: same bytes, different strength. Should be equal.
730+ let key_strong = KeyMaterial256 :: from_bytes_as_type ( & DUMMY_KEY [ ..32 ] , KeyType :: BytesFullEntropy ) . unwrap ( ) ;
731+ let mut key_weak = KeyMaterial256 :: from_bytes_as_type ( & DUMMY_KEY [ ..32 ] , KeyType :: BytesFullEntropy ) . unwrap ( ) ;
732+ key_weak. set_security_strength ( SecurityStrength :: _128bit) . unwrap ( ) ;
733+ assert_ne ! ( key_strong. security_strength( ) , key_weak. security_strength( ) ) ; // strengths differ
734+ assert_eq ! ( key_strong, key_weak) ; // but keys are still equal
735+
736+ // Partially-filled buffers with identical content. Should be equal.
737+ let key_half1 = KeyMaterial256 :: from_bytes ( & DUMMY_KEY [ ..16 ] ) . unwrap ( ) ;
738+ let key_half2 = KeyMaterial256 :: from_bytes ( & DUMMY_KEY [ ..16 ] ) . unwrap ( ) ;
739+ assert_eq ! ( key_half1, key_half2) ;
740+
741+ // Verify with a second size (KeyMaterial512) to cover the generic impl.
742+ let key512_a = KeyMaterial512 :: from_bytes ( & DUMMY_KEY [ ..64 ] ) . unwrap ( ) ;
743+ let key512_b = KeyMaterial512 :: from_bytes ( & DUMMY_KEY [ ..64 ] ) . unwrap ( ) ;
744+ assert_eq ! ( key512_a, key512_b) ;
745+
746+ let key512_c = KeyMaterial512 :: from_bytes ( & [ 0xFFu8 ; 64 ] ) . unwrap ( ) ;
747+ assert_ne ! ( key512_a, key512_c) ;
721748 }
722749
723750 #[ test]
0 commit comments