Artifact
81cc8928e5c3084c58909f6911baf11fab3dab48aa0bb04ce5816489fd3d2896:
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 5b 66 6f 72 6d 61 74 20 ts $out [format
08f0: 22 6c 61 70 70 65 6e 64 20 61 75 74 6f 5f 70 61 "lappend auto_pa
0900: 74 68 20 25 73 22 20 7b 5b 66 69 6c 65 20 64 69 th %s" {[file di
0910: 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e rname [file dirn
0920: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam
0930: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname
0940: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d [file join [pwd]
0950: 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 5d [info script]]]
0960: 5d 5d 5d 7d 5d 0a 20 20 20 20 70 75 74 73 20 24 ]]]}]. puts $
0970: 6f 75 74 20 22 70 61 63 6b 61 67 65 20 72 65 71 out "package req
0980: 75 69 72 65 20 74 6c 73 22 0a 20 20 20 20 70 75 uire tls". pu
0990: 74 73 20 24 6f 75 74 20 22 70 61 63 6b 61 67 65 ts $out "package
09a0: 20 72 65 71 75 69 72 65 20 74 63 6c 74 65 73 74 require tcltest
09b0: 5c 6e 22 0a 20 20 20 20 70 75 74 73 20 24 6f 75 \n". puts $ou
09c0: 74 20 5b 66 6f 72 6d 61 74 20 22 74 63 6c 74 65 t [format "tclte
09d0: 73 74 3a 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 st::testConstrai
09e0: 6e 74 20 25 73 20 25 73 22 20 5b 73 74 72 69 6e nt %s %s" [strin
09f0: 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d 22 20 g map [list "-"
0a00: 22 5f 22 5d 20 24 6b 64 66 5d 20 5c 0a 09 5b 66 "_"] $kdf] \..[f
0a10: 6f 72 6d 61 74 20 7b 5b 65 78 70 72 20 7b 5b 6c ormat {[expr {[l
0a20: 73 65 61 72 63 68 20 2d 6e 6f 63 61 73 65 20 5b search -nocase [
0a30: 74 6c 73 3a 3a 6b 64 66 73 5d 20 25 73 5d 20 3e tls::kdfs] %s] >
0a40: 20 2d 31 7d 5d 7d 20 24 6b 64 66 5d 5d 0a 20 20 -1}]} $kdf]].
0a50: 20 20 69 66 20 7b 24 64 69 67 65 73 74 20 6e 65 if {$digest ne
0a60: 20 22 22 7d 20 7b 0a 09 70 75 74 73 20 24 6f 75 ""} {..puts $ou
0a70: 74 20 5b 66 6f 72 6d 61 74 20 22 74 63 6c 74 65 t [format "tclte
0a80: 73 74 3a 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 st::testConstrai
0a90: 6e 74 20 25 73 20 25 73 22 20 5b 73 74 72 69 6e nt %s %s" [strin
0aa0: 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d 22 20 g map [list "-"
0ab0: 22 5f 22 5d 20 24 64 69 67 65 73 74 5d 20 5c 0a "_"] $digest] \.
0ac0: 09 20 20 20 20 5b 66 6f 72 6d 61 74 20 7b 5b 65 . [format {[e
0ad0: 78 70 72 20 7b 5b 6c 73 65 61 72 63 68 20 2d 6e xpr {[lsearch -n
0ae0: 6f 63 61 73 65 20 5b 74 6c 73 3a 3a 64 69 67 65 ocase [tls::dige
0af0: 73 74 73 5d 20 25 73 5d 20 3e 20 2d 31 7d 5d 7d sts] %s] > -1}]}
0b00: 20 24 64 69 67 65 73 74 5d 5d 0a 20 20 20 20 7d $digest]]. }
0b10: 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 . puts $out "
0b20: 63 61 74 63 68 20 7b 74 6c 73 3a 3a 70 72 6f 76 catch {tls::prov
0b30: 69 64 65 72 20 6c 65 67 61 63 79 7d 22 0a 20 20 ider legacy}".
0b40: 20 20 70 75 74 73 20 24 6f 75 74 20 22 22 0a 0a puts $out ""..
0b50: 20 20 20 20 23 20 50 72 6f 63 65 73 73 20 66 69 # Process fi
0b60: 6c 65 0a 20 20 20 20 77 68 69 6c 65 20 7b 21 5b le. while {![
0b70: 65 6f 66 20 24 63 68 5d 7d 20 7b 0a 09 67 65 74 eof $ch]} {..get
0b80: 73 20 24 63 68 20 6c 69 6e 65 0a 09 73 65 74 20 s $ch line..set
0b90: 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 74 72 69 line [string tri
0ba0: 6d 20 24 6c 69 6e 65 5d 0a 09 73 65 74 20 6c 65 m $line]..set le
0bb0: 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 n [string length
0bc0: 20 24 6c 69 6e 65 5d 0a 0a 09 69 66 20 7b 5b 73 $line]...if {[s
0bd0: 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e tring index $lin
0be0: 65 20 30 5d 20 69 6e 20 5b 6c 69 73 74 20 22 23 e 0] in [list "#
0bf0: 22 20 22 5c 5b 22 5d 7d 20 7b 0a 09 20 20 20 20 " "\["]} {..
0c00: 23 20 53 6b 69 70 20 63 6f 6d 6d 65 6e 74 73 20 # Skip comments
0c10: 61 6e 64 20 69 6e 66 6f 20 6c 69 6e 65 73 0a 09 and info lines..
0c20: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 0a 09 7d continue...}
0c30: 20 65 6c 73 65 69 66 20 7b 24 6c 65 6e 20 3d 3d elseif {$len ==
0c40: 20 30 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 0} {.. if {[
0c50: 6c 6c 65 6e 67 74 68 20 24 70 61 72 61 6d 73 5d llength $params]
0c60: 20 3e 20 30 7d 20 7b 0a 09 09 23 20 44 6f 20 74 > 0} {...# Do t
0c70: 65 73 74 20 69 66 20 65 6e 64 20 6f 66 20 70 61 est if end of pa
0c80: 72 61 6d 73 0a 09 09 70 75 74 73 20 24 6f 75 74 rams...puts $out
0c90: 20 5b 64 6f 5f 74 65 73 74 20 24 67 72 6f 75 70 [do_test $group
0ca0: 20 24 74 61 69 6c 20 24 66 69 6c 65 5f 6e 75 6d $tail $file_num
0cb0: 20 5b 69 6e 63 72 20 74 63 5d 20 24 6b 64 66 20 [incr tc] $kdf
0cc0: 24 64 69 67 65 73 74 20 24 70 61 72 61 6d 73 5d $digest $params]
0cd0: 0a 09 09 70 75 74 73 20 24 6f 75 74 20 22 22 0a ...puts $out "".
0ce0: 09 09 73 65 74 20 70 61 72 61 6d 73 20 5b 6c 69 ..set params [li
0cf0: 73 74 5d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 st].. } else
0d00: 7b 0a 09 09 23 20 45 6d 70 74 79 20 6c 69 6e 65 {...# Empty line
0d10: 0a 09 20 20 20 20 7d 0a 0a 09 7d 20 65 6c 73 65 .. }...} else
0d20: 20 7b 0a 09 20 20 20 20 23 20 41 70 70 65 6e 64 {.. # Append
0d30: 20 61 72 67 73 20 74 6f 20 70 61 72 61 6d 73 0a args to params.
0d40: 09 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b . set index [
0d50: 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 3d 22 string first "="
0d60: 20 24 6c 69 6e 65 5d 0a 09 20 20 20 20 69 66 20 $line].. if
0d70: 7b 24 69 6e 64 65 78 20 3e 20 2d 31 7d 20 7b 0a {$index > -1} {.
0d80: 09 09 73 65 74 20 6b 65 79 20 5b 73 74 72 69 6e ..set key [strin
0d90: 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 g trim [string r
0da0: 61 6e 67 65 20 24 6c 69 6e 65 20 30 20 5b 65 78 ange $line 0 [ex
0db0: 70 72 20 7b 24 69 6e 64 65 78 20 2d 20 31 7d 5d pr {$index - 1}]
0dc0: 5d 5d 0a 09 09 73 65 74 20 76 61 6c 75 65 20 5b ]]...set value [
0dd0: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 string trim [str
0de0: 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 ing range $line
0df0: 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 2b 20 [expr {$index +
0e00: 31 7d 5d 20 65 6e 64 5d 5d 0a 09 09 6c 61 70 70 1}] end]]...lapp
0e10: 65 6e 64 20 70 61 72 61 6d 73 20 24 6b 65 79 20 end params $key
0e20: 24 76 61 6c 75 65 0a 09 20 20 20 20 7d 0a 09 7d $value.. }..}
0e30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 48 61 . }.. # Ha
0e40: 6e 64 6c 65 20 6c 61 73 74 20 74 65 73 74 20 63 ndle last test c
0e50: 61 73 65 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 ase. if {[lle
0e60: 6e 67 74 68 20 24 70 61 72 61 6d 73 5d 20 3e 20 ngth $params] >
0e70: 30 7d 20 7b 0a 09 70 75 74 73 20 24 6f 75 74 20 0} {..puts $out
0e80: 5b 64 6f 5f 74 65 73 74 20 24 67 72 6f 75 70 20 [do_test $group
0e90: 24 74 61 69 6c 20 24 66 69 6c 65 5f 6e 75 6d 20 $tail $file_num
0ea0: 5b 69 6e 63 72 20 74 63 5d 20 24 6b 64 66 20 24 [incr tc] $kdf $
0eb0: 64 69 67 65 73 74 20 24 70 61 72 61 6d 73 5d 0a digest $params].
0ec0: 09 70 75 74 73 20 24 6f 75 74 20 22 22 0a 20 20 .puts $out "".
0ed0: 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20 43 }. . # C
0ee0: 6c 65 61 6e 75 70 0a 20 20 20 20 70 75 74 73 20 leanup. puts
0ef0: 24 6f 75 74 20 22 23 20 43 6c 65 61 6e 75 70 5c $out "# Cleanup\
0f00: 6e 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61 n::tcltest::clea
0f10: 6e 75 70 54 65 73 74 73 5c 6e 72 65 74 75 72 6e nupTests\nreturn
0f20: 22 0a 20 20 20 20 63 6c 6f 73 65 20 24 63 68 0a ". close $ch.
0f30: 20 20 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a 7d close $out.}
0f40: 0a 0a 23 0a 23 20 52 65 61 64 20 61 6c 6c 20 63 ..#.# Read all c
0f50: 6f 6e 66 69 67 20 66 69 6c 65 73 20 69 6e 20 64 onfig files in d
0f60: 69 72 65 63 74 6f 72 79 0a 23 0a 70 72 6f 63 20 irectory.#.proc
0f70: 6d 61 69 6e 20 7b 70 61 74 68 7d 20 7b 0a 20 20 main {path} {.
0f80: 20 20 73 65 74 20 66 69 6c 65 5f 6e 75 6d 20 30 set file_num 0
0f90: 0a 20 20 20 20 73 65 74 20 67 72 6f 75 70 20 5b . set group [
0fa0: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 file rootname [f
0fb0: 69 6c 65 20 74 61 69 6c 20 24 70 61 74 68 5d 5d ile tail $path]]
0fc0: 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 .. foreach fi
0fd0: 6c 65 6e 61 6d 65 20 5b 67 6c 6f 62 20 2d 64 69 lename [glob -di
0fe0: 72 65 63 74 6f 72 79 20 24 70 61 74 68 20 2a 2e rectory $path *.
0ff0: 74 78 74 20 2a 53 68 6f 72 74 4d 73 67 2e 72 73 txt *ShortMsg.rs
1000: 70 20 2a 4c 6f 6e 67 4d 73 67 2e 72 73 70 5d 20 p *LongMsg.rsp]
1010: 7b 0a 09 70 75 74 73 20 5b 66 6f 72 6d 61 74 20 {..puts [format
1020: 22 50 72 6f 63 65 73 73 69 6e 67 20 25 73 22 20 "Processing %s"
1030: 24 66 69 6c 65 6e 61 6d 65 5d 0a 09 73 65 74 20 $filename]..set
1040: 74 61 69 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20 tail [file tail
1050: 24 66 69 6c 65 6e 61 6d 65 5d 0a 09 69 66 20 7b $filename]..if {
1060: 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e [string match -n
1070: 6f 63 61 73 65 20 22 52 65 61 64 6d 65 2e 74 78 ocase "Readme.tx
1080: 74 22 20 24 74 61 69 6c 5d 20 7c 7c 20 5b 73 74 t" $tail] || [st
1090: 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63 61 ring match -noca
10a0: 73 65 20 22 2a 4d 6f 6e 74 65 2e 74 78 74 22 20 se "*Monte.txt"
10b0: 24 74 61 69 6c 5d 7d 20 7b 0a 09 20 20 20 20 63 $tail]} {.. c
10c0: 6f 6e 74 69 6e 75 65 0a 09 7d 0a 0a 09 73 65 74 ontinue..}...set
10d0: 20 74 61 69 6c 20 5b 66 69 6c 65 20 72 6f 6f 74 tail [file root
10e0: 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 name [file tail
10f0: 24 66 69 6c 65 6e 61 6d 65 5d 5d 0a 09 73 65 74 $filename]]..set
1100: 20 64 69 67 65 73 74 20 5b 73 74 72 69 6e 67 20 digest [string
1110: 6d 61 70 20 5b 6c 69 73 74 20 4c 6f 6e 67 4d 73 map [list LongMs
1120: 67 20 22 22 20 53 68 6f 72 74 4d 73 67 20 22 22 g "" ShortMsg ""
1130: 20 4d 6f 6e 74 65 20 22 22 20 22 5f 22 20 22 2d Monte "" "_" "-
1140: 22 5d 20 24 74 61 69 6c 5d 0a 09 73 65 74 20 69 "] $tail]..set i
1150: 64 20 5b 66 6f 72 6d 61 74 20 22 25 73 5f 25 73 d [format "%s_%s
1160: 22 20 24 67 72 6f 75 70 20 24 64 69 67 65 73 74 " $group $digest
1170: 5d 0a 09 73 65 74 20 74 65 73 74 5f 6e 75 6d 20 ]..set test_num
1180: 5b 69 6e 63 72 20 74 65 73 74 5f 69 64 73 28 24 [incr test_ids($
1190: 69 64 29 5d 0a 09 70 61 72 73 65 20 24 69 64 20 id)]..parse $id
11a0: 24 66 69 6c 65 6e 61 6d 65 20 24 74 65 73 74 5f $filename $test_
11b0: 6e 75 6d 0a 20 20 20 20 7d 0a 7d 0a 0a 6d 61 69 num. }.}..mai
11c0: 6e 20 5b 70 77 64 5d 0a 65 78 69 74 0a n [pwd].exit.