smartcard 0.5.4 → 0.5.5
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/BUILD +10 -0
- data/CHANGELOG +4 -2
- data/Rakefile +9 -9
- data/lib/smartcard/pcsc/card.rb +51 -55
- data/lib/smartcard/pcsc/ffi_autogen.rb +166 -166
- data/smartcard.gemspec +19 -19
- data/tasks/ffi_codegen.rb +26 -25
- metadata +94 -110
data/smartcard.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "smartcard"
|
5
|
-
s.version = "0.5.
|
5
|
+
s.version = "0.5.5"
|
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 = "2012-
|
9
|
+
s.date = "2012-12-18"
|
10
10
|
s.description = "Interface with ISO 7816 smart cards."
|
11
11
|
s.email = "victor@costan.us"
|
12
12
|
s.extra_rdoc_files = ["BUILD", "CHANGELOG", "LICENSE", "README", "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/card.rb", "lib/smartcard/pcsc/context.rb", "lib/smartcard/pcsc/exception.rb", "lib/smartcard/pcsc/ffi_autogen.rb", "lib/smartcard/pcsc/ffi_functions.rb", "lib/smartcard/pcsc/ffi_lib.rb", "lib/smartcard/pcsc/ffi_structs.rb", "lib/smartcard/pcsc/reader_state_queries.rb", "tasks/ffi_codegen.rb"]
|
@@ -15,31 +15,31 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Smartcard", "--main", "README"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = "smartcard"
|
18
|
-
s.rubygems_version = "1.8.
|
18
|
+
s.rubygems_version = "1.8.24"
|
19
19
|
s.summary = "Interface with ISO 7816 smart cards."
|
20
|
-
s.test_files = ["test/
|
20
|
+
s.test_files = ["test/iso/jcop_remote_test.rb", "test/iso/auto_configurator_test.rb", "test/iso/iso_card_mixin_test.rb", "test/iso/iso_exception_test.rb", "test/gp/des_test.rb", "test/gp/gp_card_mixin_compat_test.rb", "test/gp/gp_card_mixin_test.rb", "test/gp/asn1_ber_test.rb", "test/gp/cap_loader_test.rb", "test/pcsc/card_test.rb", "test/pcsc/exception_test.rb", "test/pcsc/reader_state_queries_test.rb", "test/pcsc/context_test.rb"]
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
s.specification_version = 3
|
24
24
|
|
25
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
-
s.add_runtime_dependency(%q<ffi>, [">=
|
27
|
-
s.add_runtime_dependency(%q<rubyzip>, [">= 0.9.
|
28
|
-
s.add_runtime_dependency(%q<zerg_support>, [">= 0.1.
|
29
|
-
s.add_development_dependency(%q<echoe>, [">= 3
|
30
|
-
s.add_development_dependency(%q<flexmock>, [">=
|
26
|
+
s.add_runtime_dependency(%q<ffi>, [">= 1.2.0"])
|
27
|
+
s.add_runtime_dependency(%q<rubyzip>, [">= 0.9.9"])
|
28
|
+
s.add_runtime_dependency(%q<zerg_support>, [">= 0.1.6"])
|
29
|
+
s.add_development_dependency(%q<echoe>, [">= 4.6.3"])
|
30
|
+
s.add_development_dependency(%q<flexmock>, [">= 1.2.0"])
|
31
31
|
else
|
32
|
-
s.add_dependency(%q<ffi>, [">=
|
33
|
-
s.add_dependency(%q<rubyzip>, [">= 0.9.
|
34
|
-
s.add_dependency(%q<zerg_support>, [">= 0.1.
|
35
|
-
s.add_dependency(%q<echoe>, [">= 3
|
36
|
-
s.add_dependency(%q<flexmock>, [">=
|
32
|
+
s.add_dependency(%q<ffi>, [">= 1.2.0"])
|
33
|
+
s.add_dependency(%q<rubyzip>, [">= 0.9.9"])
|
34
|
+
s.add_dependency(%q<zerg_support>, [">= 0.1.6"])
|
35
|
+
s.add_dependency(%q<echoe>, [">= 4.6.3"])
|
36
|
+
s.add_dependency(%q<flexmock>, [">= 1.2.0"])
|
37
37
|
end
|
38
38
|
else
|
39
|
-
s.add_dependency(%q<ffi>, [">=
|
40
|
-
s.add_dependency(%q<rubyzip>, [">= 0.9.
|
41
|
-
s.add_dependency(%q<zerg_support>, [">= 0.1.
|
42
|
-
s.add_dependency(%q<echoe>, [">= 3
|
43
|
-
s.add_dependency(%q<flexmock>, [">=
|
39
|
+
s.add_dependency(%q<ffi>, [">= 1.2.0"])
|
40
|
+
s.add_dependency(%q<rubyzip>, [">= 0.9.9"])
|
41
|
+
s.add_dependency(%q<zerg_support>, [">= 0.1.6"])
|
42
|
+
s.add_dependency(%q<echoe>, [">= 4.6.3"])
|
43
|
+
s.add_dependency(%q<flexmock>, [">= 1.2.0"])
|
44
44
|
end
|
45
45
|
end
|
data/tasks/ffi_codegen.rb
CHANGED
@@ -16,16 +16,16 @@ end
|
|
16
16
|
|
17
17
|
# :nodoc: namespace
|
18
18
|
module Smartcard
|
19
|
-
|
20
|
-
module Tasks
|
21
|
-
def self.resolve_constants(pattern, format)
|
19
|
+
|
20
|
+
module Tasks
|
21
|
+
def self.resolve_constants(pattern, format)
|
22
22
|
if FFI::Platform.mac?
|
23
23
|
header_path = '/System/Library/Frameworks/PCSC.framework/Headers/'
|
24
24
|
else
|
25
25
|
header_path = '/usr/include/PCSC/'
|
26
26
|
end
|
27
27
|
headers = Dir.glob(header_path + '*.h').map { |f| File.basename f }
|
28
|
-
|
28
|
+
|
29
29
|
consts = Set.new
|
30
30
|
headers.each do |header|
|
31
31
|
File.read("#{header_path}#{header}").each_line do |line|
|
@@ -35,38 +35,39 @@ module Tasks
|
|
35
35
|
consts << tokens[1] if pattern =~ tokens[1]
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
p consts
|
39
|
+
|
39
40
|
const_gen = FFI::ConstGenerator.new(nil,
|
40
|
-
:cppflags => "-w -I#{header_path}") do |g|
|
41
|
+
:cppflags => "-w -I#{header_path}") do |g|
|
41
42
|
headers.each { |header| g.include header }
|
42
43
|
consts.each { |const| g.const const, format }
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
const_gen.constants
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
def self.output_constants(constants, f)
|
49
50
|
constants.each do |name, const|
|
50
51
|
f.write " #{const.to_ruby}\n"
|
51
52
|
end
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
def self.output_enum(enum_name, constants, name_regexp, f)
|
55
56
|
f.write " #{enum_name} = enum [\n"
|
56
|
-
|
57
|
+
|
57
58
|
re = Regexp.new('^' + name_regexp + '$')
|
58
59
|
constants.each do |name, const|
|
59
60
|
ruby_name = re.match(name)[1]
|
60
|
-
f.write " :#{ruby_name.downcase}, Consts::#{name},\n"
|
61
|
+
f.write " :#{ruby_name.downcase}, Consts::#{name},\n"
|
61
62
|
end
|
62
|
-
|
63
|
+
|
63
64
|
f.write " ]\n"
|
64
65
|
end
|
65
66
|
|
66
67
|
def self.generate_ffi_header
|
67
68
|
File.open('lib/smartcard/pcsc/ffi_autogen.rb', 'w') do |f|
|
68
69
|
f.write "# Automatically generated by tasks/ffi_codegen.rb\n\n"
|
69
|
-
|
70
|
+
|
70
71
|
# Return codes.
|
71
72
|
stat_consts = resolve_constants(/^SCARD_(E|S|W)_.*$/, '0x%08X')
|
72
73
|
# Context scopes.
|
@@ -85,12 +86,12 @@ module Tasks
|
|
85
86
|
reader_state_consts = resolve_constants(/^SCARD_[^_]*$/, '0x%08X')
|
86
87
|
# Misc constants.
|
87
88
|
misc_consts = resolve_constants(/^MAX_ATR_SIZE|INFINITE$/, '0x%08X')
|
88
|
-
|
89
|
+
|
89
90
|
f.write "# :nodoc: namespace\n"
|
90
91
|
f.write "module Smartcard::PCSC\n\n"
|
91
92
|
f.write "# :nodoc: auto-generated\n"
|
92
93
|
f.write "module FFILib\n"
|
93
|
-
|
94
|
+
|
94
95
|
f.write " # Constant values extracted from headers.\n"
|
95
96
|
f.write " module Consts\n"
|
96
97
|
output_constants stat_consts, f
|
@@ -103,40 +104,40 @@ module Tasks
|
|
103
104
|
output_constants reader_state_consts, f
|
104
105
|
output_constants misc_consts, f
|
105
106
|
f.write " end # module Smartcard::PCSC::FFILib::Consts\n\n"
|
106
|
-
|
107
|
+
|
107
108
|
f.write " # Error codes returned by the PCSC functions.\n"
|
108
109
|
output_enum 'Status', stat_consts, 'SCARD_._(.*)', f
|
109
110
|
f.write "\n"
|
110
|
-
|
111
|
+
|
111
112
|
f.write " # Values for the context's scope.\n"
|
112
113
|
output_enum 'Scope', scope_consts, 'SCARD_SCOPE_(.*)', f
|
113
114
|
f.write "\n"
|
114
|
-
|
115
|
+
|
115
116
|
f.write " # Smart-card communication protocols.\n"
|
116
117
|
output_enum 'Protocol', proto_consts, 'SCARD_PROTOCOL_(.*)', f
|
117
118
|
f.write "\n"
|
118
|
-
|
119
|
+
|
119
120
|
f.write " # Smart-card sharing modes.\n"
|
120
121
|
output_enum 'Share', share_consts, 'SCARD_SHARE_(.*)', f
|
121
122
|
f.write "\n"
|
122
|
-
|
123
|
+
|
123
124
|
f.write " # Smart-card dispositions.\n"
|
124
125
|
output_enum 'Disposition', disp_consts, 'SCARD_(.*)_CARD', f
|
125
126
|
f.write "\n"
|
126
|
-
|
127
|
+
|
127
128
|
f.write " # Smart-card reader attributes.\n"
|
128
129
|
output_enum 'Attribute', attr_consts, 'SCARD_ATTR_(.*)', f
|
129
130
|
f.write "\n"
|
130
|
-
|
131
|
+
|
131
132
|
f.write " # Smart-card states.\n"
|
132
133
|
output_enum 'CardState', card_state_consts, 'SCARD_STATE_(.*)', f
|
133
134
|
f.write "\n"
|
134
|
-
|
135
|
+
|
135
136
|
f.write " # Smart-card reader states.\n"
|
136
137
|
output_enum 'State', reader_state_consts, 'SCARD_(.*)', f
|
137
138
|
f.write "\n"
|
138
|
-
|
139
|
-
|
139
|
+
|
140
|
+
|
140
141
|
f.write "end # module Smartcard::PCSC::FFILib\n"
|
141
142
|
f.write "end # namespace Smartcard::PCSC\n"
|
142
143
|
end
|
metadata
CHANGED
@@ -1,108 +1,101 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartcard
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 4
|
10
|
-
version: 0.5.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Victor Costan
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-12-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: ffi
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 5
|
32
|
-
- 3
|
33
|
-
version: 0.5.3
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.2.0
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rubyzip
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rubyzip
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
40
33
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
- 9
|
48
|
-
- 1
|
49
|
-
version: 0.9.1
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.9.9
|
50
38
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: zerg_support
|
54
39
|
prerelease: false
|
55
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.9.9
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: zerg_support
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
56
49
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
- 1
|
64
|
-
- 5
|
65
|
-
version: 0.1.5
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.1.6
|
66
54
|
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: echoe
|
70
55
|
prerelease: false
|
71
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
57
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.6
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: echoe
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.6.3
|
81
70
|
type: :development
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: flexmock
|
85
71
|
prerelease: false
|
86
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
73
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 4.6.3
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: flexmock
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.2.0
|
97
86
|
type: :development
|
98
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.2.0
|
99
94
|
description: Interface with ISO 7816 smart cards.
|
100
95
|
email: victor@costan.us
|
101
96
|
executables: []
|
102
|
-
|
103
97
|
extensions: []
|
104
|
-
|
105
|
-
extra_rdoc_files:
|
98
|
+
extra_rdoc_files:
|
106
99
|
- BUILD
|
107
100
|
- CHANGELOG
|
108
101
|
- LICENSE
|
@@ -129,7 +122,7 @@ extra_rdoc_files:
|
|
129
122
|
- lib/smartcard/pcsc/ffi_structs.rb
|
130
123
|
- lib/smartcard/pcsc/reader_state_queries.rb
|
131
124
|
- tasks/ffi_codegen.rb
|
132
|
-
files:
|
125
|
+
files:
|
133
126
|
- BUILD
|
134
127
|
- CHANGELOG
|
135
128
|
- LICENSE
|
@@ -176,54 +169,45 @@ files:
|
|
176
169
|
- smartcard.gemspec
|
177
170
|
homepage: http://www.costan.us/smartcard
|
178
171
|
licenses: []
|
179
|
-
|
180
172
|
post_install_message:
|
181
|
-
rdoc_options:
|
173
|
+
rdoc_options:
|
182
174
|
- --line-numbers
|
183
175
|
- --inline-source
|
184
176
|
- --title
|
185
177
|
- Smartcard
|
186
178
|
- --main
|
187
179
|
- README
|
188
|
-
require_paths:
|
180
|
+
require_paths:
|
189
181
|
- lib
|
190
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
191
183
|
none: false
|
192
|
-
requirements:
|
193
|
-
- -
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
|
196
|
-
|
197
|
-
- 0
|
198
|
-
version: "0"
|
199
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ! '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
189
|
none: false
|
201
|
-
requirements:
|
202
|
-
- -
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
|
205
|
-
segments:
|
206
|
-
- 1
|
207
|
-
- 2
|
208
|
-
version: "1.2"
|
190
|
+
requirements:
|
191
|
+
- - ! '>='
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '1.2'
|
209
194
|
requirements: []
|
210
|
-
|
211
195
|
rubyforge_project: smartcard
|
212
|
-
rubygems_version: 1.8.
|
196
|
+
rubygems_version: 1.8.24
|
213
197
|
signing_key:
|
214
198
|
specification_version: 3
|
215
199
|
summary: Interface with ISO 7816 smart cards.
|
216
|
-
test_files:
|
217
|
-
- test/
|
218
|
-
- test/gp/cap_loader_test.rb
|
219
|
-
- test/gp/des_test.rb
|
220
|
-
- test/gp/gp_card_mixin_compat_test.rb
|
221
|
-
- test/gp/gp_card_mixin_test.rb
|
200
|
+
test_files:
|
201
|
+
- test/iso/jcop_remote_test.rb
|
222
202
|
- test/iso/auto_configurator_test.rb
|
223
203
|
- test/iso/iso_card_mixin_test.rb
|
224
204
|
- test/iso/iso_exception_test.rb
|
225
|
-
- test/
|
205
|
+
- test/gp/des_test.rb
|
206
|
+
- test/gp/gp_card_mixin_compat_test.rb
|
207
|
+
- test/gp/gp_card_mixin_test.rb
|
208
|
+
- test/gp/asn1_ber_test.rb
|
209
|
+
- test/gp/cap_loader_test.rb
|
226
210
|
- test/pcsc/card_test.rb
|
227
|
-
- test/pcsc/context_test.rb
|
228
211
|
- test/pcsc/exception_test.rb
|
229
212
|
- test/pcsc/reader_state_queries_test.rb
|
213
|
+
- test/pcsc/context_test.rb
|