Artifact
260d7b3ffd1225a40215cc35f5025c1196ffd33c9660b44b98417dcbcd98cc49:
0000: 23 0a 23 20 54 65 73 74 20 56 65 63 74 6f 72 73 #.# Test Vectors
0010: 0a 23 0a 0a 23 0a 23 20 43 72 65 61 74 65 20 74 .#..#.# Create t
0020: 65 73 74 20 63 61 73 65 20 61 6e 64 20 6f 75 74 est case and out
0030: 70 75 74 20 74 6f 20 74 65 73 74 20 66 69 6c 65 put to test file
0040: 0a 23 0a 70 72 6f 63 20 64 6f 5f 74 65 73 74 20 .#.proc do_test
0050: 7b 67 72 6f 75 70 20 74 61 69 6c 20 66 69 6c 65 {group tail file
0060: 5f 6e 75 6d 20 74 63 20 6b 64 66 20 64 69 67 65 _num tc kdf dige
0070: 73 74 20 70 61 72 61 6d 73 7d 20 7b 0a 20 20 20 st params} {.
0080: 20 61 72 72 61 79 20 73 65 74 20 63 6f 6e 66 69 array set confi
0090: 67 20 24 70 61 72 61 6d 73 0a 0a 20 20 20 20 23 g $params.. #
00a0: 20 54 65 73 74 20 69 6e 66 6f 0a 20 20 20 20 73 Test info. s
00b0: 65 74 20 6c 69 6e 65 20 5b 66 6f 72 6d 61 74 20 et line [format
00c0: 22 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 20 25 "tcltest::test %
00d0: 73 2d 25 64 2e 25 64 20 7b 25 73 7d 22 20 24 67 s-%d.%d {%s}" $g
00e0: 72 6f 75 70 20 24 66 69 6c 65 5f 6e 75 6d 20 24 roup $file_num $
00f0: 74 63 20 24 74 61 69 6c 5d 0a 20 20 20 20 61 70 tc $tail]. ap
0100: 70 65 6e 64 20 6c 69 6e 65 20 22 20 5c 5c 5c 6e pend line " \\\n
0110: 5c 74 22 0a 0a 20 20 20 20 23 20 54 65 73 74 20 \t".. # Test
0120: 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20 constraints.
0130: 61 70 70 65 6e 64 20 6c 69 6e 65 20 5b 66 6f 72 append line [for
0140: 6d 61 74 20 22 2d 63 6f 6e 73 74 72 61 69 6e 74 mat "-constraint
0150: 73 20 7b 25 73 20 25 73 7d 22 20 5b 73 74 72 69 s {%s %s}" [stri
0160: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d 22 ng map [list "-"
0170: 20 22 5f 22 5d 20 24 6b 64 66 5d 20 5b 73 74 72 "_"] $kdf] [str
0180: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d ing map [list "-
0190: 22 20 22 5f 22 5d 20 24 64 69 67 65 73 74 5d 5d " "_"] $digest]]
01a0: 0a 20 20 20 20 61 70 70 65 6e 64 20 6c 69 6e 65 . append line
01b0: 20 22 20 5c 5c 5c 6e 5c 74 22 0a 0a 20 20 20 20 " \\\n\t"..
01c0: 23 20 54 65 73 74 20 73 65 74 75 70 0a 20 20 20 # Test setup.
01d0: 20 61 70 70 65 6e 64 20 6c 69 6e 65 20 22 2d 73 append line "-s
01e0: 65 74 75 70 20 7b 7d 20 5c 5c 5c 6e 5c 74 22 0a etup {} \\\n\t".
01f0: 0a 20 20 20 20 23 20 54 65 73 74 20 62 6f 64 79 . # Test body
0200: 20 70 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 parameters.
0210: 73 65 74 20 63 6d 64 20 5b 66 6f 72 6d 61 74 20 set cmd [format
0220: 22 74 6c 73 3a 3a 25 73 22 20 5b 73 74 72 69 6e "tls::%s" [strin
0230: 67 20 74 6f 6c 6f 77 65 72 20 24 6b 64 66 5d 5d g tolower $kdf]]
0240: 0a 20 20 20 20 69 66 20 7b 24 64 69 67 65 73 74 . if {$digest
0250: 20 6e 65 20 22 22 7d 20 7b 0a 09 61 70 70 65 6e ne ""} {..appen
0260: 64 20 63 6d 64 20 22 20 2d 64 69 67 65 73 74 20 d cmd " -digest
0270: 22 20 24 64 69 67 65 73 74 0a 20 20 20 20 7d 0a " $digest. }.
0280: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 70 61 72 foreach {par
0290: 61 6d 20 6e 61 6d 65 73 20 74 79 70 65 7d 20 5b am names type} [
02a0: 6c 69 73 74 20 2d 6b 65 79 20 5b 6c 69 73 74 20 list -key [list
02b0: 49 4b 4d 20 4b 65 79 20 6b 65 79 5d 20 73 20 2d IKM Key key] s -
02c0: 69 6e 66 6f 20 5b 6c 69 73 74 20 49 20 69 6e 66 info [list I inf
02d0: 6f 5d 20 73 20 2d 70 61 73 73 77 6f 72 64 20 5b o] s -password [
02e0: 6c 69 73 74 20 50 5d 20 73 20 5c 0a 09 20 20 20 list P] s \..
02f0: 20 2d 73 61 6c 74 20 5b 6c 69 73 74 20 53 20 73 -salt [list S s
0300: 61 6c 74 5d 20 73 20 2d 69 74 65 72 61 74 69 6f alt] s -iteratio
0310: 6e 73 20 5b 6c 69 73 74 20 63 5d 20 69 20 2d 73 ns [list c] i -s
0320: 69 7a 65 20 5b 6c 69 73 74 20 4c 20 64 6b 4c 65 ize [list L dkLe
0330: 6e 20 64 6b 6c 65 6e 5d 20 69 20 5c 0a 09 20 20 n dklen] i \..
0340: 20 20 2d 4e 20 5b 6c 69 73 74 20 4e 5d 20 69 20 -N [list N] i
0350: 2d 72 20 5b 6c 69 73 74 20 72 5d 20 69 20 2d 70 -r [list r] i -p
0360: 20 5b 6c 69 73 74 20 70 5d 20 69 5d 20 7b 0a 09 [list p] i] {..
0370: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 foreach name $na
0380: 6d 65 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b mes {.. if {[
0390: 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 66 info exists conf
03a0: 69 67 28 24 6e 61 6d 65 29 5d 7d 20 7b 0a 09 09 ig($name)]} {...
03b0: 73 65 74 20 64 61 74 61 20 24 63 6f 6e 66 69 67 set data $config
03c0: 28 24 6e 61 6d 65 29 0a 09 09 23 20 48 61 6e 64 ($name)...# Hand
03d0: 6c 65 20 68 65 78 20 73 74 72 69 6e 67 0a 09 09 le hex string...
03e0: 69 66 20 7b 24 74 79 70 65 20 65 71 20 22 73 22 if {$type eq "s"
03f0: 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 && [string leng
0400: 74 68 20 24 64 61 74 61 5d 20 3e 20 30 20 26 26 th $data] > 0 &&
0410: 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 [string index $
0420: 64 61 74 61 20 30 5d 20 6e 65 20 22 5c 22 22 7d data 0] ne "\""}
0430: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 64 61 74 {... set dat
0440: 61 20 5b 66 6f 72 6d 61 74 20 7b 5b 62 69 6e 61 a [format {[bina
0450: 72 79 20 64 65 63 6f 64 65 20 68 65 78 20 25 73 ry decode hex %s
0460: 5d 7d 20 24 64 61 74 61 5d 0a 09 09 7d 0a 09 09 ]} $data]...}...
0470: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng
0480: 74 68 20 24 64 61 74 61 5d 20 3e 20 30 7d 20 7b th $data] > 0} {
0490: 0a 09 09 20 20 20 20 61 70 70 65 6e 64 20 63 6d ... append cm
04a0: 64 20 22 20 22 20 24 70 61 72 61 6d 20 22 20 22 d " " $param " "
04b0: 20 24 64 61 74 61 0a 09 09 7d 0a 09 20 20 20 20 $data...}..
04c0: 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 }..}. }..
04d0: 23 20 54 65 73 74 20 62 6f 64 79 0a 20 20 20 20 # Test body.
04e0: 61 70 70 65 6e 64 20 6c 69 6e 65 20 22 2d 62 6f append line "-bo
04f0: 64 79 20 5c 7b 62 69 6e 61 72 79 20 65 6e 63 6f dy \{binary enco
0500: 64 65 20 68 65 78 20 5c 5b 22 20 24 63 6d 64 20 de hex \[" $cmd
0510: 22 5c 5d 5c 7d 20 5c 5c 5c 6e 5c 74 22 0a 0a 20 "\]\} \\\n\t"..
0520: 20 20 20 23 20 54 65 73 74 20 63 6c 65 61 6e 75 # Test cleanu
0530: 70 0a 20 20 20 20 23 61 70 70 65 6e 64 20 6c 69 p. #append li
0540: 6e 65 20 22 2d 63 6c 65 61 6e 75 70 20 7b 7d 20 ne "-cleanup {}
0550: 5c 5c 6e 5c 74 22 0a 0a 20 20 20 20 23 20 54 65 \\n\t".. # Te
0560: 73 74 20 72 65 73 75 6c 74 0a 20 20 20 20 73 65 st result. se
0570: 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20 20 20 t result "".
0580: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 foreach name [li
0590: 73 74 20 4f 4b 4d 20 44 4b 20 4f 75 74 70 75 74 st OKM DK Output
05a0: 5d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 ] {..if {[info e
05b0: 78 69 73 74 73 20 63 6f 6e 66 69 67 28 24 6e 61 xists config($na
05c0: 6d 65 29 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 me)]} {.. set
05d0: 20 72 65 73 75 6c 74 20 24 63 6f 6e 66 69 67 28 result $config(
05e0: 24 6e 61 6d 65 29 0a 09 20 20 20 20 62 72 65 61 $name).. brea
05f0: 6b 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 0a k..}. }. .
0600: 20 20 20 20 61 70 70 65 6e 64 20 6c 69 6e 65 20 append line
0610: 5b 66 6f 72 6d 61 74 20 7b 2d 6d 61 74 63 68 20 [format {-match
0620: 65 78 61 63 74 20 2d 72 65 73 75 6c 74 20 25 73 exact -result %s
0630: 7d 20 24 72 65 73 75 6c 74 5d 0a 0a 20 20 20 20 } $result]..
0640: 23 20 52 65 74 75 72 6e 20 63 6f 64 65 73 0a 20 # Return codes.
0650: 20 20 20 23 61 70 70 65 6e 64 20 6c 69 6e 65 20 #append line
0660: 7b 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 30 { -returnCodes 0
0670: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 6c 69 }. return $li
0680: 6e 65 0a 7d 0a 0a 23 0a 23 20 50 61 72 73 65 20 ne.}..#.# Parse
0690: 74 65 73 74 20 76 65 63 74 6f 72 20 66 69 6c 65 test vector file
06a0: 20 61 6e 64 20 67 65 74 20 74 65 73 74 20 63 61 and get test ca
06b0: 73 65 73 20 63 6f 6e 66 69 67 20 69 6e 66 6f 0a ses config info.
06c0: 23 0a 70 72 6f 63 20 70 61 72 73 65 20 7b 67 72 #.proc parse {gr
06d0: 6f 75 70 20 66 69 6c 65 6e 61 6d 65 20 66 69 6c oup filename fil
06e0: 65 5f 6e 75 6d 7d 20 7b 0a 20 20 20 20 73 65 74 e_num} {. set
06f0: 20 74 63 20 30 0a 0a 20 20 20 20 23 20 4f 70 65 tc 0.. # Ope
0700: 6e 20 69 6e 70 75 74 20 66 69 6c 65 0a 20 20 20 n input file.
0710: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 70 65 if {[catch {ope
0720: 6e 20 24 66 69 6c 65 6e 61 6d 65 20 72 7d 20 63 n $filename r} c
0730: 68 5d 7d 20 7b 0a 09 72 65 74 75 72 6e 20 2d 63 h]} {..return -c
0740: 6f 64 65 20 65 72 72 6f 72 20 24 63 68 0a 20 20 ode error $ch.
0750: 20 20 7d 0a 20 20 20 20 73 65 74 20 74 61 69 6c }. set tail
0760: 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname
0770: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail $file
0780: 6e 61 6d 65 5d 5d 0a 0a 20 20 20 20 23 20 4f 70 name]].. # Op
0790: 65 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 0a 20 en output file.
07a0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f if {[catch {o
07b0: 70 65 6e 20 5b 66 6f 72 6d 61 74 20 22 25 73 2e pen [format "%s.
07c0: 74 65 73 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 test" [file root
07d0: 6e 61 6d 65 20 24 66 69 6c 65 6e 61 6d 65 5d 5d name $filename]]
07e0: 20 77 7d 20 6f 75 74 5d 7d 20 7b 0a 09 72 65 74 w} out]} {..ret
07f0: 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 urn -code error
0800: 24 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 $ch. }.. #
0810: 20 47 65 74 20 64 69 67 65 73 74 0a 20 20 20 20 Get digest.
0820: 6c 61 73 73 69 67 6e 20 5b 73 70 6c 69 74 20 5b lassign [split [
0830: 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list
0840: 20 22 5f 22 20 22 2d 22 5d 20 24 74 61 69 6c 5d "_" "-"] $tail]
0850: 20 22 2d 22 5d 20 6b 64 66 20 64 69 67 65 73 74 "-"] kdf digest
0860: 0a 20 20 20 20 73 65 74 20 70 61 72 61 6d 73 20 . set params
0870: 5b 6c 69 73 74 5d 0a 0a 20 20 20 20 23 20 41 64 [list].. # Ad
0880: 64 20 63 6f 6e 66 69 67 20 69 6e 66 6f 0a 20 20 d config info.
0890: 20 20 70 75 74 73 20 24 6f 75 74 20 5b 66 6f 72 puts $out [for
08a0: 6d 61 74 20 22 23 20 41 75 74 6f 20 67 65 6e 65 mat "# Auto gene
08b0: 72 61 74 65 64 20 66 72 6f 6d 20 5c 22 25 73 5c rated from \"%s\
08c0: 22 22 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 "" [file tail $f
08d0: 69 6c 65 6e 61 6d 65 5d 5d 0a 20 20 20 20 70 75 ilename]]. pu
08e0: 74 73 20 24 6f 75 74 20 22 70 61 63 6b 61 67 65 ts $out "package
08f0: 20 72 65 71 75 69 72 65 20 74 6c 73 22 0a 20 20 require tls".
0900: 20 20 70 75 74 73 20 24 6f 75 74 20 22 70 61 63 puts $out "pac
0910: 6b 61 67 65 20 72 65 71 75 69 72 65 20 74 63 6c kage require tcl
0920: 74 65 73 74 5c 6e 22 0a 20 20 20 20 70 75 74 73 test\n". puts
0930: 20 24 6f 75 74 20 5b 66 6f 72 6d 61 74 20 22 74 $out [format "t
0940: 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f 6e 73 cltest::testCons
0950: 74 72 61 69 6e 74 20 25 73 20 25 73 22 20 5b 73 traint %s %s" [s
0960: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 tring map [list
0970: 22 2d 22 20 22 5f 22 5d 20 24 6b 64 66 5d 20 5c "-" "_"] $kdf] \
0980: 0a 09 5b 66 6f 72 6d 61 74 20 7b 5b 65 78 70 72 ..[format {[expr
0990: 20 7b 5b 6c 73 65 61 72 63 68 20 2d 6e 6f 63 61 {[lsearch -noca
09a0: 73 65 20 5b 74 6c 73 3a 3a 6b 64 66 73 5d 20 25 se [tls::kdfs] %
09b0: 73 5d 20 3e 20 2d 31 7d 5d 7d 20 24 6b 64 66 5d s] > -1}]} $kdf]
09c0: 5d 0a 20 20 20 20 69 66 20 7b 24 64 69 67 65 73 ]. if {$diges
09d0: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 70 75 74 73 t ne ""} {..puts
09e0: 20 24 6f 75 74 20 5b 66 6f 72 6d 61 74 20 22 74 $out [format "t
09f0: 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f 6e 73 cltest::testCons
0a00: 74 72 61 69 6e 74 20 25 73 20 25 73 22 20 5b 73 traint %s %s" [s
0a10: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 tring map [list
0a20: 22 2d 22 20 22 5f 22 5d 20 24 64 69 67 65 73 74 "-" "_"] $digest
0a30: 5d 20 5c 0a 09 20 20 20 20 5b 66 6f 72 6d 61 74 ] \.. [format
0a40: 20 7b 5b 65 78 70 72 20 7b 5b 6c 73 65 61 72 63 {[expr {[lsearc
0a50: 68 20 2d 6e 6f 63 61 73 65 20 5b 74 6c 73 3a 3a h -nocase [tls::
0a60: 64 69 67 65 73 74 73 5d 20 25 73 5d 20 3e 20 2d digests] %s] > -
0a70: 31 7d 5d 7d 20 24 64 69 67 65 73 74 5d 5d 0a 20 1}]} $digest]].
0a80: 20 20 20 7d 0a 20 20 20 20 70 75 74 73 20 24 6f }. puts $o
0a90: 75 74 20 22 22 0a 0a 20 20 20 20 23 20 50 72 6f ut "".. # Pro
0aa0: 63 65 73 73 20 66 69 6c 65 0a 20 20 20 20 77 68 cess file. wh
0ab0: 69 6c 65 20 7b 21 5b 65 6f 66 20 24 63 68 5d 7d ile {![eof $ch]}
0ac0: 20 7b 0a 09 67 65 74 73 20 24 63 68 20 6c 69 6e {..gets $ch lin
0ad0: 65 0a 09 73 65 74 20 6c 69 6e 65 20 5b 73 74 72 e..set line [str
0ae0: 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 0a ing trim $line].
0af0: 09 73 65 74 20 6c 65 6e 20 5b 73 74 72 69 6e 67 .set len [string
0b00: 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 0a 0a length $line]..
0b10: 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e 64 .if {[string ind
0b20: 65 78 20 24 6c 69 6e 65 20 30 5d 20 69 6e 20 5b ex $line 0] in [
0b30: 6c 69 73 74 20 22 23 22 20 22 5c 5b 22 5d 7d 20 list "#" "\["]}
0b40: 7b 0a 09 20 20 20 20 23 20 53 6b 69 70 20 63 6f {.. # Skip co
0b50: 6d 6d 65 6e 74 73 20 61 6e 64 20 69 6e 66 6f 20 mments and info
0b60: 6c 69 6e 65 73 0a 09 20 20 20 20 63 6f 6e 74 69 lines.. conti
0b70: 6e 75 65 0a 0a 09 7d 20 65 6c 73 65 69 66 20 7b nue...} elseif {
0b80: 24 6c 65 6e 20 3d 3d 20 30 7d 20 7b 0a 09 20 20 $len == 0} {..
0b90: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 if {[llength $
0ba0: 70 61 72 61 6d 73 5d 20 3e 20 30 7d 20 7b 0a 09 params] > 0} {..
0bb0: 09 23 20 44 6f 20 74 65 73 74 20 69 66 20 65 6e .# Do test if en
0bc0: 64 20 6f 66 20 70 61 72 61 6d 73 0a 09 09 70 75 d of params...pu
0bd0: 74 73 20 24 6f 75 74 20 5b 64 6f 5f 74 65 73 74 ts $out [do_test
0be0: 20 24 67 72 6f 75 70 20 24 74 61 69 6c 20 24 66 $group $tail $f
0bf0: 69 6c 65 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 63 ile_num [incr tc
0c00: 5d 20 24 6b 64 66 20 24 64 69 67 65 73 74 20 24 ] $kdf $digest $
0c10: 70 61 72 61 6d 73 5d 0a 09 09 70 75 74 73 20 24 params]...puts $
0c20: 6f 75 74 20 22 22 0a 09 09 73 65 74 20 70 61 72 out ""...set par
0c30: 61 6d 73 20 5b 6c 69 73 74 5d 0a 09 20 20 20 20 ams [list]..
0c40: 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 45 6d 70 } else {...# Emp
0c50: 74 79 20 6c 69 6e 65 0a 09 20 20 20 20 7d 0a 0a ty line.. }..
0c60: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 .} else {.. #
0c70: 20 41 70 70 65 6e 64 20 61 72 67 73 20 74 6f 20 Append args to
0c80: 70 61 72 61 6d 73 0a 09 20 20 20 20 73 65 74 20 params.. set
0c90: 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 20 66 69 index [string fi
0ca0: 72 73 74 20 22 3d 22 20 24 6c 69 6e 65 5d 0a 09 rst "=" $line]..
0cb0: 20 20 20 20 69 66 20 7b 24 69 6e 64 65 78 20 3e if {$index >
0cc0: 20 2d 31 7d 20 7b 0a 09 09 73 65 74 20 6b 65 79 -1} {...set key
0cd0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 [string trim [s
0ce0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e tring range $lin
0cf0: 65 20 30 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 e 0 [expr {$inde
0d00: 78 20 2d 20 31 7d 5d 5d 5d 0a 09 09 73 65 74 20 x - 1}]]]...set
0d10: 76 61 6c 75 65 20 5b 73 74 72 69 6e 67 20 74 72 value [string tr
0d20: 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 im [string range
0d30: 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 7b 24 69 $line [expr {$i
0d40: 6e 64 65 78 20 2b 20 31 7d 5d 20 65 6e 64 5d 5d ndex + 1}] end]]
0d50: 0a 09 09 6c 61 70 70 65 6e 64 20 70 61 72 61 6d ...lappend param
0d60: 73 20 24 6b 65 79 20 24 76 61 6c 75 65 0a 09 20 s $key $value..
0d70: 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 }..}. }..
0d80: 20 20 20 23 20 48 61 6e 64 6c 65 20 6c 61 73 74 # Handle last
0d90: 20 74 65 73 74 20 63 61 73 65 0a 20 20 20 20 69 test case. i
0da0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 72 f {[llength $par
0db0: 61 6d 73 5d 20 3e 20 30 7d 20 7b 0a 09 70 75 74 ams] > 0} {..put
0dc0: 73 20 24 6f 75 74 20 5b 64 6f 5f 74 65 73 74 20 s $out [do_test
0dd0: 24 67 72 6f 75 70 20 24 74 61 69 6c 20 24 66 69 $group $tail $fi
0de0: 6c 65 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 63 5d le_num [incr tc]
0df0: 20 24 6b 64 66 20 24 64 69 67 65 73 74 20 24 70 $kdf $digest $p
0e00: 61 72 61 6d 73 5d 0a 09 70 75 74 73 20 24 6f 75 arams]..puts $ou
0e10: 74 20 22 22 0a 20 20 20 20 7d 0a 20 20 20 20 0a t "". }. .
0e20: 20 20 20 20 23 20 43 6c 65 61 6e 75 70 0a 20 20 # Cleanup.
0e30: 20 20 70 75 74 73 20 24 6f 75 74 20 22 23 20 43 puts $out "# C
0e40: 6c 65 61 6e 75 70 5c 6e 3a 3a 74 63 6c 74 65 73 leanup\n::tcltes
0e50: 74 3a 3a 63 6c 65 61 6e 75 70 54 65 73 74 73 5c t::cleanupTests\
0e60: 6e 72 65 74 75 72 6e 22 0a 20 20 20 20 63 6c 6f nreturn". clo
0e70: 73 65 20 24 63 68 0a 20 20 20 20 63 6c 6f 73 65 se $ch. close
0e80: 20 24 6f 75 74 0a 7d 0a 0a 23 0a 23 20 52 65 61 $out.}..#.# Rea
0e90: 64 20 61 6c 6c 20 63 6f 6e 66 69 67 20 66 69 6c d all config fil
0ea0: 65 73 20 69 6e 20 64 69 72 65 63 74 6f 72 79 0a es in directory.
0eb0: 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 70 61 74 #.proc main {pat
0ec0: 68 7d 20 7b 0a 20 20 20 20 73 65 74 20 66 69 6c h} {. set fil
0ed0: 65 5f 6e 75 6d 20 30 0a 20 20 20 20 73 65 74 20 e_num 0. set
0ee0: 67 72 6f 75 70 20 5b 66 69 6c 65 20 72 6f 6f 74 group [file root
0ef0: 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 name [file tail
0f00: 24 70 61 74 68 5d 5d 0a 0a 20 20 20 20 66 6f 72 $path]].. for
0f10: 65 61 63 68 20 66 69 6c 65 6e 61 6d 65 20 5b 67 each filename [g
0f20: 6c 6f 62 20 2d 64 69 72 65 63 74 6f 72 79 20 24 lob -directory $
0f30: 70 61 74 68 20 2a 2e 74 78 74 20 2a 53 68 6f 72 path *.txt *Shor
0f40: 74 4d 73 67 2e 72 73 70 20 2a 4c 6f 6e 67 4d 73 tMsg.rsp *LongMs
0f50: 67 2e 72 73 70 5d 20 7b 0a 09 70 75 74 73 20 5b g.rsp] {..puts [
0f60: 66 6f 72 6d 61 74 20 22 50 72 6f 63 65 73 73 69 format "Processi
0f70: 6e 67 20 25 73 22 20 24 66 69 6c 65 6e 61 6d 65 ng %s" $filename
0f80: 5d 0a 09 73 65 74 20 74 61 69 6c 20 5b 66 69 6c ]..set tail [fil
0f90: 65 20 74 61 69 6c 20 24 66 69 6c 65 6e 61 6d 65 e tail $filename
0fa0: 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d ]..if {[string m
0fb0: 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 22 52 65 atch -nocase "Re
0fc0: 61 64 6d 65 2e 74 78 74 22 20 24 74 61 69 6c 5d adme.txt" $tail]
0fd0: 20 7c 7c 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 || [string matc
0fe0: 68 20 2d 6e 6f 63 61 73 65 20 22 2a 4d 6f 6e 74 h -nocase "*Mont
0ff0: 65 2e 74 78 74 22 20 24 74 61 69 6c 5d 7d 20 7b e.txt" $tail]} {
1000: 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 .. continue..
1010: 7d 0a 0a 09 73 65 74 20 74 61 69 6c 20 5b 66 69 }...set tail [fi
1020: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil
1030: 65 20 74 61 69 6c 20 24 66 69 6c 65 6e 61 6d 65 e tail $filename
1040: 5d 5d 0a 09 73 65 74 20 64 69 67 65 73 74 20 5b ]]..set digest [
1050: 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list
1060: 20 4c 6f 6e 67 4d 73 67 20 22 22 20 53 68 6f 72 LongMsg "" Shor
1070: 74 4d 73 67 20 22 22 20 4d 6f 6e 74 65 20 22 22 tMsg "" Monte ""
1080: 20 22 5f 22 20 22 2d 22 5d 20 24 74 61 69 6c 5d "_" "-"] $tail]
1090: 0a 09 73 65 74 20 69 64 20 5b 66 6f 72 6d 61 74 ..set id [format
10a0: 20 22 25 73 5f 25 73 22 20 24 67 72 6f 75 70 20 "%s_%s" $group
10b0: 24 64 69 67 65 73 74 5d 0a 09 73 65 74 20 74 65 $digest]..set te
10c0: 73 74 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 65 73 st_num [incr tes
10d0: 74 5f 69 64 73 28 24 69 64 29 5d 0a 09 70 61 72 t_ids($id)]..par
10e0: 73 65 20 24 69 64 20 24 66 69 6c 65 6e 61 6d 65 se $id $filename
10f0: 20 24 74 65 73 74 5f 6e 75 6d 0a 20 20 20 20 7d $test_num. }
1100: 0a 7d 0a 0a 6d 61 69 6e 20 5b 70 77 64 5d 0a 65 .}..main [pwd].e
1110: 78 69 74 0a xit.