1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
|
# md4.test - Copyright (C) 2003 Pat Thoyts <patthoyts@users.sourceforge.net>
#
# $Id: md4.test,v 1.15 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 md4.tcl md4
}
# -------------------------------------------------------------------------
if {[::md4::LoadAccelerator critcl]} {
puts "> using critcl"
}
if {[::md4::LoadAccelerator cryptkit]} {
puts "> using cryptkit"
}
puts "> pure Tcl"
# -------------------------------------------------------------------------
# Handle multiple implementation testing
#
array set preserve [array get ::md4::accel]
proc implementations {} {
variable ::md4::accel
foreach {a v} [array get accel] {if {$v} {lappend r $a}}
lappend r tcl; set r
}
proc select_implementation {impl} {
variable ::md4::accel
foreach e [array names accel] { set accel($e) 0 }
if {[string compare "tcl" $impl] != 0} {
set accel($impl) 1
}
}
proc reset_implementation {} {
variable ::md4::accel
array set accel [array get ::preserve]
}
# -------------------------------------------------------------------------
# The RFC 1320 test vectors
#
set vectors {
1 {} {31D6CFE0D16AE931B73C59D7E0C089C0}
2 {a} {BDE52CB31DE33E46245E05FBDBD6FB24}
3 {abc} {A448017AAF21D8525FC10AE87AA6729D}
4 {message digest} {D9130A8164549FE818874806E1C7014B}
5 {abcdefghijklmnopqrstuvwxyz} {D79E1C308AA5BBCDEEA8ED63DF412DA9}
6 {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789}
{043F8582F241DB351CE627E153E7F0E4}
7 {12345678901234567890123456789012345678901234567890123456789012345678901234567890}
{E33B4DDC9C38F2199C3E7B164FCC0536}
}
foreach impl [implementations] {
select_implementation $impl
foreach {n txt dgst} $vectors {
test md4-$impl-1.$n "md4 RFC test strings ($impl impl)" {
list [catch {::md4::md4 -hex $txt} r] $r
} [list 0 $dgst]
}
reset_implementation
}
# Block length checks
# these values are generated from the OpenSSL library implementation
# by md4_check.c
#
set vectors {
0 31D6CFE0D16AE931B73C59D7E0C089C0
1 BDE52CB31DE33E46245E05FBDBD6FB24
2 0DE97E6BACB92B24D7578FFB8D58F51E
3 918D7099B77C7A06634C62CCAF5EBAC7
4 30FDB877509C742C0EF3D63DDBEC5146
5 54485D61C2BF8519C3997D2C17D41B43
6 9135D5535D445A5ADC299D227D3BDBFB
7 EB393983D7223A7271398DA9CD13F13C
8 23008F046FC579F2D373339EC07F1EF1
9 A38217D543726545E70685379586F249
10 55AEE4317CF6626378BDD590E1A10009
11 528BCA944A4FC5F156765B0C415A0AEA
12 8F919C346C23B06B46C872BE5F80D919
13 EB50153829A34A8DE50ECCEEC7D44BAE
14 0AF8EB203F383DCF6A9D888DE443572F
15 C531CB0A83667B164886E6C1538AD95E
16 877A3D1769C7FA80A74E7BD9D7602EF3
17 DF84F880A964489D9832AF34FA58E591
18 80E3D8A01982AA1E14994E453D33DD26
19 F2F147FB12388BECE57ECA1DCC5ED53F
20 1D9DB7A8B873E64A5C62727EDF6D4BBD
21 CBBE5C1D394BB0B081E960FEF4E7CA15
22 0641E7CD13C7FA26F6DA39E83CD31252
23 76D25193130828ACCF4D771ACB1E51E3
24 AB434803006332AB606B8C9D284579C9
25 EA31D4CD2D48469501E09C62DA35FDBD
26 9A374B8B9DD4D3D02AC55036236E7A4D
27 CC678CD190CBD158E2A111A6A8E6EB4B
28 DD3D0C638699B8DB7D4776A7BF415394
29 AD4914D6703EC452117852FE99D45E83
30 D4450595903614027BA328EEFA0EA601
31 B439B841FD3BECFF4E2DAC49D19ED7CF
32 7DFEF9B2EB78B2367246C381C8856478
33 B3F634CC931234DEDF1E51B0015914F9
34 C9EE7F5964094201EE080B572EF135E0
35 E02F85B1A7838B905E90E279F27FEBC8
36 1254586BFD14E030CE4086FA961CE782
37 E93B0EBE0FE3C688419FAF37511C8F5B
38 D6D79128936F4B32D01E395AECF29D82
39 7A0AC9F4F25A7C47AFA9AA7DF30D3221
40 2F195C997AADA83926FE22847CD3B37C
41 09354A0A378CFDA1FF95A8885D38C4A8
42 C2256534BFEAE9FA1EE7E86187BB965A
43 FE8F4AE6501CA2898981F60DA8C7F6AE
44 46140F97EFBD88928FF112F5367B526A
45 9D403D371C315FF969BAADD8623BC8B3
46 068D234494F92F646BA378BF505F8C47
47 AF7C0BBED49C6211F1FF4B1739E7AC27
48 14D946CC28AC58F8C5F210A06C1C6F25
49 EB8702358201CDACE81AAA2DB0C6584E
50 FB2A7C151E17EC3DF8502062D86135E3
51 2D52D26552CBC27CB68EB829E35DD24D
52 38AB80B7C2B45B568488244ADF334410
53 BD3ED6F7A3A4DD4705360984A18577E5
54 10993F670D6D785F3E87BC46E8DA89DC
55 C889C81DD86C4D2E025778944EA02881
56 D5F9A9E9257077A5F08B0B92F348B0AD
57 872097E6F78E3B53F890459D03BC6FB7
58 277F5F559A60C0AF69EFDA466786FB30
59 A70AE7F83D838CCE274D7491AA915028
60 8C6B85BECAB240CA5DB17955C4D39782
61 672A99BA40462771641359DCC4CB1DDD
62 5AE7B0C20144BC35483E8D7C16297658
63 7EA3DA77432D44C323671097D1348FC8
64 52F5076FABD22680234A3FA9F9DC5732
65 330E377BF231F3CACFECC2C182FE7E5B
66 095BA42E17C00F9336F807D8BDAE72A5
67 B714FE2E2D4EBC2D801A481FFAE39FA9
68 769051239BB45773C87C19F35071178A
69 49311D7BB7CC3C078F932E873D7769D2
70 DF01FC1E5DD0BFC600DB67201C977EFC
71 09751A7E990FB1D82C0A1293E5F5B3CC
72 040E619A227C013B5201A9796246D4AE
73 3470CE6363ED22E5496F138AA7108416
74 26A8C2B51DC60D23597CCA9025119030
75 E82ACDF62A2512470B9580B53DF18A2B
76 C5B92B27DA91D2267C23446ECB6A912C
77 CDE8AF463FF6018AE7B99AC9DE24EA36
78 A883A850600DF1EEF28C573E034E7D18
79 A7CCE750192AC057036F1B4C5A2605C8
80 721A93B051049C47487B06A59ACC7D64
81 F28AA8607F27E972E483638794C1C5FF
82 577AB2592E92823D26788493457AFB35
83 157BB5E384BBFD04719CBB1EACBAC84B
84 66385A9301518DD05B0F565F08A600EA
85 0B87DD13CDF6541F400FABE41FA5BA78
86 A6446864A8BF8D07D57D96DD908EA956
87 6979B8ECFE581790AC7CD990E8E0736E
88 F0E85BD3BA0E224FDC2306C256CD5F3A
89 60FA15155478D3C8A76E5ABBDB77CFBE
90 FCFF0A17BD61381B77355CEF66808308
91 828C52051A9693A1B54BE9352268955D
92 53A6B8D4DD7D0770A5F6DC9874E7B88C
93 00F8653F803627B70EF2E7E1654576C0
94 14A4D10648330012FE672B650C196021
95 A6A0B64C05FCD2E57D8CBBC59A1A00B7
96 DDC02B8E0A315BA8EE08851668A081A9
97 4067061356FA1E283EC5F3610E7EACF0
98 717D2EF3060CA3208DECAE86F9BDCFD9
99 7B625DF18DC2FFF7F5244A4C50915893
100 A2A3C7C3EE6088BAD252BFBBAE229BB6
101 547401415A107A8147D3BAB71991BE0E
102 E1C162A95EBE24D4A78DA81FAA6A451B
103 2A3D6778231DC7EF4AB0D96DB648D128
104 89E6CF2B88C9328A4C348A731D317D25
105 CF71FEC4631DB55308AD80186B8DCF37
106 343CA55FC783302EF9A0B33757E5EF19
107 AAD33B8FF079A18D6425470D011B4D31
108 357C138B5498B531CB174127FCF14A0F
109 73B22BE5DBAD1D26BD9071AFEBC35856
110 74101D5E7A9321DAD687B4C2AC7E7551
111 69DAEFFB60DD1DCFC8A0DDF5ED4DEA4F
112 CCBF3DFA0FAC8C6E5C2504CF15777E71
113 6EE2AD0A2A06E975C2FA8887333DE734
114 8A7DEFD65211A52A20CBD989BCB079D7
115 650A6088C41B5951EF46B09F8A8F7A16
116 F731ACBD40496A63FD33C72BFF4ADC4C
117 64279E932B0A6CF7FBEBC12969AD85F9
118 5257D42AE36DCFC8418FA40600696E16
119 E65DD227CCEF97FA1D34D70189120F76
120 B03DDBD470B47C013E0C7AB2DDD763DB
121 E5601AA6994470F918405D745EDE163C
122 6BAF506A6E6A525E9EF9BBF7E6B4F45B
123 D312F30D9FFF78E5404F8EAC3F0B665F
124 A7A1C6286070E9A7AFA4831D2BF7BAFD
125 941B80ACD86C9D9C3F27380591507DED
126 85C05A6BB4B2CF906813652C68686361
127 9733B046AD770B4E093B35DE4E09E828
128 CB4A20A561558E29460190C91DCED59F
129 2ADCD303C29F93A3EE33A560ECE91CD2
130 52B8CE960BB64E4EC2B579D4047B175E
131 6EF49AAA109B8120004FFCC801218CAF
132 370ED97ADF490F75693CD5FC73A8E3E0
133 54DE78D79AD53DA4CE46F945160B591F
134 0D9014C7B4A9EDB3D594056E78D25B9D
135 4AE5F06E7A0AB2B7142583873ACFCCFD
136 C4CA41E447A27ECEE443370B002B6459
137 9A64358C2602DA3F21D2E79B21E94BF1
138 5761A624A7BDEDAD64E543BC73213E64
139 D301A78CB6959F11E81BD7A3C6BF5BB3
140 5D726C762665398737C34803095E91F3
141 DB62B01151A01D5E4A00D87F2A48B98A
142 C310B6E1016ECB9F5A5C5A4B89F17A76
143 33C7D6E29F904B27272E75144BE07D18
144 835048E983D82FB0FA151BB8B6FA636E
145 B9FF2575260E2AD08557EEBA52B27CDD
146 BCCCBCFEAB174BDDB81CC74DD97984F6
147 9B98A75EDED6B5AF8C449B75A74C30B3
148 5F9F642231152DD8CD5CAA9B5FC59B5D
149 84D82189C5458F8647D338FD62EF1667
}
foreach impl [implementations] {
select_implementation $impl
foreach {n hash} $vectors {
test md4-$impl-2.$n "md4 block size checks: length $n ($impl)" {
list [catch {
::md4::md4 -hex [string repeat a $n]
} msg] $msg
} [list 0 $hash]
}
reset_implementation
}
# -------------------------------------------------------------------------
test md4-3.1 {Check hashing data that begins with hyphen} {
list [catch {::md4::md4 -hex -hello} msg] $msg
} {0 2366A71EF5007E097635894C39E6D649}
test md4-3.2 {Check hashing data that begins with hyphen} {
list [catch {::md4::md4 -hex -- -hello} msg] $msg
} {0 2366A71EF5007E097635894C39E6D649}
test md4-3.3 {Check hashing data that begins with hyphen} {
list [catch {::md4::md4 -hex --} msg] $msg
} {0 4C0C5CD6347599F2A7FB4B8135E8BC54}
test md4-3.4 {Check hashing data that begins with hyphen} {
list [catch {::md4::md4 -hex -- --} msg] $msg
} {0 4C0C5CD6347599F2A7FB4B8135E8BC54}
test md4-4.1 {Check hmac data that begins with hyphen} {
list [catch {::md4::hmac -hex -key "" -hello} msg] $msg
} {0 5B3C613872A7EF6B027E108649E586E9}
test md4-4.2 {Check hmac data that begins with hyphen} {
list [catch {::md4::hmac -hex -key "" -- -hello} msg] $msg
} {0 5B3C613872A7EF6B027E108649E586E9}
test md4-4.3 {Check hmac data that begins with hyphen} {
list [catch {::md4::hmac -hex -key "" --} msg] $msg
} {0 8CE99298976A960211A6D3FB2EAC8B2D}
test md4-4.4 {Check hmac data that begins with hyphen} {
list [catch {::md4::hmac -hex -key "" -- --} msg] $msg
} {0 8CE99298976A960211A6D3FB2EAC8B2D}
testsuiteCleanup
# -------------------------------------------------------------------------
# Local Variables:
# mode: tcl
# indent-tabs-mode: nil
# End:
|