pkcs11_luna 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.gemtest +0 -0
- data/.yardopts +1 -0
- data/Manifest.txt +24 -0
- data/README_LUNA.rdoc +103 -0
- data/Rakefile +88 -0
- data/examples/config.rb +5 -0
- data/examples/derive_aes_ecdh_key.rb +108 -0
- data/examples/encrypt_decrypt_aes.rb +41 -0
- data/examples/encrypt_decrypt_rsa.rb +47 -0
- data/examples/mechanism_list.rb +20 -0
- data/examples/multithread.rb +73 -0
- data/examples/objects_list.rb +23 -0
- data/examples/sign_verify.rb +56 -0
- data/examples/slot_info.rb +23 -0
- data/ext/extconf.rb +14 -0
- data/ext/generate_constants.rb +57 -0
- data/ext/generate_structs.rb +77 -0
- data/ext/pk11_const_macros.h +38 -0
- data/ext/pk11_struct_macros.h +435 -0
- data/ext/pk11_version.h +6 -0
- data/ext/pk11l.c +352 -0
- data/ext/pk11l_const_def.inc +804 -0
- data/ext/pk11l_struct.doc +1012 -0
- data/ext/pk11l_struct_def.inc +388 -0
- data/ext/pk11l_struct_impl.inc +388 -0
- data/lib/pkcs11_luna/extensions.rb +131 -0
- data/lib/pkcs11_luna.rb +11 -0
- data/test/app_id_helper.rb +29 -0
- data/test/luna_helper.rb +57 -0
- data/test/test_pkcs11_luna.rb +112 -0
- data/test/test_pkcs11_luna_crypt.rb +260 -0
- data.tar.gz.sig +0 -0
- metadata +173 -0
- metadata.gz.sig +1 -0
@@ -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�
|