tem_ruby 0.9.2 → 0.10.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.
data/timings/timings.rb CHANGED
@@ -10,14 +10,7 @@ require 'timings/vm_perf_bound.rb'
10
10
 
11
11
  class TemTimings
12
12
  def setup
13
- @terminal = Tem::SCard::JCOPRemoteTerminal.new
14
- unless @terminal.connect
15
- @terminal.disconnect
16
- @terminal = Tem::SCard::PCSCTerminal.new
17
- @terminal.connect
18
- end
19
- @javacard = Tem::SCard::JavaCard.new(@terminal)
20
- @tem = Tem::Session.new(@javacard)
13
+ @tem = Tem.auto_tem
21
14
 
22
15
  @tem.kill
23
16
  @tem.activate
@@ -26,7 +19,7 @@ class TemTimings
26
19
 
27
20
  def teardown
28
21
  @tem.kill
29
- @terminal.disconnect unless @terminal.nil?
22
+ @tem.disconnect if @tem
30
23
  end
31
24
 
32
25
  def do_timing
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.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Costan
@@ -9,11 +9,12 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-13 00:00:00 -04:00
12
+ date: 2009-04-08 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: smartcard
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
@@ -21,90 +22,118 @@ dependencies:
21
22
  - !ruby/object:Gem::Version
22
23
  version: 0.3.0
23
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: echoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
24
35
  description: TEM (Trusted Execution Module) driver, written in and for ruby.
25
36
  email: victor@costan.us
26
37
  executables:
27
- - tem_stat
38
+ - tem_bench
28
39
  - tem_ca
29
40
  - tem_irb
30
- - tem_bench
41
+ - tem_proxy
42
+ - tem_stat
31
43
  extensions: []
32
44
 
33
45
  extra_rdoc_files:
34
- - bin/tem_stat
46
+ - bin/tem_bench
35
47
  - bin/tem_ca
36
48
  - 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
49
+ - bin/tem_proxy
50
+ - bin/tem_stat
51
+ - CHANGELOG
46
52
  - lib/tem/_cert.rb
47
- - lib/tem/buffers.rb
48
- - lib/tem/toolkit.rb
49
- - lib/tem/tem.rb
50
53
  - lib/tem/abi.rb
51
- - lib/tem/crypto_abi.rb
54
+ - lib/tem/auto_conf.rb
55
+ - lib/tem/buffers.rb
52
56
  - 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/crypto_abi.rb
57
58
  - lib/tem/ecert.rb
58
59
  - lib/tem/hive.rb
60
+ - lib/tem/keys.rb
61
+ - lib/tem/lifecycle.rb
62
+ - lib/tem/sec_assembler.rb
63
+ - lib/tem/sec_exec_error.rb
64
+ - lib/tem/sec_opcodes.rb
59
65
  - lib/tem/seclosures.rb
66
+ - lib/tem/secpack.rb
67
+ - lib/tem/tag.rb
68
+ - lib/tem/tem.rb
69
+ - lib/tem/toolkit.rb
70
+ - lib/tem/transport/auto_configurator.rb
71
+ - lib/tem/transport/java_card_mixin.rb
72
+ - lib/tem/transport/jcop_remote_protocol.rb
73
+ - lib/tem/transport/jcop_remote_server.rb
74
+ - lib/tem/transport/jcop_remote_transport.rb
75
+ - lib/tem/transport/pcsc_transport.rb
76
+ - lib/tem/transport/transport.rb
77
+ - lib/tem_ruby.rb
78
+ - LICENSE
60
79
  - README
61
- - CHANGELOG
62
80
  files:
63
- - bin/tem_stat
81
+ - bin/tem_bench
64
82
  - bin/tem_ca
65
83
  - 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
84
+ - bin/tem_proxy
85
+ - bin/tem_stat
86
+ - CHANGELOG
87
+ - dev_ca/ca_cert.cer
88
+ - dev_ca/ca_cert.pem
89
+ - dev_ca/ca_key.pem
90
+ - dev_ca/config.yml
88
91
  - lib/tem/_cert.rb
89
- - lib/tem/buffers.rb
90
- - lib/tem/toolkit.rb
91
- - lib/tem/tem.rb
92
92
  - lib/tem/abi.rb
93
- - lib/tem/crypto_abi.rb
93
+ - lib/tem/auto_conf.rb
94
+ - lib/tem/buffers.rb
94
95
  - 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
96
+ - lib/tem/crypto_abi.rb
99
97
  - lib/tem/ecert.rb
