File: md4.test

package info (click to toggle)
tcllib 1.20%2Bdfsg-1
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 68,064 kB
  • sloc: tcl: 216,842; ansic: 14,250; sh: 2,846; xml: 1,766; yacc: 1,145; pascal: 881; makefile: 107; perl: 84; f90: 84; python: 33; ruby: 13; php: 11
file content (290 lines) | stat: -rw-r--r-- 10,141 bytes parent folder | download | duplicates (8)
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: