pkcs11_luna 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,112 @@
1
+ require "minitest/autorun"
2
+ require "pkcs11_luna"
3
+ require "test/luna_helper"
4
+
5
+ class TestPkcs11Luna < Minitest::Test
6
+ include PKCS11
7
+
8
+ RUBY = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
9
+ FILE = File.dirname(__FILE__)
10
+
11
+ @slot = LunaHelper.get_slot_password()
12
+
13
+ def get_password
14
+ STDIN.echo = false
15
+ while ((c = STDIN.getch) != '\n')
16
+ print c
17
+ end
18
+ STDIN.echo = true
19
+ end
20
+
21
+ def setup
22
+ @pk = Luna::Library.new
23
+ @slot, @password = LunaHelper.get_slot_password()
24
+ end
25
+
26
+ def teardown
27
+ @pk.close
28
+ end
29
+
30
+ =begin
31
+ def test_slots_are_luna
32
+ pkcs11 = @pk
33
+ pkcs11.slots.each do |slot|
34
+ assert_equal(slot.class.to_s, "PKCS11::Luna::Slot")
35
+ end
36
+ end
37
+
38
+
39
+ MAJOR = 10
40
+ MINOR = 10
41
+ def test_application_id
42
+ pkcs11 = @pk
43
+ pkcs11.set_application_id(MAJOR, MINOR)
44
+ slot = Luna::Slot.new(pkcs11, @slot)
45
+ begin
46
+ slot.open_application_id(MAJOR, MINOR)
47
+ rescue CKR_DATA_INVALID
48
+ slot.close_application_id(MAJOR, MINOR)
49
+ end
50
+ session = slot.open(CKF_RW_SESSION | CKF_SERIAL_SESSION)
51
+ session.login(:USER, @password)
52
+ file = File.join(FILE, 'app_id_helper.rb')
53
+ cmd = "#{RUBY} #{file} #{@slot}"
54
+ IO.popen(cmd, 'r') do |p|
55
+ p.read
56
+ end
57
+ assert $?.success?, "The subprocess did not return successfully."
58
+
59
+
60
+ session.logout
61
+ session.close
62
+ slot.close_application_id(MAJOR, MINOR)
63
+ end
64
+ =end
65
+
66
+ def test_mechanisms_list
67
+ pkcs11 = @pk
68
+ slot = Slot.new(pkcs11, @slot)
69
+ mechanisms = slot.mechanisms
70
+ mechanisms.each do |mech_id|
71
+ assert(Luna::MECHANISMS.key?(mech_id))
72
+ end
73
+ end
74
+
75
+ def test_init_token
76
+ pkcs11 = @pk
77
+ slot = Slot.new(pkcs11, @slot)
78
+
79
+ assert_raises(Luna::CKR_OPERATION_NOT_ALLOWED, CKR_USER_TYPE_INVALID) {
80
+ slot.init_token("anypin", "new_label")
81
+ }
82
+ end
83
+
84
+ def test_init_pin
85
+ pkcs11 = @pk
86
+ slot = Slot.new(pkcs11, @slot)
87
+ session = slot.open(CKF_RW_SESSION | CKF_SERIAL_SESSION)
88
+ session.login(:USER, @password)
89
+ assert_raises(Luna::CKR_OPERATION_NOT_ALLOWED, CKR_FUNCTION_NOT_SUPPORTED) {
90
+ session.init_pin("anypin")
91
+ }
92
+ session.logout
93
+ session.close
94
+ end
95
+
96
+ def test_set_pin
97
+ pkcs11 = @pk
98
+ slot = Slot.new(pkcs11, @slot)
99
+ session = slot.open(CKF_RW_SESSION | CKF_SERIAL_SESSION)
100
+ session.login(:USER, @password)
101
+ session.set_pin(@password, @password)
102
+ session.logout
103
+ session.close
104
+ end
105
+
106
+ def test_wait_for_slot_event
107
+ assert_raises(Luna::CKR_OPERATION_NOT_ALLOWED, CKR_FUNCTION_NOT_SUPPORTED) {
108
+ @pk.wait_for_slot_event
109
+ }
110
+ end
111
+
112
+ end
@@ -0,0 +1,260 @@
1
+ require "minitest/autorun"
2
+ require "pkcs11_luna"
3
+ require "test/luna_helper"
4
+
5
+ class TestPkcs11LunaCrypt < Minitest::Test
6
+ include PKCS11
7
+
8
+ def setup
9
+ @pk = Luna::Library.new
10
+ slot_id, password = LunaHelper.get_slot_password()
11
+ @slot = Slot.new(@pk, slot_id)
12
+ @session = @slot.open(PKCS11::CKF_RW_SESSION | PKCS11::CKF_SERIAL_SESSION)
13
+ @session.login(:USER, password)
14
+ end
15
+
16
+ def teardown
17
+ @session.logout
18
+ @session.close
19
+ @pk.close
20
+ end
21
+
22
+ def destroy_object(session, label)
23
+ session.find_objects(:LABEL=>label) do |obj|
24
+ obj.destroy
25
+ end
26
+ end
27
+
28
+
29
+ def test_ec_pair_gen_derive_aes
30
+ pub_label = "EC Public Key"
31
+ priv_label = "EC Private Key"
32
+ derived_label = "EC Derived Key "
33
+ destroy_object(@session, pub_label)
34
+ destroy_object(@session, priv_label)
35
+ destroy_object(@session, derived_label + '1')
36
+ destroy_object(@session, derived_label + '2')
37
+
38
+ #DER encoding of OID 1.3.132.0.10 secp256k1
39
+ curve_oid_der = [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A].pack("C*")
40
+
41
+ attributes_public = {:TOKEN=>true, :ENCRYPT=>true, :VERIFY=>true, :WRAP=>true,
42
+ :EC_PARAMS=>curve_oid_der, :LABEL=>pub_label}
43
+ attributes_private = {:TOKEN=>true, :DECRYPT=>true, :SIGN=>true,
44
+ :DERIVE=>true, :UNWRAP=>true, :SENSITIVE=>true, :LABEL=>priv_label}
45
+
46
+ pub_key1, priv_key1 = @session.generate_key_pair(:EC_KEY_PAIR_GEN, attributes_public, attributes_private)
47
+ pub_key2, priv_key2 = @session.generate_key_pair(:EC_KEY_PAIR_GEN, attributes_public, attributes_private)
48
+
49
+ shared_data = "SHARED DATA"
50
+
51
+ ec_point1 = pub_key1.attributes(:EC_POINT)[0].value
52
+ ec_point2 = pub_key2.attributes(:EC_POINT)[0].value
53
+ mechanism = {:ECDH1_DERIVE=>{:kdf=>Luna::CKD_SHA512_KDF, :pSharedData=>shared_data}}
54
+
55
+ derive_attributes = {:CLASS=>CKO_SECRET_KEY, :KEY_TYPE=>CKK_AES, :TOKEN=>true, :SENSITIVE=>true, :PRIVATE=>true,
56
+ :ENCRYPT=>true, :DECRYPT=>true, :SIGN=>true, :VERIFY=>true, :VALUE_LEN=>32, :LABEL=>derived_label+'1'}
57
+
58
+ assert_raises(Luna::CKR_ECC_POINT_INVALID) do
59
+ @session.derive_key(mechanism, priv_key1, derive_attributes)
60
+ end
61
+
62
+ mechanism[:ECDH1_DERIVE][:pPublicData] = ec_point2
63
+ derived_key1 = @session.derive_key(mechanism, priv_key1, derive_attributes)
64
+ mechanism[:ECDH1_DERIVE][:pPublicData] = ec_point1
65
+ derive_attributes[:LABEL] = derived_label + '2'
66
+ derived_key2 = @session.derive_key(mechanism, priv_key2, derive_attributes)
67
+
68
+ iv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].pack('C*')
69
+ message = "Text to encrypt"
70
+ cipher_text = @session.encrypt({:AES_CBC_PAD=>iv}, derived_key1, message)
71
+ decrypted = @session.decrypt({:AES_CBC_PAD=>iv}, derived_key2, cipher_text)
72
+ assert_equal(decrypted, message)
73
+ end
74
+
75
+ def test_encrypt_decrypt_aes
76
+ label = "Test AES Key"
77
+ destroy_object(@session, label)
78
+ key = @session.generate_key(:AES_KEY_GEN,
79
+ :CLASS=>CKO_SECRET_KEY, :ENCRYPT=>true, :DECRYPT=>true, :SENSITIVE=>true,
80
+ :TOKEN=>true, :VALUE_LEN=>32, :LABEL=>label)
81
+
82
+ assert key[Luna::CKA_FINGERPRINT_SHA256].size == 32
83
+
84
+ message = "Text to encrypt"
85
+ iv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].pack('C*')
86
+ cipher_text = @session.encrypt({:AES_CBC_PAD=>iv}, key, message)
87
+ decrypted_text = @session.decrypt({:AES_CBC_PAD=>iv}, key, cipher_text)
88
+ assert_equal(message, decrypted_text)
89
+ end
90
+
91
+ def test_generate_rsa_key_pair
92
+ pub_label = "Test RSA public key"
93
+ priv_label = "Test RSA private key"
94
+ destroy_object(@session, pub_label)
95
+ destroy_object(@session, priv_label)
96
+
97
+ pub_attr = {:ENCRYPT=>true, :VERIFY=>true,
98
+ :MODULUS_BITS=>2048, :TOKEN=>true, :WRAP=>true, :LABEL=>pub_label}
99
+ priv_attr = {:DECRYPT=>true, :SIGN=>true, :SENSITIVE=>true, :PRIVATE=>true,
100
+ :TOKEN=>true, :UNWRAP=>true, :LABEL=>priv_label}
101
+
102
+ pub_key, priv_key = @session.generate_key_pair(:RSA_FIPS_186_3_AUX_PRIME_KEY_PAIR_GEN, pub_attr, priv_attr)
103
+ end
104
+
105
+ def test_encrypt_decrypt_rsa
106
+ pub_key, priv_key = test_generate_rsa_key_pair
107
+ message = "Text to encrypt using RSA keys"
108
+ encrypted = @session.encrypt(:RSA_PKCS, pub_key, message)
109
+ decrypted = @session.decrypt(:RSA_PKCS, priv_key, encrypted)
110
+ assert_equal(message, decrypted)
111
+ end
112
+
113
+ def test_sign_verify_rsa
114
+ pub_key, priv_key = test_generate_rsa_key_pair
115
+ data = "Text to sign/verify using RSA keys"
116
+ signature = @session.sign(:SHA512_RSA_PKCS, priv_key, data)
117
+ @session.verify(:SHA512_RSA_PKCS, pub_key, signature, data)
118
+ end
119
+
120
+ def generate_aes_key(label)
121
+ label = "Ruby AES Key"
122
+ destroy_object(@session, label)
123
+ key = @session.generate_key(:AES_KEY_GEN,
124
+ :CLASS=>CKO_SECRET_KEY, :ENCRYPT=>true, :DECRYPT=>true, :SENSITIVE=>true,
125
+ :TOKEN=>true, :EXTRACTABLE=>true, :VALUE_LEN=>32, :LABEL=>label)
126
+
127
+ return key
128
+ end
129
+
130
+ def test_wrap_unwrap
131
+ pub_key, priv_key = test_generate_rsa_key_pair
132
+
133
+ aes_key = generate_aes_key("Wrapped AES Key")
134
+
135
+ wrapped = @session.wrap_key(:RSA_PKCS, pub_key, aes_key)
136
+
137
+ label = "Unwrapped AES Key"
138
+ destroy_object(@session, label)
139
+
140
+ attributes = {:CLASS=>CKO_SECRET_KEY, :KEY_TYPE=>CKK_AES, :ENCRYPT=>true, :DECRYPT=>true, :SENSITIVE=>true,
141
+ :TOKEN=>true, :VALUE_LEN=>32, :LABEL=>label}
142
+
143
+ unwrapped_key = @session.unwrap_key(:RSA_PKCS, priv_key, wrapped, attributes)
144
+
145
+ message = "Encrypt/Decrypt with a wrapped and unwrapped key"
146
+ iv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].pack('C*')
147
+ cipher_text = @session.encrypt({:AES_CBC_PAD=>iv}, aes_key, message)
148
+ decrypted_text = @session.decrypt({:AES_CBC_PAD=>iv}, unwrapped_key, cipher_text)
149
+ assert_equal(message, decrypted_text)
150
+ end
151
+
152
+ def test_digest
153
+ data = "Data to digest."
154
+ digest = @session.digest(:SHA512, data)
155
+ hex = digest.bytes.map { |b| sprintf("%02X",b) }.join
156
+ assert_equal(hex, "B22A958E549B113FEC7FE2FBDE766A88D44E34FA47F3EED9DCBA9294AC46DA0CB2511F38943D1F1A533EB25C177F0FC38F2EFC87215D9043F67A103E849A2605")
157
+ end
158
+
159
+ def test_des3_cmac_general
160
+ label = "DES Key"
161
+ destroy_object(@session, label)
162
+ des_key = @session.generate_key(:DES3_KEY_GEN,
163
+ :CLASS=>CKO_SECRET_KEY, :SIGN=>true, :VERIFY=>true, :ENCRYPT=>true, :DECRYPT=>true, :SENSITIVE=>true,
164
+ :TOKEN=>true, :EXTRACTABLE=>true, :LABEL=>label)
165
+
166
+ data = "Data to be signed."
167
+ signature = @session.sign({:DES3_CMAC_GENERAL=>8}, des_key, data)
168
+ @session.verify({:DES3_CMAC_GENERAL=>8}, des_key, signature, data)
169
+ end
170
+
171
+ def get_data
172
+ plaintext = ""
173
+ (0..10000).each do |i|
174
+ plaintext << (i%26+65).chr
175
+ end
176
+ plaintext
177
+ end
178
+
179
+ def test_encrypt_decrypt_multipart
180
+ key = generate_aes_key("Ruby AES Key")
181
+
182
+ iv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].pack('C*')
183
+ mechanism = {:AES_CBC_PAD=>iv}
184
+
185
+ chunk_size = 1024
186
+ plaintext = get_data
187
+
188
+ encrypted = ""
189
+ index = 0
190
+ encrypted << @session.encrypt(mechanism, key) do |cipher|
191
+ while index < plaintext.size
192
+ s = plaintext.slice(index, chunk_size)
193
+ encrypted << cipher.update(s)
194
+ index += chunk_size
195
+ end
196
+ end
197
+
198
+ decrypted = ""
199
+ index = 0
200
+ decrypted << @session.decrypt(mechanism, key) do |cipher|
201
+ while index < encrypted.size
202
+ s = encrypted.slice(index, chunk_size)
203
+ decrypted << cipher.update(s)
204
+ index += chunk_size
205
+ end
206
+ end
207
+ assert plaintext == decrypted
208
+ end
209
+
210
+ def test_sign_verify
211
+ pub_key, priv_key = test_generate_rsa_key_pair
212
+
213
+ plaintext = get_data
214
+
215
+ signature = @session.sign(:SHA512_RSA_PKCS, priv_key) {|c|
216
+ index = 0
217
+ while index < plaintext.size
218
+ c.update(plaintext.slice(index, 256))
219
+ index += 256
220
+ end
221
+ }
222
+
223
+ @session.verify(:SHA512_RSA_PKCS, pub_key, signature) {|c|
224
+ index = 0
225
+ while index < plaintext.size
226
+ c.update(plaintext.slice(index, 256))
227
+ index += 256
228
+ end
229
+ }
230
+ end
231
+
232
+ def test_digest_encrypt_decrypt_update
233
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
234
+ @session.C_DigestEncryptUpdate("Not supported")
235
+ }
236
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
237
+ @session.C_DecryptDigestUpdate("Not supported")
238
+ }
239
+ end
240
+
241
+ def test_verify_recover
242
+ pub_key, priv_key = test_generate_rsa_key_pair
243
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
244
+ @session.C_VerifyRecoverInit(:SHA512_RSA_PKCS, pub_key)
245
+ }
246
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
247
+ @session.C_VerifyRecover("Not supported")
248
+ }
249
+ end
250
+
251
+ def test_sign_verify_encrypt_decrypt_update
252
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
253
+ @session.C_SignEncryptUpdate("Not supported")
254
+ }
255
+ assert_raises(CKR_FUNCTION_NOT_SUPPORTED) {
256
+ @session.C_DecryptVerifyUpdate("Not supported")
257
+ }
258
+ end
259
+
260
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pkcs11_luna
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.7
5
+ platform: ruby
6
+ authors:
7
+ - SafeNet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDPDCCAiSgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBEMQ0wCwYDVQQDDARsYXJz
14
+ MR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZImiZPyLGQB
15
+ GRYCZGUwHhcNMTcwNDA0MTgyNDE1WhcNMTgwNDA0MTgyNDE1WjBEMQ0wCwYDVQQD
16
+ DARsYXJzMR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZIm
17
+ iZPyLGQBGRYCZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZb4Uv
18
+ RFJfRu/VEWiy3psh2jinETjiuBrL0NeRFGf8H7iU9+gx/DI/FFhfHGLrDeIskrJx
19
+ YIWDMmEjVO10UUdj7wu4ZhmU++0Cd7Kq9/TyP/shIP3IjqHjVLCnJ3P6f1cl5rxZ
20
+ gqo+d3BAoDrmPk0rtaf6QopwUw9RBiF8V4HqvpiY+ruJotP5UQDP4/lVOKvA8PI9
21
+ P0GmVbFBrbc7Zt5h78N3UyOK0u+nvOC23BvyHXzCtcFsXCoEkt+Wwh0RFqVZdnjM
22
+ LMO2vULHKKHDdX54K/sbVCj9pN9h1aotNzrEyo55zxn0G9PHg/G3P8nMvAXPkUTe
23
+ brhXrfCwWRvOXA4TAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
24
+ A1UdDgQWBBRAHK81igrXodaDj8a8/BIKsaZrETANBgkqhkiG9w0BAQUFAAOCAQEA
25
+ Wbp+grpaqUH+RiXNXmi/5xBfvSYLbxWj+DZpCSnQW+DMfx46RVVko3b7BtKDs2zs
26
+ EtKM6r6s7VbllPgcYUzaP92uzPqCw8FncvqG0+B+Nd4C2jKzPxAQyzYXv/3bQhv1
27
+ sXAzEqLQqKx5V63eBDh1TPvPTEMfJwmjcdcbvMwFSt5EcUkT63W13ZJXX23JYp1K
28
+ KRW+N1WIYz8RSBNaQIP2v5Inb9vUA+jPUOcdyLHoi205lyZ28hE4lcnh9Zs02aHs
29
+ Ao8FZozVJz8xVEuYNJsL2k70w0FiwXwoWyvKyekgPBvYNUj4JGDMtBBayJTOpDs7
30
+ 3EVmCm5IRuqZ1UcDFouQ9w==
31
+ -----END CERTIFICATE-----
32
+ date: 2018-01-05 00:00:00.000000000 Z
33
+ dependencies:
34
+ - !ruby/object:Gem::Dependency
35
+ name: pkcs11
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.7
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.7
48
+ - !ruby/object:Gem::Dependency
49
+ name: yard
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0.6'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake-compiler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0.7'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0.7'
76
+ - !ruby/object:Gem::Dependency
77
+ name: rdoc
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: hoe
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.16'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.16'
104
+ description: This module allows Ruby programs to use vendor extensions for SafeNet
105
+ Luna.
106
+ email:
107
+ - support@safenet-inc.com
108
+ executables: []
109
+ extensions:
110
+ - ext/extconf.rb
111
+ extra_rdoc_files:
112
+ - Manifest.txt
113
+ - README_LUNA.rdoc
114
+ - ext/pk11l.c
115
+ files:
116
+ - ".gemtest"
117
+ - ".yardopts"
118
+ - Manifest.txt
119
+ - README_LUNA.rdoc
120
+ - Rakefile
121
+ - examples/config.rb
122
+ - examples/derive_aes_ecdh_key.rb
123
+ - examples/encrypt_decrypt_aes.rb
124
+ - examples/encrypt_decrypt_rsa.rb
125
+ - examples/mechanism_list.rb
126
+ - examples/multithread.rb
127
+ - examples/objects_list.rb
128
+ - examples/sign_verify.rb
129
+ - examples/slot_info.rb
130
+ - ext/extconf.rb
131
+ - ext/generate_constants.rb
132
+ - ext/generate_structs.rb
133
+ - ext/pk11_const_macros.h
134
+ - ext/pk11_struct_macros.h
135
+ - ext/pk11_version.h
136
+ - ext/pk11l.c
137
+ - ext/pk11l_const_def.inc
138
+ - ext/pk11l_struct.doc
139
+ - ext/pk11l_struct_def.inc
140
+ - ext/pk11l_struct_impl.inc
141
+ - lib/pkcs11_luna.rb
142
+ - lib/pkcs11_luna/extensions.rb
143
+ - test/app_id_helper.rb
144
+ - test/luna_helper.rb
145
+ - test/test_pkcs11_luna.rb
146
+ - test/test_pkcs11_luna_crypt.rb
147
+ homepage: http://github.com/larskanis/pkcs11
148
+ licenses:
149
+ - MIT
150
+ metadata: {}
151
+ post_install_message:
152
+ rdoc_options:
153
+ - "--main"
154
+ - README_LUNA.rdoc
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 2.7.3
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: SafeNet-Luna extensions for PKCS#11-Ruby
173
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ ��V�5��J�d�0UH%�A!�yNQ��m�)�Vy�U2�Z�[.�l5��Iq��#“��� ���4�/6m��E�UD4��H����!���5�(�0\G&���43o �����Jmx�#m�R���d�n5ב�k�J; F6��7�� VR��e �^�Ʋ���"![��P�|.�K�'��x ��*O�{깡묹.���)X�Q�@�X�T�@,8?�7\?� � ����$����DɎf�� \�ĶF�g�E