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.