smartcard 0.4.11 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/Manifest +11 -16
- data/Rakefile +9 -16
- data/lib/smartcard.rb +11 -2
- data/lib/smartcard/iso/pcsc_transport.rb +22 -37
- data/lib/smartcard/pcsc/card.rb +281 -0
- data/lib/smartcard/pcsc/context.rb +160 -0
- data/lib/smartcard/pcsc/ffi_autogen.rb +327 -0
- data/lib/smartcard/pcsc/ffi_functions.rb +50 -0
- data/lib/smartcard/pcsc/ffi_lib.rb +38 -0
- data/lib/smartcard/pcsc/ffi_structs.rb +57 -0
- data/lib/smartcard/pcsc/pcsc_exception.rb +8 -3
- data/lib/smartcard/pcsc/reader_state_queries.rb +167 -0
- data/smartcard.gemspec +9 -7
- data/tasks/ffi_codegen.rb +145 -0
- data/test/pcsc/card_test.rb +68 -0
- data/test/pcsc/context_test.rb +64 -0
- data/test/pcsc/reader_state_queries_test.rb +72 -0
- metadata +42 -42
- data/ext/smartcard_pcsc/extconf.rb +0 -79
- data/ext/smartcard_pcsc/pcsc.h +0 -52
- data/ext/smartcard_pcsc/pcsc_card.c +0 -492
- data/ext/smartcard_pcsc/pcsc_constants.c +0 -195
- data/ext/smartcard_pcsc/pcsc_context.c +0 -290
- data/ext/smartcard_pcsc/pcsc_exception.c +0 -39
- data/ext/smartcard_pcsc/pcsc_io_request.c +0 -129
- data/ext/smartcard_pcsc/pcsc_main.c +0 -11
- data/ext/smartcard_pcsc/pcsc_multi_strings.c +0 -70
- data/ext/smartcard_pcsc/pcsc_namespace.c +0 -18
- data/ext/smartcard_pcsc/pcsc_reader_states.c +0 -331
- data/ext/smartcard_pcsc/pcsc_surrogate_reader.h +0 -207
- data/ext/smartcard_pcsc/pcsc_surrogate_wintypes.h +0 -63
- data/test/pcsc/containers_test.rb +0 -59
- data/test/pcsc/smoke_test.rb +0 -28
- data/tests/ts_pcsc_ext.rb +0 -76
@@ -0,0 +1,68 @@
|
|
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
|
+
|
10
|
+
class CardTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@context = Smartcard::PCSC::Context.new
|
13
|
+
@reader = @context.readers.first
|
14
|
+
@card = @context.card @reader, :shared
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
@card.disconnect
|
19
|
+
@context.release
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_reconnect
|
23
|
+
@card.reconnect :shared
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_transaction
|
27
|
+
@card.begin_transaction
|
28
|
+
@card.end_transaction
|
29
|
+
|
30
|
+
@card.transaction { }
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_transmit
|
34
|
+
response = @card.transmit [0x00, 0xA4, 0x04, 0x00, 0x00].pack('C*')
|
35
|
+
assert_equal [0x90, 0x00], response[-2, 2].unpack('C*'),
|
36
|
+
'In transmit: SELECT with no AID should always return OK'
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_info
|
40
|
+
info = @card.info
|
41
|
+
assert_operator info[:atr], :kind_of?, String,
|
42
|
+
"The card's ATR should be a string"
|
43
|
+
assert_operator info[:readers], :include?, @reader,
|
44
|
+
"The card's readers list should have the canonical reader"
|
45
|
+
assert_operator info[:protocol], :kind_of?, Symbol, "The card's protocol"
|
46
|
+
assert_operator info[:state], :include?, :present,
|
47
|
+
"The card's state should reflect the card's presence"
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_get_attribute
|
51
|
+
vendor_name = @card[:vendor_name]
|
52
|
+
assert_operator vendor_name, :kind_of?, String,
|
53
|
+
'IFD attributes should be strings'
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_set_attribute
|
57
|
+
assert_raise Smartcard::PCSC::Exception do
|
58
|
+
@card[:atr_string] = "\0"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_control
|
63
|
+
# This only works with GemPlus readers... any other suggestions?
|
64
|
+
assert_raise(Smartcard::PCSC::Exception, 'Control sequence') do
|
65
|
+
ctl_response = @card.control 0x42000001, [0x02].pack('C*')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,64 @@
|
|
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
|
+
|
10
|
+
class ContextTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@context = Smartcard::PCSC::Context.new :system
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
@context.release
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_reader_groups
|
20
|
+
groups = @context.reader_groups
|
21
|
+
assert_operator groups, :kind_of?, Enumerable,
|
22
|
+
'reader_groups should produce an array'
|
23
|
+
assert_operator groups.length, :>=, 1, 'reader_groups should be non-empty'
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_readers_without_groups
|
27
|
+
readers = @context.readers
|
28
|
+
_check_readers readers
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_readers_with_groups
|
32
|
+
readers = @context.readers @context.reader_groups
|
33
|
+
_check_readers readers
|
34
|
+
end
|
35
|
+
|
36
|
+
def _check_readers(readers)
|
37
|
+
assert_operator readers, :kind_of?, Enumerable,
|
38
|
+
'readers (without argument) should produce an array'
|
39
|
+
readers.each do |reader|
|
40
|
+
assert_operator reader, :kind_of?, String,
|
41
|
+
'each reader name should be a string'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_wait_for_status_change
|
46
|
+
readers = @context.readers
|
47
|
+
queries = Smartcard::PCSC::ReaderStateQueries.new readers.length
|
48
|
+
readers.each_with_index do |name, index|
|
49
|
+
queries[index].reader_name = name
|
50
|
+
queries[index].current_state = :unknown
|
51
|
+
end
|
52
|
+
|
53
|
+
@context.wait_for_status_change queries
|
54
|
+
|
55
|
+
readers.each_with_index do |name, index|
|
56
|
+
query = queries[index]
|
57
|
+
assert_equal name, query.reader_name,
|
58
|
+
'Reader name changed during wait_for_status_change'
|
59
|
+
assert_operator query.atr, :kind_of?, String, 'ATR should be a string'
|
60
|
+
assert_operator query.event_state, :include?, :changed,
|
61
|
+
'event_state must have changed from :unknown'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,72 @@
|
|
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
|
+
|
10
|
+
class ReaderStatesTest < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@queries = Smartcard::PCSC::ReaderStateQueries.new 2
|
13
|
+
|
14
|
+
@queries[1].current_state = :atrmatch
|
15
|
+
@queries[0].current_state = [:inuse, :exclusive]
|
16
|
+
@queries[0].event_state = :ignore
|
17
|
+
@queries[1].event_state = [:present, :unpowered]
|
18
|
+
@queries[1].atr = "Ruby\0rocks!"
|
19
|
+
@queries[0].atr = 'grreat success'
|
20
|
+
@queries[0].reader_name = 'PC/SC Reader 0'
|
21
|
+
@queries[1].reader_name = 'CCID Reader 1'
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_length
|
28
|
+
assert_equal 2, @queries.length
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_atr
|
32
|
+
assert_equal "Ruby\0rocks!", @queries[1].atr
|
33
|
+
assert_equal 'grreat success', @queries[0].atr
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_atr_reassign
|
37
|
+
@queries[1].atr = 'even more success'
|
38
|
+
assert_equal 'even more success', @queries[1].atr
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_states
|
42
|
+
assert_equal Set.new([:atrmatch]), @queries[1].current_state,
|
43
|
+
'current_state'
|
44
|
+
assert_equal Set.new([:inuse, :exclusive]), @queries[0].current_state,
|
45
|
+
'current_state'
|
46
|
+
|
47
|
+
assert_equal Set.new([:ignore]), @queries[0].event_state,
|
48
|
+
'event_state'
|
49
|
+
assert_equal Set.new([:present, :unpowered]), @queries[1].event_state,
|
50
|
+
'event_state'
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_reader_names
|
54
|
+
assert_equal 'PC/SC Reader 0', @queries[0].reader_name
|
55
|
+
assert_equal 'CCID Reader 1', @queries[1].reader_name
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_ack_changes
|
59
|
+
@queries.ack_changes
|
60
|
+
|
61
|
+
assert_equal Set.new([:ignore]), @queries[0].current_state
|
62
|
+
assert_equal Set.new([:present, :unpowered]), @queries[1].current_state
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_invalid_indexes
|
66
|
+
[[5, IndexError], [2, IndexError], [nil, TypeError]].each do |test_case|
|
67
|
+
assert_raise test_case.last, test_case.inspect do
|
68
|
+
@queries[test_case.first]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
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
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,9 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-27 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ffi
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.5.3
|
24
|
+
version:
|
15
25
|
- !ruby/object:Gem::Dependency
|
16
26
|
name: rubyzip
|
17
27
|
type: :runtime
|
@@ -56,26 +66,13 @@ description: Interface with ISO 7816 smart cards.
|
|
56
66
|
email: victor@costan.us
|
57
67
|
executables: []
|
58
68
|
|
59
|
-
extensions:
|
60
|
-
|
69
|
+
extensions: []
|
70
|
+
|
61
71
|
extra_rdoc_files:
|
62
72
|
- BUILD
|
63
73
|
- CHANGELOG
|
64
74
|
- LICENSE
|
65
75
|
- README
|
66
|
-
- ext/smartcard_pcsc/extconf.rb
|
67
|
-
- ext/smartcard_pcsc/pcsc.h
|
68
|
-
- ext/smartcard_pcsc/pcsc_card.c
|
69
|
-
- ext/smartcard_pcsc/pcsc_constants.c
|
70
|
-
- ext/smartcard_pcsc/pcsc_context.c
|
71
|
-
- ext/smartcard_pcsc/pcsc_exception.c
|
72
|
-
- ext/smartcard_pcsc/pcsc_io_request.c
|
73
|
-
- ext/smartcard_pcsc/pcsc_main.c
|
74
|
-
- ext/smartcard_pcsc/pcsc_multi_strings.c
|
75
|
-
- ext/smartcard_pcsc/pcsc_namespace.c
|
76
|
-
- ext/smartcard_pcsc/pcsc_reader_states.c
|
77
|
-
- ext/smartcard_pcsc/pcsc_surrogate_reader.h
|
78
|
-
- ext/smartcard_pcsc/pcsc_surrogate_wintypes.h
|
79
76
|
- lib/smartcard.rb
|
80
77
|
- lib/smartcard/gp/asn1_ber.rb
|
81
78
|
- lib/smartcard/gp/cap_loader.rb
|
@@ -89,7 +86,15 @@ extra_rdoc_files:
|
|
89
86
|
- lib/smartcard/iso/jcop_remote_transport.rb
|
90
87
|
- lib/smartcard/iso/pcsc_transport.rb
|
91
88
|
- lib/smartcard/iso/transport.rb
|
89
|
+
- lib/smartcard/pcsc/card.rb
|
90
|
+
- lib/smartcard/pcsc/context.rb
|
91
|
+
- lib/smartcard/pcsc/ffi_autogen.rb
|
92
|
+
- lib/smartcard/pcsc/ffi_functions.rb
|
93
|
+
- lib/smartcard/pcsc/ffi_lib.rb
|
94
|
+
- lib/smartcard/pcsc/ffi_structs.rb
|
92
95
|
- lib/smartcard/pcsc/pcsc_exception.rb
|
96
|
+
- lib/smartcard/pcsc/reader_state_queries.rb
|
97
|
+
- tasks/ffi_codegen.rb
|
93
98
|
files:
|
94
99
|
- BUILD
|
95
100
|
- CHANGELOG
|
@@ -97,19 +102,6 @@ files:
|
|
97
102
|
- Manifest
|
98
103
|
- README
|
99
104
|
- Rakefile
|
100
|
-
- ext/smartcard_pcsc/extconf.rb
|
101
|
-
- ext/smartcard_pcsc/pcsc.h
|
102
|
-
- ext/smartcard_pcsc/pcsc_card.c
|
103
|
-
- ext/smartcard_pcsc/pcsc_constants.c
|
104
|
-
- ext/smartcard_pcsc/pcsc_context.c
|
105
|
-
- ext/smartcard_pcsc/pcsc_exception.c
|
106
|
-
- ext/smartcard_pcsc/pcsc_io_request.c
|
107
|
-
- ext/smartcard_pcsc/pcsc_main.c
|
108
|
-
- ext/smartcard_pcsc/pcsc_multi_strings.c
|
109
|
-
- ext/smartcard_pcsc/pcsc_namespace.c
|
110
|
-
- ext/smartcard_pcsc/pcsc_reader_states.c
|
111
|
-
- ext/smartcard_pcsc/pcsc_surrogate_reader.h
|
112
|
-
- ext/smartcard_pcsc/pcsc_surrogate_wintypes.h
|
113
105
|
- lib/smartcard.rb
|
114
106
|
- lib/smartcard/gp/asn1_ber.rb
|
115
107
|
- lib/smartcard/gp/cap_loader.rb
|
@@ -123,7 +115,15 @@ files:
|
|
123
115
|
- lib/smartcard/iso/jcop_remote_transport.rb
|
124
116
|
- lib/smartcard/iso/pcsc_transport.rb
|
125
117
|
- lib/smartcard/iso/transport.rb
|
118
|
+
- lib/smartcard/pcsc/card.rb
|
119
|
+
- lib/smartcard/pcsc/context.rb
|
120
|
+
- lib/smartcard/pcsc/ffi_autogen.rb
|
121
|
+
- lib/smartcard/pcsc/ffi_functions.rb
|
122
|
+
- lib/smartcard/pcsc/ffi_lib.rb
|
123
|
+
- lib/smartcard/pcsc/ffi_structs.rb
|
126
124
|
- lib/smartcard/pcsc/pcsc_exception.rb
|
125
|
+
- lib/smartcard/pcsc/reader_state_queries.rb
|
126
|
+
- tasks/ffi_codegen.rb
|
127
127
|
- test/gp/asn1_ber_test.rb
|
128
128
|
- test/gp/cap_loader_test.rb
|
129
129
|
- test/gp/des_test.rb
|
@@ -135,9 +135,9 @@ files:
|
|
135
135
|
- test/iso/iso_card_mixin_test.rb
|
136
136
|
- test/iso/iso_exception_test.rb
|
137
137
|
- test/iso/jcop_remote_test.rb
|
138
|
-
- test/pcsc/
|
139
|
-
- test/pcsc/
|
140
|
-
-
|
138
|
+
- test/pcsc/card_test.rb
|
139
|
+
- test/pcsc/context_test.rb
|
140
|
+
- test/pcsc/reader_state_queries_test.rb
|
141
141
|
- smartcard.gemspec
|
142
142
|
has_rdoc: true
|
143
143
|
homepage: http://www.costan.us/smartcard
|
@@ -153,7 +153,6 @@ rdoc_options:
|
|
153
153
|
- README
|
154
154
|
require_paths:
|
155
155
|
- lib
|
156
|
-
- ext
|
157
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
158
157
|
requirements:
|
159
158
|
- - ">="
|
@@ -174,14 +173,15 @@ signing_key:
|
|
174
173
|
specification_version: 3
|
175
174
|
summary: Interface with ISO 7816 smart cards.
|
176
175
|
test_files:
|
177
|
-
- test/gp/asn1_ber_test.rb
|
178
|
-
- test/gp/cap_loader_test.rb
|
179
|
-
- test/gp/des_test.rb
|
180
|
-
- test/gp/gp_card_mixin_compat_test.rb
|
181
|
-
- test/gp/gp_card_mixin_test.rb
|
182
|
-
- test/iso/auto_configurator_test.rb
|
183
176
|
- test/iso/iso_card_mixin_test.rb
|
177
|
+
- test/iso/auto_configurator_test.rb
|
184
178
|
- test/iso/iso_exception_test.rb
|
185
179
|
- test/iso/jcop_remote_test.rb
|
186
|
-
- test/pcsc/
|
187
|
-
- test/pcsc/
|
180
|
+
- test/pcsc/card_test.rb
|
181
|
+
- test/pcsc/context_test.rb
|
182
|
+
- test/pcsc/reader_state_queries_test.rb
|
183
|
+
- test/gp/gp_card_mixin_test.rb
|
184
|
+
- test/gp/gp_card_mixin_compat_test.rb
|
185
|
+
- test/gp/cap_loader_test.rb
|
186
|
+
- test/gp/asn1_ber_test.rb
|
187
|
+
- test/gp/des_test.rb
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'mkmf'
|
2
|
-
|
3
|
-
$CFLAGS ||= ''
|
4
|
-
$LDFLAGS ||= ''
|
5
|
-
|
6
|
-
pcsc_defines = []
|
7
|
-
|
8
|
-
if RUBY_PLATFORM =~ /darwin/
|
9
|
-
$LDFLAGS += ' -framework PCSC'
|
10
|
-
darwin_version = `uname -r`
|
11
|
-
if darwin_version =~ /^8./
|
12
|
-
pcsc_defines.push 'RB_SMARTCARD_OSX_TIGER_HACK'
|
13
|
-
end
|
14
|
-
elsif RUBY_PLATFORM =~ /win/
|
15
|
-
have_library('winscard')
|
16
|
-
unless have_library('winscard', 'SCardIsValidContext')
|
17
|
-
pcsc_defines << 'PCSC_SURROGATE_SCARD_IS_VALID_CONTEXT'
|
18
|
-
end
|
19
|
-
else
|
20
|
-
# pcsclite is retarded and uses stuff like '#include <wintypes.h>'
|
21
|
-
$CFLAGS += ' -I /usr/include/PCSC -I /usr/local/include/PCSC'
|
22
|
-
have_library('pcsclite')
|
23
|
-
end
|
24
|
-
|
25
|
-
pcsc_headers = []
|
26
|
-
['wintypes.h', 'reader.h', 'winscard.h', 'pcsclite.h'].each do |header|
|
27
|
-
['', 'PCSC/', './pcsc_surrogate_'].each do |path_prefix|
|
28
|
-
if have_header(path_prefix + header)
|
29
|
-
pcsc_headers.push((path_prefix[0,1] == '.') ?
|
30
|
-
"\"#{path_prefix + header}\"" :
|
31
|
-
"<#{path_prefix + header}>")
|
32
|
-
break
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
File.open('pcsc_autogen.h', 'w') do |f|
|
38
|
-
pcsc_defines.each { |d| f.write "\#define #{d}\n" }
|
39
|
-
pcsc_headers.each { |h| f.write "\#include #{h}\n" }
|
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
|
48
|
-
|
49
|
-
|
50
|
-
def win32_hack(mf_name)
|
51
|
-
# get the version of MSVC
|
52
|
-
Kernel.system `cl 2> msvc_version.txt`
|
53
|
-
msvc_logo = File.open('msvc_version.txt') { |f| f.read }
|
54
|
-
print msvc_logo
|
55
|
-
File.delete 'msvc_version.txt'
|
56
|
-
if msvc_logo =~ /Optimizing Compiler Version (\d+)/
|
57
|
-
msvc_ver = $1.to_i
|
58
|
-
# for MSVC 6.0, no manifest BS is needed -- straight-up compilation is good
|
59
|
-
return if msvc_ver == 12
|
60
|
-
end
|
61
|
-
|
62
|
-
# HACK: monkey-patch the makefile to embed a manifest in the extension dll
|
63
|
-
make_contents = File.open(mf_name, 'r') { |f| f.read }
|
64
|
-
make_rules = make_contents.split(/(\n|\r)(\n|\r)+/)
|
65
|
-
new_make_rules = make_rules.map do |rule|
|
66
|
-
if rule =~ /^\$\(DLLIB\)\:/
|
67
|
-
rule + "\n\tmt.exe -manifest $(@).manifest -outputresource:$(@);2"
|
68
|
-
else
|
69
|
-
rule
|
70
|
-
end
|
71
|
-
end
|
72
|
-
File.open(mf_name, 'w') { |f| f.write new_make_rules.join("\n\n")}
|
73
|
-
end
|
74
|
-
|
75
|
-
case RUBY_PLATFORM
|
76
|
-
when /darwin/
|
77
|
-
when /win/
|
78
|
-
win32_hack 'Makefile'
|
79
|
-
end
|
data/ext/smartcard_pcsc/pcsc.h
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
/* Ruby extension API. */
|
2
|
-
#include <ruby.h>
|
3
|
-
/* Generated by 'extconf.rb' to point to the PC/SC header. */
|
4
|
-
#include "pcsc_autogen.h"
|
5
|
-
|
6
|
-
/* Entrypoint into the Ruby extension. */
|
7
|
-
void Init_pcsc();
|
8
|
-
|
9
|
-
/* Namespace structure. */
|
10
|
-
extern VALUE mSmartcard; /* Smartcard module / namespace */
|
11
|
-
extern VALUE mPcsc; /* Smartcard::PCSC module / namespace */
|
12
|
-
|
13
|
-
/* Class Smartcard::PCSC::ReaderStates */
|
14
|
-
extern VALUE cPcscReaderStates;
|
15
|
-
void Init_PCSC_ReaderStates();
|
16
|
-
int _PCSC_ReaderStates_lowlevel_get(VALUE rbReaderStates, SCARD_READERSTATE **reader_states, size_t *reader_states_count);
|
17
|
-
|
18
|
-
/* Class Smartcard::PCSC::IoRequest */
|
19
|
-
extern VALUE cPcscIoRequest;
|
20
|
-
void Init_PCSC_IoRequest();
|
21
|
-
int _PCSC_IoRequest_lowlevel_get(VALUE rbIoRequest, SCARD_IO_REQUEST **io_request);
|
22
|
-
VALUE _PCSC_IoRequest_lowlevel_new(const SCARD_IO_REQUEST *io_request);
|
23
|
-
|
24
|
-
/* Class Smartcard::PCSC::Context */
|
25
|
-
extern VALUE cPcscContext;
|
26
|
-
void Init_PCSC_Context();
|
27
|
-
int _PCSC_Context_lowlevel_get(VALUE rbContext, SCARDCONTEXT *pcsc_context);
|
28
|
-
|
29
|
-
/* Class Smartcard::PCSC::Card */
|
30
|
-
extern VALUE cPcscCard;
|
31
|
-
void Init_PCSC_Card();
|
32
|
-
int _PCSC_Card_lowlevel_get(VALUE rbCard, SCARDHANDLE *card_handle);
|
33
|
-
|
34
|
-
/* Class Smartcard::PCSC::Exception */
|
35
|
-
extern VALUE ePcscException;
|
36
|
-
void Init_PCSC_Exception();
|
37
|
-
void _PCSC_Exception_raise(DWORD pcsc_error, char *pcsc_function);
|
38
|
-
|
39
|
-
/* Constants in Smartcard::PCSC */
|
40
|
-
void Init_PCSC_Consts();
|
41
|
-
|
42
|
-
/* Multi-string (win32 abomination) tools. */
|
43
|
-
VALUE PCSC_Internal_multistring_to_ruby_array(char *mstr, size_t mstr_len);
|
44
|
-
int PCSC_Internal_ruby_strings_to_multistring(VALUE rbStrings, char **strings);
|
45
|
-
|
46
|
-
/* Messing up with constants that aren't uniformly defined. */
|
47
|
-
#if !defined(MAX_ATR_SIZE)
|
48
|
-
#define MAX_ATR_SIZE 32
|
49
|
-
#endif
|
50
|
-
#if !defined(SCARD_PROTOCOL_ANY)
|
51
|
-
#define SCARD_PROTOCOL_ANY (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
|
52
|
-
#endif
|