Artifact
32462f70bd8c95ddece463504ab58e660daa5172349d878328c094debf1de194:
0000: 23 0a 23 20 43 72 65 61 74 65 20 54 65 73 74 20 #.# Create Test
0010: 46 69 6c 65 73 20 66 6f 72 20 54 65 73 74 20 56 Files for Test V
0020: 65 63 74 6f 72 73 0a 23 0a 0a 23 0a 23 20 47 65 ectors.#..#.# Ge
0030: 74 20 73 74 72 69 6e 67 20 6f 72 20 68 65 78 20 t string or hex
0040: 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 23 0a 70 string value.#.p
0050: 72 6f 63 20 67 65 74 5f 76 61 6c 75 65 20 7b 74 roc get_value {t
0060: 79 70 65 20 64 61 74 61 20 7b 63 6f 75 6e 74 20 ype data {count
0070: 31 7d 7d 20 7b 0a 20 20 20 20 23 20 48 61 6e 64 1}} {. # Hand
0080: 6c 65 20 68 65 78 20 73 74 72 69 6e 67 0a 20 20 le hex string.
0090: 20 20 69 66 20 7b 24 74 79 70 65 20 65 71 20 22 if {$type eq "
00a0: 73 22 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 s" && [string le
00b0: 6e 67 74 68 20 24 64 61 74 61 5d 20 3e 20 30 20 ngth $data] > 0
00c0: 26 26 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 && [string index
00d0: 20 24 64 61 74 61 20 30 5d 20 6e 65 20 22 5c 22 $data 0] ne "\"
00e0: 22 7d 20 7b 0a 09 73 65 74 20 64 61 74 61 20 5b "} {..set data [
00f0: 66 6f 72 6d 61 74 20 7b 5b 62 69 6e 61 72 79 20 format {[binary
0100: 64 65 63 6f 64 65 20 68 65 78 20 25 73 5d 7d 20 decode hex %s]}
0110: 24 64 61 74 61 5d 0a 20 20 20 20 7d 0a 20 20 20 $data]. }.
0120: 20 69 66 20 7b 24 74 79 70 65 20 65 71 20 22 73 if {$type eq "s
0130: 22 20 26 26 20 24 63 6f 75 6e 74 20 3e 20 31 7d " && $count > 1}
0140: 20 7b 0a 09 73 65 74 20 64 61 74 61 20 5b 66 6f {..set data [fo
0150: 72 6d 61 74 20 7b 5b 73 74 72 69 6e 67 20 72 65 rmat {[string re
0160: 70 65 61 74 20 25 73 20 25 64 5d 7d 20 24 64 61 peat %s %d]} $da
0170: 74 61 20 24 63 6f 75 6e 74 5d 0a 20 20 20 20 7d ta $count]. }
0180: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 . if {[string
0190: 20 6c 65 6e 67 74 68 20 24 64 61 74 61 5d 20 3d length $data] =
01a0: 3d 20 30 7d 20 7b 0a 09 73 65 74 20 64 61 74 61 = 0} {..set data
01b0: 20 7b 22 22 7d 0a 20 20 20 20 7d 0a 20 20 20 20 {""}. }.
01c0: 72 65 74 75 72 6e 20 24 64 61 74 61 0a 7d 0a 0a return $data.}..
01d0: 23 0a 23 20 43 72 65 61 74 65 20 74 65 73 74 20 #.# Create test
01e0: 63 61 73 65 20 61 6e 64 20 6f 75 74 70 75 74 20 case and output
01f0: 74 6f 20 74 65 73 74 20 66 69 6c 65 0a 23 0a 70 to test file.#.p
0200: 72 6f 63 20 64 6f 5f 74 65 73 74 20 7b 67 72 6f roc do_test {gro
0210: 75 70 20 63 69 70 68 65 72 20 74 65 73 74 5f 6e up cipher test_n
0220: 75 6d 20 74 63 20 70 61 72 61 6d 73 20 66 6e 7d um tc params fn}
0230: 20 7b 0a 20 20 20 20 61 72 72 61 79 20 73 65 74 {. array set
0240: 20 63 6f 6e 66 69 67 20 5b 6c 69 73 74 20 4b 65 config [list Ke
0250: 79 20 22 22 20 52 65 70 65 61 74 20 31 20 4c 65 y "" Repeat 1 Le
0260: 6e 67 74 68 20 22 22 20 4f 66 66 73 65 74 20 30 ngth "" Offset 0
0270: 20 65 6e 64 20 65 6e 64 20 50 6c 61 69 6e 74 65 end end Plainte
0280: 78 74 20 7b 22 22 7d 20 43 69 70 68 65 72 74 65 xt {""} Cipherte
0290: 78 74 20 7b 22 22 7d 5d 0a 20 20 20 20 61 72 72 xt {""}]. arr
02a0: 61 79 20 73 65 74 20 63 6f 6e 66 69 67 20 24 70 ay set config $p
02b0: 61 72 61 6d 73 0a 20 20 20 20 73 65 74 20 65 6e arams. set en
02c0: 64 20 5b 65 78 70 72 20 7b 24 63 6f 6e 66 69 67 d [expr {$config
02d0: 28 4f 66 66 73 65 74 29 20 2b 20 5b 73 74 72 69 (Offset) + [stri
02e0: 6e 67 20 6c 65 6e 67 74 68 20 24 63 6f 6e 66 69 ng length $confi
02f0: 67 28 50 6c 61 69 6e 74 65 78 74 29 5d 2f 32 20 g(Plaintext)]/2
0300: 2d 20 31 7d 5d 0a 0a 20 20 20 20 23 20 54 65 73 - 1}].. # Tes
0310: 74 20 69 6e 66 6f 0a 20 20 20 20 73 65 74 20 6c t info. set l
0320: 69 6e 65 20 5b 66 6f 72 6d 61 74 20 22 5c 6e 74 ine [format "\nt
0330: 63 6c 74 65 73 74 3a 3a 74 65 73 74 20 25 73 5f cltest::test %s_
0340: 25 73 2d 25 64 2e 25 64 20 7b 25 73 20 25 73 20 %s-%d.%d {%s %s
0350: 6f 66 66 73 65 74 20 25 64 7d 22 20 5b 73 74 72 offset %d}" [str
0360: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d ing map [list "-
0370: 22 20 22 5f 22 5d 20 5c 0a 09 24 67 72 6f 75 70 " "_"] \..$group
0380: 5d 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c ] [string map [l
0390: 69 73 74 20 22 2d 22 20 22 5f 22 5d 20 24 63 69 ist "-" "_"] $ci
03a0: 70 68 65 72 5d 20 24 74 65 73 74 5f 6e 75 6d 20 pher] $test_num
03b0: 24 74 63 20 5b 73 74 72 69 6e 67 20 74 6f 74 69 $tc [string toti
03c0: 74 6c 65 20 24 66 6e 5d 20 24 63 69 70 68 65 72 tle $fn] $cipher
03d0: 20 24 63 6f 6e 66 69 67 28 4f 66 66 73 65 74 29 $config(Offset)
03e0: 5d 0a 0a 20 20 20 20 23 20 54 65 73 74 20 63 6f ].. # Test co
03f0: 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20 61 70 nstraints. ap
0400: 70 65 6e 64 20 6c 69 6e 65 20 5b 66 6f 72 6d 61 pend line [forma
0410: 74 20 22 20 5c 5c 5c 6e 5c 74 2d 63 6f 6e 73 74 t " \\\n\t-const
0420: 72 61 69 6e 74 73 20 25 73 22 20 5b 73 74 72 69 raints %s" [stri
0430: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d 22 ng map [list "-"
0440: 20 22 5f 22 5d 20 24 63 69 70 68 65 72 5d 5d 0a "_"] $cipher]].
0450: 0a 20 20 20 20 23 20 54 65 73 74 20 62 6f 64 79 . # Test body
0460: 0a 20 20 20 20 69 66 20 7b 24 66 6e 20 65 71 20 . if {$fn eq
0470: 22 65 6e 63 72 79 70 74 22 7d 20 7b 0a 09 73 65 "encrypt"} {..se
0480: 74 20 63 6d 64 20 5b 66 6f 72 6d 61 74 20 22 74 t cmd [format "t
0490: 6c 73 3a 3a 65 6e 63 72 79 70 74 20 2d 63 69 70 ls::encrypt -cip
04a0: 68 65 72 20 25 73 20 2d 70 61 64 64 69 6e 67 20 her %s -padding
04b0: 30 20 2d 6b 65 79 20 25 73 20 5c 5c 5c 6e 5c 74 0 -key %s \\\n\t
04c0: 5c 74 2d 64 61 74 61 20 25 73 22 20 24 63 69 70 \t-data %s" $cip
04d0: 68 65 72 20 5c 0a 09 20 20 20 20 5b 67 65 74 5f her \.. [get_
04e0: 76 61 6c 75 65 20 73 20 24 63 6f 6e 66 69 67 28 value s $config(
04f0: 4b 65 79 29 5d 20 5b 67 65 74 5f 76 61 6c 75 65 Key)] [get_value
0500: 20 73 20 24 63 6f 6e 66 69 67 28 50 6c 61 69 6e s $config(Plain
0510: 74 65 78 74 29 20 24 63 6f 6e 66 69 67 28 52 65 text) $config(Re
0520: 70 65 61 74 29 5d 5d 0a 20 20 0a 09 61 70 70 65 peat)]]. ..appe
0530: 6e 64 20 6c 69 6e 65 20 22 20 5c 5c 5c 6e 5c 74 nd line " \\\n\t
0540: 22 20 5b 66 6f 72 6d 61 74 20 7b 2d 62 6f 64 79 " [format {-body
0550: 20 7b 62 69 6e 61 72 79 20 65 6e 63 6f 64 65 20 {binary encode
0560: 68 65 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 hex [string rang
0570: 65 20 5b 25 73 5d 20 25 64 20 25 64 5d 7d 7d 20 e [%s] %d %d]}}
0580: 24 63 6d 64 20 24 63 6f 6e 66 69 67 28 4f 66 66 $cmd $config(Off
0590: 73 65 74 29 20 24 65 6e 64 5d 20 22 20 5c 5c 5c set) $end] " \\\
05a0: 6e 5c 74 22 0a 20 20 20 20 7d 20 65 6c 73 65 20 n\t". } else
05b0: 7b 0a 09 73 65 74 20 65 63 6d 64 20 5b 66 6f 72 {..set ecmd [for
05c0: 6d 61 74 20 22 74 6c 73 3a 3a 65 6e 63 72 79 70 mat "tls::encryp
05d0: 74 20 2d 63 69 70 68 65 72 20 25 73 20 2d 70 61 t -cipher %s -pa
05e0: 64 64 69 6e 67 20 30 20 2d 6b 65 79 20 25 73 20 dding 0 -key %s
05f0: 5c 5c 5c 6e 5c 74 5c 74 2d 64 61 74 61 20 25 73 \\\n\t\t-data %s
0600: 22 20 24 63 69 70 68 65 72 20 5c 0a 09 20 20 20 " $cipher \..
0610: 20 5b 67 65 74 5f 76 61 6c 75 65 20 73 20 24 63 [get_value s $c
0620: 6f 6e 66 69 67 28 4b 65 79 29 5d 20 5b 67 65 74 onfig(Key)] [get
0630: 5f 76 61 6c 75 65 20 73 20 24 63 6f 6e 66 69 67 _value s $config
0640: 28 50 6c 61 69 6e 74 65 78 74 29 20 24 63 6f 6e (Plaintext) $con
0650: 66 69 67 28 52 65 70 65 61 74 29 5d 5d 0a 09 73 fig(Repeat)]]..s
0660: 65 74 20 63 6d 64 20 5b 66 6f 72 6d 61 74 20 22 et cmd [format "
0670: 74 6c 73 3a 3a 64 65 63 72 79 70 74 20 2d 63 69 tls::decrypt -ci
0680: 70 68 65 72 20 25 73 20 2d 70 61 64 64 69 6e 67 pher %s -padding
0690: 20 30 20 2d 6b 65 79 20 25 73 20 5c 5c 5c 6e 5c 0 -key %s \\\n\
06a0: 74 5c 74 2d 64 61 74 61 20 5c 5b 25 73 5c 5d 22 t\t-data \[%s\]"
06b0: 20 24 63 69 70 68 65 72 20 5c 0a 09 20 20 20 20 $cipher \..
06c0: 5b 67 65 74 5f 76 61 6c 75 65 20 73 20 24 63 6f [get_value s $co
06d0: 6e 66 69 67 28 4b 65 79 29 5d 20 24 65 63 6d 64 nfig(Key)] $ecmd
06e0: 5d 0a 09 61 70 70 65 6e 64 20 6c 69 6e 65 20 22 ]..append line "
06f0: 20 5c 5c 5c 6e 5c 74 22 20 5b 66 6f 72 6d 61 74 \\\n\t" [format
0700: 20 7b 2d 62 6f 64 79 20 7b 62 69 6e 61 72 79 20 {-body {binary
0710: 65 6e 63 6f 64 65 20 68 65 78 20 5b 73 74 72 69 encode hex [stri
0720: 6e 67 20 72 61 6e 67 65 20 5b 25 73 5d 20 25 64 ng range [%s] %d
0730: 20 25 64 5d 7d 7d 20 24 63 6d 64 20 24 63 6f 6e %d]}} $cmd $con
0740: 66 69 67 28 4f 66 66 73 65 74 29 20 24 65 6e 64 fig(Offset) $end
0750: 5d 20 22 20 5c 5c 5c 6e 5c 74 22 0a 20 20 20 20 ] " \\\n\t".
0760: 7d 0a 0a 20 20 20 20 23 20 54 65 73 74 20 72 65 }.. # Test re
0770: 73 75 6c 74 0a 20 20 20 20 69 66 20 7b 24 66 6e sult. if {$fn
0780: 20 65 71 20 22 65 6e 63 72 79 70 74 22 7d 20 7b eq "encrypt"} {
0790: 0a 09 61 70 70 65 6e 64 20 6c 69 6e 65 20 5b 66 ..append line [f
07a0: 6f 72 6d 61 74 20 7b 2d 6d 61 74 63 68 20 65 78 ormat {-match ex
07b0: 61 63 74 20 2d 72 65 73 75 6c 74 20 25 73 7d 20 act -result %s}
07c0: 24 63 6f 6e 66 69 67 28 43 69 70 68 65 72 74 65 $config(Cipherte
07d0: 78 74 29 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 xt)]. } else
07e0: 7b 0a 09 61 70 70 65 6e 64 20 6c 69 6e 65 20 5b {..append line [
07f0: 66 6f 72 6d 61 74 20 7b 2d 6d 61 74 63 68 20 65 format {-match e
0800: 78 61 63 74 20 2d 72 65 73 75 6c 74 20 25 73 7d xact -result %s}
0810: 20 24 63 6f 6e 66 69 67 28 50 6c 61 69 6e 74 65 $config(Plainte
0820: 78 74 29 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72 xt)]. }. r
0830: 65 74 75 72 6e 20 24 6c 69 6e 65 0a 7d 0a 0a 23 eturn $line.}..#
0840: 0a 23 20 50 61 72 73 65 20 74 65 73 74 20 76 65 .# Parse test ve
0850: 63 74 6f 72 20 66 69 6c 65 20 61 6e 64 20 63 72 ctor file and cr
0860: 65 61 74 65 20 74 65 73 74 20 66 69 6c 65 73 20 eate test files
0870: 77 69 74 68 20 74 65 73 74 20 63 61 73 65 73 0a with test cases.
0880: 23 0a 70 72 6f 63 20 70 61 72 73 65 20 7b 67 72 #.proc parse {gr
0890: 6f 75 70 20 66 69 6c 65 6e 61 6d 65 20 74 65 73 oup filename tes
08a0: 74 5f 6e 75 6d 20 63 69 70 68 65 72 7d 20 7b 0a t_num cipher} {.
08b0: 20 20 20 20 73 65 74 20 74 63 20 30 0a 20 20 20 set tc 0.
08c0: 20 73 65 74 20 70 61 72 61 6d 73 20 5b 6c 69 73 set params [lis
08d0: 74 5d 0a 0a 20 20 20 20 23 20 4f 70 65 6e 20 69 t].. # Open i
08e0: 6e 70 75 74 20 66 69 6c 65 0a 20 20 20 20 69 66 nput file. if
08f0: 20 7b 5b 63 61 74 63 68 20 7b 6f 70 65 6e 20 24 {[catch {open $
0900: 66 69 6c 65 6e 61 6d 65 20 72 7d 20 63 68 5d 7d filename r} ch]}
0910: 20 7b 0a 09 72 65 74 75 72 6e 20 2d 63 6f 64 65 {..return -code
0920: 20 65 72 72 6f 72 20 24 63 68 0a 20 20 20 20 7d error $ch. }
0930: 0a 0a 20 20 20 20 23 20 4f 70 65 6e 20 6f 75 74 .. # Open out
0940: 70 75 74 20 66 69 6c 65 0a 20 20 20 20 69 66 20 put file. if
0950: 7b 5b 63 61 74 63 68 20 7b 6f 70 65 6e 20 5b 66 {[catch {open [f
0960: 6f 72 6d 61 74 20 22 25 73 2e 74 65 73 74 22 20 ormat "%s.test"
0970: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 [file rootname $
0980: 66 69 6c 65 6e 61 6d 65 5d 5d 20 77 7d 20 6f 75 filename]] w} ou
0990: 74 5d 7d 20 7b 0a 09 72 65 74 75 72 6e 20 2d 63 t]} {..return -c
09a0: 6f 64 65 20 65 72 72 6f 72 20 24 63 68 0a 20 20 ode error $ch.
09b0: 20 20 7d 0a 0a 20 20 20 20 23 20 41 64 64 20 63 }.. # Add c
09c0: 6f 6e 66 69 67 20 69 6e 66 6f 0a 20 20 20 20 70 onfig info. p
09d0: 75 74 73 20 24 6f 75 74 20 5b 66 6f 72 6d 61 74 uts $out [format
09e0: 20 22 23 20 41 75 74 6f 20 67 65 6e 65 72 61 74 "# Auto generat
09f0: 65 64 20 66 72 6f 6d 20 5c 22 25 73 5c 22 22 20 ed from \"%s\""
0a00: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail $file
0a10: 6e 61 6d 65 5d 5d 0a 20 20 20 20 70 75 74 73 20 name]]. puts
0a20: 24 6f 75 74 20 5b 66 6f 72 6d 61 74 20 22 6c 61 $out [format "la
0a30: 70 70 65 6e 64 20 61 75 74 6f 5f 70 61 74 68 20 ppend auto_path
0a40: 25 73 22 20 7b 5b 66 69 6c 65 20 64 69 72 6e 61 %s" {[file dirna
0a50: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname
0a60: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [
0a70: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 file dirname [fi
0a80: 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b 69 le join [pwd] [i
0a90: 6e 66 6f 20 73 63 72 69 70 74 5d 5d 5d 5d 5d 5d nfo script]]]]]]
0aa0: 7d 5d 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 }]. puts $out
0ab0: 20 22 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 "package requir
0ac0: 65 20 74 6c 73 22 0a 20 20 20 20 70 75 74 73 20 e tls". puts
0ad0: 24 6f 75 74 20 22 70 61 63 6b 61 67 65 20 72 65 $out "package re
0ae0: 71 75 69 72 65 20 74 63 6c 74 65 73 74 5c 6e 22 quire tcltest\n"
0af0: 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 . puts $out "
0b00: 63 61 74 63 68 20 7b 74 6c 73 3a 3a 70 72 6f 76 catch {tls::prov
0b10: 69 64 65 72 20 6c 65 67 61 63 79 7d 22 0a 20 20 ider legacy}".
0b20: 20 20 70 75 74 73 20 24 6f 75 74 20 5b 66 6f 72 puts $out [for
0b30: 6d 61 74 20 22 74 63 6c 74 65 73 74 3a 3a 74 65 mat "tcltest::te
0b40: 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 25 73 20 stConstraint %s
0b50: 25 73 22 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 %s" [string map
0b60: 5b 6c 69 73 74 20 22 2d 22 20 22 5f 22 5d 20 24 [list "-" "_"] $
0b70: 63 69 70 68 65 72 5d 20 5c 0a 09 5b 66 6f 72 6d cipher] \..[form
0b80: 61 74 20 7b 5b 65 78 70 72 20 7b 5b 6c 73 65 61 at {[expr {[lsea
0b90: 72 63 68 20 2d 6e 6f 63 61 73 65 20 5b 74 6c 73 rch -nocase [tls
0ba0: 3a 3a 63 69 70 68 65 72 73 5d 20 25 73 5d 20 3e ::ciphers] %s] >
0bb0: 20 2d 31 7d 5d 7d 20 24 63 69 70 68 65 72 5d 5d -1}]} $cipher]]
0bc0: 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 . puts $out "
0bd0: 22 0a 0a 20 20 20 20 23 20 50 72 6f 63 65 73 73 ".. # Process
0be0: 20 66 69 6c 65 0a 20 20 20 20 77 68 69 6c 65 20 file. while
0bf0: 7b 21 5b 65 6f 66 20 24 63 68 5d 7d 20 7b 0a 09 {![eof $ch]} {..
0c00: 67 65 74 73 20 24 63 68 20 6c 69 6e 65 0a 09 73 gets $ch line..s
0c10: 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e 67 20 et line [string
0c20: 74 72 69 6d 20 24 6c 69 6e 65 5d 0a 09 73 65 74 trim $line]..set
0c30: 20 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e len [string len
0c40: 67 74 68 20 24 6c 69 6e 65 5d 0a 0a 09 69 66 20 gth $line]...if
0c50: 7b 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 {[string index $
0c60: 6c 69 6e 65 20 30 5d 20 69 6e 20 5b 6c 69 73 74 line 0] in [list
0c70: 20 22 23 22 20 22 5c 5b 22 5d 7d 20 7b 0a 09 20 "#" "\["]} {..
0c80: 20 20 20 23 20 53 6b 69 70 20 63 6f 6d 6d 65 6e # Skip commen
0c90: 74 73 20 61 6e 64 20 69 6e 66 6f 20 6c 69 6e 65 ts and info line
0ca0: 73 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a s.. continue.
0cb0: 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6c 65 6e ..} elseif {$len
0cc0: 20 3d 3d 20 30 7d 20 7b 0a 09 20 20 20 20 69 66 == 0} {.. if
0cd0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 72 61 {[llength $para
0ce0: 6d 73 5d 20 3e 20 30 7d 20 7b 0a 09 09 23 20 44 ms] > 0} {...# D
0cf0: 6f 20 74 65 73 74 20 69 66 20 65 6e 64 20 6f 66 o test if end of
0d00: 20 70 61 72 61 6d 73 0a 09 09 70 75 74 73 20 24 params...puts $
0d10: 6f 75 74 20 5b 64 6f 5f 74 65 73 74 20 24 67 72 out [do_test $gr
0d20: 6f 75 70 20 24 63 69 70 68 65 72 20 24 74 65 73 oup $cipher $tes
0d30: 74 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 63 5d 20 t_num [incr tc]
0d40: 24 70 61 72 61 6d 73 20 22 65 6e 63 72 79 70 74 $params "encrypt
0d50: 22 5d 0a 09 09 70 75 74 73 20 24 6f 75 74 20 22 "]...puts $out "
0d60: 22 0a 09 09 70 75 74 73 20 24 6f 75 74 20 5b 64 "...puts $out [d
0d70: 6f 5f 74 65 73 74 20 24 67 72 6f 75 70 20 24 63 o_test $group $c
0d80: 69 70 68 65 72 20 24 74 65 73 74 5f 6e 75 6d 20 ipher $test_num
0d90: 5b 69 6e 63 72 20 74 63 5d 20 24 70 61 72 61 6d [incr tc] $param
0da0: 73 20 22 64 65 63 72 79 70 74 22 5d 0a 09 09 70 s "decrypt"]...p
0db0: 75 74 73 20 24 6f 75 74 20 22 22 0a 09 09 73 65 uts $out ""...se
0dc0: 74 20 70 61 72 61 6d 73 20 5b 6c 69 73 74 5d 0a t params [list].
0dd0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
0de0: 23 20 45 6d 70 74 79 20 6c 69 6e 65 0a 09 20 20 # Empty line..
0df0: 20 20 7d 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 }...} else {..
0e00: 20 20 20 20 23 20 41 70 70 65 6e 64 20 61 72 67 # Append arg
0e10: 73 20 74 6f 20 70 61 72 61 6d 73 0a 09 20 20 20 s to params..
0e20: 20 73 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69 set index [stri
0e30: 6e 67 20 66 69 72 73 74 20 22 3d 22 20 24 6c 69 ng first "=" $li
0e40: 6e 65 5d 0a 09 20 20 20 20 69 66 20 7b 24 69 6e ne].. if {$in
0e50: 64 65 78 20 3e 20 2d 31 7d 20 7b 0a 09 09 73 65 dex > -1} {...se
0e60: 74 20 6b 65 79 20 5b 73 74 72 69 6e 67 20 74 72 t key [string tr
0e70: 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 im [string range
0e80: 20 24 6c 69 6e 65 20 30 20 5b 69 6e 63 72 20 69 $line 0 [incr i
0e90: 6e 64 65 78 20 2d 31 5d 5d 5d 0a 09 09 73 65 74 ndex -1]]]...set
0ea0: 20 76 61 6c 75 65 20 5b 73 74 72 69 6e 67 20 74 value [string t
0eb0: 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 rim [string rang
0ec0: 65 20 24 6c 69 6e 65 20 5b 69 6e 63 72 20 69 6e e $line [incr in
0ed0: 64 65 78 20 32 5d 20 65 6e 64 5d 5d 0a 09 09 6c dex 2] end]]...l
0ee0: 61 70 70 65 6e 64 20 70 61 72 61 6d 73 20 24 6b append params $k
0ef0: 65 79 20 24 76 61 6c 75 65 0a 09 20 20 20 20 7d ey $value.. }
0f00: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 ..}. }.. #
0f10: 20 48 61 6e 64 6c 65 20 6c 61 73 74 20 74 65 73 Handle last tes
0f20: 74 20 63 61 73 65 0a 20 20 20 20 69 66 20 7b 5b t case. if {[
0f30: 6c 6c 65 6e 67 74 68 20 24 70 61 72 61 6d 73 5d llength $params]
0f40: 20 3e 20 30 7d 20 7b 0a 09 70 75 74 73 20 24 6f > 0} {..puts $o
0f50: 75 74 20 5b 64 6f 5f 74 65 73 74 20 24 67 72 6f ut [do_test $gro
0f60: 75 70 20 24 63 69 70 68 65 72 20 24 74 65 73 74 up $cipher $test
0f70: 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 63 5d 20 24 _num [incr tc] $
0f80: 70 61 72 61 6d 73 20 22 65 6e 63 72 79 70 74 22 params "encrypt"
0f90: 5d 0a 09 70 75 74 73 20 24 6f 75 74 20 22 22 0a ]..puts $out "".
0fa0: 09 70 75 74 73 20 24 6f 75 74 20 5b 64 6f 5f 74 .puts $out [do_t
0fb0: 65 73 74 20 24 67 72 6f 75 70 20 24 63 69 70 68 est $group $ciph
0fc0: 65 72 20 24 74 65 73 74 5f 6e 75 6d 20 5b 69 6e er $test_num [in
0fd0: 63 72 20 74 63 5d 20 24 70 61 72 61 6d 73 20 22 cr tc] $params "
0fe0: 64 65 63 72 79 70 74 22 5d 0a 09 70 75 74 73 20 decrypt"]..puts
0ff0: 24 6f 75 74 20 22 22 0a 20 20 20 20 7d 0a 20 20 $out "". }.
1000: 20 20 0a 20 20 20 20 23 20 43 6c 65 61 6e 75 70 . # Cleanup
1010: 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 . puts $out "
1020: 23 20 43 6c 65 61 6e 75 70 5c 6e 3a 3a 74 63 6c # Cleanup\n::tcl
1030: 74 65 73 74 3a 3a 63 6c 65 61 6e 75 70 54 65 73 test::cleanupTes
1040: 74 73 5c 6e 72 65 74 75 72 6e 22 0a 20 20 20 20 ts\nreturn".
1050: 63 6c 6f 73 65 20 24 63 68 0a 20 20 20 20 63 6c close $ch. cl
1060: 6f 73 65 20 24 6f 75 74 0a 7d 0a 0a 23 0a 23 20 ose $out.}..#.#
1070: 52 65 61 64 20 61 6c 6c 20 74 65 73 74 20 76 65 Read all test ve
1080: 63 74 6f 72 20 66 69 6c 65 73 20 69 6e 20 64 69 ctor files in di
1090: 72 65 63 74 6f 72 79 0a 23 0a 70 72 6f 63 20 6d rectory.#.proc m
10a0: 61 69 6e 20 7b 70 61 74 68 7d 20 7b 0a 20 20 20 ain {path} {.
10b0: 20 73 65 74 20 67 72 6f 75 70 20 5b 66 69 6c 65 set group [file
10c0: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 rootname [file
10d0: 74 61 69 6c 20 24 70 61 74 68 5d 5d 0a 0a 20 20 tail $path]]..
10e0: 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 6e 61 foreach filena
10f0: 6d 65 20 5b 67 6c 6f 62 20 2d 64 69 72 65 63 74 me [glob -direct
1100: 6f 72 79 20 24 70 61 74 68 20 2a 2e 74 78 74 5d ory $path *.txt]
1110: 20 7b 0a 09 70 75 74 73 20 5b 66 6f 72 6d 61 74 {..puts [format
1120: 20 22 50 72 6f 63 65 73 73 69 6e 67 20 25 73 22 "Processing %s"
1130: 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 09 73 65 74 $filename]..set
1140: 20 74 61 69 6c 20 5b 66 69 6c 65 20 74 61 69 6c tail [file tail
1150: 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 09 69 66 20 $filename]..if
1160: 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2d {[string match -
1170: 6e 6f 63 61 73 65 20 22 52 65 61 64 6d 65 2e 74 nocase "Readme.t
1180: 78 74 22 20 24 74 61 69 6c 5d 7d 20 7b 0a 09 20 xt" $tail]} {..
1190: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 7d 0a 0a continue..}..
11a0: 09 73 65 74 20 63 69 70 68 65 72 20 5b 66 69 6c .set cipher [fil
11b0: 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 e rootname [file
11c0: 20 74 61 69 6c 20 24 66 69 6c 65 6e 61 6d 65 5d tail $filename]
11d0: 5d 0a 09 73 65 74 20 69 64 20 5b 66 6f 72 6d 61 ]..set id [forma
11e0: 74 20 22 25 73 5f 25 73 22 20 24 67 72 6f 75 70 t "%s_%s" $group
11f0: 20 24 63 69 70 68 65 72 5d 0a 09 73 65 74 20 74 $cipher]..set t
1200: 65 73 74 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 65 est_num [incr te
1210: 73 74 5f 69 64 73 28 24 69 64 29 5d 0a 09 69 66 st_ids($id)]..if
1220: 20 7b 24 63 69 70 68 65 72 20 65 71 20 22 72 63 {$cipher eq "rc
1230: 34 2d 31 32 38 22 7d 20 7b 73 65 74 20 63 69 70 4-128"} {set cip
1240: 68 65 72 20 22 72 63 34 22 7d 0a 09 70 61 72 73 her "rc4"}..pars
1250: 65 20 24 67 72 6f 75 70 20 24 66 69 6c 65 6e 61 e $group $filena
1260: 6d 65 20 24 74 65 73 74 5f 6e 75 6d 20 24 63 69 me $test_num $ci
1270: 70 68 65 72 0a 20 20 20 20 7d 0a 7d 0a 0a 6d 61 pher. }.}..ma
1280: 69 6e 20 5b 70 77 64 5d 0a 65 78 69 74 0a in [pwd].exit.