tem_ruby 0.9.0 → 0.9.2
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 +4 -0
- data/README +4 -2
- data/lib/tem/abi.rb +1 -1
- data/lib/tem/ecert.rb +31 -31
- data/lib/tem/sec_assembler.rb +2 -2
- data/lib/tem/sec_opcodes.rb +4 -4
- data/lib/tem/seclosures.rb +5 -6
- data/lib/tem/secpack.rb +7 -7
- data/tem_ruby.gemspec +8 -6
- data/test/test_tem.rb +31 -31
- data/timings/blank_bound_secpack.rb +1 -1
- data/timings/vm_perf_bound.rb +1 -1
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
v0.9.2. Changed exec-SECpack calling sequence for fw 1.9.1(fire, the released version).
|
2
|
+
|
3
|
+
v0.9.1. Cleaner names for the pstore data types and opcode arguments. "Bound" instead of "sealed" SECpack.
|
4
|
+
|
1
5
|
v0.9.0. Updated tests and re-implemented buffer stat-ing for fw 1.9(fire).
|
2
6
|
|
3
7
|
v0.8.0. Implemented buffer flushing (fw 1.8) and more timing tests.
|
data/README
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
This is the ruby driver for the Trusted Execution Module prototype produced at
|
2
|
-
ruby driver
|
1
|
+
This is the ruby driver for the Trusted Execution Module prototype produced at
|
2
|
+
MIT. The best features of the ruby driver are the very powerful DSL
|
3
|
+
(domain-specific language) that TEM SECpacks are compiled from, and the
|
4
|
+
usage of debugging line info to translate exception IPs to stack traces.
|
3
5
|
|
4
6
|
Running coverage tests:
|
5
7
|
gem install rcov
|
data/lib/tem/abi.rb
CHANGED
@@ -6,7 +6,7 @@ module Tem::Abi
|
|
6
6
|
klass.tem_value_type :ubyte, 1, :signed => false, :endian => :big
|
7
7
|
klass.tem_value_type :short, 2, :signed => true, :endian => :big
|
8
8
|
klass.tem_value_type :ushort, 2, :signed => false, :endian => :big
|
9
|
-
klass.tem_value_type :
|
9
|
+
klass.tem_value_type :ps_addr, 20, :signed => false, :endian => :big
|
10
10
|
klass.tem_value_type :ps_value, 20, :signed => false, :endian => :big
|
11
11
|
end
|
12
12
|
|
data/lib/tem/ecert.rb
CHANGED
@@ -23,46 +23,46 @@ module Tem::ECert
|
|
23
23
|
|
24
24
|
# emits a TEM
|
25
25
|
def emit
|
26
|
-
|
26
|
+
emit_sec = assemble do |s|
|
27
27
|
# generate EK, compare with (0, 1)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
s.genkp :type => 0
|
29
|
+
s.ldbc 1
|
30
|
+
s.sub
|
31
|
+
s.jne :to => :not_ok
|
32
|
+
s.ldbc 0
|
33
|
+
s.sub
|
34
|
+
s.jne :to => :not_ok
|
35
35
|
|
36
36
|
# generate and output random authorization for PrivEK
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
s.ldbc 20
|
38
|
+
s.dupn :n => 1
|
39
|
+
s.outnew
|
40
|
+
s.ldwc :privek_auth
|
41
|
+
s.dupn :n => 2
|
42
|
+
s.rnd
|
43
|
+
s.outvb
|
44
44
|
# set authorizations for PrivEK and PubkEK
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
s.ldbc 0
|
46
|
+
s.authk :auth => :privek_auth
|
47
|
+
s.ldbc 1 # PubEK always has its initial authorization be all zeroes
|
48
|
+
s.authk :auth => :pubek_auth
|
49
|
+
s.halt
|
50
50
|
|
51
51
|
# emitting didn't go well, return nothing and leave
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
s.label :not_ok
|
53
|
+
s.ldbc 0
|
54
|
+
s.outnew
|
55
|
+
s.halt
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
57
|
+
s.label :privek_auth
|
58
|
+
s.filler :ubyte, 20
|
59
|
+
s.label :pubek_auth
|
60
|
+
s.filler :ubyte, 20
|
61
|
+
s.stack
|
62
|
+
s.extra 8
|
63
63
|
end
|
64
64
|
|
65
|
-
r = execute
|
65
|
+
r = execute emit_sec
|
66
66
|
if r.length == 0
|
67
67
|
return nil
|
68
68
|
else
|
data/lib/tem/sec_assembler.rb
CHANGED
data/lib/tem/sec_opcodes.rb
CHANGED
@@ -29,19 +29,19 @@ class Tem::SecAssembler
|
|
29
29
|
|
30
30
|
|
31
31
|
# 2 IM -> 1 ST
|
32
|
-
opcode(:psupfxb, 0x48, {:name => :
|
32
|
+
opcode(:psupfxb, 0x48, {:name => :addr, :type => :ushort}, {:name => :from, :type => :ushort})
|
33
33
|
# 2 ST -> 1 ST
|
34
34
|
opcode :psupvb, 0x49
|
35
35
|
# 2 IM -> 1 ST
|
36
|
-
opcode(:pswrfxb, 0x4A, {:name => :
|
36
|
+
opcode(:pswrfxb, 0x4A, {:name => :addr, :type => :ushort}, {:name => :from, :type => :ushort})
|
37
37
|
# 2 ST -> 1 ST
|
38
38
|
opcode :pswrvb, 0x4B
|
39
39
|
# 2 IM -> 1 ST
|
40
|
-
opcode(:psrdfxb, 0x4C, {:name => :
|
40
|
+
opcode(:psrdfxb, 0x4C, {:name => :addr, :type => :ushort}, {:name => :to, :type => :ushort})
|
41
41
|
# 2 ST -> 1 ST
|
42
42
|
opcode :psrdvb, 0x4D
|
43
43
|
# 2 IM -> 1 ST
|
44
|
-
opcode :pshkfxb, 0x4E, {:name => :
|
44
|
+
opcode :pshkfxb, 0x4E, {:name => :addr, :type => :ushort}
|
45
45
|
# 2 ST -> 1 ST
|
46
46
|
opcode :pshkvb, 0x4F
|
47
47
|
|
data/lib/tem/seclosures.rb
CHANGED
@@ -2,8 +2,8 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Tem::SeClosures
|
4
4
|
module MixedMethods
|
5
|
-
def assemble(&
|
6
|
-
return Tem::SecAssembler.new(self).assemble(&
|
5
|
+
def assemble(&sec_block)
|
6
|
+
return Tem::SecAssembler.new(self).assemble(&sec_block)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -36,11 +36,10 @@ module Tem::SeClosures
|
|
36
36
|
tem_error(response) if failure_code(response)
|
37
37
|
end
|
38
38
|
|
39
|
-
def execute(
|
39
|
+
def execute(secpack, key_id = 0)
|
40
40
|
# load SECpack
|
41
|
-
buffer_id = post_buffer(
|
41
|
+
buffer_id = post_buffer(secpack.tem_formatted_body)
|
42
42
|
response = issue_apdu [0x00, 0x50, to_tem_byte(buffer_id), to_tem_byte(key_id), 0x00].flatten
|
43
|
-
release_buffer(buffer_id)
|
44
43
|
tem_error(response) if failure_code(response)
|
45
44
|
tem_secpack_error(response) if read_tem_byte(response, 0) != 1
|
46
45
|
|
@@ -58,7 +57,7 @@ module Tem::SeClosures
|
|
58
57
|
b_stat = stat_buffers() rescue nil
|
59
58
|
k_stat = stat_keys() rescue nil
|
60
59
|
trace = sec_trace()
|
61
|
-
backtrace = (trace && trace[:ip]) ?
|
60
|
+
backtrace = (trace && trace[:ip]) ? secpack.stack_for_ip(trace[:ip]) : Kernel.caller
|
62
61
|
sec_exception = Tem::SecExecError.new backtrace, trace, b_stat, k_stat
|
63
62
|
break
|
64
63
|
when 4 # persistent store fault
|
data/lib/tem/secpack.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
3
|
class Tem::SecPack
|
4
|
-
@@serialized_members = [:body, :labels, :ep, :sp, :extra_bytes, :signed_bytes, :encrypted_bytes, :
|
4
|
+
@@serialized_members = [:body, :labels, :ep, :sp, :extra_bytes, :signed_bytes, :encrypted_bytes, :bound, :lines]
|
5
5
|
|
6
6
|
def self.new_from_array(array)
|
7
7
|
arg_hash = { :tem_class => Tem::Session }
|
@@ -22,13 +22,13 @@ class Tem::SecPack
|
|
22
22
|
self.to_array.to_yaml.to_s
|
23
23
|
end
|
24
24
|
|
25
|
-
attr_reader :body, :
|
25
|
+
attr_reader :body, :bound
|
26
26
|
attr_reader :lines
|
27
27
|
|
28
28
|
def initialize(args)
|
29
29
|
@tem_klass = args[:tem_class]
|
30
30
|
@@serialized_members.map { |m| self.instance_variable_set('@' + m.to_s, args[m]) }
|
31
|
-
@
|
31
|
+
@bound ||= false
|
32
32
|
end
|
33
33
|
|
34
34
|
def label_address(label_name)
|
@@ -42,15 +42,15 @@ class Tem::SecPack
|
|
42
42
|
return hh
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def bind(public_key, encrypt_from = 0, plaintext_from = 0)
|
46
46
|
encrypt_from = @labels[encrypt_from.to_sym] unless encrypt_from.instance_of? Numeric
|
47
47
|
plaintext_from = @labels[plaintext_from.to_sym] unless plaintext_from.instance_of? Numeric
|
48
48
|
|
49
49
|
@signed_bytes = encrypt_from
|
50
50
|
@encrypted_bytes = plaintext_from - encrypt_from
|
51
51
|
|
52
|
-
|
53
|
-
crypt = public_key.encrypt [@body[encrypt_from...plaintext_from],
|
52
|
+
secpack_sig = @tem_klass.hash_for_tem [tem_header, @body[0...plaintext_from]].flatten
|
53
|
+
crypt = public_key.encrypt [@body[encrypt_from...plaintext_from], secpack_sig].flatten
|
54
54
|
@body = [@body[0...encrypt_from], crypt, @body[plaintext_from..-1]].flatten
|
55
55
|
|
56
56
|
label_delta = crypt.length - @encrypted_bytes
|
@@ -64,7 +64,7 @@ class Tem::SecPack
|
|
64
64
|
end
|
65
65
|
}.flatten)]
|
66
66
|
|
67
|
-
@
|
67
|
+
@bound = true
|
68
68
|
end
|
69
69
|
|
70
70
|
def tem_formatted_body()
|
data/tem_ruby.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Tem_ruby-0.9.
|
2
|
+
# Gem::Specification for Tem_ruby-0.9.2
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = %q{tem_ruby}
|
7
|
-
s.version = "0.9.
|
7
|
+
s.version = "0.9.2"
|
8
8
|
|
9
9
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Victor Costan"]
|
13
|
-
s.date = %q{2008-06-
|
13
|
+
s.date = %q{2008-06-13}
|
14
14
|
s.description = %q{TEM (Trusted Execution Module) driver, written in and for ruby.}
|
15
15
|
s.email = %q{victor@costan.us}
|
16
16
|
s.executables = ["tem_stat", "tem_ca", "tem_irb", "tem_bench"]
|
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.summary = %q{TEM (Trusted Execution Module) driver, written in and for ruby.}
|
25
25
|
s.test_files = ["test/test_driver.rb", "test/test_tem.rb", "test/test_exceptions.rb"]
|
26
26
|
|
27
|
-
s.add_dependency(%q<smartcard>, [">= 0.
|
27
|
+
s.add_dependency(%q<smartcard>, [">= 0.3.0"])
|
28
28
|
end
|
29
29
|
|
30
30
|
|
@@ -36,14 +36,16 @@ end
|
|
36
36
|
#
|
37
37
|
# Echoe.new('tem_ruby') do |p|
|
38
38
|
# p.project = 'tem' # rubyforge project
|
39
|
+
# p.docs_host = "costan@rubyforge.org:/var/www/gforge-projects/tem/rdoc/"
|
39
40
|
#
|
40
41
|
# p.author = 'Victor Costan'
|
41
42
|
# p.email = 'victor@costan.us'
|
42
43
|
# p.summary = 'TEM (Trusted Execution Module) driver, written in and for ruby.'
|
43
44
|
# p.url = 'http://tem.rubyforge.org'
|
44
|
-
# p.dependencies = ['smartcard >=0.
|
45
|
+
# p.dependencies = ['smartcard >=0.3.0']
|
45
46
|
#
|
46
|
-
# p.need_tar_gz =
|
47
|
+
# p.need_tar_gz = true
|
48
|
+
# p.need_zip = true
|
47
49
|
# p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
|
48
50
|
# end
|
49
51
|
#
|
data/test/test_tem.rb
CHANGED
@@ -21,7 +21,7 @@ class TemTest < Test::Unit::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_alu
|
24
|
-
|
24
|
+
sec = @tem.assemble { |s|
|
25
25
|
s.ldbc 10
|
26
26
|
s.outnew
|
27
27
|
s.ldwc 0x1234
|
@@ -45,13 +45,13 @@ class TemTest < Test::Unit::TestCase
|
|
45
45
|
s.halt
|
46
46
|
s.extra 10
|
47
47
|
}
|
48
|
-
result = @tem.execute
|
48
|
+
result = @tem.execute sec
|
49
49
|
assert_equal [0x68, 0xAC, 0xBB, 0xBC, 0x8C, 0x72, 0x00, 0x55, 0x00, 0x9A],
|
50
50
|
result, 'the ALU isn\'t working well'
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_memory
|
54
|
-
|
54
|
+
sec = @tem.assemble { |s|
|
55
55
|
s.label :clobber
|
56
56
|
s.ldbc 32
|
57
57
|
s.label :clobber2
|
@@ -88,13 +88,13 @@ class TemTest < Test::Unit::TestCase
|
|
88
88
|
s.stack
|
89
89
|
s.extra 10
|
90
90
|
}
|
91
|
-
result = @tem.execute
|
91
|
+
result = @tem.execute sec
|
92
92
|
assert_equal [0x00, 0x55, 0x55, 0xAA, 0xA5, 0xAA, 0xFF, 0x99, 0x98, 0x66, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66],
|
93
93
|
result, 'the memory unit isn\'t working well'
|
94
94
|
end
|
95
95
|
|
96
96
|
def test_output
|
97
|
-
|
97
|
+
sec = @tem.assemble { |s|
|
98
98
|
s.ldbc 32
|
99
99
|
s.outnew
|
100
100
|
s.outfxb :size => 3, :from => :area1
|
@@ -117,7 +117,7 @@ class TemTest < Test::Unit::TestCase
|
|
117
117
|
s.stack
|
118
118
|
s.extra 10
|
119
119
|
}
|
120
|
-
result = @tem.execute
|
120
|
+
result = @tem.execute sec
|
121
121
|
assert_equal [0xFE, 0xCD, 0x9A, 0xAB, 0x95, 0xCE, 0xFD, 0x81, 0xEC, 0xDE, 0xAD, 0xCF, 0x55, 0x99, 0xAA],
|
122
122
|
result, 'the output unit isn\'t working well'
|
123
123
|
end
|
@@ -232,7 +232,7 @@ class TemTest < Test::Unit::TestCase
|
|
232
232
|
garbage2 = (0...11).map { |x| (69 * x * x + 62 * x + 10) % 256 }
|
233
233
|
hash_size = 20
|
234
234
|
|
235
|
-
|
235
|
+
sec = @tem.assemble { |s|
|
236
236
|
s.ldwc hash_size * 3
|
237
237
|
s.outnew
|
238
238
|
s.mdfxb :size => garbage1.length, :from => :garbage1, :to => :hash_area
|
@@ -254,14 +254,14 @@ class TemTest < Test::Unit::TestCase
|
|
254
254
|
s.extra 10
|
255
255
|
}
|
256
256
|
|
257
|
-
result = @tem.execute
|
257
|
+
result = @tem.execute sec
|
258
258
|
assert_equal [garbage1, garbage2, garbage2].map { |d| @tem.hash_for_tem d}.flatten,
|
259
259
|
result, 'cryptographic hashing isn\'t working well'
|
260
260
|
end
|
261
261
|
|
262
262
|
def test_crypto_pstore
|
263
|
-
|
264
|
-
|
263
|
+
addr1 = (0...(@tem.tem_ps_addr_length)).map { |x| (61 * x * x + 62 * x + 10) % 256 }
|
264
|
+
addr2 = addr1.dup; addr2[addr2.length - 1] += 1
|
265
265
|
random_value = (0...(@tem.tem_ps_value_length)).map { |x| (69 * x * x + 62 * x + 10) % 256 }
|
266
266
|
|
267
267
|
sec = @tem.assemble { |s|
|
@@ -269,24 +269,24 @@ class TemTest < Test::Unit::TestCase
|
|
269
269
|
s.outnew
|
270
270
|
|
271
271
|
# check that the location is blank
|
272
|
-
s.ldwc :
|
272
|
+
s.ldwc :pstore_addr
|
273
273
|
s.pshkvb
|
274
274
|
s.outw
|
275
275
|
|
276
276
|
# write to create the location
|
277
|
-
s.pswrfxb :
|
277
|
+
s.pswrfxb :addr => :pstore_addr, :from => :s_value
|
278
278
|
# check that the location isn't blank anymore
|
279
|
-
s.pshkfxb :
|
279
|
+
s.pshkfxb :addr => :pstore_addr
|
280
280
|
s.outw
|
281
281
|
# re-read (should get what was written)
|
282
|
-
s.ldwc :
|
282
|
+
s.ldwc :pstore_addr
|
283
283
|
s.ldwc :s_value2
|
284
284
|
s.psrdvb
|
285
285
|
s.ldwc :s_value2
|
286
286
|
s.outvb
|
287
287
|
|
288
288
|
# drop the location
|
289
|
-
s.ldwc :
|
289
|
+
s.ldwc :pstore_addr
|
290
290
|
s.dupn :n => 1
|
291
291
|
s.psrm
|
292
292
|
# check that the location is blank again
|
@@ -295,8 +295,8 @@ class TemTest < Test::Unit::TestCase
|
|
295
295
|
|
296
296
|
s.halt
|
297
297
|
|
298
|
-
s.label :
|
299
|
-
s.immed :ubyte,
|
298
|
+
s.label :pstore_addr
|
299
|
+
s.immed :ubyte, addr1
|
300
300
|
s.label :s_value
|
301
301
|
s.immed :ubyte, random_value
|
302
302
|
s.label :s_value2
|
@@ -444,12 +444,12 @@ class TemTest < Test::Unit::TestCase
|
|
444
444
|
i_test_crypto_pki_ops(pubk_id, privk_id, pubk, privk, keyd[:authz])
|
445
445
|
end
|
446
446
|
|
447
|
-
def
|
447
|
+
def test_bound_secpack(yaml_roundtrip = false)
|
448
448
|
keyd = @tem.tk_gen_key
|
449
449
|
pubk = @tem.tk_read_key keyd[:pubk_id], keyd[:authz]
|
450
450
|
|
451
451
|
secret = (0...16).map { |i| (99 * i * i + 51 * i + 33) % 256 }
|
452
|
-
|
452
|
+
bound_sec = @tem.assemble { |s|
|
453
453
|
s.ldbc secret.length
|
454
454
|
s.outnew
|
455
455
|
s.label :mess_place
|
@@ -462,25 +462,25 @@ class TemTest < Test::Unit::TestCase
|
|
462
462
|
s.extra 8
|
463
463
|
}
|
464
464
|
|
465
|
-
sb =
|
465
|
+
sb = bound_sec.body
|
466
466
|
secret_found = false
|
467
467
|
0.upto(sb.length - 1) { |i| if secret == sb[i, secret.length] then secret_found = true; break; end }
|
468
|
-
assert secret_found, '
|
468
|
+
assert secret_found, 'test_bound_secpack needs rethinking: the unbound secpack does not contain the secret'
|
469
469
|
|
470
|
-
|
470
|
+
bound_sec.bind pubk, :secret, :plain
|
471
471
|
if yaml_roundtrip
|
472
472
|
# same test, except the SECpack is serialized/deserialized
|
473
|
-
|
474
|
-
|
473
|
+
yaml_bound_sec = bound_sec.to_yaml_str
|
474
|
+
bound_sec = Tem::SecPack.new_from_yaml_str(yaml_bound_sec)
|
475
475
|
end
|
476
|
-
result = @tem.execute
|
476
|
+
result = @tem.execute bound_sec, keyd[:privk_id]
|
477
477
|
assert_equal secret, result, 'TEM failed to decrypt secpack'
|
478
478
|
|
479
|
-
sb =
|
480
|
-
0.upto(sb.length - 1) { |i| assert_not_equal secret, sb[i, secret.length], 'secret found unencrypted in
|
479
|
+
sb = bound_sec.body
|
480
|
+
0.upto(sb.length - 1) { |i| assert_not_equal secret, sb[i, secret.length], 'secret found unencrypted in bound secpack' }
|
481
481
|
|
482
|
-
|
483
|
-
assert_raise(RuntimeError, 'secpack validation isn\'t working') { @tem.execute
|
482
|
+
bound_sec.body[bound_sec.label_address(:mess_place)] += 1
|
483
|
+
assert_raise(RuntimeError, 'secpack validation isn\'t working') { @tem.execute bound_sec }
|
484
484
|
end
|
485
485
|
|
486
486
|
def test_yaml_secpack
|
@@ -516,8 +516,8 @@ class TemTest < Test::Unit::TestCase
|
|
516
516
|
|
517
517
|
# re-run the memory test (reasonably large SECpack) to ensure that de-serialized SECpacks are equivalent to the originals
|
518
518
|
test_memory_copy_compare(true)
|
519
|
-
# re-run the memory test (reasonably large SECpack) to ensure that serialization works on
|
520
|
-
|
519
|
+
# re-run the memory test (reasonably large SECpack) to ensure that serialization works on bound SECpacks
|
520
|
+
test_bound_secpack(true)
|
521
521
|
end
|
522
522
|
|
523
523
|
def test_emit
|
@@ -11,7 +11,7 @@ class TemTimings
|
|
11
11
|
s.stack
|
12
12
|
s.extra 2
|
13
13
|
}
|
14
|
-
secpack.
|
14
|
+
secpack.bind @tem.pubek, :secret, :plain
|
15
15
|
|
16
16
|
print "SECpack has #{secpack.body.length} bytes, runs 3 instructions and produces 0 bytes\n"
|
17
17
|
do_timing { @tem.execute secpack }
|
data/timings/vm_perf_bound.rb
CHANGED
@@ -135,7 +135,7 @@ class TemTimings
|
|
135
135
|
s.stack
|
136
136
|
s.extra 24
|
137
137
|
}
|
138
|
-
secpack.
|
138
|
+
secpack.bind @tem.pubek, :done, :stack
|
139
139
|
print "SECpack has #{secpack.body.length} bytes, runs 1020 instructions and produces 470 bytes\n"
|
140
140
|
do_timing { @tem.execute secpack }
|
141
141
|
end
|
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.9.
|
4
|
+
version: 0.9.2
|
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: 2008-06-
|
12
|
+
date: 2008-06-13 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.3.0
|
23
23
|
version:
|
24
24
|
description: TEM (Trusted Execution Module) driver, written in and for ruby.
|
25
25
|
email: victor@costan.us
|