Artifact
03ce8386e64bbe2413b0a3ae7df19e929bc1ae99bab38bccae526e4deab9bf7a:
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 72 65 74 75 72 6e 20 24 64 61 74 . return $dat
0190: 61 0a 7d 0a 0a 23 0a 23 20 43 72 65 61 74 65 20 a.}..#.# Create
01a0: 74 65 73 74 20 63 61 73 65 20 61 6e 64 20 6f 75 test case and ou
01b0: 74 70 75 74 20 74 6f 20 74 65 73 74 20 66 69 6c tput to test fil
01c0: 65 0a 23 0a 70 72 6f 63 20 64 6f 5f 74 65 73 74 e.#.proc do_test
01d0: 20 7b 67 72 6f 75 70 20 63 69 70 68 65 72 20 74 {group cipher t
01e0: 65 73 74 5f 6e 75 6d 20 74 63 20 70 61 72 61 6d est_num tc param
01f0: 73 20 66 6e 7d 20 7b 0a 20 20 20 20 61 72 72 61 s fn} {. arra
0200: 79 20 73 65 74 20 63 6f 6e 66 69 67 20 5b 6c 69 y set config [li
0210: 73 74 20 6b 65 79 20 22 22 20 72 65 70 65 61 74 st key "" repeat
0220: 20 31 20 6c 65 6e 67 74 68 20 22 22 20 6f 66 66 1 length "" off
0230: 73 65 74 20 30 20 65 6e 64 20 65 6e 64 20 70 6c set 0 end end pl
0240: 61 69 6e 74 65 78 74 20 7b 22 22 7d 20 63 69 70 aintext {""} cip
0250: 68 65 72 74 65 78 74 20 7b 22 22 7d 5d 0a 20 20 hertext {""}].
0260: 20 20 61 72 72 61 79 20 73 65 74 20 63 6f 6e 66 array set conf
0270: 69 67 20 24 70 61 72 61 6d 73 0a 20 20 20 20 73 ig $params. s
0280: 65 74 20 65 6e 64 20 5b 65 78 70 72 20 7b 24 63 et end [expr {$c
0290: 6f 6e 66 69 67 28 6f 66 66 73 65 74 29 20 2b 20 onfig(offset) +
02a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length $
02b0: 63 6f 6e 66 69 67 28 70 6c 61 69 6e 74 65 78 74 config(plaintext
02c0: 29 5d 2f 32 20 2d 20 31 7d 5d 0a 0a 20 20 20 20 )]/2 - 1}]..
02d0: 23 20 54 65 73 74 20 69 6e 66 6f 0a 20 20 20 20 # Test info.
02e0: 73 65 74 20 6c 69 6e 65 20 5b 66 6f 72 6d 61 74 set line [format
02f0: 20 22 5c 6e 74 63 6c 74 65 73 74 3a 3a 74 65 73 "\ntcltest::tes
0300: 74 20 25 73 5f 25 73 2d 25 64 2e 25 64 20 7b 25 t %s_%s-%d.%d {%
0310: 73 20 25 73 20 6f 66 66 73 65 74 20 25 64 7d 22 s %s offset %d}"
0320: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 [string map [li
0330: 73 74 20 22 2d 22 20 22 5f 22 5d 20 5c 0a 09 24 st "-" "_"] \..$
0340: 67 72 6f 75 70 5d 20 5b 73 74 72 69 6e 67 20 6d group] [string m
0350: 61 70 20 5b 6c 69 73 74 20 22 2d 22 20 22 5f 22 ap [list "-" "_"
0360: 5d 20 24 63 69 70 68 65 72 5d 20 24 74 65 73 74 ] $cipher] $test
0370: 5f 6e 75 6d 20 24 74 63 20 5b 73 74 72 69 6e 67 _num $tc [string
0380: 20 74 6f 74 69 74 6c 65 20 24 66 6e 5d 20 24 63 totitle $fn] $c
0390: 69 70 68 65 72 20 24 63 6f 6e 66 69 67 28 6f 66 ipher $config(of
03a0: 66 73 65 74 29 5d 0a 0a 20 20 20 20 23 20 54 65 fset)].. # Te
03b0: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 st constraints.
03c0: 20 20 20 61 70 70 65 6e 64 20 6c 69 6e 65 20 5b append line [
03d0: 66 6f 72 6d 61 74 20 22 20 5c 5c 5c 6e 5c 74 2d format " \\\n\t-
03e0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 25 73 22 20 constraints %s"
03f0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 [string map [lis
0400: 74 20 22 2d 22 20 22 5f 22 5d 20 24 63 69 70 68 t "-" "_"] $ciph
0410: 65 72 5d 5d 0a 0a 20 20 20 20 23 20 54 65 73 74 er]].. # Test
0420: 20 62 6f 64 79 0a 20 20 20 20 69 66 20 7b 24 66 body. if {$f
0430: 6e 20 65 71 20 22 65 6e 63 72 79 70 74 22 7d 20 n eq "encrypt"}
0440: 7b 0a 09 73 65 74 20 63 6d 64 20 5b 66 6f 72 6d {..set cmd [form
0450: 61 74 20 22 74 6c 73 3a 3a 65 6e 63 72 79 70 74 at "tls::encrypt
0460: 20 2d 63 69 70 68 65 72 20 25 73 20 2d 70 61 64 -cipher %s -pad
0470: 64 69 6e 67 20 30 20 2d 6b 65 79 20 25 73 20 5c ding 0 -key %s \
0480: 5c 5c 6e 5c 74 5c 74 2d 64 61 74 61 20 25 73 22 \\n\t\t-data %s"
0490: 20 24 63 69 70 68 65 72 20 5c 0a 09 20 20 20 20 $cipher \..
04a0: 5b 67 65 74 5f 76 61 6c 75 65 20 73 20 24 63 6f [get_value s $co
04b0: 6e 66 69 67 28 6b 65 79 29 5d 20 5b 67 65 74 5f nfig(key)] [get_
04c0: 76 61 6c 75 65 20 73 20 24 63 6f 6e 66 69 67 28 value s $config(
04d0: 70 6c 61 69 6e 74 65 78 74 29 20 24 63 6f 6e 66 plaintext) $conf
04e0: 69 67 28 72 65 70 65 61 74 29 5d 5d 0a 20 20 0a ig(repeat)]]. .
04f0: 09 61 70 70 65 6e 64 20 6c 69 6e 65 20 22 20 5c .append line " \
0500: 5c 5c 6e 5c 74 22 20 5b 66 6f 72 6d 61 74 20 7b \\n\t" [format {
0510: 2d 62 6f 64 79 20 7b 62 69 6e 61 72 79 20 65 6e -body {binary en
0520: 63 6f 64 65 20 68 65 78 20 5b 73 74 72 69 6e 67 code hex [string
0530: 20 72 61 6e 67 65 20 5b 25 73 5d 20 25 64 20 25 range [%s] %d %
0540: 64 5d 7d 7d 20 24 63 6d 64 20 24 63 6f 6e 66 69 d]}} $cmd $confi
0550: 67 28 6f 66 66 73 65 74 29 20 24 65 6e 64 5d 20 g(offset) $end]
0560: 22 20 5c 5c 5c 6e 5c 74 22 0a 20 20 20 20 7d 20 " \\\n\t". }
0570: 65 6c 73 65 20 7b 0a 09 73 65 74 20 65 63 6d 64 else {..set ecmd
0580: 20 5b 66 6f 72 6d 61 74 20 22 74 6c 73 3a 3a 65 [format "tls::e
0590: 6e 63 72 79 70 74 20 2d 63 69 70 68 65 72 20 25 ncrypt -cipher %
05a0: 73 20 2d 70 61 64 64 69 6e 67 20 30 20 2d 6b 65 s -padding 0 -ke
05b0: 79 20 25 73 20 5c 5c 5c 6e 5c 74 5c 74 2d 64 61 y %s \\\n\t\t-da
05c0: 74 61 20 25 73 22 20 24 63 69 70 68 65 72 20 5c ta %s" $cipher \
05d0: 0a 09 20 20 20 20 5b 67 65 74 5f 76 61 6c 75 65 .. [get_value
05e0: 20 73 20 24 63 6f 6e 66 69 67 28 6b 65 79 29 5d s $config(key)]
05f0: 20 5b 67 65 74 5f 76 61 6c 75 65 20 73 20 24 63 [get_value s $c
0600: 6f 6e 66 69 67 28 70 6c 61 69 6e 74 65 78 74 29 onfig(plaintext)
0610: 20 24 63 6f 6e 66 69 67 28 72 65 70 65 61 74 29 $config(repeat)
0620: 5d 5d 0a 09 73 65 74 20 63 6d 64 20 5b 66 6f 72 ]]..set cmd [for
0630: 6d 61 74 20 22 74 6c 73 3a 3a 64 65 63 72 79 70 mat "tls::decryp
0640: 74 20 2d 63 69 70 68 65 72 20 25 73 20 2d 70 61 t -cipher %s -pa
0650: 64 64 69 6e 67 20 30 20 2d 6b 65 79 20 25 73 20 dding 0 -key %s
0660: 5c 5c 5c 6e 5c 74 5c 74 2d 64 61 74 61 20 5c 5b \\\n\t\t-data \[
0670: 25 73 5c 5d 22 20 24 63 69 70 68 65 72 20 5c 0a %s\]" $cipher \.
0680: 09 20 20 20 20 5b 67 65 74 5f 76 61 6c 75 65 20 . [get_value
0690: 73 20 24 63 6f 6e 66 69 67 28 6b 65 79 29 5d 20 s $config(key)]
06a0: 24 65 63 6d 64 5d 0a 09 61 70 70 65 6e 64 20 6c $ecmd]..append l
06b0: 69 6e 65 20 22 20 5c 5c 5c 6e 5c 74 22 20 5b 66 ine " \\\n\t" [f
06c0: 6f 72 6d 61 74 20 7b 2d 62 6f 64 79 20 7b 62 69 ormat {-body {bi
06d0: 6e 61 72 79 20 65 6e 63 6f 64 65 20 68 65 78 20 nary encode hex
06e0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 5b 25 [string range [%
06f0: 73 5d 20 25 64 20 25 64 5d 7d 7d 20 24 63 6d 64 s] %d %d]}} $cmd
0700: 20 24 63 6f 6e 66 69 67 28 6f 66 66 73 65 74 29 $config(offset)
0710: 20 24 65 6e 64 5d 20 22 20 5c 5c 5c 6e 5c 74 22 $end] " \\\n\t"
0720: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 65 . }.. # Te
0730: 73 74 20 72 65 73 75 6c 74 0a 20 20 20 20 69 66 st result. if
0740: 20 7b 24 66 6e 20 65 71 20 22 65 6e 63 72 79 70 {$fn eq "encryp
0750: 74 22 7d 20 7b 0a 09 61 70 70 65 6e 64 20 6c 69 t"} {..append li
0760: 6e 65 20 5b 66 6f 72 6d 61 74 20 7b 2d 6d 61 74 ne [format {-mat
0770: 63 68 20 65 78 61 63 74 20 2d 72 65 73 75 6c 74 ch exact -result
0780: 20 25 73 7d 20 24 63 6f 6e 66 69 67 28 63 69 70 %s} $config(cip
0790: 68 65 72 74 65 78 74 29 5d 0a 20 20 20 20 7d 20 hertext)]. }
07a0: 65 6c 73 65 20 7b 0a 09 61 70 70 65 6e 64 20 6c else {..append l
07b0: 69 6e 65 20 5b 66 6f 72 6d 61 74 20 7b 2d 6d 61 ine [format {-ma
07c0: 74 63 68 20 65 78 61 63 74 20 2d 72 65 73 75 6c tch exact -resul
07d0: 74 20 25 73 7d 20 24 63 6f 6e 66 69 67 28 70 6c t %s} $config(pl
07e0: 61 69 6e 74 65 78 74 29 5d 0a 20 20 20 20 7d 0a aintext)]. }.
07f0: 20 20 20 20 72 65 74 75 72 6e 20 24 6c 69 6e 65 return $line
0800: 0a 7d 0a 0a 23 0a 23 20 50 61 72 73 65 20 74 65 .}..#.# Parse te
0810: 73 74 20 76 65 63 74 6f 72 20 66 69 6c 65 20 61 st vector file a
0820: 6e 64 20 63 72 65 61 74 65 20 74 65 73 74 20 66 nd create test f
0830: 69 6c 65 73 20 77 69 74 68 20 74 65 73 74 20 63 iles with test c
0840: 61 73 65 73 0a 23 0a 70 72 6f 63 20 70 61 72 73 ases.#.proc pars
0850: 65 20 7b 67 72 6f 75 70 20 66 69 6c 65 6e 61 6d e {group filenam
0860: 65 20 74 65 73 74 5f 6e 75 6d 20 63 69 70 68 65 e test_num ciphe
0870: 72 7d 20 7b 0a 20 20 20 20 73 65 74 20 74 63 20 r} {. set tc
0880: 30 0a 20 20 20 20 73 65 74 20 70 61 72 61 6d 73 0. set params
0890: 20 5b 6c 69 73 74 5d 0a 0a 20 20 20 20 23 20 4f [list].. # O
08a0: 70 65 6e 20 69 6e 70 75 74 20 66 69 6c 65 0a 20 pen input file.
08b0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f if {[catch {o
08c0: 70 65 6e 20 24 66 69 6c 65 6e 61 6d 65 20 72 7d pen $filename r}
08d0: 20 63 68 5d 7d 20 7b 0a 09 72 65 74 75 72 6e 20 ch]} {..return
08e0: 2d 63 6f 64 65 20 65 72 72 6f 72 20 24 63 68 0a -code error $ch.
08f0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 4f 70 65 }.. # Ope
0900: 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 0a 20 20 n output file.
0910: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 70 if {[catch {op
0920: 65 6e 20 5b 66 6f 72 6d 61 74 20 22 25 73 2e 74 en [format "%s.t
0930: 65 73 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e est" [file rootn
0940: 61 6d 65 20 24 66 69 6c 65 6e 61 6d 65 5d 5d 20 ame $filename]]
0950: 77 7d 20 6f 75 74 5d 7d 20 7b 0a 09 72 65 74 75 w} out]} {..retu
0960: 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 24 rn -code error $
0970: 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 ch. }.. #
0980: 41 64 64 20 63 6f 6e 66 69 67 20 69 6e 66 6f 0a Add config info.
0990: 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 5b 66 puts $out [f
09a0: 6f 72 6d 61 74 20 22 23 20 41 75 74 6f 20 67 65 ormat "# Auto ge
09b0: 6e 65 72 61 74 65 64 20 66 72 6f 6d 20 5c 22 25 nerated from \"%
09c0: 73 5c 22 22 20 5b 66 69 6c 65 20 74 61 69 6c 20 s\"" [file tail
09d0: 24 66 69 6c 65 6e 61 6d 65 5d 5d 0a 20 20 20 20 $filename]].
09e0: 70 75 74 73 20 24 6f 75 74 20 5b 66 6f 72 6d 61 puts $out [forma
09f0: 74 20 22 6c 61 70 70 65 6e 64 20 61 75 74 6f 5f t "lappend auto_
0a00: 70 61 74 68 20 25 73 22 20 7b 5b 66 69 6c 65 20 path %s" {[file
0a10: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di
0a20: 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e rname [file dirn
0a30: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam
0a40: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 e [file join [pw
0a50: 64 5d 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d d] [info script]
0a60: 5d 5d 5d 5d 5d 7d 5d 0a 20 20 20 20 70 75 74 73 ]]]]]}]. puts
0a70: 20 24 6f 75 74 20 22 70 61 63 6b 61 67 65 20 72 $out "package r
0a80: 65 71 75 69 72 65 20 74 6c 73 22 0a 20 20 20 20 equire tls".
0a90: 70 75 74 73 20 24 6f 75 74 20 22 70 61 63 6b 61 puts $out "packa
0aa0: 67 65 20 72 65 71 75 69 72 65 20 74 63 6c 74 65 ge require tclte
0ab0: 73 74 5c 6e 22 0a 20 20 20 20 70 75 74 73 20 24 st\n". puts $
0ac0: 6f 75 74 20 22 63 61 74 63 68 20 7b 74 6c 73 3a out "catch {tls:
0ad0: 3a 70 72 6f 76 69 64 65 72 20 6c 65 67 61 63 79 :provider legacy
0ae0: 7d 22 0a 20 20 20 20 70 75 74 73 20 24 6f 75 74 }". puts $out
0af0: 20 5b 66 6f 72 6d 61 74 20 22 74 63 6c 74 65 73 [format "tcltes
0b00: 74 3a 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 6e t::testConstrain
0b10: 74 20 25 73 20 25 73 22 20 5b 73 74 72 69 6e 67 t %s %s" [string
0b20: 20 6d 61 70 20 5b 6c 69 73 74 20 22 2d 22 20 22 map [list "-" "
0b30: 5f 22 5d 20 24 63 69 70 68 65 72 5d 20 5c 0a 09 _"] $cipher] \..
0b40: 5b 66 6f 72 6d 61 74 20 7b 5b 65 78 70 72 20 7b [format {[expr {
0b50: 5b 6c 73 65 61 72 63 68 20 2d 6e 6f 63 61 73 65 [lsearch -nocase
0b60: 20 5b 74 6c 73 3a 3a 63 69 70 68 65 72 73 5d 20 [tls::ciphers]
0b70: 25 73 5d 20 3e 20 2d 31 7d 5d 7d 20 24 63 69 70 %s] > -1}]} $cip
0b80: 68 65 72 5d 5d 0a 20 20 20 20 70 75 74 73 20 24 her]]. puts $
0b90: 6f 75 74 20 22 22 0a 0a 20 20 20 20 23 20 50 72 out "".. # Pr
0ba0: 6f 63 65 73 73 20 66 69 6c 65 0a 20 20 20 20 77 ocess file. w
0bb0: 68 69 6c 65 20 7b 21 5b 65 6f 66 20 24 63 68 5d hile {![eof $ch]
0bc0: 7d 20 7b 0a 09 67 65 74 73 20 24 63 68 20 6c 69 } {..gets $ch li
0bd0: 6e 65 0a 09 73 65 74 20 6c 69 6e 65 20 5b 73 74 ne..set line [st
0be0: 72 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d ring trim $line]
0bf0: 0a 09 73 65 74 20 6c 65 6e 20 5b 73 74 72 69 6e ..set len [strin
0c00: 67 20 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d 0a g length $line].
0c10: 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e ..if {[string in
0c20: 64 65 78 20 24 6c 69 6e 65 20 30 5d 20 69 6e 20 dex $line 0] in
0c30: 5b 6c 69 73 74 20 22 23 22 20 22 5c 5b 22 5d 7d [list "#" "\["]}
0c40: 20 7b 0a 09 20 20 20 20 23 20 53 6b 69 70 20 63 {.. # Skip c
0c50: 6f 6d 6d 65 6e 74 73 20 61 6e 64 20 69 6e 66 6f omments and info
0c60: 20 6c 69 6e 65 73 0a 09 20 20 20 20 63 6f 6e 74 lines.. cont
0c70: 69 6e 75 65 0a 0a 09 7d 20 65 6c 73 65 69 66 20 inue...} elseif
0c80: 7b 24 6c 65 6e 20 3d 3d 20 30 7d 20 7b 0a 09 20 {$len == 0} {..
0c90: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength
0ca0: 24 70 61 72 61 6d 73 5d 20 3e 20 30 7d 20 7b 0a $params] > 0} {.
0cb0: 09 09 23 20 44 6f 20 74 65 73 74 20 69 66 20 65 ..# Do test if e
0cc0: 6e 64 20 6f 66 20 70 61 72 61 6d 73 0a 09 09 70 nd of params...p
0cd0: 75 74 73 20 24 6f 75 74 20 5b 64 6f 5f 74 65 73 uts $out [do_tes
0ce0: 74 20 24 67 72 6f 75 70 20 24 63 69 70 68 65 72 t $group $cipher
0cf0: 20 24 74 65 73 74 5f 6e 75 6d 20 5b 69 6e 63 72 $test_num [incr
0d00: 20 74 63 5d 20 24 70 61 72 61 6d 73 20 22 65 6e tc] $params "en
0d10: 63 72 79 70 74 22 5d 0a 09 09 70 75 74 73 20 24 crypt"]...puts $
0d20: 6f 75 74 20 22 22 0a 09 09 70 75 74 73 20 24 6f out ""...puts $o
0d30: 75 74 20 5b 64 6f 5f 74 65 73 74 20 24 67 72 6f ut [do_test $gro
0d40: 75 70 20 24 63 69 70 68 65 72 20 24 74 65 73 74 up $cipher $test
0d50: 5f 6e 75 6d 20 5b 69 6e 63 72 20 74 63 5d 20 24 _num [incr tc] $
0d60: 70 61 72 61 6d 73 20 22 64 65 63 72 79 70 74 22 params "decrypt"
0d70: 5d 0a 09 09 70 75 74 73 20 24 6f 75 74 20 22 22 ]...puts $out ""
0d80: 0a 09 09 73 65 74 20 70 61 72 61 6d 73 20 5b 6c ...set params [l
0d90: 69 73 74 5d 0a 09 20 20 20 20 7d 20 65 6c 73 65 ist].. } else
0da0: 20 7b 0a 09 09 23 20 45 6d 70 74 79 20 6c 69 6e {...# Empty lin
0db0: 65 0a 09 20 20 20 20 7d 0a 0a 09 7d 20 65 6c 73 e.. }...} els
0dc0: 65 20 7b 0a 09 20 20 20 20 23 20 41 70 70 65 6e e {.. # Appen
0dd0: 64 20 61 72 67 73 20 74 6f 20 70 61 72 61 6d 73 d args to params
0de0: 0a 09 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 .. set index
0df0: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 3d [string first "=
0e00: 22 20 24 6c 69 6e 65 5d 0a 09 20 20 20 20 69 66 " $line].. if
0e10: 20 7b 24 69 6e 64 65 78 20 3e 20 2d 31 7d 20 7b {$index > -1} {
0e20: 0a 09 09 73 65 74 20 6b 65 79 20 5b 73 74 72 69 ...set key [stri
0e30: 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 ng trim [string
0e40: 72 61 6e 67 65 20 24 6c 69 6e 65 20 30 20 5b 69 range $line 0 [i
0e50: 6e 63 72 20 69 6e 64 65 78 20 2d 31 5d 5d 5d 0a ncr index -1]]].
0e60: 09 09 73 65 74 20 76 61 6c 75 65 20 5b 73 74 72 ..set value [str
0e70: 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 ing trim [string
0e80: 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 5b 69 6e range $line [in
0e90: 63 72 20 69 6e 64 65 78 20 32 5d 20 65 6e 64 5d cr index 2] end]
0ea0: 5d 0a 09 09 6c 61 70 70 65 6e 64 20 70 61 72 61 ]...lappend para
0eb0: 6d 73 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 ms [string tolow
0ec0: 65 72 20 24 6b 65 79 5d 20 24 76 61 6c 75 65 0a er $key] $value.
0ed0: 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a . }..}. }.
0ee0: 0a 20 20 20 20 23 20 48 61 6e 64 6c 65 20 6c 61 . # Handle la
0ef0: 73 74 20 74 65 73 74 20 63 61 73 65 0a 20 20 20 st test case.
0f00: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 if {[llength $p
0f10: 61 72 61 6d 73 5d 20 3e 20 30 7d 20 7b 0a 09 70 arams] > 0} {..p
0f20: 75 74 73 20 24 6f 75 74 20 5b 64 6f 5f 74 65 73 uts $out [do_tes
0f30: 74 20 24 67 72 6f 75 70 20 24 63 69 70 68 65 72 t $group $cipher
0f40: 20 24 74 65 73 74 5f 6e 75 6d 20 5b 69 6e 63 72 $test_num [incr
0f50: 20 74 63 5d 20 24 70 61 72 61 6d 73 20 22 65 6e tc] $params "en
0f60: 63 72 79 70 74 22 5d 0a 09 70 75 74 73 20 24 6f crypt"]..puts $o
0f70: 75 74 20 22 22 0a 09 70 75 74 73 20 24 6f 75 74 ut ""..puts $out
0f80: 20 5b 64 6f 5f 74 65 73 74 20 24 67 72 6f 75 70 [do_test $group
0f90: 20 24 63 69 70 68 65 72 20 24 74 65 73 74 5f 6e $cipher $test_n
0fa0: 75 6d 20 5b 69 6e 63 72 20 74 63 5d 20 24 70 61 um [incr tc] $pa
0fb0: 72 61 6d 73 20 22 64 65 63 72 79 70 74 22 5d 0a rams "decrypt"].
0fc0: 09 70 75 74 73 20 24 6f 75 74 20 22 22 0a 20 20 .puts $out "".
0fd0: 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20 43 }. . # C
0fe0: 6c 65 61 6e 75 70 0a 20 20 20 20 70 75 74 73 20 leanup. puts
0ff0: 24 6f 75 74 20 22 23 20 43 6c 65 61 6e 75 70 5c $out "# Cleanup\
1000: 6e 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61 n::tcltest::clea
1010: 6e 75 70 54 65 73 74 73 5c 6e 72 65 74 75 72 6e nupTests\nreturn
1020: 22 0a 20 20 20 20 63 6c 6f 73 65 20 24 63 68 0a ". close $ch.
1030: 20 20 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a 7d close $out.}
1040: 0a 0a 23 0a 23 20 52 65 61 64 20 61 6c 6c 20 74 ..#.# Read all t
1050: 65 73 74 20 76 65 63 74 6f 72 20 66 69 6c 65 73 est vector files
1060: 20 69 6e 20 64 69 72 65 63 74 6f 72 79 0a 23 0a in directory.#.
1070: 70 72 6f 63 20 6d 61 69 6e 20 7b 70 61 74 68 7d proc main {path}
1080: 20 7b 0a 20 20 20 20 73 65 74 20 67 72 6f 75 70 {. set group
1090: 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname
10a0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 70 61 74 68 [file tail $path
10b0: 5d 5d 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20 ]].. foreach
10c0: 66 69 6c 65 6e 61 6d 65 20 5b 67 6c 6f 62 20 2d filename [glob -
10d0: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 20 directory $path
10e0: 2a 2e 74 78 74 5d 20 7b 0a 09 70 75 74 73 20 5b *.txt] {..puts [
10f0: 66 6f 72 6d 61 74 20 22 50 72 6f 63 65 73 73 69 format "Processi
1100: 6e 67 20 25 73 22 20 24 66 69 6c 65 6e 61 6d 65 ng %s" $filename
1110: 5d 0a 09 73 65 74 20 74 61 69 6c 20 5b 66 69 6c ]..set tail [fil
1120: 65 20 74 61 69 6c 20 24 66 69 6c 65 6e 61 6d 65 e tail $filename
1130: 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d ]..if {[string m
1140: 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 22 52 65 atch -nocase "Re
1150: 61 64 6d 65 2e 74 78 74 22 20 24 74 61 69 6c 5d adme.txt" $tail]
1160: 7d 20 7b 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 } {.. continu
1170: 65 0a 09 7d 0a 0a 09 73 65 74 20 63 69 70 68 65 e..}...set ciphe
1180: 72 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 r [file rootname
1190: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail $fil
11a0: 65 6e 61 6d 65 5d 5d 0a 09 73 65 74 20 69 64 20 ename]]..set id
11b0: 5b 66 6f 72 6d 61 74 20 22 25 73 5f 25 73 22 20 [format "%s_%s"
11c0: 24 67 72 6f 75 70 20 24 63 69 70 68 65 72 5d 0a $group $cipher].
11d0: 09 73 65 74 20 74 65 73 74 5f 6e 75 6d 20 5b 69 .set test_num [i
11e0: 6e 63 72 20 74 65 73 74 5f 69 64 73 28 24 69 64 ncr test_ids($id
11f0: 29 5d 0a 09 69 66 20 7b 24 63 69 70 68 65 72 20 )]..if {$cipher
1200: 65 71 20 22 72 63 34 2d 31 32 38 22 7d 20 7b 73 eq "rc4-128"} {s
1210: 65 74 20 63 69 70 68 65 72 20 22 72 63 34 22 7d et cipher "rc4"}
1220: 0a 09 70 61 72 73 65 20 24 67 72 6f 75 70 20 24 ..parse $group $
1230: 66 69 6c 65 6e 61 6d 65 20 24 74 65 73 74 5f 6e filename $test_n
1240: 75 6d 20 24 63 69 70 68 65 72 0a 20 20 20 20 7d um $cipher. }
1250: 0a 7d 0a 0a 6d 61 69 6e 20 5b 70 77 64 5d 0a 65 .}..main [pwd].e
1260: 78 69 74 0a xit.