1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-
+
-
+
|
#
# Test Vectors
#
#
# Create test case and output to test file
#
proc do_test {group cipher file_num tc params fn} {
proc do_test {group cipher test_num tc params fn} {
array set config [list Key "" IV "" Msg "" Repeat 1 Length ""]
array set config $params
# Test info
set line [format "tcltest::test %s-%d.%d {%s %s} \\\n\t" $group $file_num $tc [string totitle $fn] $cipher]
set line [format "tcltest::test %s-%d.%d {%s %s} \\\n\t" $group $test_num $tc [string totitle $fn] $cipher]
# Test constraints
append line [format "-constraints %s \\\n\t" [string map [list "-" "_"] $cipher]]
# Test body
set cmd [format "tls::%s -cipher %s -padding 0 \\\n\t\t" $fn $cipher]
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
-
+
|
#append line { -returnCodes 0}
return $line
}
#
# Parse test vector file and get test cases config info
#
proc parse {group filename file_num cipher} {
proc parse {group filename test_num cipher} {
set tc 0
set params [list]
# Open input file
if {[catch {open $filename r} ch]} {
return -code error $ch
}
|
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
-
+
-
+
-
+
-
+
|
if {[string index $line 0] in [list "#" "\["]} {
# Skip comments and info lines
continue
} elseif {$len == 0} {
if {[llength $params] > 0} {
# Do test if end of params
puts $out [do_test $group $cipher $file_num [incr tc] $params encrypt]
puts $out [do_test $group $cipher $test_num [incr tc] $params encrypt]
puts $out ""
puts $out [do_test $group $cipher $file_num [incr tc] $params decrypt]
puts $out [do_test $group $cipher $test_num [incr tc] $params decrypt]
puts $out ""
set params [list]
} else {
# Empty line
}
} else {
# Append args to params
set index [string first "=" $line]
if {$index > -1} {
set key [string trim [string range $line 0 [expr {$index - 1}]]]
set value [string trim [string range $line [expr {$index + 1}] end]]
lappend params $key $value
}
}
}
# Handle last test case
if {[llength $params] > 0} {
puts $out [do_test $group $cipher $file_num [incr tc] $params]
puts $out [do_test $group $cipher $test_num [incr tc] $params]
puts $out ""
}
# Cleanup
puts $out "# Cleanup\n::tcltest::cleanupTests\nreturn"
close $ch
close $out
}
#
# Read all config files in directory
#
proc main {path} {
set file_num 0
set test_num 0
set group [file rootname [file tail $path]]
foreach filename [glob -directory $path *.txt] {
puts [format "Processing %s" $filename]
set tail [file tail $filename]
if {[string match -nocase "Readme.txt" $tail]} {
continue
|