@@ -632,3 +632,62 @@ fn hex_script(s: &str) -> elements::Script {
632632 let v: Vec < u8 > = elements:: hashes:: hex:: FromHex :: from_hex ( s) . unwrap ( ) ;
633633 elements:: Script :: from ( v)
634634}
635+
636+ #[ cfg( test) ]
637+ mod tests {
638+ use std:: str:: FromStr ;
639+
640+ use bitcoin:: hashes:: hash160;
641+
642+ use super :: * ;
643+
644+ #[ test]
645+ fn regression_bitcoin_key_hash ( ) {
646+ use bitcoin:: PublicKey ;
647+
648+ // Uncompressed key.
649+ let pk = PublicKey :: from_str (
650+ "042e58afe51f9ed8ad3cc7897f634d881fdbe49a81564629ded8156bebd2ffd1af191923a2964c177f5b5923ae500fca49e99492d534aa3759d6b25a8bc971b133"
651+ ) . unwrap ( ) ;
652+
653+ let want = hash160:: Hash :: from_str ( "ac2e7daf42d2c97418fd9f78af2de552bb9c6a7a" ) . unwrap ( ) ;
654+ let got = pk. to_pubkeyhash ( ) ;
655+ assert_eq ! ( got, want)
656+ }
657+
658+ #[ test]
659+ fn regression_secp256k1_key_hash ( ) {
660+ use bitcoin:: secp256k1:: PublicKey ;
661+
662+ // Compressed key.
663+ let pk = PublicKey :: from_str (
664+ "032e58afe51f9ed8ad3cc7897f634d881fdbe49a81564629ded8156bebd2ffd1af" ,
665+ )
666+ . unwrap ( ) ;
667+
668+ let want = hash160:: Hash :: from_str ( "9511aa27ef39bbfa4e4f3dd15f4d66ea57f475b4" ) . unwrap ( ) ;
669+ let got = pk. to_pubkeyhash ( ) ;
670+ assert_eq ! ( got, want)
671+ }
672+
673+ #[ test]
674+ fn regression_xonly_key_hash ( ) {
675+ use bitcoin:: secp256k1:: XOnlyPublicKey ;
676+
677+ let pk = XOnlyPublicKey :: from_str (
678+ "cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115" ,
679+ )
680+ . unwrap ( ) ;
681+
682+ let want = hash160:: Hash :: from_str ( "eb8ac65f971ae688a94aeabf223506865e7e08f2" ) . unwrap ( ) ;
683+ let got = pk. to_pubkeyhash ( ) ;
684+ assert_eq ! ( got, want)
685+ }
686+
687+ #[ test]
688+ fn regression_string_key_hash ( ) {
689+ let pk = String :: from ( "some-key-hash-string" ) ;
690+ let hash = pk. to_pubkeyhash ( ) ;
691+ assert_eq ! ( hash, pk)
692+ }
693+ }
0 commit comments