tem_ruby 0.9.0

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.
@@ -0,0 +1,141 @@
1
+ class TemTimings
2
+ def time_vm_perf
3
+ secpack = @tem.assemble { |s|
4
+ s.ldwc 48 * 10
5
+ s.outnew
6
+
7
+ s.ldwc 10 # number of times to loop (4 instructions in loop)
8
+ s.label :main_loop
9
+
10
+ # arithmetic (18 instructions, 10 bytes out)
11
+ s.ldwc 0x1234
12
+ s.ldwc 0x5678
13
+ s.dupn :n => 2
14
+ s.add
15
+ s.outw
16
+ s.sub
17
+ s.outw
18
+ s.ldwc 0x0155
19
+ s.ldwc 0x02AA
20
+ s.mul
21
+ s.outw
22
+ s.ldwc 0x390C
23
+ s.ldwc 0x00AA
24
+ s.dupn :n => 2
25
+ s.div
26
+ s.outw
27
+ s.mod
28
+ s.outw
29
+
30
+ # memory (28 instructions, 16 bytes out)
31
+ s.ldwc 0x55AA
32
+ s.stw :clobber
33
+ s.ldb :clobber
34
+ s.outw
35
+ s.ldw :clobber
36
+ s.outw
37
+ s.ldbc 0xA5 - (1 << 8)
38
+ s.stb :clobber
39
+ s.ldw :clobber
40
+ s.outw
41
+ s.ldwc :clobber2
42
+ s.dupn :n => 1
43
+ s.dupn :n => 2
44
+ s.ldwc 0x9966 - (1 << 16)
45
+ s.stwv
46
+ s.ldbv
47
+ s.outw
48
+ s.ldbc 0x98 - (1 << 8)
49
+ s.stbv
50
+ s.ldwv
51
+ s.outw
52
+ s.ldwc 0x1122
53
+ s.ldwc 0x3344
54
+ s.ldwc 0x5566
55
+ s.flipn :n => 3
56
+ s.outw
57
+ s.outw
58
+ s.outw
59
+
60
+ # memory comparisons (22 instructions, 16 bytes out)
61
+ s.ldwc :const => 6
62
+ s.ldwc :cmp_med
63
+ s.ldwc :cmp_lo
64
+ s.mcmpvb
65
+ s.outw
66
+ s.mcmpfxb :size => 6, :op1 => :cmp_med, :op2 => :cmp_hi
67
+ s.outw
68
+ s.ldwc :const => 4
69
+ s.ldwc :cmp_lo
70
+ s.ldwc :cmp_med
71
+ s.mcmpvb
72
+ s.outw
73
+ s.mcfxb :size => 6, :from => :cmp_hi, :to => :copy_buf
74
+ s.pop
75
+ s.outfxb :size => 6, :from => :copy_buf
76
+ s.ldwc :const => 4
77
+ s.ldwc :cmp_hi
78
+ s.ldwc :copy_buf2
79
+ s.mcvb
80
+ s.pop
81
+ s.outfxb :size => 4, :from => :copy_buf2
82
+
83
+ # jumps (30 instructions, 6 bytes) from 6 * (5 instructions, 1 byte)
84
+ failed = 0xFA - (1 << 8)
85
+ [
86
+ [:ja, [1, 1, failed]],
87
+ [:jae, [1, 4, failed]],
88
+ [:jb, [1, failed, 7]],
89
+ [:jbe, [1, failed, 10]],
90
+ [:jz, [1, failed, 13]],
91
+ [:jne, [1, 16, failed]],
92
+ ].each do |op_line|
93
+ op = op_line.shift
94
+ op_line.each_index do |i|
95
+ then_label = "#{op}_l#{i}_t".to_sym
96
+ out_label = "#{op}_l#{i}_o".to_sym
97
+
98
+ s.ldbc op_line[i][0]
99
+ s.send op, :to => then_label
100
+ s.ldbc op_line[i][2]
101
+ s.jmp :to => out_label
102
+ s.label then_label
103
+ s.ldbc op_line[i][1]
104
+ s.label out_label
105
+ s.outb
106
+ end
107
+ end
108
+
109
+ # loop back
110
+ s.ldbc 1
111
+ s.sub
112
+ s.dupn :n => 1
113
+ s.ja :to => :main_loop
114
+
115
+ s.label :done
116
+ s.halt
117
+
118
+ s.label :cmp_lo
119
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2C, 0x12]
120
+ s.label :cmp_med
121
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2D, 0x11]
122
+ s.label :cmp_hi
123
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
124
+ s.label :cmp_hi2
125
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
126
+ s.label :copy_buf
127
+ s.filler :ubyte, 6
128
+ s.label :copy_buf2
129
+ s.filler :ubyte, 4
130
+ s.label :clobber
131
+ s.filler :ubyte, 2
132
+ s.label :clobber2
133
+ s.filler :ubyte, 2
134
+ s.label :stack
135
+ s.stack
136
+ s.extra 24
137
+ }
138
+ print "SECpack has #{secpack.body.length} bytes, runs 1020 instructions and produces 470 bytes\n"
139
+ do_timing { @tem.execute secpack }
140
+ end
141
+ end
@@ -0,0 +1,142 @@
1
+ class TemTimings
2
+ def time_vm_perf_bound
3
+ secpack = @tem.assemble { |s|
4
+ s.ldwc 48 * 10
5
+ s.outnew
6
+
7
+ s.ldwc 10 # number of times to loop (4 instructions in loop)
8
+ s.label :main_loop
9
+
10
+ # arithmetic (18 instructions, 10 bytes out)
11
+ s.ldwc 0x1234
12
+ s.ldwc 0x5678
13
+ s.dupn :n => 2
14
+ s.add
15
+ s.outw
16
+ s.sub
17
+ s.outw
18
+ s.ldwc 0x0155
19
+ s.ldwc 0x02AA
20
+ s.mul
21
+ s.outw
22
+ s.ldwc 0x390C
23
+ s.ldwc 0x00AA
24
+ s.dupn :n => 2
25
+ s.div
26
+ s.outw
27
+ s.mod
28
+ s.outw
29
+
30
+ # memory (28 instructions, 16 bytes out)
31
+ s.ldwc 0x55AA
32
+ s.stw :clobber
33
+ s.ldb :clobber
34
+ s.outw
35
+ s.ldw :clobber
36
+ s.outw
37
+ s.ldbc 0xA5 - (1 << 8)
38
+ s.stb :clobber
39
+ s.ldw :clobber
40
+ s.outw
41
+ s.ldwc :clobber2
42
+ s.dupn :n => 1
43
+ s.dupn :n => 2
44
+ s.ldwc 0x9966 - (1 << 16)
45
+ s.stwv
46
+ s.ldbv
47
+ s.outw
48
+ s.ldbc 0x98 - (1 << 8)
49
+ s.stbv
50
+ s.ldwv
51
+ s.outw
52
+ s.ldwc 0x1122
53
+ s.ldwc 0x3344
54
+ s.ldwc 0x5566
55
+ s.flipn :n => 3
56
+ s.outw
57
+ s.outw
58
+ s.outw
59
+
60
+ # memory comparisons (22 instructions, 16 bytes out)
61
+ s.ldwc :const => 6
62
+ s.ldwc :cmp_med
63
+ s.ldwc :cmp_lo
64
+ s.mcmpvb
65
+ s.outw
66
+ s.mcmpfxb :size => 6, :op1 => :cmp_med, :op2 => :cmp_hi
67
+ s.outw
68
+ s.ldwc :const => 4
69
+ s.ldwc :cmp_lo
70
+ s.ldwc :cmp_med
71
+ s.mcmpvb
72
+ s.outw
73
+ s.mcfxb :size => 6, :from => :cmp_hi, :to => :copy_buf
74
+ s.pop
75
+ s.outfxb :size => 6, :from => :copy_buf
76
+ s.ldwc :const => 4
77
+ s.ldwc :cmp_hi
78
+ s.ldwc :copy_buf2
79
+ s.mcvb
80
+ s.pop
81
+ s.outfxb :size => 4, :from => :copy_buf2
82
+
83
+ # jumps (30 instructions, 6 bytes) from 6 * (5 instructions, 1 byte)
84
+ failed = 0xFA - (1 << 8)
85
+ [
86
+ [:ja, [1, 1, failed]],
87
+ [:jae, [1, 4, failed]],
88
+ [:jb, [1, failed, 7]],
89
+ [:jbe, [1, failed, 10]],
90
+ [:jz, [1, failed, 13]],
91
+ [:jne, [1, 16, failed]],
92
+ ].each do |op_line|
93
+ op = op_line.shift
94
+ op_line.each_index do |i|
95
+ then_label = "#{op}_l#{i}_t".to_sym
96
+ out_label = "#{op}_l#{i}_o".to_sym
97
+
98
+ s.ldbc op_line[i][0]
99
+ s.send op, :to => then_label
100
+ s.ldbc op_line[i][2]
101
+ s.jmp :to => out_label
102
+ s.label then_label
103
+ s.ldbc op_line[i][1]
104
+ s.label out_label
105
+ s.outb
106
+ end
107
+ end
108
+
109
+ # loop back
110
+ s.ldbc 1
111
+ s.sub
112
+ s.dupn :n => 1
113
+ s.ja :to => :main_loop
114
+
115
+ s.label :done
116
+ s.halt
117
+
118
+ s.label :cmp_lo
119
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2C, 0x12]
120
+ s.label :cmp_med
121
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2D, 0x11]
122
+ s.label :cmp_hi
123
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
124
+ s.label :cmp_hi2
125
+ s.immed :ubyte, [0xA3, 0x2C, 0x51, 0x63, 0x2E, 0x10]
126
+ s.label :copy_buf
127
+ s.filler :ubyte, 6
128
+ s.label :copy_buf2
129
+ s.filler :ubyte, 4
130
+ s.label :clobber
131
+ s.filler :ubyte, 2
132
+ s.label :clobber2
133
+ s.filler :ubyte, 2
134
+ s.label :stack
135
+ s.stack
136
+ s.extra 24
137
+ }
138
+ secpack.seal @tem.pubek, :done, :stack
139
+ print "SECpack has #{secpack.body.length} bytes, runs 1020 instructions and produces 470 bytes\n"
140
+ do_timing { @tem.execute secpack }
141
+ end
142
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tem_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Victor Costan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-11 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: smartcard
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.2
23
+ version:
24
+ description: TEM (Trusted Execution Module) driver, written in and for ruby.
25
+ email: victor@costan.us
26
+ executables:
27
+ - tem_stat
28
+ - tem_ca
29
+ - tem_irb
30
+ - tem_bench
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - bin/tem_stat
35
+ - bin/tem_ca
36
+ - bin/tem_irb
37
+ - bin/tem_bench
38
+ - LICENSE
39
+ - lib/scard/java_card.rb
40
+ - lib/scard/jcop_remote_terminal.rb
41
+ - lib/scard/pcsc_terminal.rb
42
+ - lib/tem_ruby.rb
43
+ - lib/tem/tag.rb
44
+ - lib/tem/keys.rb
45
+ - lib/tem/sec_opcodes.rb
46
+ - lib/tem/_cert.rb
47
+ - lib/tem/buffers.rb
48
+ - lib/tem/toolkit.rb
49
+ - lib/tem/tem.rb
50
+ - lib/tem/abi.rb
51
+ - lib/tem/crypto_abi.rb
52
+ - lib/tem/ca.rb
53
+ - lib/tem/secpack.rb
54
+ - lib/tem/sec_exec_error.rb
55
+ - lib/tem/sec_assembler.rb
56
+ - lib/tem/lifecycle.rb
57
+ - lib/tem/ecert.rb
58
+ - lib/tem/hive.rb
59
+ - lib/tem/seclosures.rb
60
+ - README
61
+ - CHANGELOG
62
+ files:
63
+ - bin/tem_stat
64
+ - bin/tem_ca
65
+ - bin/tem_irb
66
+ - bin/tem_bench
67
+ - Manifest
68
+ - LICENSE
69
+ - test/test_driver.rb
70
+ - test/test_tem.rb
71
+ - test/test_exceptions.rb
72
+ - test/_test_cert.rb
73
+ - timings/vm_perf.rb
74
+ - timings/devchip_decrypt.rb
75
+ - timings/simple_apdu.rb
76
+ - timings/post_buffer.rb
77
+ - timings/blank_bound_secpack.rb
78
+ - timings/vm_perf_bound.rb
79
+ - timings/timings.rb
80
+ - timings/blank_sec.rb
81
+ - lib/scard/java_card.rb
82
+ - lib/scard/jcop_remote_terminal.rb
83
+ - lib/scard/pcsc_terminal.rb
84
+ - lib/tem_ruby.rb
85
+ - lib/tem/tag.rb
86
+ - lib/tem/keys.rb
87
+ - lib/tem/sec_opcodes.rb
88
+ - lib/tem/_cert.rb
89
+ - lib/tem/buffers.rb
90
+ - lib/tem/toolkit.rb
91
+ - lib/tem/tem.rb
92
+ - lib/tem/abi.rb
93
+ - lib/tem/crypto_abi.rb
94
+ - lib/tem/ca.rb
95
+ - lib/tem/secpack.rb
96
+ - lib/tem/sec_exec_error.rb
97
+ - lib/tem/sec_assembler.rb
98
+ - lib/tem/lifecycle.rb
99
+ - lib/tem/ecert.rb
100
+ - lib/tem/hive.rb
101
+ - lib/tem/seclosures.rb
102
+ - README
103
+ - CHANGELOG
104
+ - dev_ca/ca_cert.cer
105
+ - dev_ca/ca_cert.pem
106
+ - dev_ca/ca_key.pem
107
+ - dev_ca/config.yml
108
+ - tem_ruby.gemspec
109
+ has_rdoc: true
110
+ homepage: http://tem.rubyforge.org
111
+ post_install_message:
112
+ rdoc_options:
113
+ - --line-numbers
114
+ - --inline-source
115
+ - --title
116
+ - Tem_ruby
117
+ - --main
118
+ - README
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: "0"
126
+ version:
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ version:
133
+ requirements: []
134
+
135
+ rubyforge_project: tem
136
+ rubygems_version: 1.1.1
137
+ signing_key:
138
+ specification_version: 2
139
+ summary: TEM (Trusted Execution Module) driver, written in and for ruby.
140
+ test_files:
141
+ - test/test_driver.rb
142
+ - test/test_tem.rb
143
+ - test/test_exceptions.rb