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.