tem_ruby 0.14.0 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +2 -0
- data/lib/tem/benchmarks/benchmarks.rb +13 -4
- data/lib/tem/benchmarks/blank_bound_secpack.rb +20 -13
- data/lib/tem/benchmarks/blank_sec.rb +24 -5
- data/lib/tem/benchmarks/devchip_decrypt.rb +24 -2
- data/lib/tem/benchmarks/simple_apdu.rb +1 -1
- data/lib/tem/benchmarks/vm_perf.rb +21 -4
- data/lib/tem/benchmarks/vm_perf_bound.rb +22 -138
- data/tem_ruby.gemspec +3 -3
- metadata +14 -14
data/CHANGELOG
CHANGED
@@ -16,6 +16,8 @@ require 'tem/benchmarks/vm_perf_bound.rb'
|
|
16
16
|
|
17
17
|
|
18
18
|
class Tem::Benchmarks
|
19
|
+
attr_reader :timing
|
20
|
+
|
19
21
|
def setup
|
20
22
|
@tem = Tem.auto_tem
|
21
23
|
|
@@ -43,13 +45,19 @@ class Tem::Benchmarks
|
|
43
45
|
end
|
44
46
|
avg_time = timings.inject { |a,v| a + v } / timings.length
|
45
47
|
max_diff = timings.map { |t| (t - avg_time).abs }.max
|
46
|
-
uncertainty =
|
48
|
+
uncertainty = max_diff / avg_time
|
47
49
|
print "%8d: %3.8fs per run, %3.8fs uncertainty (%2.5f%%)\n" %
|
48
50
|
[n, avg_time / n, max_diff / n, 100 * uncertainty]
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
+
if max_diff / avg_time >= 0.01
|
53
|
+
n *= 2
|
54
|
+
next
|
55
|
+
end
|
56
|
+
|
57
|
+
@timing = avg_time / n
|
58
|
+
break
|
52
59
|
end
|
60
|
+
@timing
|
53
61
|
end
|
54
62
|
|
55
63
|
def self.all_benchmarks
|
@@ -58,7 +66,8 @@ class Tem::Benchmarks
|
|
58
66
|
t.setup
|
59
67
|
t.methods.select { |m| m =~ /time_/ }.each do |m|
|
60
68
|
print "Timing: #{m[5..-1]}...\n"
|
61
|
-
|
69
|
+
t.send m.to_sym
|
70
|
+
benchmarks[m] = t.timing
|
62
71
|
end
|
63
72
|
t.teardown
|
64
73
|
benchmarks
|
@@ -9,20 +9,27 @@
|
|
9
9
|
|
10
10
|
# :nodoc:
|
11
11
|
class Tem::Benchmarks
|
12
|
-
def
|
13
|
-
secpack =
|
14
|
-
s.ldbc 0
|
15
|
-
s.outnew
|
16
|
-
s.halt
|
17
|
-
s.label :secret
|
18
|
-
s.zeros :tem_ubyte, 50
|
19
|
-
s.label :plain
|
20
|
-
s.zeros :tem_ubyte, 220
|
21
|
-
s.stack 1
|
22
|
-
}
|
12
|
+
def time_blank_bound_secpack_rsa
|
13
|
+
secpack = blank_seclosure
|
23
14
|
secpack.bind @tem.pubek, :secret, :plain
|
24
|
-
|
25
|
-
|
15
|
+
print "RSA-bound SECpack has #{secpack.body.length} bytes, " +
|
16
|
+
"executes #{blank_seclosure_opcount} instructions and produces " +
|
17
|
+
"#{blank_seclosure_outcount} bytes\n"
|
26
18
|
do_timing { @tem.execute secpack }
|
27
19
|
end
|
20
|
+
|
21
|
+
def time_blank_bound_secpack_3des
|
22
|
+
key = Tem::Keys::Symmetric.generate
|
23
|
+
authz = [1] * 20
|
24
|
+
key_id = @tem.tk_post_key key, authz
|
25
|
+
|
26
|
+
secpack = blank_seclosure
|
27
|
+
secpack.bind key, :secret, :plain
|
28
|
+
print "3DES-bound SECpack has #{secpack.body.length} bytes, " +
|
29
|
+
"executes #{blank_seclosure_opcount} instructions and produces " +
|
30
|
+
"#{blank_seclosure_outcount} bytes\n"
|
31
|
+
do_timing { @tem.execute secpack, key_id }
|
32
|
+
|
33
|
+
@tem.tk_delete_key key_id, authz
|
34
|
+
end
|
28
35
|
end
|
@@ -13,16 +13,35 @@
|
|
13
13
|
|
14
14
|
# :nodoc:
|
15
15
|
class Tem::Benchmarks
|
16
|
-
|
17
|
-
|
16
|
+
# The SEClosure used in the blank benchmark.
|
17
|
+
def blank_seclosure
|
18
|
+
@tem.assemble { |s|
|
18
19
|
s.ldbc 0
|
19
20
|
s.outnew
|
20
21
|
s.halt
|
21
|
-
s.
|
22
|
+
s.label :secret
|
23
|
+
s.zeros :tem_ubyte, 50
|
24
|
+
s.label :plain
|
25
|
+
s.zeros :tem_ubyte, 220
|
22
26
|
s.stack 1
|
23
27
|
}
|
24
|
-
|
25
|
-
|
28
|
+
end
|
29
|
+
|
30
|
+
# Number of opcodes executed by the blank SEClosure.
|
31
|
+
def blank_seclosure_opcount
|
32
|
+
3
|
33
|
+
end
|
34
|
+
|
35
|
+
# Number of bytes output by the blank SEClosure.
|
36
|
+
def blank_seclosure_outcount
|
37
|
+
0
|
38
|
+
end
|
39
|
+
|
40
|
+
def time_blank_sec
|
41
|
+
secpack = blank_seclosure
|
42
|
+
print "SECpack has #{secpack.body.length} bytes, " +
|
43
|
+
"executes #{blank_seclosure_opcount} instructions and produces " +
|
44
|
+
"#{blank_seclosure_outcount} bytes\n"
|
26
45
|
do_timing { @tem.execute secpack }
|
27
46
|
end
|
28
47
|
end
|
@@ -11,11 +11,33 @@
|
|
11
11
|
|
12
12
|
# :nodoc:
|
13
13
|
class Tem::Benchmarks
|
14
|
-
def
|
14
|
+
def time_devchip_decrypt_rsa_long
|
15
15
|
pubek = @tem.pubek
|
16
16
|
data = (1...120).map { |i| (i * i * 217 + i * 661 + 393) % 256 }
|
17
17
|
encrypted_data = pubek.encrypt data
|
18
|
-
print "
|
18
|
+
print "RSA-encrypted blob has #{encrypted_data.length} bytes\n"
|
19
19
|
do_timing { @tem.devchip_decrypt encrypted_data, 0 }
|
20
20
|
end
|
21
|
+
|
22
|
+
def time_devchip_decrypt_3des
|
23
|
+
key = Tem::Keys::Symmetric.generate
|
24
|
+
authz = [1] * 20
|
25
|
+
key_id = @tem.tk_post_key key, authz
|
26
|
+
data = (1...23).map { |i| (i * i * 217 + i * 661 + 393) % 256 }
|
27
|
+
encrypted_data = key.encrypt data
|
28
|
+
print "3DES-encrypted blob has #{encrypted_data.length} bytes\n"
|
29
|
+
do_timing { @tem.devchip_decrypt encrypted_data, key_id }
|
30
|
+
@tem.tk_delete_key key_id, authz
|
31
|
+
end
|
32
|
+
|
33
|
+
def time_devchip_decrypt_3des_long
|
34
|
+
key = Tem::Keys::Symmetric.generate
|
35
|
+
authz = [1] * 20
|
36
|
+
key_id = @tem.tk_post_key key, authz
|
37
|
+
data = (1...120).map { |i| (i * i * 217 + i * 661 + 393) % 256 }
|
38
|
+
encrypted_data = key.encrypt data
|
39
|
+
print "3DES-encrypted blob has #{encrypted_data.length} bytes\n"
|
40
|
+
do_timing { @tem.devchip_decrypt encrypted_data, key_id }
|
41
|
+
@tem.tk_delete_key key_id, authz
|
42
|
+
end
|
21
43
|
end
|
@@ -10,8 +10,9 @@
|
|
10
10
|
|
11
11
|
# :nodoc:
|
12
12
|
class Tem::Benchmarks
|
13
|
-
|
14
|
-
|
13
|
+
# The SEClosure used in the vm_perf benchmark.
|
14
|
+
def vm_perf_seclosure
|
15
|
+
@tem.assemble { |s|
|
15
16
|
s.ldwc 48 * 10
|
16
17
|
s.outnew
|
17
18
|
|
@@ -145,7 +146,23 @@ class Tem::Benchmarks
|
|
145
146
|
s.label :stack
|
146
147
|
s.stack 12
|
147
148
|
}
|
148
|
-
|
149
|
+
end
|
150
|
+
|
151
|
+
# Number of opcodes executed by the vm_perf SEClosure.
|
152
|
+
def vm_perf_seclosure_opcount
|
153
|
+
1020
|
154
|
+
end
|
155
|
+
|
156
|
+
# Number of bytes output by the vm_perf SEClosure.
|
157
|
+
def vm_perf_seclosure_outcount
|
158
|
+
470
|
159
|
+
end
|
160
|
+
|
161
|
+
def time_vm_perf
|
162
|
+
secpack = vm_perf_seclosure
|
163
|
+
print "SECpack has #{secpack.body.length} bytes, " +
|
164
|
+
"executes #{vm_perf_seclosure_opcount} instructions and produces " +
|
165
|
+
"#{vm_perf_seclosure_outcount} bytes\n"
|
149
166
|
do_timing { @tem.execute secpack }
|
150
|
-
end
|
167
|
+
end
|
151
168
|
end
|
@@ -11,143 +11,27 @@
|
|
11
11
|
|
12
12
|
# :nodoc:
|
13
13
|
class Tem::Benchmarks
|
14
|
-
def
|
15
|
-
secpack =
|
16
|
-
s.ldwc 48 * 10
|
17
|
-
s.outnew
|
18
|
-
|
19
|
-
s.ldwc 10 # number of times to loop (4 instructions in loop)
|
20
|
-
s.label :main_loop
|
21
|
-
|
22
|
-
# arithmetic (18 instructions, 10 bytes out)
|
23
|
-
s.ldwc 0x1234
|
24
|
-
s.ldwc 0x5678
|
25
|
-
s.dupn :n => 2
|
26
|
-
s.add
|
27
|
-
s.outw
|
28
|
-
s.sub
|
29
|
-
s.outw
|
30
|
-
s.ldwc 0x0155
|
31
|
-
s.ldwc 0x02AA
|
32
|
-
s.mul
|
33
|
-
s.outw
|
34
|
-
s.ldwc 0x390C
|
35
|
-
s.ldwc 0x00AA
|
36
|
-
s.dupn :n => 2
|
37
|
-
s.div
|
38
|
-
s.outw
|
39
|
-
s.mod
|
40
|
-
s.outw
|
41
|
-
|
42
|
-
# memory (28 instructions, 16 bytes out)
|
43
|
-
s.ldwc 0x55AA
|
44
|
-
s.stw :clobber
|
45
|
-
s.ldb :clobber
|
46
|
-
s.outw
|
47
|
-
s.ldw :clobber
|
48
|
-
s.outw
|
49
|
-
s.ldbc 0xA5 - (1 << 8)
|
50
|
-
s.stb :clobber
|
51
|
-
s.ldw :clobber
|
52
|
-
s.outw
|
53
|
-
s.ldwc :clobber2
|
54
|
-
s.dupn :n => 1
|
55
|
-
s.dupn :n => 2
|
56
|
-
s.ldwc 0x9966 - (1 << 16)
|
57
|
-
s.stwv
|
58
|
-
s.ldbv
|
59
|
-
s.outw
|
60
|
-
s.ldbc 0x98 - (1 << 8)
|
61
|
-
s.stbv
|
62
|
-
s.ldwv
|
63
|
-
s.outw
|
64
|
-
s.ldwc 0x1122
|
65
|
-
s.ldwc 0x3344
|
66
|
-
s.ldwc 0x5566
|
67
|
-
s.flipn :n => 3
|
68
|
-
s.outw
|
69
|
-
s.outw
|
70
|
-
s.outw
|
71
|
-
|
72
|
-
# memory comparisons (22 instructions, 16 bytes out)
|
73
|
-
s.ldwc :const => 6
|
74
|
-
s.ldwc :cmp_med
|
75
|
-
s.ldwc :cmp_lo
|
76
|
-
s.mcmpvb
|
77
|
-
s.outw
|
78
|
-
s.mcmpfxb :size => 6, :op1 => :cmp_med, :op2 => :cmp_hi
|
79
|
-
s.outw
|
80
|
-
s.ldwc :const => 4
|
81
|
-
s.ldwc :cmp_lo
|
82
|
-
s.ldwc :cmp_med
|
83
|
-
s.mcmpvb
|
84
|
-
s.outw
|
85
|
-
s.mcfxb :size => 6, :from => :cmp_hi, :to => :copy_buf
|
86
|
-
s.pop
|
87
|
-
s.outfxb :size => 6, :from => :copy_buf
|
88
|
-
s.ldwc :const => 4
|
89
|
-
s.ldwc :cmp_hi
|
90
|
-
s.ldwc :copy_buf2
|
91
|
-
s.mcvb
|
92
|
-
s.pop
|
93
|
-
s.outfxb :size => 4, :from => :copy_buf2
|
94
|
-
|
95
|
-
# jumps (30 instructions, 6 bytes) from 6 * (5 instructions, 1 byte)
|
96
|
-
failed = 0xFA - (1 << 8)
|
97
|
-
[
|
98
|
-
[:ja, [1, 1, failed]],
|
99
|
-
[:jae, [1, 4, failed]],
|
100
|
-
[:jb, [1, failed, 7]],
|
101
|
-
[:jbe, [1, failed, 10]],
|
102
|
-
[:jz, [1, failed, 13]],
|
103
|
-
[:jne, [1, 16, failed]],
|
104
|
-
].each do |op_line|
|
105
|
-
op = op_line.shift
|
106
|
-
op_line.each_index do |i|
|
107
|
-
then_label = "#{op}_l#{i}_t".to_sym
|
108
|
-
out_label = "#{op}_l#{i}_o".to_sym
|
109
|
-
|
110
|
-
s.ldbc op_line[i][0]
|
111
|
-
s.send op, :to => then_label
|
112
|
-
s.ldbc op_line[i][2]
|
113
|
-
s.jmp :to => out_label
|
114
|
-
s.label then_label
|
115
|
-
s.ldbc op_line[i][1]
|
116
|
-
s.label out_label
|
117
|
-
s.outb
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
# loop back
|
122
|
-
s.ldbc 1
|
123
|
-
s.sub
|
124
|
-
s.dupn :n => 1
|
125
|
-
s.ja :to => :main_loop
|
126
|
-
|
127
|
-
s.label :done
|
128
|
-
s.halt
|
129
|
-
|
130
|
-
s.label :cmp_lo
|
131
|
-
s.data :tem_ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2C, 0x12]
|
132
|
-
s.label :cmp_med
|
133
|
-
s.data :tem_ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2D, 0x11]
|
134
|
-
s.label :cmp_hi
|
135
|
-
s.data :tem_ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
|
136
|
-
s.label :cmp_hi2
|
137
|
-
s.data :tem_ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
|
138
|
-
s.label :copy_buf
|
139
|
-
s.zeros :tem_ubyte, 6
|
140
|
-
s.label :copy_buf2
|
141
|
-
s.zeros :tem_ubyte, 4
|
142
|
-
s.label :clobber
|
143
|
-
s.zeros :tem_ubyte, 2
|
144
|
-
s.label :clobber2
|
145
|
-
s.zeros :tem_ubyte, 2
|
146
|
-
s.label :stack
|
147
|
-
s.stack 12
|
148
|
-
}
|
14
|
+
def time_vm_perf_bound_rsa
|
15
|
+
secpack = vm_perf_seclosure
|
149
16
|
secpack.bind @tem.pubek, :done, :stack
|
150
|
-
print "SECpack has #{secpack.body.length} bytes,
|
17
|
+
print "RSA-bound SECpack has #{secpack.body.length} bytes, " +
|
18
|
+
"executes #{vm_perf_seclosure_opcount} instructions and produces " +
|
19
|
+
"#{vm_perf_seclosure_outcount} bytes\n"
|
151
20
|
do_timing { @tem.execute secpack }
|
152
|
-
end
|
153
|
-
|
21
|
+
end
|
22
|
+
|
23
|
+
def time_vm_perf_bound_3des
|
24
|
+
key = Tem::Keys::Symmetric.generate
|
25
|
+
authz = [1] * 20
|
26
|
+
key_id = @tem.tk_post_key key, authz
|
27
|
+
|
28
|
+
secpack = vm_perf_seclosure
|
29
|
+
secpack.bind key, :done, :stack
|
30
|
+
print "3DES-bound SECpack has #{secpack.body.length} bytes, " +
|
31
|
+
"executes #{vm_perf_seclosure_opcount} instructions and produces " +
|
32
|
+
"#{vm_perf_seclosure_outcount} bytes\n"
|
33
|
+
do_timing { @tem.execute secpack, key_id }
|
34
|
+
|
35
|
+
@tem.tk_delete_key key_id, authz
|
36
|
+
end
|
37
|
+
end
|
data/tem_ruby.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{tem_ruby}
|
5
|
-
s.version = "0.14.
|
5
|
+
s.version = "0.14.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Victor Costan"]
|
9
|
-
s.date = %q{2009-11-
|
9
|
+
s.date = %q{2009-11-16}
|
10
10
|
s.description = %q{TEM (Trusted Execution Module) driver, written in and for ruby.}
|
11
11
|
s.email = %q{victor@costan.us}
|
12
12
|
s.executables = ["tem_bench", "tem_ca", "tem_irb", "tem_proxy", "tem_stat", "tem_upload_fw"]
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.rubyforge_project = %q{tem}
|
19
19
|
s.rubygems_version = %q{1.3.5}
|
20
20
|
s.summary = %q{TEM (Trusted Execution Module) driver, written in and for ruby.}
|
21
|
-
s.test_files = ["test/
|
21
|
+
s.test_files = ["test/test_driver.rb", "test/firmware/test_uploader.rb", "test/test_auto_conf.rb", "test/builders/test_abi_builder.rb", "test/tem_unit/test_tem_emit.rb", "test/tem_unit/test_tem_crypto_keys.rb", "test/tem_unit/test_tem_yaml_secpack.rb", "test/tem_unit/test_tem_alu.rb", "test/tem_unit/test_tem_crypto_hash.rb", "test/tem_unit/test_tem_bound_secpack.rb", "test/tem_unit/test_tem_memory_compare.rb", "test/tem_unit/test_tem_output.rb", "test/tem_unit/test_tem_crypto_random.rb", "test/tem_unit/test_tem_memory.rb", "test/tem_unit/test_tem_branching.rb", "test/tem_unit/test_tem_crypto_pstore.rb", "test/test_exceptions.rb", "test/test_crypto_engine.rb"]
|
22
22
|
|
23
23
|
if s.respond_to? :specification_version then
|
24
24
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tem_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-16 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -204,21 +204,21 @@ signing_key:
|
|
204
204
|
specification_version: 3
|
205
205
|
summary: TEM (Trusted Execution Module) driver, written in and for ruby.
|
206
206
|
test_files:
|
207
|
-
- test/
|
207
|
+
- test/test_driver.rb
|
208
208
|
- test/firmware/test_uploader.rb
|
209
|
+
- test/test_auto_conf.rb
|
210
|
+
- test/builders/test_abi_builder.rb
|
211
|
+
- test/tem_unit/test_tem_emit.rb
|
212
|
+
- test/tem_unit/test_tem_crypto_keys.rb
|
213
|
+
- test/tem_unit/test_tem_yaml_secpack.rb
|
209
214
|
- test/tem_unit/test_tem_alu.rb
|
210
|
-
- test/tem_unit/test_tem_bound_secpack.rb
|
211
|
-
- test/tem_unit/test_tem_branching.rb
|
212
215
|
- test/tem_unit/test_tem_crypto_hash.rb
|
213
|
-
- test/tem_unit/
|
214
|
-
- test/tem_unit/test_tem_crypto_pstore.rb
|
215
|
-
- test/tem_unit/test_tem_crypto_random.rb
|
216
|
-
- test/tem_unit/test_tem_emit.rb
|
217
|
-
- test/tem_unit/test_tem_memory.rb
|
216
|
+
- test/tem_unit/test_tem_bound_secpack.rb
|
218
217
|
- test/tem_unit/test_tem_memory_compare.rb
|
219
218
|
- test/tem_unit/test_tem_output.rb
|
220
|
-
- test/tem_unit/
|
221
|
-
- test/
|
222
|
-
- test/
|
223
|
-
- test/
|
219
|
+
- test/tem_unit/test_tem_crypto_random.rb
|
220
|
+
- test/tem_unit/test_tem_memory.rb
|
221
|
+
- test/tem_unit/test_tem_branching.rb
|
222
|
+
- test/tem_unit/test_tem_crypto_pstore.rb
|
224
223
|
- test/test_exceptions.rb
|
224
|
+
- test/test_crypto_engine.rb
|