tem_ruby 0.11.3 → 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest +1 -10
  3. data/Rakefile +1 -1
  4. data/bin/tem_proxy +4 -4
  5. data/lib/tem/apdus/buffers.rb +15 -8
  6. data/lib/tem/apdus/keys.rb +11 -5
  7. data/lib/tem/apdus/lifecycle.rb +10 -3
  8. data/lib/tem/apdus/tag.rb +10 -3
  9. data/lib/tem/auto_conf.rb +8 -5
  10. data/lib/tem/benchmarks/benchmarks.rb +7 -0
  11. data/lib/tem/benchmarks/blank_bound_secpack.rb +10 -0
  12. data/lib/tem/benchmarks/blank_sec.rb +14 -0
  13. data/lib/tem/benchmarks/devchip_decrypt.rb +12 -0
  14. data/lib/tem/benchmarks/post_buffer.rb +8 -0
  15. data/lib/tem/benchmarks/simple_apdu.rb +11 -0
  16. data/lib/tem/benchmarks/vm_perf.rb +11 -0
  17. data/lib/tem/benchmarks/vm_perf_bound.rb +12 -0
  18. data/lib/tem/builders/abi.rb +19 -13
  19. data/lib/tem/builders/assembler.rb +23 -16
  20. data/lib/tem/builders/crypto.rb +9 -3
  21. data/lib/tem/builders/isa.rb +10 -4
  22. data/lib/tem/definitions/abi.rb +9 -0
  23. data/lib/tem/definitions/assembler.rb +10 -0
  24. data/lib/tem/definitions/isa.rb +10 -0
  25. data/lib/tem/seclosures.rb +5 -5
  26. data/lib/tem/tem.rb +2 -1
  27. data/lib/tem_ruby.rb +0 -12
  28. data/tem_ruby.gemspec +9 -9
  29. data/test/builders/test_abi_builder.rb +4 -2
  30. data/test/tem_test_case.rb +3 -2
  31. data/test/tem_unit/test_tem_alu.rb +1 -1
  32. data/test/tem_unit/test_tem_bound_secpack.rb +1 -1
  33. data/test/tem_unit/test_tem_branching.rb +1 -1
  34. data/test/tem_unit/test_tem_crypto_asymmetric.rb +1 -1
  35. data/test/tem_unit/test_tem_crypto_hash.rb +1 -1
  36. data/test/tem_unit/test_tem_crypto_pstore.rb +1 -1
  37. data/test/tem_unit/test_tem_crypto_random.rb +1 -1
  38. data/test/tem_unit/test_tem_emit.rb +1 -1
  39. data/test/tem_unit/test_tem_memory.rb +1 -1
  40. data/test/tem_unit/test_tem_memory_compare.rb +1 -1
  41. data/test/tem_unit/test_tem_output.rb +1 -1
  42. data/test/tem_unit/test_tem_yaml_secpack.rb +4 -3
  43. data/test/test_auto_conf.rb +2 -0
  44. data/test/test_driver.rb +2 -1
  45. data/test/test_exceptions.rb +12 -6
  46. metadata +5 -24
  47. data/lib/tem/transport/auto_configurator.rb +0 -87
  48. data/lib/tem/transport/java_card_mixin.rb +0 -99
  49. data/lib/tem/transport/jcop_remote_protocol.rb +0 -59
  50. data/lib/tem/transport/jcop_remote_server.rb +0 -171
  51. data/lib/tem/transport/jcop_remote_transport.rb +0 -65
  52. data/lib/tem/transport/pcsc_transport.rb +0 -87
  53. data/lib/tem/transport/transport.rb +0 -10
  54. data/test/transport/test_auto_configurator.rb +0 -114
  55. data/test/transport/test_java_card_mixin.rb +0 -90
  56. data/test/transport/test_jcop_remote.rb +0 -82
@@ -1,3 +1,13 @@
1
+ # The TEM's assembly language definition.
2
+ #
3
+ # This code is the official specification, because Victor likes executable
4
+ # specifications.
5
+ #
6
+ # Author:: Victor Costan
7
+ # Copyright:: Copyright (C) 2007 Massachusetts Institute of Technology
8
+ # License:: MIT
9
+
10
+
1
11
  class Tem::Assembler
2
12
  Tem::Builders::Assembler.define_assembler self do |assembler|
3
13
  assembler.target_isa Tem::Isa
@@ -1,3 +1,13 @@
1
+ # The TEM's ISA (Instruction Set Architecture) definition.
2
+ #
3
+ # This code is the official specification, because Victor likes executable
4
+ # specifications.
5
+ #
6
+ # Author:: Victor Costan
7
+ # Copyright:: Copyright (C) 2007 Massachusetts Institute of Technology
8
+ # License:: MIT
9
+
10
+
1
11
  module Tem::Isa
2
12
  Tem::Builders::Isa.define_isa self, Tem::Abi,
3
13
  :opcode_type => :tem_ubyte do |isa|
@@ -14,7 +14,7 @@ module Tem::SeClosures
14
14
 
15
15
  def sec_trace
16
16
  #begin
17
- trace = @transport.applet_apdu! :ins => 0x54
17
+ trace = @transport.iso_apdu! :ins => 0x54
18
18
  if trace.length > 2
19
19
  case read_tem_short(trace, 0) # trace version
20
20
  when 1
@@ -31,20 +31,20 @@ module Tem::SeClosures
31
31
  def solve_psfault
32
32
  # TODO: better strategy, lol
33
33
  next_cell = rand(16)
34
- @transport.applet_apdu! :ins => 0x53, :p12 => to_tem_ushort(next_cell)
34
+ @transport.iso_apdu! :ins => 0x53, :p12 => to_tem_ushort(next_cell)
35
35
  end
36
36
 
37
37
  def execute(secpack, key_id = 0)
38
38
  # load SECpack
39
39
  buffer_id = post_buffer(secpack.tem_formatted_body)
40
- response = @transport.applet_apdu! :ins => 0x50, :p1 => buffer_id,
40
+ response = @transport.iso_apdu! :ins => 0x50, :p1 => buffer_id,
41
41
  :p2 => key_id
42
42
  tem_secpack_error(response) if read_tem_byte(response, 0) != 1
43
43
 
44
44
  # execute SEC
45
45
  sec_exception = nil
46
46
  loop do
47
- response = @transport.applet_apdu! :ins => 0x52
47
+ response = @transport.iso_apdu! :ins => 0x52
48
48
  sec_status = read_tem_byte(response, 0)
49
49
  case sec_status
50
50
  when 2 # success
@@ -64,7 +64,7 @@ module Tem::SeClosures
64
64
  end
65
65
 
66
66
  # unbind SEC
67
- response = @transport.applet_apdu! :ins => 0x51
67
+ response = @transport.iso_apdu! :ins => 0x51
68
68
  raise sec_exception if sec_exception
69
69
  buffer_id = read_tem_byte(response, 0)
70
70
  buffer_length = read_tem_short(response, 1)
data/lib/tem/tem.rb CHANGED
@@ -16,7 +16,8 @@ class Tem::Session
16
16
 
17
17
  def initialize(transport)
18
18
  @transport = transport
19
- @transport.select_applet CAPPLET_AID
19
+ @transport.extend Smartcard::Gp::GpCardMixin
20
+ @transport.select_application CAPPLET_AID
20
21
  end
21
22
 
22
23
  def disconnect
data/lib/tem_ruby.rb CHANGED
@@ -6,18 +6,6 @@ require 'smartcard'
6
6
  module Tem
7
7
  end
8
8
 
9
- # :nodoc:
10
- module Tem::Transport
11
- end
12
-
13
- require 'tem/transport/transport.rb'
14
- require 'tem/transport/java_card_mixin.rb'
15
- require 'tem/transport/pcsc_transport.rb'
16
- require 'tem/transport/jcop_remote_protocol.rb'
17
- require 'tem/transport/jcop_remote_transport.rb'
18
- require 'tem/transport/jcop_remote_server.rb'
19
- require 'tem/transport/auto_configurator.rb'
20
-
21
9
  require 'tem/keys/key.rb'
22
10
  require 'tem/keys/asymmetric.rb'
23
11
  require 'tem/keys/symmetric.rb'
data/tem_ruby.gemspec CHANGED
@@ -2,34 +2,34 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{tem_ruby}
5
- s.version = "0.11.3"
5
+ s.version = "0.11.4"
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-06-04}
9
+ s.date = %q{2009-08-19}
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"]
13
- s.extra_rdoc_files = ["bin/tem_bench", "bin/tem_ca", "bin/tem_irb", "bin/tem_proxy", "bin/tem_stat", "CHANGELOG", "lib/tem/_cert.rb", "lib/tem/apdus/buffers.rb", "lib/tem/apdus/keys.rb", "lib/tem/apdus/lifecycle.rb", "lib/tem/apdus/tag.rb", "lib/tem/auto_conf.rb", "lib/tem/benchmarks/benchmarks.rb", "lib/tem/benchmarks/blank_bound_secpack.rb", "lib/tem/benchmarks/blank_sec.rb", "lib/tem/benchmarks/devchip_decrypt.rb", "lib/tem/benchmarks/post_buffer.rb", "lib/tem/benchmarks/simple_apdu.rb", "lib/tem/benchmarks/vm_perf.rb", "lib/tem/benchmarks/vm_perf_bound.rb", "lib/tem/builders/abi.rb", "lib/tem/builders/assembler.rb", "lib/tem/builders/crypto.rb", "lib/tem/builders/isa.rb", "lib/tem/ca.rb", "lib/tem/definitions/abi.rb", "lib/tem/definitions/assembler.rb", "lib/tem/definitions/isa.rb", "lib/tem/ecert.rb", "lib/tem/hive.rb", "lib/tem/keys/asymmetric.rb", "lib/tem/keys/key.rb", "lib/tem/keys/symmetric.rb", "lib/tem/sec_exec_error.rb", "lib/tem/seclosures.rb", "lib/tem/secpack.rb", "lib/tem/tem.rb", "lib/tem/toolkit.rb", "lib/tem/transport/auto_configurator.rb", "lib/tem/transport/java_card_mixin.rb", "lib/tem/transport/jcop_remote_protocol.rb", "lib/tem/transport/jcop_remote_server.rb", "lib/tem/transport/jcop_remote_transport.rb", "lib/tem/transport/pcsc_transport.rb", "lib/tem/transport/transport.rb", "lib/tem_ruby.rb", "LICENSE", "README"]
14
- s.files = ["bin/tem_bench", "bin/tem_ca", "bin/tem_irb", "bin/tem_proxy", "bin/tem_stat", "CHANGELOG", "dev_ca/ca_cert.cer", "dev_ca/ca_cert.pem", "dev_ca/ca_key.pem", "dev_ca/config.yml", "lib/tem/_cert.rb", "lib/tem/apdus/buffers.rb", "lib/tem/apdus/keys.rb", "lib/tem/apdus/lifecycle.rb", "lib/tem/apdus/tag.rb", "lib/tem/auto_conf.rb", "lib/tem/benchmarks/benchmarks.rb", "lib/tem/benchmarks/blank_bound_secpack.rb", "lib/tem/benchmarks/blank_sec.rb", "lib/tem/benchmarks/devchip_decrypt.rb", "lib/tem/benchmarks/post_buffer.rb", "lib/tem/benchmarks/simple_apdu.rb", "lib/tem/benchmarks/vm_perf.rb", "lib/tem/benchmarks/vm_perf_bound.rb", "lib/tem/builders/abi.rb", "lib/tem/builders/assembler.rb", "lib/tem/builders/crypto.rb", "lib/tem/builders/isa.rb", "lib/tem/ca.rb", "lib/tem/definitions/abi.rb", "lib/tem/definitions/assembler.rb", "lib/tem/definitions/isa.rb", "lib/tem/ecert.rb", "lib/tem/hive.rb", "lib/tem/keys/asymmetric.rb", "lib/tem/keys/key.rb", "lib/tem/keys/symmetric.rb", "lib/tem/sec_exec_error.rb", "lib/tem/seclosures.rb", "lib/tem/secpack.rb", "lib/tem/tem.rb", "lib/tem/toolkit.rb", "lib/tem/transport/auto_configurator.rb", "lib/tem/transport/java_card_mixin.rb", "lib/tem/transport/jcop_remote_protocol.rb", "lib/tem/transport/jcop_remote_server.rb", "lib/tem/transport/jcop_remote_transport.rb", "lib/tem/transport/pcsc_transport.rb", "lib/tem/transport/transport.rb", "lib/tem_ruby.rb", "LICENSE", "Manifest", "Rakefile", "README", "test/_test_cert.rb", "test/builders/test_abi_builder.rb", "test/tem_test_case.rb", "test/tem_unit/test_tem_alu.rb", "test/tem_unit/test_tem_bound_secpack.rb", "test/tem_unit/test_tem_branching.rb", "test/tem_unit/test_tem_crypto_asymmetric.rb", "test/tem_unit/test_tem_crypto_hash.rb", "test/tem_unit/test_tem_crypto_pstore.rb", "test/tem_unit/test_tem_crypto_random.rb", "test/tem_unit/test_tem_emit.rb", "test/tem_unit/test_tem_memory.rb", "test/tem_unit/test_tem_memory_compare.rb", "test/tem_unit/test_tem_output.rb", "test/tem_unit/test_tem_yaml_secpack.rb", "test/test_driver.rb", "test/test_exceptions.rb", "test/transport/test_auto_configurator.rb", "test/transport/test_java_card_mixin.rb", "test/transport/test_jcop_remote.rb", "tem_ruby.gemspec", "test/test_auto_conf.rb"]
13
+ s.extra_rdoc_files = ["bin/tem_bench", "bin/tem_ca", "bin/tem_irb", "bin/tem_proxy", "bin/tem_stat", "CHANGELOG", "lib/tem/_cert.rb", "lib/tem/apdus/buffers.rb", "lib/tem/apdus/keys.rb", "lib/tem/apdus/lifecycle.rb", "lib/tem/apdus/tag.rb", "lib/tem/auto_conf.rb", "lib/tem/benchmarks/benchmarks.rb", "lib/tem/benchmarks/blank_bound_secpack.rb", "lib/tem/benchmarks/blank_sec.rb", "lib/tem/benchmarks/devchip_decrypt.rb", "lib/tem/benchmarks/post_buffer.rb", "lib/tem/benchmarks/simple_apdu.rb", "lib/tem/benchmarks/vm_perf.rb", "lib/tem/benchmarks/vm_perf_bound.rb", "lib/tem/builders/abi.rb", "lib/tem/builders/assembler.rb", "lib/tem/builders/crypto.rb", "lib/tem/builders/isa.rb", "lib/tem/ca.rb", "lib/tem/definitions/abi.rb", "lib/tem/definitions/assembler.rb", "lib/tem/definitions/isa.rb", "lib/tem/ecert.rb", "lib/tem/hive.rb", "lib/tem/keys/asymmetric.rb", "lib/tem/keys/key.rb", "lib/tem/keys/symmetric.rb", "lib/tem/sec_exec_error.rb", "lib/tem/seclosures.rb", "lib/tem/secpack.rb", "lib/tem/tem.rb", "lib/tem/toolkit.rb", "lib/tem_ruby.rb", "LICENSE", "README"]
14
+ s.files = ["bin/tem_bench", "bin/tem_ca", "bin/tem_irb", "bin/tem_proxy", "bin/tem_stat", "CHANGELOG", "dev_ca/ca_cert.cer", "dev_ca/ca_cert.pem", "dev_ca/ca_key.pem", "dev_ca/config.yml", "lib/tem/_cert.rb", "lib/tem/apdus/buffers.rb", "lib/tem/apdus/keys.rb", "lib/tem/apdus/lifecycle.rb", "lib/tem/apdus/tag.rb", "lib/tem/auto_conf.rb", "lib/tem/benchmarks/benchmarks.rb", "lib/tem/benchmarks/blank_bound_secpack.rb", "lib/tem/benchmarks/blank_sec.rb", "lib/tem/benchmarks/devchip_decrypt.rb", "lib/tem/benchmarks/post_buffer.rb", "lib/tem/benchmarks/simple_apdu.rb", "lib/tem/benchmarks/vm_perf.rb", "lib/tem/benchmarks/vm_perf_bound.rb", "lib/tem/builders/abi.rb", "lib/tem/builders/assembler.rb", "lib/tem/builders/crypto.rb", "lib/tem/builders/isa.rb", "lib/tem/ca.rb", "lib/tem/definitions/abi.rb", "lib/tem/definitions/assembler.rb", "lib/tem/definitions/isa.rb", "lib/tem/ecert.rb", "lib/tem/hive.rb", "lib/tem/keys/asymmetric.rb", "lib/tem/keys/key.rb", "lib/tem/keys/symmetric.rb", "lib/tem/sec_exec_error.rb", "lib/tem/seclosures.rb", "lib/tem/secpack.rb", "lib/tem/tem.rb", "lib/tem/toolkit.rb", "lib/tem_ruby.rb", "LICENSE", "Manifest", "Rakefile", "README", "test/_test_cert.rb", "test/builders/test_abi_builder.rb", "test/tem_test_case.rb", "test/tem_unit/test_tem_alu.rb", "test/tem_unit/test_tem_bound_secpack.rb", "test/tem_unit/test_tem_branching.rb", "test/tem_unit/test_tem_crypto_asymmetric.rb", "test/tem_unit/test_tem_crypto_hash.rb", "test/tem_unit/test_tem_crypto_pstore.rb", "test/tem_unit/test_tem_crypto_random.rb", "test/tem_unit/test_tem_emit.rb", "test/tem_unit/test_tem_memory.rb", "test/tem_unit/test_tem_memory_compare.rb", "test/tem_unit/test_tem_output.rb", "test/tem_unit/test_tem_yaml_secpack.rb", "test/test_auto_conf.rb", "test/test_driver.rb", "test/test_exceptions.rb", "tem_ruby.gemspec"]
15
15
  s.homepage = %q{http://tem.rubyforge.org}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tem_ruby", "--main", "README"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = %q{tem}
19
- s.rubygems_version = %q{1.3.4}
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/builders/test_abi_builder.rb", "test/tem_unit/test_tem_alu.rb", "test/tem_unit/test_tem_bound_secpack.rb", "test/tem_unit/test_tem_branching.rb", "test/tem_unit/test_tem_crypto_asymmetric.rb", "test/tem_unit/test_tem_crypto_hash.rb", "test/tem_unit/test_tem_crypto_pstore.rb", "test/tem_unit/test_tem_crypto_random.rb", "test/tem_unit/test_tem_emit.rb", "test/tem_unit/test_tem_memory.rb", "test/tem_unit/test_tem_memory_compare.rb", "test/tem_unit/test_tem_output.rb", "test/tem_unit/test_tem_yaml_secpack.rb", "test/test_auto_conf.rb", "test/test_driver.rb", "test/test_exceptions.rb", "test/transport/test_auto_configurator.rb", "test/transport/test_java_card_mixin.rb", "test/transport/test_jcop_remote.rb"]
21
+ s.test_files = ["test/builders/test_abi_builder.rb", "test/tem_unit/test_tem_alu.rb", "test/tem_unit/test_tem_bound_secpack.rb", "test/tem_unit/test_tem_branching.rb", "test/tem_unit/test_tem_crypto_asymmetric.rb", "test/tem_unit/test_tem_crypto_hash.rb", "test/tem_unit/test_tem_crypto_pstore.rb", "test/tem_unit/test_tem_crypto_random.rb", "test/tem_unit/test_tem_emit.rb", "test/tem_unit/test_tem_memory.rb", "test/tem_unit/test_tem_memory_compare.rb", "test/tem_unit/test_tem_output.rb", "test/tem_unit/test_tem_yaml_secpack.rb", "test/test_auto_conf.rb", "test/test_driver.rb", "test/test_exceptions.rb"]
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
25
  s.specification_version = 3
26
26
 
27
27
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- s.add_runtime_dependency(%q<smartcard>, [">= 0.3.0"])
28
+ s.add_runtime_dependency(%q<smartcard>, [">= 0.4.0"])
29
29
  else
30
- s.add_dependency(%q<smartcard>, [">= 0.3.0"])
30
+ s.add_dependency(%q<smartcard>, [">= 0.4.0"])
31
31
  end
32
32
  else
33
- s.add_dependency(%q<smartcard>, [">= 0.3.0"])
33
+ s.add_dependency(%q<smartcard>, [">= 0.4.0"])
34
34
  end
35
35
  end
@@ -1,7 +1,9 @@
1
- require 'openssl'
1
+ require 'tem_ruby'
2
+
2
3
  require 'test/unit'
3
4
 
4
- require 'tem_ruby'
5
+ require 'openssl'
6
+
5
7
 
6
8
  class AbiBuilderTest < Test::Unit::TestCase
7
9
  class Wrapped
@@ -1,6 +1,7 @@
1
+ require 'tem_ruby'
2
+
1
3
  require 'test/unit'
2
4
 
3
- require 'tem_ruby'
4
5
 
5
6
  # Helper methods for TEM tests.
6
7
  #
@@ -16,7 +17,7 @@ class TemTestCase < Test::Unit::TestCase
16
17
  end
17
18
 
18
19
  def teardown
19
- @tem.disconnect unless @tem.nil?
20
+ @tem.disconnect if defined?(@tem) && @tem
20
21
  end
21
22
 
22
23
  def test_smoke
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemAluTest < TemTestCase
4
4
  def test_alu
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  module TemBoundSecpackTestCase
4
4
  # This is also called from TemYamlSecpackTest.
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemBranchingTest < TemTestCase
4
4
  def test_branching
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemCryptoAsymmetricTest < TemTestCase
4
4
  def i_crypt(data, key_id, authz, mode = :encrypt, direct_io = true, max_output = nil)
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemCryptoHashTest < TemTestCase
4
4
  def test_crypto_hash
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemCryptoPstoreTest < TemTestCase
4
4
  def test_crypto_pstore
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemCryptoRandomTest < TemTestCase
4
4
  def test_crypto_random
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemEmitTest < TemTestCase
4
4
  def test_emit
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemMemoryTest < TemTestCase
4
4
  def test_memory
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  module TemMemoryCompareTestCase
4
4
  # This is also called from TemYamlSecpackTest.
@@ -1,4 +1,4 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
2
 
3
3
  class TemOutputTest < TemTestCase
4
4
  def test_output
@@ -1,7 +1,8 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
+
3
+ require 'test/tem_unit/test_tem_bound_secpack.rb'
4
+ require 'test/tem_unit/test_tem_memory_compare.rb'
2
5
 
3
- require 'test/tem_unit/test_tem_bound_secpack'
4
- require 'test/tem_unit/test_tem_memory_compare'
5
6
 
6
7
  class TemOutputTest < TemTestCase
7
8
  include TemBoundSecpackTestCase
@@ -1,6 +1,8 @@
1
1
  require 'tem_ruby'
2
+
2
3
  require 'test/unit'
3
4
 
5
+
4
6
  class AutoConfTest < Test::Unit::TestCase
5
7
  def test_autoconf_reconnect
6
8
  Tem.auto_conf
data/test/test_driver.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
+
2
3
 
3
4
  class DriverTest < TemTestCase
4
5
  def test_buffers_io
@@ -1,4 +1,5 @@
1
- require 'test/tem_test_case'
1
+ require 'test/tem_test_case.rb'
2
+
2
3
 
3
4
  class ExceptionsTest < TemTestCase
4
5
  def test_trace
@@ -23,12 +24,17 @@ class ExceptionsTest < TemTestCase
23
24
  @tem.execute bad_sec
24
25
  rescue Tem::SecExecError => e
25
26
  caught = true
26
- assert_equal Hash, e.trace.class, "TEM exception does not have a TEM trace"
27
+ assert_equal Hash, e.trace.class,
28
+ "TEM exception does not have a TEM trace"
27
29
  assert_equal 2, e.trace[:out], "Bad output buffer position in TEM trace"
28
- assert_equal bad_sec.label_address(:bad_code), e.trace[:ip], "Bad instruction pointer in TEM trace"
29
- assert_equal bad_sec.label_address(:stack), e.trace[:sp], "Bad instruction pointer in TEM trace"
30
- assert_equal Hash, e.buffer_state.class, "TEM exception does not have buffer state information"
31
- assert_equal Hash, e.key_state.class, "TEM exception does not have key state information"
30
+ assert_equal bad_sec.label_address(:bad_code), e.trace[:ip],
31
+ "Bad instruction pointer in TEM trace"
32
+ assert_equal bad_sec.label_address(:stack), e.trace[:sp],
33
+ "Bad instruction pointer in TEM trace"
34
+ assert_equal Hash, e.buffer_state.class,
35
+ "TEM exception does not have buffer state information"
36
+ assert_equal Hash, e.key_state.class,
37
+ "TEM exception does not have key state information"
32
38
  end
33
39
  assert caught, "Executing a bad SECpack did not raise a SecExecError"
34
40
  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.11.3
4
+ version: 0.11.4
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-06-04 00:00:00 -04:00
12
+ date: 2009-08-19 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.3.0
23
+ version: 0.4.0
24
24
  version:
25
25
  description: TEM (Trusted Execution Module) driver, written in and for ruby.
26
26
  email: victor@costan.us
@@ -71,13 +71,6 @@ extra_rdoc_files:
71
71
  - lib/tem/secpack.rb
72
72
  - lib/tem/tem.rb
73
73
  - lib/tem/toolkit.rb
74
- - lib/tem/transport/auto_configurator.rb
75
- - lib/tem/transport/java_card_mixin.rb
76
- - lib/tem/transport/jcop_remote_protocol.rb
77
- - lib/tem/transport/jcop_remote_server.rb
78
- - lib/tem/transport/jcop_remote_transport.rb
79
- - lib/tem/transport/pcsc_transport.rb
80
- - lib/tem/transport/transport.rb
81
74
  - lib/tem_ruby.rb
82
75
  - LICENSE
83
76
  - README
@@ -124,13 +117,6 @@ files:
124
117
  - lib/tem/secpack.rb
125
118
  - lib/tem/tem.rb
126
119
  - lib/tem/toolkit.rb
127
- - lib/tem/transport/auto_configurator.rb
128
- - lib/tem/transport/java_card_mixin.rb
129
- - lib/tem/transport/jcop_remote_protocol.rb
130
- - lib/tem/transport/jcop_remote_server.rb
131
- - lib/tem/transport/jcop_remote_transport.rb
132
- - lib/tem/transport/pcsc_transport.rb
133
- - lib/tem/transport/transport.rb
134
120
  - lib/tem_ruby.rb
135
121
  - LICENSE
136
122
  - Manifest
@@ -151,11 +137,9 @@ files:
151
137
  - test/tem_unit/test_tem_memory_compare.rb
152
138
  - test/tem_unit/test_tem_output.rb
153
139
  - test/tem_unit/test_tem_yaml_secpack.rb
140
+ - test/test_auto_conf.rb
154
141
  - test/test_driver.rb
155
142
  - test/test_exceptions.rb
156
- - test/transport/test_auto_configurator.rb
157
- - test/transport/test_java_card_mixin.rb
158
- - test/transport/test_jcop_remote.rb
159
143
  - tem_ruby.gemspec
160
144
  has_rdoc: true
161
145
  homepage: http://tem.rubyforge.org
@@ -186,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
170
  requirements: []
187
171
 
188
172
  rubyforge_project: tem
189
- rubygems_version: 1.3.4
173
+ rubygems_version: 1.3.5
190
174
  signing_key:
191
175
  specification_version: 3
192
176
  summary: TEM (Trusted Execution Module) driver, written in and for ruby.
@@ -207,6 +191,3 @@ test_files:
207
191
  - test/test_auto_conf.rb
208
192
  - test/test_driver.rb
209
193
  - test/test_exceptions.rb
210
- - test/transport/test_auto_configurator.rb
211
- - test/transport/test_java_card_mixin.rb
212
- - test/transport/test_jcop_remote.rb
@@ -1,87 +0,0 @@
1
- # :nodoc: namespace
2
- module Tem::Transport
3
-
4
- # Automatic configuration code.
5
- module AutoConfigurator
6
- # The name of the environment variable that might supply the transport
7
- # configuration.
8
- ENVIRONMENT_VARIABLE_NAME = 'TEM_PORT'
9
-
10
- # The default configurations to be tried if no configuration is specified.
11
- DEFAULT_CONFIGURATIONS = [
12
- { :class => JcopRemoteTransport,
13
- :opts => { :host => '127.0.0.1', :port => 8050} },
14
- { :class => PcscTransport, :opts => { :reader_index => 0 }}
15
- ]
16
-
17
- # Creates a transport based on available configuration information.
18
- def self.auto_transport
19
- configuration = env_configuration
20
- return try_transport(configuration) if configuration
21
-
22
- DEFAULT_CONFIGURATIONS.each do |config|
23
- transport = try_transport(config)
24
- return transport if transport
25
- end
26
- return nil
27
- end
28
-
29
- # Retrieves transport configuration information from an environment variable.
30
- #
31
- # :call-seq:
32
- # AutoConfigurator.env_configuration -> hash
33
- #
34
- # The returned configuration has the keys required by
35
- # AutoConfigurator#try_transport
36
- def self.env_configuration
37
- return nil unless conf = ENV[ENVIRONMENT_VARIABLE_NAME]
38
-
39
- case conf[0]
40
- when ?:
41
- # :8050 -- JCOP emulator at port 8050
42
- transport_class = JcopRemoteTransport
43
- transport_opts = { :host => '127.0.0.1' }
44
- transport_opts[:port] = conf[1..-1].to_i
45
- when ?@
46
- # @127.0.0.1:8050 -- JCOP emulator at host 127.0.0.1 port 8050
47
- transport_class = JcopRemoteTransport
48
- port_index = conf.rindex(?:) || conf.length
49
- transport_opts = { :host => conf[1...port_index] }
50
- transport_opts[:port] = conf[(port_index + 1)..-1].to_i
51
- when ?#
52
- # #2 -- 2nd PC/SC reader in the system
53
- transport_class = PcscTransport
54
- transport_opts = { :reader_index => conf[1..-1].to_i - 1 }
55
- else
56
- # Reader Name -- the PC/SC reader with the given name
57
- transport_class = PcscTransport
58
- transport_opts = { :reader_name => conf }
59
- end
60
-
61
- transport_opts[:port] = 8050 if transport_opts[:port] == 0
62
- if transport_opts[:reader_index] and transport_opts[:reader_index] < 0
63
- transport_opts[:reader_index] = 0
64
- end
65
- { :class => transport_class, :opts => transport_opts }
66
- end
67
-
68
- # Attempts to create a new TEM transport with the given configuration.
69
- # :call-seq:
70
- # AutoConfigurator.try_transport(configuration) -> Transport or nil
71
- #
72
- # The configuration should have the following keys:
73
- # class:: the Ruby class implementing the transport
74
- # opts:: the options to be passed to the implementation's constructor
75
- def self.try_transport(configuration)
76
- raise 'No transport class specified' unless configuration[:class]
77
- begin
78
- transport = configuration[:class].new(configuration[:opts] || {})
79
- transport.connect
80
- return transport
81
- rescue Exception
82
- return nil
83
- end
84
- end
85
- end # module AutoConfigurator
86
-
87
- end # module Tem::Transport
@@ -1,99 +0,0 @@
1
- # :nodoc: namespace
2
- module Tem::Transport
3
-
4
- # Module intended to be mixed into transport implementations to mediate between
5
- # a high level format for Javacard-specific APDUs and the wire-level APDU
6
- # request and response formats.
7
- #
8
- # The mix-in calls exchange_apdu in the transport implementation. It supplies
9
- # the APDU data as an array of integers between 0 and 255, and expects a
10
- # response in the same format.
11
- module JavaCardMixin
12
- # Selects a Javacard applet.
13
- def select_applet(applet_id)
14
- applet_apdu! :ins => 0xA4, :p1 => 0x04, :p2 => 0x00, :data => applet_id
15
- end
16
-
17
- # APDU exchange with the JavaCard applet, raising an exception if the return
18
- # code is not success (0x9000).
19
- #
20
- # :call_seq:
21
- # transport.applet_apdu!(apdu_data) -> array
22
- #
23
- # The apdu_data should be in the format expected by
24
- # JavaCardMixin#serialize_apdu. Returns the response data, if the response
25
- # status indicates success (0x9000). Otherwise, raises an exeception.
26
- def applet_apdu!(apdu_data)
27
- response = self.applet_apdu apdu_data
28
- return response[:data] if response[:status] == 0x9000
29
- raise "JavaCard response has error status 0x#{'%04x' % response[:status]}"
30
- end
31
-
32
- # Performs an APDU exchange with the JavaCard applet.
33
- #
34
- # :call-seq:
35
- # transport.applet_apdu(apdu_data) -> hash
36
- #
37
- # The apdu_data should be in the format expected by
38
- # JavaCardMixin#serialize_apdu. The response will be as specified in
39
- # JavaCardMixin#deserialize_response.
40
- def applet_apdu(apdu_data)
41
- apdu = Tem::Transport::JavaCardMixin.serialize_apdu apdu_data
42
- response = self.exchange_apdu apdu
43
- JavaCardMixin.deserialize_response response
44
- end
45
-
46
- # Serializes an APDU for wire transmission.
47
- #
48
- # :call-seq:
49
- # transport.wire_apdu(apdu_data) -> array
50
- #
51
- # The following keys are recognized in the APDU hash:
52
- # cla:: the CLA byte in the APDU (optional, defaults to 0)
53
- # ins:: the INS byte in the APDU -- the first byte seen by a JavaCard applet
54
- # p::
55
- # p1, p2:: the P1 and P2 bytes in the APDU (optional, both default to 0)
56
- # data:: the extra data in the APDU (optional, defaults to nothing)
57
- def self.serialize_apdu(apdu_data)
58
- raise 'Unspecified INS in apdu_data' unless apdu_data[:ins]
59
- apdu = [ apdu_data[:cla] || 0, apdu_data[:ins] ]
60
- if apdu_data[:p12]
61
- unless apdu_data[:p12].length == 2
62
- raise "Malformed P1,P2 - #{apdu_data[:p12]}"
63
- end
64
- apdu += apdu_data[:p12]
65
- else
66
- apdu << (apdu_data[:p1] || 0)
67
- apdu << (apdu_data[:p2] || 0)
68
- end
69
- if apdu_data[:data]
70
- apdu << apdu_data[:data].length
71
- apdu += apdu_data[:data]
72
- else
73
- apdu << 0
74
- end
75
- apdu
76
- end
77
-
78
- # De-serializes a JavaCard response APDU.
79
- #
80
- # :call-seq:
81
- # transport.deserialize_response(response) -> hash
82
- #
83
- # The response contains the following keys:
84
- # status:: the 2-byte status code (e.g. 0x9000 is OK)
85
- # data:: the additional data in the response
86
- def self.deserialize_response(response)
87
- { :status => response[-2] * 256 + response[-1], :data => response[0...-2] }
88
- end
89
-
90
- # Installs a JavaCard applet on the JavaCard.
91
- #
92
- # This would be really, really nice to have. Sadly, it's a far away TBD right
93
- # now.
94
- def install_applet(cap_contents)
95
- raise "Not implemeted; it'd be nice though, right?"
96
- end
97
- end # module Tem
98
-
99
- end # module Tem::Transport