smartcard 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/BUILD CHANGED
@@ -1,18 +1,20 @@
1
1
  = Builds are hard
2
- +smartcard+ needs to talk to hardware (card readers), so it's bound to use a Ruby extension.
3
- This means C, and platform-specific building nightmares. Read below for details.
2
+ +smartcard+ needs to talk to hardware (card readers), so it's bound to use a
3
+ Ruby extension. This means C, and platform-specific building nightmares.
4
+ Read below for details.
4
5
 
5
6
  = The build system
6
- +smartcard+ uses {echoe}[http://blog.evanweaver.com/files/doc/fauna/echoe/] for builds. This
7
- automates most of the building and packaging work, and can even push the gem to rubyforge,
8
- with a bit of luck. Most used commands:
7
+ +smartcard+ uses {echoe}[http://blog.evanweaver.com/files/doc/fauna/echoe/] for
8
+ builds. This automates most of the building and packaging work, and can even
9
+ push the gem to rubyforge, with a bit of luck. Most used commands:
9
10
  rake manifest # builds the manifest (do this after checking out)
10
11
  rake package # builds the gem for your platform
11
12
  rake mswin package # cross-builds the gem for Windows
12
13
  rake test # builds the gem and runs the tests
13
14
  rake docs # runs Rdoc to produce the docs
14
15
 
15
- On the other hand, you have to <tt>gem install echoe</tt> to be able to build anything.
16
+ On the other hand, you have to <tt>gem install echoe</tt> to be able to build
17
+ anything.
16
18
 
17
19
  = Platform-specific information
18
20
 
@@ -20,14 +22,17 @@ On the other hand, you have to <tt>gem install echoe</tt> to be able to build an
20
22
 
21
23
  You need to install the Developer Tools to get gcc.
22
24
 
23
- Leopard includes a working PC/SC provider, as well as a good driver for CCID readers.
24
- Tiger's PC/SC implementation is broken and incomplete, so the Ruby extension code in +smartcard+
25
- has a few hacks to work around that (look for the <tt>RB_SMARTCARD_OSX_TIGER_HACK</tt> define.
26
- The following commands are broken / don't work:
25
+ Leopard (OSX 10.5) includes a working PC/SC provider, as well as a good driver
26
+ for CCID readers.
27
+
28
+ Tiger's (OSX 10.4) PC/SC implementation is broken and incomplete, so the Ruby
29
+ extension code in +smartcard+ has a few hacks to work around that (look for the
30
+ <tt>RB_SMARTCARD_OSX_TIGER_HACK</tt> define. The following commands are broken /
31
+ don't work:
27
32
  * Smartcard::PCSC::Context#is_valid (always returs +true+)
28
- * Smartcard::PCSC::Card#get_attribute (throws exception because it's not implemented)
29
- * Smartcard::PCSC::Card#set_attribute (throws exception because it's not implemented)
30
- * Smartcard::PCSC::Card#control (Tiger's API is broken, so the call will probably not work)
33
+ * Smartcard::PCSC::Card#get_attribute (not implemented, throws exception)
34
+ * Smartcard::PCSC::Card#set_attribute (not implemented, throws exception)
35
+ * Smartcard::PCSC::Card#control (Tiger's API is broken, the call may not work)
31
36
 
32
37
  The developer team doesn't support or test against ports of +gcc+ or +pcsclite+,
33
38
  but we success notifications are welcome.
@@ -37,29 +42,36 @@ but we success notifications are welcome.
37
42
  A lot of effort has been spent to make Windows builds as easy as possible.
38
43
  +smartcard+ is currently built using a full edition of
39
44
  {Visual Studio 2005}[http://msdn.microsoft.com/vstudio/], but all sources
40
- indicate that {Visual C++ Express 2005}[http://www.microsoft.com/express/download/] works,
41
- as long as you also install a Windows SDK (you're on your own for that). Visual Studio 2008
42
- might work, but it hasn't been tested yet.
45
+ indicate that
46
+ {Visual C++ Express 2005}[http://www.microsoft.com/express/download/]
47
+ works, as long as you also install a Windows SDK (you're on your own for that).
48
+ Visual Studio 2008 might work, but it hasn't been tested yet.
43
49
 
44
50
  A summary of the hacks that have been done to get Windows builds working:
45
- * removing the extension files from the gemspec at the "right time" so that +echoe+ compiles the extension, and the gem doesn't require re-compilation (see the +Rakefile+)
51
+ * removing the extension files from the gemspec at the "right time" so that
52
+ +echoe+ compiles the extension, and the gem doesn't require re-compilation (see
53
+ the +Rakefile+)
46
54
  * adding the compiled extension to the file list in the gemspec
47
- * adding code to <tt>extconf.rb</tt> to patch the +Makefile+ so a manifest is embedded in the extension dll (and ruby doesn't crash if it uses a different version of the C runtime)
55
+ * adding code to <tt>extconf.rb</tt> to patch the +Makefile+ so a manifest is
56
+ embedded in the extension dll (and ruby doesn't crash if it uses a different
57
+ version of the C runtime)
48
58
 
49
59
  == Linux
50
60
 
51
61
  +smartcard+ is developed (and tested) against the
52
- {MUSCLE project}[http://www.linuxnet.com/software.html]. If you go this route, you need to
53
- get at least the {pcsclite library}[http://pcsclite.alioth.debian.org/] and a driver.
54
- +smartcard+ developers use the {CCID driver}[http://pcsclite.alioth.debian.org/], which
55
- works on most (new) readers.
62
+ {MUSCLE project}[http://www.linuxnet.com/software.html]. If you go this route,
63
+ you need to get at least the
64
+ {pcsclite library}[http://pcsclite.alioth.debian.org/] and a driver.
65
+ +smartcard+ developers use the
66
+ {CCID driver}[http://pcsclite.alioth.debian.org/], which works on most (new)
67
+ readers.
56
68
 
57
69
  === Ubuntu
58
70
 
59
- Installing the following packages (and their dependencies) gets you going on Ubuntu (tested on 7.10):
60
- * buildessentials
71
+ Installing the following packages (and their dependencies) gets you going on
72
+ Ubuntu (tested on 7.10, 8.04, and 8.10):
73
+ * build-essential
61
74
  * libccid
62
- * libpcsclite
63
- * libpcsclite-dev
75
+ * libpcsclite-dev (depends on libpcsclite or libpcsclite1)
64
76
  * pcscd
65
77
  * pcsc-tools
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.3.2. Fixed documentation for ReaderStates class.
2
+
1
3
  v0.3.1. Fixed documentation for the new PcscException class.
2
4
 
3
5
  v0.3.0. Added PcscException class used to wrap PC/SC exceptions.
data/README CHANGED
@@ -1,32 +1,37 @@
1
- +smartcard+ aims to become the standard support library for smart-card development on ruby.
2
- Right now, the project offers a PC/SC binding that is working on ruby 1.8, under
3
- Linux, OSX, and Windows. Future plans include a high level abstraction for the PC/SC binding
4
- (plus any other bindings people need), and an interface for Java cards.
1
+ +smartcard+ aims to become the standard support library for smart-card
2
+ development on ruby. Right now, the project offers a PC/SC binding that is
3
+ working on ruby 1.8, under Linux, OSX, and Windows. Future plans include a high
4
+ level abstraction for the PC/SC binding (plus any other bindings people need),
5
+ and an interface for Java cards.
5
6
 
6
7
  = Installation
7
8
 
8
9
  gem install smartcard
9
10
  Windows:: Select the <tt>win32</tt> gem.
10
11
  OSX:: Install the Developer Tools to get +gcc+. Requires Tiger or Leopard.
11
- UNIX:: You need a PC/SC provider. See the {BUILD file}[link://files/BUILD.html] for details. The file also contains package lists for popular distributions.
12
+ UNIX:: You need a PC/SC provider. See the {BUILD file}[link://files/BUILD.html]
13
+ for details. The file also contains package lists for popular distributions.
12
14
 
13
15
  = Documentation
14
16
 
15
- The documentation you see was generated with RDoc. If you install the +smartcard+ gem, you should be
16
- able to use ri to see the documentation. If you're using the SVN version, you can <tt>rake doc</tt> to build
17
- the HTML documentation yourself.
17
+ The documentation you see was generated with RDoc. If you install the
18
+ +smartcard+ gem, you should be able to use ri to see the documentation. If
19
+ you're using the SVN version, you can <tt>rake doc</tt> to build the HTML
20
+ documentation yourself.
18
21
 
19
22
  = License
20
23
 
21
- +smartcard+ is released under the MIT license. This means you're free to do whatever you want
22
- with it. However, it'd be nice to let the developers know if you plan to include this in a
23
- distribution (bragging rights are always good). The {LICENSE file}[link://files/LICENSE.html]
24
- has the license in legalese.
24
+ +smartcard+ is released under the MIT license. This means you're free to do
25
+ whatever you want with it. However, it'd be nice to let the developers know if
26
+ you plan to include this in a distribution (bragging rights are always good).
27
+ The {LICENSE file}[link://files/LICENSE.html] has the license in legalese.
25
28
 
26
29
  = Acknowledgements
27
30
 
28
- +smartcard+ is developed by Victor Costan while working as a Research Assistant for MIT, under
29
- {Prof. Srini Devadas}[http://people.csail.mit.edu/devadas/], in the
30
- {Trusted Computing group}[http://projects.csail.mit.edu/tc/].
31
- The work is funded by a grant from {Quanta Computer Inc}[http://www.quanta.com.tw], under the
31
+ +smartcard+ is developed by Victor Costan while working as a Research Assistant
32
+ for MIT, under {Prof. Srini Devadas}[http://people.csail.mit.edu/devadas/], in
33
+ the {Trusted Computing group}[http://projects.csail.mit.edu/tc/].
34
+
35
+ The work is funded by a grant from
36
+ {Quanta Computer Inc}[http://www.quanta.com.tw], under the
32
37
  {T-Party Project}[http://projects.csail.mit.edu/tparty/].
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ require 'rubygems'
2
+ gem 'echoe'
3
+ require 'echoe'
4
+
5
+ Echoe.new('smartcard') do |p|
6
+ p.project = 'smartcard' # rubyforge project
7
+
8
+ p.author = 'Victor Costan'
9
+ p.email = 'victor@costan.us'
10
+ p.summary = 'Interface with ISO 7816 smart cards.'
11
+ p.url = 'http://www.costan.us/smartcard'
12
+
13
+ p.need_tar_gz = !Platform.windows?
14
+ p.need_zip = !Platform.windows?
15
+ p.clean_pattern += ['ext/**/*.manifest', 'ext/**/*_autogen.h']
16
+ p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
17
+
18
+ p.eval = proc do |p|
19
+ if Platform.windows?
20
+ p.files += ['lib/smartcard/pcsc.so']
21
+ p.platform = Gem::Platform::CURRENT
22
+
23
+ # take out the extension info from the gemspec
24
+ task :postcompile_hacks => [:compile] do
25
+ p.extensions.clear
26
+ end
27
+
28
+ task :package => [ :clean, :compile, :postcompile_hacks ]
29
+ end
30
+ end
31
+ end
32
+
33
+ if $0 == __FILE__
34
+ Rake.application = Rake::Application.new
35
+ Rake.application.run
36
+ end
@@ -12,9 +12,10 @@ if RUBY_PLATFORM =~ /darwin/
12
12
  pcsc_defines.push 'RB_SMARTCARD_OSX_TIGER_HACK'
13
13
  end
14
14
  elsif RUBY_PLATFORM =~ /win/
15
-
16
15
  have_library('winscard')
17
- pcsc_defines << 'PCSC_SURROGATE_SCARD_IS_VALID_CONTEXT' unless have_library('winscard', 'SCardIsValidContext')
16
+ unless have_library('winscard', 'SCardIsValidContext')
17
+ pcsc_defines << 'PCSC_SURROGATE_SCARD_IS_VALID_CONTEXT'
18
+ end
18
19
  else
19
20
  # pcsclite is retarded and uses stuff like '#include <wintypes.h>'
20
21
  $CFLAGS += ' -I /usr/include/PCSC -I /usr/local/include/PCSC'
@@ -25,7 +26,9 @@ pcsc_headers = []
25
26
  ['wintypes.h', 'reader.h', 'winscard.h', 'pcsclite.h'].each do |header|
26
27
  ['', 'PCSC/', './pcsc_surrogate_'].each do |path_prefix|
27
28
  if have_header(path_prefix + header)
28
- pcsc_headers.push((path_prefix[0,1] == '.') ? "\"#{path_prefix + header}\"" : "<#{path_prefix + header}>")
29
+ pcsc_headers.push((path_prefix[0,1] == '.') ?
30
+ "\"#{path_prefix + header}\"" :
31
+ "<#{path_prefix + header}>")
29
32
  break
30
33
  end
31
34
  end
@@ -34,9 +37,15 @@ end
34
37
  File.open('pcsc_autogen.h', 'w') do |f|
35
38
  pcsc_defines.each { |d| f.write "\#define #{d}\n" }
36
39
  pcsc_headers.each { |h| f.write "\#include #{h}\n" }
37
- end
40
+ end
41
+
42
+ if have_macro('SCARDHANDLE', ['pcsc_autogen.h']) or
43
+ have_type('SCARDHANDLE', ['pcsc_autogen.h'])
44
+ create_makefile('smartcard/pcsc')
45
+ else
46
+ STDERR.write "PC/SC libraries missing!\n"
47
+ end
38
48
 
39
- create_makefile('smartcard/pcsc')
40
49
 
41
50
  def win32_hack(mf_name)
42
51
  # get the version of MSVC
@@ -50,7 +59,7 @@ def win32_hack(mf_name)
50
59
  return if msvc_ver == 12
51
60
  end
52
61
 
53
- # evil, evil, evil -- hack the makefile to embed the manifest in the extension dll
62
+ # HACK: monkey-patch the makefile to embed a manifest in the extension dll
54
63
  make_contents = File.open(mf_name, 'r') { |f| f.read }
55
64
  make_rules = make_contents.split(/(\n|\r)(\n|\r)+/)
56
65
  new_make_rules = make_rules.map do |rule|
@@ -38,7 +38,8 @@ static VALUE PCSC_ReaderStates_alloc(VALUE klass) {
38
38
  * new(num_states) --> reader_states
39
39
  *
40
40
  * Creates an array of +num_states+ reader state elements.
41
- * The states are unusable until they are assigned reader names by calling ReaderStates#set_reader_name_of.
41
+ * The states are unusable until they are assigned reader names by calling
42
+ * Smartcard::PCSC::ReaderStates#set_reader_name_of.
42
43
  */
43
44
  static VALUE PCSC_ReaderStates_initialize(VALUE self, VALUE rbNumStates) {
44
45
  struct PCSCReaderStates *states;
@@ -77,10 +78,12 @@ static int _validate_readerstates_args(VALUE rbReaderStates, VALUE rbIndex, stru
77
78
  * call-seq:
78
79
  * current_state_of(index) --> current_state
79
80
  *
80
- * The current state (_dwCurrentState_ in PC/SC) in the <tt>index</tt>th reader state element.
81
- * Smartcard::PCSC::Context#get_status_change blocks as long as the reader state equals this value.
81
+ * The current state (_dwCurrentState_ in PC/SC) in the <tt>index</tt>th reader
82
+ * state element. Smartcard::PCSC::Context#get_status_change blocks as long as
83
+ * the reader state equals this value.
82
84
  *
83
- * The returned state is a bitfield; the bits are defined in the Smartcard::PCSC::STATE_ constants.
85
+ * The returned state is a bitfield; the bits are defined in the
86
+ * Smartcard::PCSC::STATE_ constants. See Smartcard::PCSC::STATE_UNAWARE.
84
87
  *
85
88
  * +index+:: the 0-based index of the reader state element to be queried
86
89
  */
@@ -98,10 +101,12 @@ static VALUE PCSC_ReaderStates_current_state_of(VALUE self, VALUE rbIndex) {
98
101
  * call-seq:
99
102
  * event_state_of(index) --> event_state
100
103
  *
101
- * The event state (_dwEventState_ in PC/SC) in the <tt>index</tt>th reader state element.
102
- * Smartcard::PCSC::Context#get_status_change stores the updated reader state in this value.
104
+ * The event state (_dwEventState_ in PC/SC) in the <tt>index</tt>th reader
105
+ * state element. Smartcard::PCSC::Context#get_status_change stores the updated
106
+ * reader state in this value.
103
107
  *
104
- * The returned state is a bitfield; the bits are defined in the Smartcard::PCSC::STATE_ constants.
108
+ * The returned state is a bitfield; the bits are defined in the
109
+ * Smartcard::PCSC::STATE_ constants. See Smartcard::PCSC::STATE_UNAWARE.
105
110
  *
106
111
  * +index+:: the 0-based index of the reader state element to be queried
107
112
  */
data/smartcard.gemspec CHANGED
@@ -1,66 +1,32 @@
1
-
2
- # Gem::Specification for Smartcard-0.3.1
3
- # Originally generated by Echoe
1
+ # -*- encoding: utf-8 -*-
4
2
 
5
3
  Gem::Specification.new do |s|
6
4
  s.name = %q{smartcard}
7
- s.version = "0.3.1"
8
-
9
- s.specification_version = 2 if s.respond_to? :specification_version=
5
+ s.version = "0.3.2"
10
6
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
12
8
  s.authors = ["Victor Costan"]
13
- s.date = %q{2008-05-01}
9
+ s.date = %q{2009-05-31}
14
10
  s.description = %q{Interface with ISO 7816 smart cards.}
15
11
  s.email = %q{victor@costan.us}
16
12
  s.extensions = ["ext/smartcard_pcsc/extconf.rb"]
17
13
  s.extra_rdoc_files = ["BUILD", "CHANGELOG", "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/pcsc_exception.rb", "lib/smartcard.rb", "LICENSE", "README"]
18
- s.files = ["BUILD", "CHANGELOG", "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/pcsc_exception.rb", "lib/smartcard.rb", "LICENSE", "Manifest", "README", "test/test_containers.rb", "test/test_smoke.rb", "tests/ts_pcsc_ext.rb", "smartcard.gemspec"]
19
- s.has_rdoc = true
14
+ s.files = ["BUILD", "CHANGELOG", "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/pcsc_exception.rb", "lib/smartcard.rb", "LICENSE", "Manifest", "README", "test/test_containers.rb", "test/test_smoke.rb", "tests/ts_pcsc_ext.rb", "smartcard.gemspec", "Rakefile"]
20
15
  s.homepage = %q{http://www.costan.us/smartcard}
21
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Smartcard", "--main", "README"]
22
17
  s.require_paths = ["lib", "ext"]
23
18
  s.rubyforge_project = %q{smartcard}
24
- s.rubygems_version = %q{1.1.1}
19
+ s.rubygems_version = %q{1.3.4}
25
20
  s.summary = %q{Interface with ISO 7816 smart cards.}
26
21
  s.test_files = ["test/test_containers.rb", "test/test_smoke.rb"]
27
- end
28
22
 
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
29
26
 
30
- # # Original Rakefile source (requires the Echoe gem):
31
- #
32
- # require 'rubygems'
33
- # gem 'echoe'
34
- # require 'echoe'
35
- #
36
- # Echoe.new('smartcard') do |p|
37
- # p.project = 'smartcard' # rubyforge project
38
- #
39
- # p.author = 'Victor Costan'
40
- # p.email = 'victor@costan.us'
41
- # p.summary = 'Interface with ISO 7816 smart cards.'
42
- # p.url = 'http://www.costan.us/smartcard'
43
- #
44
- # p.need_tar_gz = false
45
- # p.clean_pattern += ['ext/**/*.manifest', 'ext/**/*_autogen.h']
46
- # p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
47
- #
48
- # p.eval = proc do |p|
49
- # if Platform.windows?
50
- # p.files += ['lib/smartcard/pcsc.so']
51
- # p.platform = Gem::Platform::CURRENT
52
- #
53
- # # take out the extension info from the gemspec
54
- # task :postcompile_hacks => [:compile] do
55
- # p.extensions.clear
56
- # end
57
- #
58
- # task :package => [ :clean, :compile, :postcompile_hacks ]
59
- # end
60
- # end
61
- # end
62
- #
63
- # if $0 == __FILE__
64
- # Rake.application = Rake::Application.new
65
- # Rake.application.run
66
- # end
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ else
29
+ end
30
+ else
31
+ end
32
+ 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.3.1
4
+ version: 0.3.2
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: 2008-05-01 00:00:00 -04:00
12
+ date: 2009-05-31 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -64,8 +64,11 @@ files:
64
64
  - test/test_smoke.rb
65
65
  - tests/ts_pcsc_ext.rb
66
66
  - smartcard.gemspec
67
+ - Rakefile
67
68
  has_rdoc: true
68
69
  homepage: http://www.costan.us/smartcard
70
+ licenses: []
71
+
69
72
  post_install_message:
70
73
  rdoc_options:
71
74
  - --line-numbers
@@ -87,14 +90,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
90
  requirements:
88
91
  - - ">="
89
92
  - !ruby/object:Gem::Version
90
- version: "0"
93
+ version: "1.2"
91
94
  version:
92
95
  requirements: []
93
96
 
94
97
  rubyforge_project: smartcard
95
- rubygems_version: 1.1.1
98
+ rubygems_version: 1.3.4
96
99
  signing_key:
97
- specification_version: 2
100
+ specification_version: 3
98
101
  summary: Interface with ISO 7816 smart cards.
99
102
  test_files:
100
103
  - test/test_containers.rb