# ripemd128.test - Copyright (C) 2003 Pat Thoyts # # $Id: ripemd128.test,v 1.11 2006/10/09 21:41:41 andreas_kupries Exp $ # ------------------------------------------------------------------------- source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.2 testsNeedTcltest 1.0 testing { useLocal ripemd128.tcl ripemd128 ::ripemd::ripemd128 } # ------------------------------------------------------------------------- # Now the package specific tests.... # ------------------------------------------------------------------------- if {[::ripemd::ripemd128::LoadAccelerator trf]} { puts "> Trf based" } puts "> pure Tcl" # ------------------------------------------------------------------------- # Handle multiple implementation testing # array set preserve [array get ::ripemd::ripemd128::accel] proc implementations {} { variable ::ripemd::ripemd128::accel foreach {a v} [array get accel] {if {$v} {lappend r $a}} lappend r tcl; set r } proc select_implementation {impl} { variable ::ripemd::ripemd128::accel foreach e [array names accel] { set accel($e) 0 } if {[string compare "tcl" $impl] != 0} { set accel($impl) 1 } } proc reset_implementation {} { variable ::ripemd::ripemd128::accel array set accel [array get ::preserve] } # ------------------------------------------------------------------------- # Test vectors # set vectors { 1 {} {cdf26213a150dc3ecb610f18f6b38b46} 2 {a} {86be7afa339d0fc7cfc785e72f578d33} 3 {abc} {c14a12199c66e4ba84636b0f69144c77} 4 {message digest} {9e327b3d6e523062afc1132d7df9d1b8} 5 {abcdefghijklmnopqrstuvwxyz} {fd2aa607f71dc8f510714922b371834e} 6 {abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq} {a1aa0689d0fafa2ddc22e88b49133a06} 7 {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789} {d1e959eb179c911faea4624c60c5c702} 8 {-} {cce66016f96d83cbc625ad3970b9706e} } lappend vectors \ 9 [string repeat 1234567890 8] {3f45ef194732c2dbb2c4a2c769795fa3} lappend vectors \ 20 [binary format H* 3627140572635041beaf9c8dfaebd8c9363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636] {4eb9e2f034b961f464647021b99291ef} \ 21 [binary format H* 3627140572635041beaf9c8dfaebd8c93636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636] {aaabc4b1b3479d49f0ad1c69f19c1405} \ 22 [binary format H* 3627140572635041beaf9c8dfaebd8c936363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636] {c36ba14a9db833269732dda3edb63e27} \ foreach impl [implementations] { select_implementation $impl foreach {n msg hash} $vectors { test ripemd128-$impl-1.$n "RIPEMD-128 test strings ($impl impl)" { ::ripemd::ripemd128 -hex -- $msg } $hash } reset_implementation } # ------------------------------------------------------------------------- # HMAC test vectors set key [binary format H* 00112233445566778899aabbccddeeff] set vectors { 1 {} {ad9db2c1e22af9ab5ca9dbe5a86f67dc} 2 {a} {3bf448c762de00bcfa0310b11c0bde4c} 3 {abc} {f34ec0945f02b70b8603f89e1ce4c78c} 4 {message digest} {e8503a8aec2289d82aa0d8d445a06bdd} 5 {abcdefghijklmnopqrstuvwxyz} {ee880b735ce3126065de1699cc136199} 6 {abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq} {794daf2e3bdeea2538638a5ced154434} 7 {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789} {3a06eef165b23625247800be23e232b6} } lappend vectors \ 8 [string repeat 1234567890 8] {9a4f0159c0952da43a8d466d46b0af58} foreach impl [implementations] { select_implementation $impl foreach {n msg hash} $vectors { test ripemd128-$impl-2.$n "HMAC RIPEMD-128 test vectors ($impl impl)" { ::ripemd::hmac128 -hex -key $key -- $msg } $hash } reset_implementation } # ------------------------------------------------------------------------- # HMAC test vectors - key 2 set key [binary format H* 0123456789abcdeffedcba9876543210] set vectors { 1 {} {8931eeee56a6b257fd1ab5418183d826} 2 {a} {dbbcf169ea7419d5ba7bd8eb3673ff2d} 3 {abc} {2c4cd07d3162d6a0e338004d6b6fbc9a} 4 {message digest} {75bfb25888f4bb77c77ae83ad0817447} 5 {abcdefghijklmnopqrstuvwxyz} {b1b5dc0fcb7258758855dd1840fcdce4} 6 {abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq} {670d0f7a697b18f1a8ab7d2a2a00dbc1} 7 {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789} {54e315fdb34a61c0475392e5c7852998} } lappend vectors \ 8 [string repeat 1234567890 8] {ad04354d8aa2a623e72e3594ee3535c0} foreach impl [implementations] { select_implementation $impl foreach {n msg hash} $vectors { test ripemd128-$impl-3.$n "HMAC RIPEMD-128 test vectors ($impl)" { ::ripemd::hmac128 -hex -key $key -- $msg } $hash } reset_implementation } # ------------------------------------------------------------------------- # RFC 2286 has a set of test vectors for HMAC-RIPEMD168 and 128. # This is those test vectors... # ------------------------------------------------------------------------- set vectors \ [list \ 1 [string repeat \x0b 16] "Hi There" \ fbf61f9492aa4bbf81c172e84e0734db \ 2 "Jefe" "what do ya want for nothing?" \ 875f828862b6b334b427c55f9f7ff09b \ 3 [string repeat \xaa 16] [string repeat \xdd 50] \ 09f0b2846d2f543da363cbec8d62a38d \ 4 \ [binary format H* 0102030405060708090a0b0c0d0e0f10111213141516171819]\ [string repeat \xcd 50] \ bdbbd7cf03e44b5aa60af815be4d2294 \ 5 [string repeat \x0c 16] "Test With Truncation" \ e79808f24b25fd031c155f0d551d9a3a \ 6 [string repeat \xaa 80] \ "Test Using Larger Than Block-Size Key - Hash Key First" \ dc732928de98104a1f59d373c150acbb \ 7 [string repeat \xaa 80] \ "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" \ 5c6bec96793e16d40690c237635f30c5 \ ] foreach impl [implementations] { select_implementation $impl foreach {n key msg hash} $vectors { test ripemd128-$impl-4.$n {RFC2286 test vectors for HMAC-RIPEMD128} { ::ripemd::hmac128 -hex -key $key -- $msg } $hash } reset_implementation } # ------------------------------------------------------------------------- test ripemd128-5.1 {Check hashing data that begins with hyphen} { list [catch {::ripemd::ripemd128 -hex -hello} msg] $msg } {0 4fa192692a0fbb0c5e3092f8266a4014} test ripemd128-5.2 {Check hashing data that begins with hyphen} { list [catch {::ripemd::ripemd128 -hex -- -hello} msg] $msg } {0 4fa192692a0fbb0c5e3092f8266a4014} test ripemd128-5.3 {Check hashing data that begins with hyphen} { list [catch {::ripemd::ripemd128 -hex --} msg] $msg } {0 49d7d0e80b035c0ec8ffb81d07185b69} test ripemd128-5.4 {Check hashing data that begins with hyphen} { list [catch {::ripemd::ripemd128 -hex -- --} msg] $msg } {0 49d7d0e80b035c0ec8ffb81d07185b69} test ripemd128-6.1 {Check hmac data that begins with hyphen} { list [catch {::ripemd::hmac128 -hex -key "" -hello} msg] $msg } {0 d34fadebbdac6991c4cfb6d9c490ac1d} test ripemd128-6.2 {Check hmac data that begins with hyphen} { list [catch {::ripemd::hmac128 -hex -key "" -- -hello} msg] $msg } {0 d34fadebbdac6991c4cfb6d9c490ac1d} test ripemd128-6.3 {Check hmac data that begins with hyphen} { list [catch {::ripemd::hmac128 -hex -key "" --} msg] $msg } {0 3ea28051102f1f44af3850fad0efca13} test ripemd128-6.4 {Check hmac data that begins with hyphen} { list [catch {::ripemd::hmac128 -hex -key "" -- --} msg] $msg } {0 3ea28051102f1f44af3850fad0efca13} # ------------------------------------------------------------------------- testsuiteCleanup # ------------------------------------------------------------------------- # Local Variables: # mode: tcl # indent-tabs-mode: nil # End: