smartcard 0.4.6-x86-mswin32-60 → 0.4.9-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
data/BUILD CHANGED
@@ -22,8 +22,8 @@ anything.
22
22
 
23
23
  You need to install the Developer Tools to get gcc.
24
24
 
25
- Leopard (OSX 10.5) includes a working PC/SC provider, as well as a good driver
26
- for CCID readers.
25
+ Leopard and Snow Leopard (OSX 10.5 / 10.6) include a working PC/SC provider, as
26
+ well as a good driver for CCID readers.
27
27
 
28
28
  Tiger's (OSX 10.4) PC/SC implementation is broken and incomplete, so the Ruby
29
29
  extension code in +smartcard+ has a few hacks to work around that (look for the
@@ -35,13 +35,13 @@ don't work:
35
35
  * Smartcard::PCSC::Card#control (Tiger's API is broken, the call may not work)
36
36
 
37
37
  The developer team doesn't support or test against ports of +gcc+ or +pcsclite+,
38
- but we success notifications are welcome.
38
+ but we welcome patches or success stories.
39
39
 
40
40
  == Windows
41
41
 
42
42
  A lot of effort has been spent to make Windows builds as easy as possible.
43
43
  +smartcard+ is currently built using a full edition of
44
- {Visual Studio 2005}[http://msdn.microsoft.com/vstudio/], but all sources
44
+ {Visual Studio 6.0}[http://msdn.microsoft.com/vstudio/], but all sources
45
45
  indicate that
46
46
  {Visual C++ Express 2005}[http://www.microsoft.com/express/download/]
47
47
  works, as long as you also install a Windows SDK (you're on your own for that).
@@ -69,7 +69,7 @@ readers.
69
69
  === Ubuntu
70
70
 
71
71
  Installing the following packages (and their dependencies) gets you going on
72
- Ubuntu (tested on 7.10, 8.04, and 8.10):
72
+ Ubuntu (tested on 8.04, 8.10, 9.04 and 9.10):
73
73
  * build-essential
74
74
  * libccid
75
75
  * libpcsclite-dev (depends on libpcsclite or libpcsclite1)
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ v0.4.9. Disabled Nagle's algorithm in the remote JCOP transport.
2
+
3
+ v0.4.8. Gem dependencies.
4
+
5
+ v0.4.7. Custom exception class for APDU responses with error codes.
6
+
1
7
  v0.4.6. Automatic detection of package AID from CAP in install_applet.
2
8
 
3
9
  v0.4.5. More bugfixes in JcopRemoteTransport's ATR forwarding logic.
data/Manifest CHANGED
@@ -22,6 +22,7 @@ lib/smartcard/gp/asn1_ber.rb
22
22
  lib/smartcard/gp/cap_loader.rb
23
23
  lib/smartcard/gp/des.rb
24
24
  lib/smartcard/gp/gp_card_mixin.rb
25
+ lib/smartcard/iso/apdu_error.rb
25
26
  lib/smartcard/iso/auto_configurator.rb
26
27
  lib/smartcard/iso/iso_card_mixin.rb
27
28
  lib/smartcard/iso/jcop_remote_protocol.rb
@@ -30,6 +31,7 @@ lib/smartcard/iso/jcop_remote_transport.rb
30
31
  lib/smartcard/iso/pcsc_transport.rb
31
32
  lib/smartcard/iso/transport.rb
32
33
  lib/smartcard/pcsc/pcsc_exception.rb
34
+ smartcard.gemspec
33
35
  test/gp/asn1_ber_test.rb
34
36
  test/gp/cap_loader_test.rb
35
37
  test/gp/des_test.rb
@@ -38,6 +40,7 @@ test/gp/hello.apdu
38
40
  test/gp/hello.cap
39
41
  test/iso/auto_configurator_test.rb
40
42
  test/iso/iso_card_mixin_test.rb
43
+ test/iso/iso_exception_test.rb
41
44
  test/iso/jcop_remote_test.rb
42
45
  test/pcsc/containers_test.rb
43
46
  test/pcsc/smoke_test.rb
data/Rakefile CHANGED
@@ -9,7 +9,10 @@ Echoe.new('smartcard') do |p|
9
9
  p.email = 'victor@costan.us'
10
10
  p.summary = 'Interface with ISO 7816 smart cards.'
11
11
  p.url = 'http://www.costan.us/smartcard'
12
- p.dependencies = ['rubyzip >=0.9.1']
12
+ p.dependencies = ['rubyzip >=0.9.1',
13
+ 'zerg_support >=0.1.5']
14
+ p.development_dependencies = ['echoe >=3.2',
15
+ 'flexmock >=0.8.6']
13
16
 
14
17
  p.need_tar_gz = !Gem.win_platform?
15
18
  p.need_zip = !Gem.win_platform?
data/lib/smartcard.rb CHANGED
@@ -2,6 +2,7 @@ require 'smartcard/pcsc'
2
2
  require 'smartcard/pcsc/pcsc_exception.rb'
3
3
 
4
4
 
5
+ require 'smartcard/iso/apdu_error.rb'
5
6
  require 'smartcard/iso/iso_card_mixin.rb'
6
7
  require 'smartcard/iso/jcop_remote_protocol.rb'
7
8
  require 'smartcard/iso/jcop_remote_transport.rb'
@@ -179,7 +179,7 @@ module GpCardMixin
179
179
  raw = iso_apdu :cla => 0x80, :ins => 0xF2, :p1 => scope_byte,
180
180
  :p2 => (first ? 0 : 1), :data => [0x4F, 0x00]
181
181
  if raw[:status] != 0x9000 && raw[:status] != 0x6310
182
- Smartcard::Iso::IsoCardMixin.raise_response_exception raw
182
+ raise Smartcard::Iso::ApduException, raw
183
183
  end
184
184
 
185
185
  offset = 0
@@ -0,0 +1,43 @@
1
+ # Exception indicating an error code in an ISO-7618 response APDU.
2
+ #
3
+ # Author:: Victor Costan
4
+ # Copyright:: Copyright (C) 2009 Massachusetts Institute of Technology
5
+ # License:: MIT
6
+
7
+ # :nodoc: namespace
8
+ module Smartcard::Iso
9
+
10
+
11
+ # Indicates an error code in an ISO-7618 response APDU.
12
+ #
13
+ # This exception should be raised if the response obtained from iso_apdu has an
14
+ # error status. When raising the exception, supply the entire response as the
15
+ # only argument to raise.
16
+ #
17
+ # Usage example:
18
+ # response = transport.iso_apdu :ins => 0x12
19
+ # raise Smartcard::Iso::ApduError, response unless response[:status] == 0x9000
20
+ class ApduError < RuntimeError
21
+ # The data in the error APDU.
22
+ attr_accessor :data
23
+ # The error status.
24
+ attr_accessor :status
25
+
26
+ # Creates a new exception (for raising).
27
+ #
28
+ # Args:
29
+ # response:: the APDU response (hash with +:data+ and +:status+ keys)
30
+ def initialize(response)
31
+ @data = response[:data]
32
+ @status = response[:status]
33
+ super ApduError.message_for_apdu_response response
34
+ end
35
+
36
+ # Computes the exception message for an APDU response.
37
+ def self.message_for_apdu_response(response)
38
+ "ISO-7816 response APDU has error status 0x#{'%04x' % response[:status]}" +
39
+ " - #{response[:data].map { |ch| '%02x' % ch }.join(' ')}"
40
+ end
41
+ end # class Smartcard::Iso::ApduError
42
+
43
+ end # namespace Smartcard::Iso
@@ -16,7 +16,7 @@ module Smartcard::Iso
16
16
  # the APDU data as an array of integers between 0 and 255, and expects a
17
17
  # response in the same format.
18
18
  module IsoCardMixin
19
- # APDU exchange with the ISO7816 card, raising an exception if the return
19
+ # APDU exchange with the ISO7816 card, raising an ApduError if the return
20
20
  # code is not success (0x9000).
21
21
  #
22
22
  # :call_seq:
@@ -24,22 +24,13 @@ module IsoCardMixin
24
24
  #
25
25
  # The apdu_data should be in the format expected by
26
26
  # IsoCardMixin#serialize_apdu. Returns the response data, if the response
27
- # status indicates success (0x9000). Otherwise, raises an exeception.
27
+ # status indicates success (0x9000). Otherwise, raises an ApduError.
28
28
  def iso_apdu!(apdu_data)
29
29
  response = self.iso_apdu apdu_data
30
30
  return response[:data] if response[:status] == 0x9000
31
- IsoCardMixin.raise_response_exception response
31
+ raise ApduError, response
32
32
  end
33
33
 
34
- # Raises an exception in response to an error status in an APDU.
35
- #
36
- # :call_seq:
37
- # IsoCardMixin.raise_response_exception(response)
38
- def self.raise_response_exception(response)
39
- raise "JavaCard response has error status 0x#{'%04x' % response[:status]}" +
40
- " - #{response[:data].map { |ch| '%02x' % ch }.join(' ')}"
41
- end
42
-
43
34
  # Performs an APDU exchange with the ISO7816 card.
44
35
  #
45
36
  # :call-seq:
@@ -66,8 +66,6 @@ class JcopRemoteServer
66
66
  # The options hash supports the following keys:
67
67
  # port:: the port to serve on
68
68
  # ip:: the IP of the interface to serve on (defaults to all interfaces)
69
- # reusable:: if set, the serving port can be shared with another
70
- # application (REUSEADDR flag will be set on the socket)
71
69
  #
72
70
  # If the |serving_logic| parameter is nil, a serving logic implementation
73
71
  # must be provided when calling JcopRemoteServer#run. The server will crash
@@ -126,13 +124,12 @@ class JcopRemoteServer
126
124
  end
127
125
 
128
126
  # TODO(costan): figure out a way to let serving logic reach this directly.
129
- end
130
-
127
+ end
131
128
 
132
129
  # Creates a socket listening to incoming connections to this server.
133
130
  #
134
131
  # :call-seq:
135
- # server.establish_socket(options) -> Socket
132
+ # server.serving_socket(options) -> Socket
136
133
  #
137
134
  # The |options| parameter supports the same keys as the options parameter
138
135
  # of JcopRemoteServer#new.
@@ -141,17 +138,9 @@ class JcopRemoteServer
141
138
  def serving_socket(options)
142
139
  port = options[:port] || 0
143
140
  interface_ip = options[:ip] || '0.0.0.0'
144
- serving_address = Socket.pack_sockaddr_in port, interface_ip
145
-
146
- socket = Socket.new Socket::AF_INET, Socket::SOCK_STREAM,
147
- Socket::PF_UNSPEC
148
-
149
- if options[:reusable]
150
- socket.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true
151
- end
152
- socket.setsockopt Socket::IPPROTO_TCP, Socket::TCP_NODELAY, true
153
- socket.bind serving_address
154
- socket.listen 5
141
+ socket = Zerg::Support::SocketFactory.socket :in_addr => interface_ip,
142
+ :in_port => port, :no_delay => true, :reuse_addr => true
143
+ socket.listen
155
144
  socket
156
145
  end
157
146
  private :serving_socket
@@ -4,7 +4,7 @@
4
4
  # Copyright:: Copyright (C) 2008 Massachusetts Institute of Technology
5
5
  # License:: MIT
6
6
 
7
- require 'socket'
7
+ require 'zerg_support'
8
8
 
9
9
  # :nodoc: namespace
10
10
  module Smartcard::Iso
@@ -43,16 +43,8 @@ class JcopRemoteTransport
43
43
  # Makes a transport-level connection to the TEM.
44
44
  def connect
45
45
  begin
46
- Socket.getaddrinfo(@host, @port, Socket::AF_INET,
47
- Socket::SOCK_STREAM).each do |addr_info|
48
- begin
49
- @socket = Socket.new(addr_info[4], addr_info[5], addr_info[6])
50
- @socket.connect Socket.pack_sockaddr_in(addr_info[1], addr_info[3])
51
- break
52
- rescue
53
- @socket = nil
54
- end
55
- end
46
+ @socket = Zerg::Support::SocketFactory.socket :out_addr => @host,
47
+ :out_port => @port, :no_delay => true
56
48
  raise 'Connection refused' unless @socket
57
49
 
58
50
  # Wait for the card to be inserted.
Binary file
data/smartcard.gemspec CHANGED
@@ -2,23 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{smartcard}
5
- s.version = "0.4.6"
5
+ s.version = "0.4.9"
6
6
  s.platform = %q{x86-mswin32-60}
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
9
9
  s.authors = ["Victor Costan"]
10
- s.date = %q{2009-11-01}
10
+ s.date = %q{2009-11-11}
11
11
  s.description = %q{Interface with ISO 7816 smart cards.}
12
12
  s.email = %q{victor@costan.us}
13
- s.extra_rdoc_files = ["BUILD", "CHANGELOG", "LICENSE", "README", "ext/smartcard_pcsc/extconf.rb", "ext/smartcard_pcsc/pcsc.h", "ext/smartcard_pcsc/pcsc_card.c", "ext/smartcard_pcsc/pcsc_constants.c", "ext/smartcard_pcsc/pcsc_context.c", "ext/smartcard_pcsc/pcsc_exception.c", "ext/smartcard_pcsc/pcsc_io_request.c", "ext/smartcard_pcsc/pcsc_main.c", "ext/smartcard_pcsc/pcsc_multi_strings.c", "ext/smartcard_pcsc/pcsc_namespace.c", "ext/smartcard_pcsc/pcsc_reader_states.c", "ext/smartcard_pcsc/pcsc_surrogate_reader.h", "ext/smartcard_pcsc/pcsc_surrogate_wintypes.h", "lib/smartcard.rb", "lib/smartcard/gp/asn1_ber.rb", "lib/smartcard/gp/cap_loader.rb", "lib/smartcard/gp/des.rb", "lib/smartcard/gp/gp_card_mixin.rb", "lib/smartcard/iso/auto_configurator.rb", "lib/smartcard/iso/iso_card_mixin.rb", "lib/smartcard/iso/jcop_remote_protocol.rb", "lib/smartcard/iso/jcop_remote_server.rb", "lib/smartcard/iso/jcop_remote_transport.rb", "lib/smartcard/iso/pcsc_transport.rb", "lib/smartcard/iso/transport.rb", "lib/smartcard/pcsc/pcsc_exception.rb"]
14
- s.files = ["BUILD", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "ext/smartcard_pcsc/extconf.rb", "ext/smartcard_pcsc/pcsc.h", "ext/smartcard_pcsc/pcsc_card.c", "ext/smartcard_pcsc/pcsc_constants.c", "ext/smartcard_pcsc/pcsc_context.c", "ext/smartcard_pcsc/pcsc_exception.c", "ext/smartcard_pcsc/pcsc_io_request.c", "ext/smartcard_pcsc/pcsc_main.c", "ext/smartcard_pcsc/pcsc_multi_strings.c", "ext/smartcard_pcsc/pcsc_namespace.c", "ext/smartcard_pcsc/pcsc_reader_states.c", "ext/smartcard_pcsc/pcsc_surrogate_reader.h", "ext/smartcard_pcsc/pcsc_surrogate_wintypes.h", "lib/smartcard.rb", "lib/smartcard/gp/asn1_ber.rb", "lib/smartcard/gp/cap_loader.rb", "lib/smartcard/gp/des.rb", "lib/smartcard/gp/gp_card_mixin.rb", "lib/smartcard/iso/auto_configurator.rb", "lib/smartcard/iso/iso_card_mixin.rb", "lib/smartcard/iso/jcop_remote_protocol.rb", "lib/smartcard/iso/jcop_remote_server.rb", "lib/smartcard/iso/jcop_remote_transport.rb", "lib/smartcard/iso/pcsc_transport.rb", "lib/smartcard/iso/transport.rb", "lib/smartcard/pcsc/pcsc_exception.rb", "test/gp/asn1_ber_test.rb", "test/gp/cap_loader_test.rb", "test/gp/des_test.rb", "test/gp/gp_card_mixin_test.rb", "test/gp/hello.apdu", "test/gp/hello.cap", "test/iso/auto_configurator_test.rb", "test/iso/iso_card_mixin_test.rb", "test/iso/jcop_remote_test.rb", "test/pcsc/containers_test.rb", "test/pcsc/smoke_test.rb", "tests/ts_pcsc_ext.rb", "smartcard.gemspec", "lib/smartcard/pcsc.so"]
13
+ s.extra_rdoc_files = ["BUILD", "CHANGELOG", "LICENSE", "README", "ext/smartcard_pcsc/extconf.rb", "ext/smartcard_pcsc/pcsc.h", "ext/smartcard_pcsc/pcsc_card.c", "ext/smartcard_pcsc/pcsc_constants.c", "ext/smartcard_pcsc/pcsc_context.c", "ext/smartcard_pcsc/pcsc_exception.c", "ext/smartcard_pcsc/pcsc_io_request.c", "ext/smartcard_pcsc/pcsc_main.c", "ext/smartcard_pcsc/pcsc_multi_strings.c", "ext/smartcard_pcsc/pcsc_namespace.c", "ext/smartcard_pcsc/pcsc_reader_states.c", "ext/smartcard_pcsc/pcsc_surrogate_reader.h", "ext/smartcard_pcsc/pcsc_surrogate_wintypes.h", "lib/smartcard.rb", "lib/smartcard/gp/asn1_ber.rb", "lib/smartcard/gp/cap_loader.rb", "lib/smartcard/gp/des.rb", "lib/smartcard/gp/gp_card_mixin.rb", "lib/smartcard/iso/apdu_error.rb", "lib/smartcard/iso/auto_configurator.rb", "lib/smartcard/iso/iso_card_mixin.rb", "lib/smartcard/iso/jcop_remote_protocol.rb", "lib/smartcard/iso/jcop_remote_server.rb", "lib/smartcard/iso/jcop_remote_transport.rb", "lib/smartcard/iso/pcsc_transport.rb", "lib/smartcard/iso/transport.rb", "lib/smartcard/pcsc/pcsc_exception.rb"]
14
+ s.files = ["BUILD", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "ext/smartcard_pcsc/extconf.rb", "ext/smartcard_pcsc/pcsc.h", "ext/smartcard_pcsc/pcsc_card.c", "ext/smartcard_pcsc/pcsc_constants.c", "ext/smartcard_pcsc/pcsc_context.c", "ext/smartcard_pcsc/pcsc_exception.c", "ext/smartcard_pcsc/pcsc_io_request.c", "ext/smartcard_pcsc/pcsc_main.c", "ext/smartcard_pcsc/pcsc_multi_strings.c", "ext/smartcard_pcsc/pcsc_namespace.c", "ext/smartcard_pcsc/pcsc_reader_states.c", "ext/smartcard_pcsc/pcsc_surrogate_reader.h", "ext/smartcard_pcsc/pcsc_surrogate_wintypes.h", "lib/smartcard.rb", "lib/smartcard/gp/asn1_ber.rb", "lib/smartcard/gp/cap_loader.rb", "lib/smartcard/gp/des.rb", "lib/smartcard/gp/gp_card_mixin.rb", "lib/smartcard/iso/apdu_error.rb", "lib/smartcard/iso/auto_configurator.rb", "lib/smartcard/iso/iso_card_mixin.rb", "lib/smartcard/iso/jcop_remote_protocol.rb", "lib/smartcard/iso/jcop_remote_server.rb", "lib/smartcard/iso/jcop_remote_transport.rb", "lib/smartcard/iso/pcsc_transport.rb", "lib/smartcard/iso/transport.rb", "lib/smartcard/pcsc/pcsc_exception.rb", "smartcard.gemspec", "test/gp/asn1_ber_test.rb", "test/gp/cap_loader_test.rb", "test/gp/des_test.rb", "test/gp/gp_card_mixin_test.rb", "test/gp/hello.apdu", "test/gp/hello.cap", "test/iso/auto_configurator_test.rb", "test/iso/iso_card_mixin_test.rb", "test/iso/iso_exception_test.rb", "test/iso/jcop_remote_test.rb", "test/pcsc/containers_test.rb", "test/pcsc/smoke_test.rb", "tests/ts_pcsc_ext.rb", "lib/smartcard/pcsc.so"]
15
15
  s.homepage = %q{http://www.costan.us/smartcard}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Smartcard", "--main", "README"]
17
17
  s.require_paths = ["lib", "ext"]
18
18
  s.rubyforge_project = %q{smartcard}
19
19
  s.rubygems_version = %q{1.3.5}
20
20
  s.summary = %q{Interface with ISO 7816 smart cards.}
21
- s.test_files = ["test/gp/asn1_ber_test.rb", "test/gp/cap_loader_test.rb", "test/gp/des_test.rb", "test/gp/gp_card_mixin_test.rb", "test/iso/auto_configurator_test.rb", "test/iso/iso_card_mixin_test.rb", "test/iso/jcop_remote_test.rb", "test/pcsc/containers_test.rb", "test/pcsc/smoke_test.rb"]
21
+ s.test_files = ["test/gp/asn1_ber_test.rb", "test/gp/cap_loader_test.rb", "test/gp/des_test.rb", "test/gp/gp_card_mixin_test.rb", "test/iso/auto_configurator_test.rb", "test/iso/iso_card_mixin_test.rb", "test/iso/iso_exception_test.rb", "test/iso/jcop_remote_test.rb", "test/pcsc/containers_test.rb", "test/pcsc/smoke_test.rb"]
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -26,10 +26,19 @@ Gem::Specification.new do |s|
26
26
 
27
27
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
28
  s.add_runtime_dependency(%q<rubyzip>, [">= 0.9.1"])
29
+ s.add_runtime_dependency(%q<zerg_support>, [">= 0.1.5"])
30
+ s.add_development_dependency(%q<echoe>, [">= 3.2"])
31
+ s.add_development_dependency(%q<flexmock>, [">= 0.8.6"])
29
32
  else
30
33
  s.add_dependency(%q<rubyzip>, [">= 0.9.1"])
34
+ s.add_dependency(%q<zerg_support>, [">= 0.1.5"])
35
+ s.add_dependency(%q<echoe>, [">= 3.2"])
36
+ s.add_dependency(%q<flexmock>, [">= 0.8.6"])
31
37
  end
32
38
  else
33
39
  s.add_dependency(%q<rubyzip>, [">= 0.9.1"])
40
+ s.add_dependency(%q<zerg_support>, [">= 0.1.5"])
41
+ s.add_dependency(%q<echoe>, [">= 3.2"])
42
+ s.add_dependency(%q<flexmock>, [">= 0.8.6"])
34
43
  end
35
44
  end
@@ -89,8 +89,15 @@ class IsoCardMixinTest < Test::Unit::TestCase
89
89
 
90
90
  def test_iso_apdu_bang
91
91
  assert_equal [0x67, 0x31], win_mock.iso_apdu!(win_apdu)
92
- assert_raise(RuntimeError) do
92
+ assert_raise(Smartcard::Iso::ApduError) do
93
93
  lose_mock.iso_apdu!(lose_apdu)
94
94
  end
95
+
96
+ begin
97
+ lose_mock.iso_apdu! lose_apdu
98
+ rescue Smartcard::Iso::ApduError => e
99
+ assert_equal [], e.data, 'APDU data in raised error'
100
+ assert_equal 0x8631, e.status, 'APDU error status in raised error'
101
+ end
95
102
  end
96
103
  end
@@ -0,0 +1,36 @@
1
+ # Author:: Victor Costan
2
+ # Copyright:: Copyright (C) 2008 Massachusetts Institute of Technology
3
+ # License:: MIT
4
+
5
+ require 'smartcard'
6
+
7
+ require 'test/unit'
8
+
9
+ require 'rubygems'
10
+ require 'flexmock/test_unit'
11
+
12
+
13
+ class ApduErrorTest < Test::Unit::TestCase
14
+ def setup
15
+ @response = { :data => [0x31, 0x41, 0x59], :status => 0x6A88 }
16
+ end
17
+
18
+ def test_raise
19
+ assert_raise Smartcard::Iso::ApduError do
20
+ raise Smartcard::Iso::ApduError, @response
21
+ end
22
+ end
23
+
24
+ def test_contents
25
+ begin
26
+ raise Smartcard::Iso::ApduError, @response
27
+ rescue Smartcard::Iso::ApduError => e
28
+ assert_equal @response[:status], e.status, 'Error status attribute'
29
+ assert_equal @response[:data], e.data, 'APDU data attribute'
30
+ golden_message =
31
+ 'ISO-7816 response APDU has error status 0x6a88 - 31 41 59'
32
+ assert_equal golden_message, e.message, 'Exception message'
33
+ end
34
+ end
35
+ IsoCardMixin = Smartcard::Iso::IsoCardMixin
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartcard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.9
5
5
  platform: x86-mswin32-60
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-11-01 01:00:00 -04:00
12
+ date: 2009-11-11 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,36 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 0.9.1
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: zerg_support
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.5
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: echoe
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "3.2"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: flexmock
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.6
54
+ version:
25
55
  description: Interface with ISO 7816 smart cards.
26
56
  email: victor@costan.us
27
57
  executables: []
@@ -51,6 +81,7 @@ extra_rdoc_files:
51
81
  - lib/smartcard/gp/cap_loader.rb
52
82
  - lib/smartcard/gp/des.rb
53
83
  - lib/smartcard/gp/gp_card_mixin.rb
84
+ - lib/smartcard/iso/apdu_error.rb
54
85
  - lib/smartcard/iso/auto_configurator.rb
55
86
  - lib/smartcard/iso/iso_card_mixin.rb
56
87
  - lib/smartcard/iso/jcop_remote_protocol.rb
@@ -84,6 +115,7 @@ files:
84
115
  - lib/smartcard/gp/cap_loader.rb
85
116
  - lib/smartcard/gp/des.rb
86
117
  - lib/smartcard/gp/gp_card_mixin.rb
118
+ - lib/smartcard/iso/apdu_error.rb
87
119
  - lib/smartcard/iso/auto_configurator.rb
88
120
  - lib/smartcard/iso/iso_card_mixin.rb
89
121
  - lib/smartcard/iso/jcop_remote_protocol.rb
@@ -92,6 +124,7 @@ files:
92
124
  - lib/smartcard/iso/pcsc_transport.rb
93
125
  - lib/smartcard/iso/transport.rb
94
126
  - lib/smartcard/pcsc/pcsc_exception.rb
127
+ - smartcard.gemspec
95
128
  - test/gp/asn1_ber_test.rb
96
129
  - test/gp/cap_loader_test.rb
97
130
  - test/gp/des_test.rb
@@ -100,11 +133,11 @@ files:
100
133
  - test/gp/hello.cap
101
134
  - test/iso/auto_configurator_test.rb
102
135
  - test/iso/iso_card_mixin_test.rb
136
+ - test/iso/iso_exception_test.rb
103
137
  - test/iso/jcop_remote_test.rb
104
138
  - test/pcsc/containers_test.rb
105
139
  - test/pcsc/smoke_test.rb
106
140
  - tests/ts_pcsc_ext.rb
107
- - smartcard.gemspec
108
141
  - lib/smartcard/pcsc.so
109
142
  has_rdoc: true
110
143
  homepage: http://www.costan.us/smartcard
@@ -147,6 +180,7 @@ test_files:
147
180
  - test/gp/gp_card_mixin_test.rb
148
181
  - test/iso/auto_configurator_test.rb
149
182
  - test/iso/iso_card_mixin_test.rb
183
+ - test/iso/iso_exception_test.rb
150
184
  - test/iso/jcop_remote_test.rb
151
185
  - test/pcsc/containers_test.rb
152
186
  - test/pcsc/smoke_test.rb