pkcs11 0.2.6 → 0.3.3
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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.appveyor.yml +44 -0
- data/.gitignore +25 -0
- data/.travis.yml +5 -4
- data/Gemfile +4 -4
- data/History.txt +32 -0
- data/README.rdoc +11 -14
- data/Rakefile +11 -6
- data/ext/extconf.rb +0 -2
- data/ext/generate_constants.rb +2 -2
- data/ext/generate_structs.rb +21 -10
- data/ext/generate_thread_funcs.rb +0 -6
- data/ext/pk11.c +18 -23
- data/ext/pk11.h +2 -17
- data/ext/pk11_const.c +9 -8
- data/ext/pk11_const_macros.h +2 -1
- data/ext/pk11_struct.doc +90 -90
- data/ext/pk11_struct_impl.inc +90 -90
- data/ext/pk11_struct_macros.h +14 -13
- data/ext/pk11_thread_funcs.c +0 -2
- data/ext/pk11_thread_funcs.h +0 -2
- data/ext/pk11_version.h +1 -1
- data/lib/pkcs11/helper.rb +1 -3
- data/lib/pkcs11/library.rb +4 -0
- data/lib/pkcs11/object.rb +2 -2
- data/lib/pkcs11/session.rb +13 -13
- data/pkcs11_luna/Manifest.txt +11 -11
- data/pkcs11_luna/README_LUNA.rdoc +3 -3
- data/pkcs11_protect_server/Manifest.txt +2 -2
- data/pkcs11_protect_server/README_PROTECT_SERVER.rdoc +3 -3
- data/test/helper.rb +1 -1
- data/test/test_pkcs11.rb +1 -1
- data/test/test_pkcs11_crypt.rb +36 -30
- data/test/test_pkcs11_object.rb +14 -11
- data/test/test_pkcs11_session.rb +22 -22
- data/test/test_pkcs11_slot.rb +8 -8
- data/test/test_pkcs11_structs.rb +35 -9
- data/test/test_pkcs11_thread.rb +2 -2
- metadata +44 -16
- metadata.gz.sig +3 -0
- data/appveyor.yml +0 -38
data/test/test_pkcs11_session.rb
CHANGED
@@ -32,11 +32,11 @@ class TestPkcs11Session < Minitest::Test
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_find_objects
|
35
|
-
obj = session.find_objects(:
|
35
|
+
obj = session.find_objects(CLASS: CKO_CERTIFICATE)
|
36
36
|
assert obj.length>2, 'There should be some certificates in the test database'
|
37
37
|
assert_equal PKCS11::Object, obj.first.class, 'Retuned objects should be class Object'
|
38
38
|
|
39
|
-
session.find_objects(:
|
39
|
+
session.find_objects(CLASS: CKO_CERTIFICATE) do |obj2|
|
40
40
|
assert obj2[:SUBJECT], 'A certificate should have a subject'
|
41
41
|
assert OpenSSL::X509::Name.new(obj2[:SUBJECT]).to_s =~ /\/CN=/i, 'Every certificate should have a CN in the subject'
|
42
42
|
end
|
@@ -57,25 +57,25 @@ class TestPkcs11Session < Minitest::Test
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_create_data_object
|
60
|
-
|
61
|
-
:
|
62
|
-
:
|
63
|
-
:
|
64
|
-
:
|
60
|
+
_obj = session.create_object(
|
61
|
+
CLASS: CKO_DATA,
|
62
|
+
TOKEN: false,
|
63
|
+
APPLICATION: 'My Application',
|
64
|
+
VALUE: 'value')
|
65
65
|
end
|
66
66
|
|
67
67
|
def test_create_certificate_object
|
68
|
-
obj1 = session.find_objects(:
|
68
|
+
obj1 = session.find_objects(CLASS: CKO_CERTIFICATE, ID: TestCert_ID).first
|
69
69
|
|
70
70
|
obj = session.create_object(
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
:
|
71
|
+
CLASS: CKO_CERTIFICATE,
|
72
|
+
SUBJECT: obj1[:SUBJECT],
|
73
|
+
TOKEN: false,
|
74
|
+
LABEL: 'test_create_object',
|
75
|
+
CERTIFICATE_TYPE: CKC_X_509,
|
76
|
+
ISSUER: obj1[:ISSUER],
|
77
|
+
VALUE: obj1[:VALUE],
|
78
|
+
SERIAL_NUMBER: '12345'
|
79
79
|
)
|
80
80
|
|
81
81
|
assert_equal '12345', obj[:SERIAL_NUMBER], 'Value as created'
|
@@ -85,12 +85,12 @@ class TestPkcs11Session < Minitest::Test
|
|
85
85
|
rsa = OpenSSL::PKey::RSA.generate(512)
|
86
86
|
|
87
87
|
obj = session.create_object(
|
88
|
-
:
|
89
|
-
:
|
90
|
-
:
|
91
|
-
:
|
92
|
-
:
|
93
|
-
:
|
88
|
+
CLASS: CKO_PUBLIC_KEY,
|
89
|
+
KEY_TYPE: CKK_RSA,
|
90
|
+
TOKEN: false,
|
91
|
+
MODULUS: rsa.n.to_s(2),
|
92
|
+
PUBLIC_EXPONENT: rsa.e.to_s(2),
|
93
|
+
LABEL: 'test_create_public_key_object')
|
94
94
|
|
95
95
|
assert_equal 'test_create_public_key_object', obj[:LABEL], 'Value as created'
|
96
96
|
end
|
data/test/test_pkcs11_slot.rb
CHANGED
@@ -26,13 +26,13 @@ class TestPkcs11Slot < Minitest::Test
|
|
26
26
|
|
27
27
|
assert sinfo.inspect =~ /manufacturerID=/, 'Slot info should tell about manufacturerID'
|
28
28
|
|
29
|
-
|
29
|
+
assert_kind_of Integer, sinfo.flags
|
30
30
|
assert sinfo.manufacturerID =~ /Mozilla/i, "It's the mozilla libaray we test against"
|
31
31
|
assert sinfo.slotDescription =~ /Private Key/i, "It's the slot with users private keys"
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
assert_kind_of Integer, sinfo.hardwareVersion.major, "Version should be a number"
|
33
|
+
assert_kind_of Integer, sinfo.hardwareVersion.minor, "Version should be a number"
|
34
|
+
assert_kind_of Integer, sinfo.firmwareVersion.major, "Version should be a number"
|
35
|
+
assert_kind_of Integer, sinfo.firmwareVersion.minor, "Version should be a number"
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_token_info
|
@@ -44,14 +44,14 @@ class TestPkcs11Slot < Minitest::Test
|
|
44
44
|
assert_equal false, slot.mechanisms.empty?, 'There should be some mechanisms'
|
45
45
|
slot.mechanisms.each do |m|
|
46
46
|
info = slot.mechanism_info(m)
|
47
|
-
|
47
|
+
assert_kind_of CK_MECHANISM_INFO, info, 'Mechanism info should get a CK_MECHANISM_INFO'
|
48
48
|
assert info.inspect =~ /ulMaxKeySize=/, 'Mechanism info should tell about max key size'
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_mechanism_info
|
53
53
|
info1 = slot.mechanism_info(:DES3_CBC)
|
54
|
-
|
54
|
+
assert_kind_of CK_MECHANISM_INFO, info1, 'Mechanism info should get a CK_MECHANISM_INFO'
|
55
55
|
assert info1.inspect =~ /ulMinKeySize=/, 'Mechanism info should tell about min key size'
|
56
56
|
|
57
57
|
info2 = slot.mechanism_info(CKM_DES3_CBC)
|
@@ -71,7 +71,7 @@ class TestPkcs11Slot < Minitest::Test
|
|
71
71
|
|
72
72
|
def test_session2
|
73
73
|
flags = CKF_SERIAL_SESSION #| CKF_RW_SESSION
|
74
|
-
|
74
|
+
_session = slot.open(flags)
|
75
75
|
slot.close_all_sessions
|
76
76
|
end
|
77
77
|
end
|
data/test/test_pkcs11_structs.rb
CHANGED
@@ -11,9 +11,10 @@ class TestPkcs11Structs < Minitest::Test
|
|
11
11
|
def teardown
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def test_STRING_ACCESSOR_ASCII
|
15
15
|
s = CK_DATE.new
|
16
16
|
assert_equal "\0\0", s.day
|
17
|
+
assert_equal Encoding::ASCII, s.day.encoding
|
17
18
|
assert_equal "\0\0\0\0", s.year
|
18
19
|
s.day = "12345"
|
19
20
|
assert_equal "12", s.day
|
@@ -22,6 +23,20 @@ class TestPkcs11Structs < Minitest::Test
|
|
22
23
|
assert_raises(TypeError){ s.day = nil }
|
23
24
|
end
|
24
25
|
|
26
|
+
def test_STRING_ACCESSOR_UTF8
|
27
|
+
s = CK_INFO.new
|
28
|
+
s.manufacturerID = 'Müller'
|
29
|
+
assert_equal "Müller", s.manufacturerID.split("\0",2).first
|
30
|
+
assert_equal Encoding::UTF_8, s.manufacturerID.encoding
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_STRING_ACCESSOR_BINARY
|
34
|
+
s = CK_DES_CBC_ENCRYPT_DATA_PARAMS.new
|
35
|
+
s.iv = "somedata"
|
36
|
+
assert_equal "somedata", s.iv
|
37
|
+
assert_equal Encoding::BINARY, s.iv.encoding
|
38
|
+
end
|
39
|
+
|
25
40
|
def test_ULONG_ACCESSOR
|
26
41
|
s = CK_SSL3_KEY_MAT_PARAMS.new
|
27
42
|
assert_equal 0, s.ulIVSizeInBits
|
@@ -42,13 +57,24 @@ class TestPkcs11Structs < Minitest::Test
|
|
42
57
|
assert_raises(ArgumentError){ s.bIsExport = nil }
|
43
58
|
end
|
44
59
|
|
45
|
-
def
|
46
|
-
s =
|
47
|
-
assert_nil s.
|
48
|
-
s.
|
49
|
-
assert_equal "
|
50
|
-
s.
|
51
|
-
|
60
|
+
def test_STRING_PTR_ACCESSOR_UTF8
|
61
|
+
s = CK_PBE_PARAMS.new
|
62
|
+
assert_nil s.pPassword
|
63
|
+
s.pPassword = "secret"
|
64
|
+
assert_equal "secret", s.pPassword
|
65
|
+
assert_equal Encoding::UTF_8, s.pPassword.encoding
|
66
|
+
s.pPassword = nil
|
67
|
+
assert_nil s.pPassword
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_STRING_PTR_ACCESSOR_BINARY
|
71
|
+
s = CK_DES_CBC_ENCRYPT_DATA_PARAMS.new
|
72
|
+
assert_nil s.pData
|
73
|
+
s.pData = "some data"
|
74
|
+
assert_equal "some data", s.pData
|
75
|
+
assert_equal Encoding::BINARY, s.pData.encoding
|
76
|
+
s.pData = nil
|
77
|
+
assert_nil s.pData
|
52
78
|
end
|
53
79
|
|
54
80
|
def test_STRUCT_ACCESSOR
|
@@ -148,7 +174,7 @@ class TestPkcs11Structs < Minitest::Test
|
|
148
174
|
assert s.inspect =~ /year="2010"/, 'There should be a year in CK_DATE'
|
149
175
|
assert_equal ["year", "month", "day"], s.members, 'CK_DATE should contain some attributes'
|
150
176
|
assert_equal ["2010", "12", "31"], s.values, 'values of CK_DATE'
|
151
|
-
assert_equal( {:
|
177
|
+
assert_equal( {day: "31", month: "12", year: "2010"}, s.to_hash, 'CK_DATE as hash' )
|
152
178
|
end
|
153
179
|
|
154
180
|
def test_bignum_attribute
|
data/test/test_pkcs11_thread.rb
CHANGED
@@ -33,8 +33,8 @@ class TestPkcs11Thread < Minitest::Test
|
|
33
33
|
end
|
34
34
|
}
|
35
35
|
# This should take some seconds:
|
36
|
-
|
37
|
-
{:
|
36
|
+
_pub_key, _priv_key = session.generate_key_pair(:RSA_PKCS_KEY_PAIR_GEN,
|
37
|
+
{MODULUS_BITS: 2048, PUBLIC_EXPONENT: [65537].pack("N"), TOKEN: false},
|
38
38
|
{})
|
39
39
|
th.kill
|
40
40
|
assert_operator count, :>, 100000, "The second thread should count further concurrent to the key generation"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pkcs11
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryosuke Kutsuna
|
@@ -9,21 +9,42 @@ authors:
|
|
9
9
|
- Lars Kanis
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
|
-
cert_chain:
|
13
|
-
|
12
|
+
cert_chain:
|
13
|
+
- |
|
14
|
+
-----BEGIN CERTIFICATE-----
|
15
|
+
MIIDPDCCAiSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAkMSIwIAYDVQQDDBl0cmF2
|
16
|
+
aXMtY2kvREM9ZHVtbXkvREM9b3JnMB4XDTIwMDQwODExMDA0MFoXDTIxMDQwODEx
|
17
|
+
MDA0MFowJDEiMCAGA1UEAwwZdHJhdmlzLWNpL0RDPWR1bW15L0RDPW9yZzCCASIw
|
18
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+5uh+zqCXKho0zXIaLmJD6YDpa
|
19
|
+
l07nJ+PQFcMBYgsKA2ip01THj3DVYwP/va6hYgqPmxEJB3tsEthKnHVHm0dgqqg/
|
20
|
+
gfyDFU0ZfbSYKeNlZQRIdddKPc6dNbmtY2gBWFt6YOZnBccsgJmSUAbh0a9xhVbm
|
21
|
+
qAStn/q7eq9iW9+12AB9HM+QCWrsCAXEHGGNENDAK9HtHwBs4KsneiIQY5rd/Mzs
|
22
|
+
Ii25XXnDUa1NjC4u/mMuJXBpWLw2rEAQkzEFQBZR0W0ehm9Mi4TokhLy/QH8GRaH
|
23
|
+
0KADzpk1cxuOrEBIhy6ISQs7g/tI6YTePAmDMTsodov02FZCcMpoxOifpFkCAwEA
|
24
|
+
AaN5MHcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFOTn5ek+QtcI
|
25
|
+
g+ZglIvRPAPGoXvLMB4GA1UdEQQXMBWBE3RyYXZpcy1jaUBkdW1teS5vcmcwHgYD
|
26
|
+
VR0SBBcwFYETdHJhdmlzLWNpQGR1bW15Lm9yZzANBgkqhkiG9w0BAQsFAAOCAQEA
|
27
|
+
Xuaj6r4QXrQwDdrmT2sPgWiS5/CRRiSwyWsE1jfM0q5spzuKRIy+vSfmj6isScGf
|
28
|
+
vT7nwXus+3IcISSdfUddGqf/L54z6U9dVc+V5SH+QuptDRPgQ+fPJFKn8uFARJDU
|
29
|
+
9qNNSKpyoXXHksouuRV4dXVYRChfhLiavXaR0jNmi6qgTsSSvyKD2aObyVdVUzxr
|
30
|
+
Umpavc3v5BbquwF9DlKeHZwU/qP0ynCZg/Z9CFa18e5JfyBSFXHXDA0YXE6+b4Dh
|
31
|
+
+QvsIa+rEKMYbn0IActnL2SCNlGcttHDcH0AkctmwmAN2r6LTInUBCJoahaIeIXU
|
32
|
+
RE1H1QyCW3SV93CTTKaR2A==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2020-11-07 00:00:00.000000000 Z
|
14
35
|
dependencies:
|
15
36
|
- !ruby/object:Gem::Dependency
|
16
37
|
name: yard
|
17
38
|
requirement: !ruby/object:Gem::Requirement
|
18
39
|
requirements:
|
19
|
-
- - "
|
40
|
+
- - "~>"
|
20
41
|
- !ruby/object:Gem::Version
|
21
42
|
version: '0.6'
|
22
43
|
type: :development
|
23
44
|
prerelease: false
|
24
45
|
version_requirements: !ruby/object:Gem::Requirement
|
25
46
|
requirements:
|
26
|
-
- - "
|
47
|
+
- - "~>"
|
27
48
|
- !ruby/object:Gem::Version
|
28
49
|
version: '0.6'
|
29
50
|
- !ruby/object:Gem::Dependency
|
@@ -46,14 +67,14 @@ dependencies:
|
|
46
67
|
requirements:
|
47
68
|
- - "~>"
|
48
69
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.6.
|
70
|
+
version: 0.6.2
|
50
71
|
type: :development
|
51
72
|
prerelease: false
|
52
73
|
version_requirements: !ruby/object:Gem::Requirement
|
53
74
|
requirements:
|
54
75
|
- - "~>"
|
55
76
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.6.
|
77
|
+
version: 0.6.2
|
57
78
|
- !ruby/object:Gem::Dependency
|
58
79
|
name: minitest
|
59
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,30 +107,36 @@ dependencies:
|
|
86
107
|
name: rdoc
|
87
108
|
requirement: !ruby/object:Gem::Requirement
|
88
109
|
requirements:
|
89
|
-
- - "
|
110
|
+
- - ">="
|
90
111
|
- !ruby/object:Gem::Version
|
91
112
|
version: '4.0'
|
113
|
+
- - "<"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '7'
|
92
116
|
type: :development
|
93
117
|
prerelease: false
|
94
118
|
version_requirements: !ruby/object:Gem::Requirement
|
95
119
|
requirements:
|
96
|
-
- - "
|
120
|
+
- - ">="
|
97
121
|
- !ruby/object:Gem::Version
|
98
122
|
version: '4.0'
|
123
|
+
- - "<"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '7'
|
99
126
|
- !ruby/object:Gem::Dependency
|
100
127
|
name: hoe
|
101
128
|
requirement: !ruby/object:Gem::Requirement
|
102
129
|
requirements:
|
103
130
|
- - "~>"
|
104
131
|
- !ruby/object:Gem::Version
|
105
|
-
version: '3.
|
132
|
+
version: '3.22'
|
106
133
|
type: :development
|
107
134
|
prerelease: false
|
108
135
|
version_requirements: !ruby/object:Gem::Requirement
|
109
136
|
requirements:
|
110
137
|
- - "~>"
|
111
138
|
- !ruby/object:Gem::Version
|
112
|
-
version: '3.
|
139
|
+
version: '3.22'
|
113
140
|
description: 'This module allows Ruby programs to interface with "RSA Security Inc.
|
114
141
|
PKCS #11 Cryptographic Token Interface (Cryptoki)".'
|
115
142
|
email:
|
@@ -128,8 +155,10 @@ extra_rdoc_files:
|
|
128
155
|
- pkcs11_protect_server/README_PROTECT_SERVER.rdoc
|
129
156
|
- ext/pk11.c
|
130
157
|
files:
|
158
|
+
- ".appveyor.yml"
|
131
159
|
- ".autotest"
|
132
160
|
- ".gemtest"
|
161
|
+
- ".gitignore"
|
133
162
|
- ".travis.yml"
|
134
163
|
- ".yardopts"
|
135
164
|
- Gemfile
|
@@ -137,7 +166,6 @@ files:
|
|
137
166
|
- MIT-LICENSE
|
138
167
|
- README.rdoc
|
139
168
|
- Rakefile
|
140
|
-
- appveyor.yml
|
141
169
|
- ext/extconf.rb
|
142
170
|
- ext/generate_constants.rb
|
143
171
|
- ext/generate_structs.rb
|
@@ -186,7 +214,8 @@ files:
|
|
186
214
|
homepage: http://github.com/larskanis/pkcs11
|
187
215
|
licenses:
|
188
216
|
- MIT
|
189
|
-
metadata:
|
217
|
+
metadata:
|
218
|
+
homepage_uri: http://github.com/larskanis/pkcs11
|
190
219
|
post_install_message:
|
191
220
|
rdoc_options:
|
192
221
|
- "--main"
|
@@ -197,15 +226,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
197
226
|
requirements:
|
198
227
|
- - ">="
|
199
228
|
- !ruby/object:Gem::Version
|
200
|
-
version:
|
229
|
+
version: 2.2.0
|
201
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
231
|
requirements:
|
203
232
|
- - ">="
|
204
233
|
- !ruby/object:Gem::Version
|
205
234
|
version: '0'
|
206
235
|
requirements: []
|
207
|
-
|
208
|
-
rubygems_version: 2.6.12
|
236
|
+
rubygems_version: 3.1.4
|
209
237
|
signing_key:
|
210
238
|
specification_version: 4
|
211
239
|
summary: PKCS#11 binding for Ruby
|
metadata.gz.sig
ADDED
data/appveyor.yml
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
install:
|
2
|
-
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
3
|
-
- SET PATH=C:\MinGW\msys\1.0\bin;%PATH%
|
4
|
-
- SET RAKEOPT=-rdevkit
|
5
|
-
- ruby --version
|
6
|
-
- gem --version
|
7
|
-
- bundle install
|
8
|
-
|
9
|
-
# When running ruby-x86, we make use of the softokn3.dll that is part of the
|
10
|
-
# pre-installed firefox. The test helper will find it automatically.
|
11
|
-
# When running ruby-x64, we equally need a 64 bit softokn3.dll to test against.
|
12
|
-
# However it is not part of any installed software on appveyor, nor is it
|
13
|
-
# officially released as a windows binary, so we download and install a 64 bit
|
14
|
-
# firefox version and use it's softokn3.dll.
|
15
|
-
- ps: |
|
16
|
-
if ($env:isx64 -eq "1")
|
17
|
-
{
|
18
|
-
$(new-object net.webclient).DownloadFile('http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/40.0b4/win64/en-US/Firefox%20Setup%2040.0b4.exe', 'C:\firefox-setup.exe')
|
19
|
-
cmd /c C:\firefox-setup.exe -ms
|
20
|
-
$env:SOFTOKN_PATH = 'C:\Program Files\Mozilla Firefox\softokn3.dll'
|
21
|
-
$env:PATH = 'C:\Program Files\Mozilla Firefox;' + $env:PATH
|
22
|
-
}
|
23
|
-
|
24
|
-
build: off
|
25
|
-
|
26
|
-
test_script:
|
27
|
-
- bundle exec rake compile test gem
|
28
|
-
|
29
|
-
environment:
|
30
|
-
matrix:
|
31
|
-
- ruby_version: "193"
|
32
|
-
#- ruby_version: "200"
|
33
|
-
#- ruby_version: "200-x64"
|
34
|
-
#- ruby_version: "21"
|
35
|
-
#- ruby_version: "21-x64"
|
36
|
-
- ruby_version: "22"
|
37
|
-
- ruby_version: "22-x64"
|
38
|
-
isx64: "1"
|