tem_ruby 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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