100
98
  - lib/tem/hive.rb
99
+ - lib/tem/keys.rb
100
+ - lib/tem/lifecycle.rb
101
+ - lib/tem/sec_assembler.rb
102
+ - lib/tem/sec_exec_error.rb
103
+ - lib/tem/sec_opcodes.rb
101
104
  - lib/tem/seclosures.rb
105
+ - lib/tem/secpack.rb
106
+ - lib/tem/tag.rb
107
+ - lib/tem/tem.rb
108
+ - lib/tem/toolkit.rb
109
+ - lib/tem/transport/auto_configurator.rb
110
+ - lib/tem/transport/java_card_mixin.rb
111
+ - lib/tem/transport/jcop_remote_protocol.rb
112
+ - lib/tem/transport/jcop_remote_server.rb
113
+ - lib/tem/transport/jcop_remote_transport.rb
114
+ - lib/tem/transport/pcsc_transport.rb
115
+ - lib/tem/transport/transport.rb
116
+ - lib/tem_ruby.rb
117
+ - LICENSE
118
+ - Manifest
119
+ - Rakefile
102
120
  - 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
121
+ - test/_test_cert.rb
122
+ - test/tem_test_case.rb
123
+ - test/test_driver.rb
124
+ - test/test_exceptions.rb
125
+ - test/test_tem.rb
126
+ - test/transport/test_auto_configurator.rb
127
+ - test/transport/test_java_card_mixin.rb
128
+ - test/transport/test_jcop_remote.rb
129
+ - timings/blank_bound_secpack.rb
130
+ - timings/blank_sec.rb
131
+ - timings/devchip_decrypt.rb
132
+ - timings/post_buffer.rb
133
+ - timings/simple_apdu.rb
134
+ - timings/timings.rb
135
+ - timings/vm_perf.rb
136
+ - timings/vm_perf_bound.rb
108
137
  - tem_ruby.gemspec
109
138
  has_rdoc: true
110
139
  homepage: http://tem.rubyforge.org
@@ -128,16 +157,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
157
  requirements:
129
158
  - - ">="
130
159
  - !ruby/object:Gem::Version
131
- version: "0"
160
+ version: "1.2"
132
161
  version:
133
162
  requirements: []
134
163
 
135
164
  rubyforge_project: tem
136
- rubygems_version: 1.1.1
165
+ rubygems_version: 1.3.1
137
166
  signing_key:
138
167
  specification_version: 2
139
168
  summary: TEM (Trusted Execution Module) driver, written in and for ruby.
140
169
  test_files:
141
170
  - test/test_driver.rb
142
- - test/test_tem.rb
143
171
  - test/test_exceptions.rb
172
+ - test/test_tem.rb
173
+ - test/transport/test_auto_configurator.rb
174
+ - test/transport/test_java_card_mixin.rb
175
+ - test/transport/test_jcop_remote.rb
@@ -1,31 +0,0 @@
1
- class Tem::SCard::JavaCard
2
- attr_accessor :terminal
3
-
4
- def initialize(_terminal = nil)
5
- @terminal = _terminal
6
- end
7
-
8
- def select_applet(aid)
9
- result = @terminal.issue_apdu [0x00, 0xA4, 0x04, 0x00, aid.length, aid].flatten
10
- (result == [0x90, 0x00])
11
- end
12
-
13
- def issue_apdu(apdu)
14
- @terminal.issue_apdu apdu
15
- end
16
-
17
- # returns the failure code of an operation (success would be 0x9000)
18
- # returns nil for success
19
- def failure_code(reply_apdu)
20
- status = reply_apdu[-2] * 256 + reply_apdu.length[-1]
21
- return (status == 0x9000) ? nil : status
22
- end
23
-
24
- def reply_data(reply_apdu)
25
- return reply_apdu[0...-2]
26
- end
27
-
28
- def install_applet(cap_contents)
29
- raise "Not implemeted; it'd be nice though, right?"
30
- end
31
- end
@@ -1,52 +0,0 @@
1
- require 'socket'
2
- class Tem::SCard::JCOPRemoteTerminal
3
- def initialize(remote_host = 'localhost', remote_port = 8050)
4
- @remote_host = remote_host
5
- @remote_port = remote_port
6
- @sockaddr = Socket.pack_sockaddr_in(@remote_port, @remote_host)
7
- @socket = nil
8
- end
9
-
10
- def send_message(payload, message_type = 1, node_address = 0)
11
- @socket.send [message_type, node_address, payload.length / 256, payload.length % 256, payload].flatten.pack('C*'), 0
12
- end
13
-
14
- def receive_message
15
- header = @socket.recv(4)
16
- message_type, node_address, payload_length = *header.unpack('CCn')
17
- return @socket.recv(payload_length).unpack('C*')
18
- end
19
-
20
- def connect
21
- begin
22
- # connect to the terminal
23
- @socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
24
- @socket.connect(@sockaddr)
25
-
26
- # wait for the card to be inserted
27
- send_message [0, 1, 0, 0], 0
28
- receive_message # ATR should come here, but who cares
29
- rescue
30
- @socket = nil
31
- return false
32
- end
33
- return true
34
- end
35
-
36
- def to_s
37
- "#<JCOP Remote Terminal: disconnected>" if @socket.nil?
38
- "#<JCOP Remote Terminal: #{@remote_host}:#{@remote_port}>"
39
- end
40
-
41
- def disconnect
42
- unless @socket.nil?
43
- @socket.close
44
- @socket = nil
45
- end
46
- end
47
-
48
- def issue_apdu(apdu)
49
- send_message apdu
50
- return receive_message
51
- end
52
- end
@@ -1,83 +0,0 @@
1
- require 'pp'
2
-
3
- class Tem::SCard::PCSCTerminal
4
- include Smartcard
5
-
6
- @@xmit_iorequest = {
7
- Smartcard::PCSC::PROTOCOL_T0 => Smartcard::PCSC::IOREQUEST_T0,
8
- Smartcard::PCSC::PROTOCOL_T1 => Smartcard::PCSC::IOREQUEST_T1,
9
- }
10
-
11
- def initialize
12
- @context = nil
13
- @readers = nil
14
- @card = nil
15
- end
16
-
17
- def connect
18
- begin
19
- @context = PCSC::Context.new(PCSC::SCOPE_SYSTEM) if @context.nil?
20
-
21
- # get the first reader
22
- @readers = @context.list_readers nil
23
- @reader_name = @readers.first
24
-
25
- # get the reader's status
26
- reader_states = PCSC::ReaderStates.new(1)
27
- reader_states.set_reader_name_of!(0, @reader_name)
28
- reader_states.set_current_state_of!(0, PCSC::STATE_UNKNOWN)
29
- @context.get_status_change reader_states, 100
30
- reader_states.acknowledge_events!
31
-
32
- # prompt for card insertion unless that already happened
33
- if (reader_states.current_state_of(0) & PCSC::STATE_PRESENT) == 0
34
- puts "Please insert TEM card in reader #{@reader_name}\n"
35
- while (reader_states.current_state_of(0) & PCSC::STATE_PRESENT) == 0 do
36
- @context.get_status_change reader_states, PCSC::INFINITE_TIMEOUT
37
- reader_states.acknowledge_events!
38
- end
39
- puts "Card detected\n"
40
- end
41
-
42
- # connect to card
43
- @card = PCSC::Card.new(@context, @reader_name, PCSC::SHARE_EXCLUSIVE, PCSC::PROTOCOL_ANY)
44
-
45
- # build the transmit / receive IoRequests
46
- status = @card.status
47
- @xmit_ioreq = @@xmit_iorequest[status[:protocol]]
48
- if RUBY_PLATFORM =~ /win/ and (not RUBY_PLATFORM =~ /darwin/)
49
- @recv_ioreq = nil
50
- else
51
- @recv_ioreq = PCSC::IoRequest.new
52
- end
53
- rescue
54
- return false
55
- end
56
- end
57
-
58
- def to_s
59
- "#<PC/SC Terminal: disconnected>" if @card.nil?
60
- "#<PC/SC Terminal: #{@reader_name}>"
61
- end
62
-
63
- def disconnect
64
- unless @card.nil?
65
- @card.disconnect PCSC::DISPOSITION_LEAVE unless @card.nil?
66
- @card = nil
67
- end
68
- unless @context.nil?
69
- @context.release
70
- @context = nil
71
- end
72
- end
73
-
74
- def issue_apdu(apdu)
75
- xmit_apdu_string = apdu.map { |byte| byte.chr }.join('')
76
- result_string = @card.transmit xmit_apdu_string, @xmit_ioreq, @recv_ioreq
77
- return (0...(result_string.length)).map { |i| result_string[i].to_i }
78
- end
79
- end
80
-
81
- # for compatibility with old source code
82
- class Tem::SCard::Terminal < Tem::SCard::PCSCTerminal
83
- end