pkcs11 0.3.3 → 0.4.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.appveyor.yml +14 -15
- data/.github/workflows/ci.yml +80 -0
- data/.travis.yml +1 -1
- data/Gemfile +6 -5
- data/History.txt +4 -0
- data/Rakefile +6 -4
- data/ext/generate_constants.rb +3 -3
- data/ext/generate_structs.rb +1 -1
- data/ext/generate_thread_funcs.rb +1 -1
- data/ext/pk11.c +130 -91
- data/ext/pk11_struct_macros.h +65 -16
- data/ext/pk11_version.h +1 -1
- data/test/helper.rb +8 -2
- data/test/test_pkcs11_crypt.rb +32 -10
- data.tar.gz.sig +0 -0
- metadata +63 -42
- metadata.gz.sig +0 -0
data/ext/pk11_struct_macros.h
CHANGED
|
@@ -77,7 +77,7 @@ get_ulong_ptr(VALUE obj, off_t offset)
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
static VALUE
|
|
80
|
-
set_ulong_ptr(VALUE obj, VALUE value, const char *name, off_t offset)
|
|
80
|
+
set_ulong_ptr(VALUE obj, VALUE value, const char *name, off_t offset, const rb_data_type_t *objtype)
|
|
81
81
|
{
|
|
82
82
|
VALUE new_obj;
|
|
83
83
|
CK_ULONG_PTR *ptr = (CK_ULONG_PTR *)((char*)DATA_PTR(obj) + offset);
|
|
@@ -86,7 +86,7 @@ set_ulong_ptr(VALUE obj, VALUE value, const char *name, off_t offset)
|
|
|
86
86
|
*ptr = NULL_PTR;
|
|
87
87
|
return value;
|
|
88
88
|
}
|
|
89
|
-
new_obj =
|
|
89
|
+
new_obj = TypedData_Make_Struct(rb_cObject, CK_ULONG, objtype, *ptr);
|
|
90
90
|
rb_iv_set(obj, name, new_obj);
|
|
91
91
|
**ptr = NUM2ULONG(value);
|
|
92
92
|
return value;
|
|
@@ -180,10 +180,10 @@ set_string_ptr_len(VALUE obj, VALUE value, const char *name, off_t offset, off_t
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
static VALUE
|
|
183
|
-
get_struct_inline(VALUE obj, VALUE klass, const char *name, off_t offset)
|
|
183
|
+
get_struct_inline(VALUE obj, VALUE klass, const char *name, off_t offset, const rb_data_type_t *objtype)
|
|
184
184
|
{
|
|
185
185
|
char *ptr = (char*)DATA_PTR(obj) + offset;
|
|
186
|
-
VALUE inline_obj =
|
|
186
|
+
VALUE inline_obj = TypedData_Wrap_Struct(klass, objtype, ptr);
|
|
187
187
|
rb_iv_set(inline_obj, name, obj);
|
|
188
188
|
return inline_obj;
|
|
189
189
|
}
|
|
@@ -199,7 +199,7 @@ set_struct_inline(VALUE obj, VALUE klass, const char *struct_name, VALUE value,
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
static VALUE
|
|
202
|
-
get_struct_ptr(VALUE obj, VALUE klass, const char *name, off_t offset, int sizeofstruct)
|
|
202
|
+
get_struct_ptr(VALUE obj, VALUE klass, const char *name, off_t offset, int sizeofstruct, const rb_data_type_t *objtype)
|
|
203
203
|
{
|
|
204
204
|
char *ptr = (char*)DATA_PTR(obj);
|
|
205
205
|
char *p = *(char**)(ptr+offset);
|
|
@@ -208,7 +208,7 @@ get_struct_ptr(VALUE obj, VALUE klass, const char *name, off_t offset, int sizeo
|
|
|
208
208
|
if (!p) return Qnil;
|
|
209
209
|
mem = xmalloc(sizeofstruct);
|
|
210
210
|
memcpy(mem, p, sizeofstruct);
|
|
211
|
-
new_obj =
|
|
211
|
+
new_obj = TypedData_Wrap_Struct(klass, objtype, mem);
|
|
212
212
|
return new_obj;
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -229,7 +229,7 @@ set_struct_ptr(VALUE obj, VALUE klass, const char *struct_name, VALUE value, con
|
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
static VALUE
|
|
232
|
-
get_struct_ptr_array(VALUE obj, VALUE klass, off_t offset, off_t offset_len, int sizeofstruct)
|
|
232
|
+
get_struct_ptr_array(VALUE obj, VALUE klass, off_t offset, off_t offset_len, int sizeofstruct, const rb_data_type_t *objtype)
|
|
233
233
|
{
|
|
234
234
|
unsigned long i;
|
|
235
235
|
char *ptr = DATA_PTR(obj);
|
|
@@ -240,7 +240,7 @@ get_struct_ptr_array(VALUE obj, VALUE klass, off_t offset, off_t offset_len, int
|
|
|
240
240
|
VALUE new_obj;
|
|
241
241
|
void *mem = xmalloc(sizeofstruct);
|
|
242
242
|
memcpy(mem, p + sizeofstruct * i, sizeofstruct);
|
|
243
|
-
new_obj =
|
|
243
|
+
new_obj = TypedData_Wrap_Struct(klass, objtype, mem);
|
|
244
244
|
rb_ary_push(ary, new_obj);
|
|
245
245
|
}
|
|
246
246
|
return ary;
|
|
@@ -273,9 +273,15 @@ set_struct_ptr_array(VALUE obj, VALUE klass, const char *struct_name, VALUE valu
|
|
|
273
273
|
#define SIZE_OF(s, f) (sizeof(((s*)0)->f))
|
|
274
274
|
|
|
275
275
|
#define PKCS11_IMPLEMENT_ALLOCATOR(s) \
|
|
276
|
+
static const rb_data_type_t struct_##s##_obj_type = { \
|
|
277
|
+
"PKCS11::" #s, \
|
|
278
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
279
|
+
0, 0, \
|
|
280
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
281
|
+
}; \
|
|
276
282
|
static VALUE s##_s_alloc(VALUE self){ \
|
|
277
283
|
s *info; \
|
|
278
|
-
VALUE obj =
|
|
284
|
+
VALUE obj = TypedData_Make_Struct(self, s, &struct_##s##_obj_type, info); \
|
|
279
285
|
return obj; \
|
|
280
286
|
} \
|
|
281
287
|
static VALUE c##s##_to_s(VALUE self){ \
|
|
@@ -315,11 +321,18 @@ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
|
315
321
|
}
|
|
316
322
|
|
|
317
323
|
#define PKCS11_IMPLEMENT_ULONG_PTR_ACCESSOR(s, f) \
|
|
324
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
325
|
+
"PKCS11::" #s "." #f, \
|
|
326
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
327
|
+
0, 0, \
|
|
328
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
329
|
+
}; \
|
|
330
|
+
\
|
|
318
331
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
319
332
|
return get_ulong_ptr(o, OFFSET_OF(s, f)); \
|
|
320
333
|
} \
|
|
321
334
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
322
|
-
return set_ulong_ptr(o, v, #f, OFFSET_OF(s, f)); \
|
|
335
|
+
return set_ulong_ptr(o, v, #f, OFFSET_OF(s, f), &struct_##s##_##f##_obj_type); \
|
|
323
336
|
}
|
|
324
337
|
|
|
325
338
|
#define PKCS11_IMPLEMENT_HANDLE_ACCESSOR(s, f) \
|
|
@@ -355,17 +368,29 @@ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
|
355
368
|
}
|
|
356
369
|
|
|
357
370
|
#define PKCS11_IMPLEMENT_STRUCT_ACCESSOR(s, k, f) \
|
|
371
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
372
|
+
"PKCS11::" #s "." #f, \
|
|
373
|
+
{0, 0, 0,}, \
|
|
374
|
+
0, 0, \
|
|
375
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
376
|
+
}; \
|
|
358
377
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
359
|
-
return get_struct_inline(o, c##k, #f, OFFSET_OF(s, f)); \
|
|
378
|
+
return get_struct_inline(o, c##k, #f, OFFSET_OF(s, f), &struct_##s##_##f##_obj_type); \
|
|
360
379
|
} \
|
|
361
380
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
362
381
|
return set_struct_inline(o, c##k, #k, v, #f, OFFSET_OF(s, f), sizeof(k)); \
|
|
363
382
|
}
|
|
364
383
|
|
|
365
384
|
#define PKCS11_IMPLEMENT_PKCS11_STRUCT_ACCESSOR(s, k, f) \
|
|
385
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
386
|
+
"PKCS11::" #s "." #f, \
|
|
387
|
+
{0, 0, 0,}, \
|
|
388
|
+
0, 0, \
|
|
389
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
390
|
+
}; \
|
|
366
391
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
367
392
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
|
368
|
-
return get_struct_inline(o, klass, #f, OFFSET_OF(s, f)); \
|
|
393
|
+
return get_struct_inline(o, klass, #f, OFFSET_OF(s, f), &struct_##s##_##f##_obj_type); \
|
|
369
394
|
} \
|
|
370
395
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
371
396
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
|
@@ -373,17 +398,29 @@ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
|
373
398
|
}
|
|
374
399
|
|
|
375
400
|
#define PKCS11_IMPLEMENT_STRUCT_PTR_ACCESSOR(s, k, f) \
|
|
401
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
402
|
+
"PKCS11::" #s "." #f, \
|
|
403
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
404
|
+
0, 0, \
|
|
405
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
406
|
+
}; \
|
|
376
407
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
377
|
-
return get_struct_ptr(o, c##k, #f, OFFSET_OF(s, f), sizeof(k)); \
|
|
408
|
+
return get_struct_ptr(o, c##k, #f, OFFSET_OF(s, f), sizeof(k), &struct_##s##_##f##_obj_type); \
|
|
378
409
|
} \
|
|
379
410
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
380
411
|
return set_struct_ptr(o, c##k, #k, v, #f, OFFSET_OF(s, f)); \
|
|
381
412
|
}
|
|
382
413
|
|
|
383
414
|
#define PKCS11_IMPLEMENT_PKCS11_STRUCT_PTR_ACCESSOR(s, k, f) \
|
|
415
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
416
|
+
"PKCS11::" #s "." #f, \
|
|
417
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
418
|
+
0, 0, \
|
|
419
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
420
|
+
}; \
|
|
384
421
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
385
422
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
|
386
|
-
return get_struct_ptr(o, klass, #f, OFFSET_OF(s, f), sizeof(k)); \
|
|
423
|
+
return get_struct_ptr(o, klass, #f, OFFSET_OF(s, f), sizeof(k), &struct_##s##_##f##_obj_type); \
|
|
387
424
|
} \
|
|
388
425
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
389
426
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
|
@@ -391,17 +428,29 @@ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
|
391
428
|
}
|
|
392
429
|
|
|
393
430
|
#define PKCS11_IMPLEMENT_STRUCT_PTR_ARRAY_ACCESSOR(s, k, f, l) \
|
|
431
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
432
|
+
"PKCS11::" #s "." #f, \
|
|
433
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
434
|
+
0, 0, \
|
|
435
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
436
|
+
}; \
|
|
394
437
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
395
|
-
return get_struct_ptr_array(o, c##k, OFFSET_OF(s, f), OFFSET_OF(s, l), sizeof(k)); \
|
|
438
|
+
return get_struct_ptr_array(o, c##k, OFFSET_OF(s, f), OFFSET_OF(s, l), sizeof(k), &struct_##s##_##f##_obj_type); \
|
|
396
439
|
} \
|
|
397
440
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
398
441
|
return set_struct_ptr_array(o, c##k, #k, v, #f, OFFSET_OF(s, f), OFFSET_OF(s, l), sizeof(k)); \
|
|
399
442
|
}
|
|
400
443
|
|
|
401
444
|
#define PKCS11_IMPLEMENT_PKCS11_STRUCT_PTR_ARRAY_ACCESSOR(s, k, f, l) \
|
|
445
|
+
static const rb_data_type_t struct_##s##_##f##_obj_type = { \
|
|
446
|
+
"PKCS11::" #s "." #f, \
|
|
447
|
+
{0, RUBY_DEFAULT_FREE, 0,}, \
|
|
448
|
+
0, 0, \
|
|
449
|
+
RUBY_TYPED_FREE_IMMEDIATELY, \
|
|
450
|
+
}; \
|
|
402
451
|
static VALUE c##s##_get_##f(VALUE o){ \
|
|
403
452
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
|
404
|
-
return get_struct_ptr_array(o, klass, OFFSET_OF(s, f), OFFSET_OF(s, l), sizeof(k)); \
|
|
453
|
+
return get_struct_ptr_array(o, klass, OFFSET_OF(s, f), OFFSET_OF(s, l), sizeof(k), &struct_##s##_##f##_obj_type); \
|
|
405
454
|
} \
|
|
406
455
|
static VALUE c##s##_set_##f(VALUE o, VALUE v){ \
|
|
407
456
|
VALUE klass = rb_const_get(rb_const_get(rb_cObject, rb_intern("PKCS11")), rb_intern(#k)); \
|
data/ext/pk11_version.h
CHANGED
data/test/helper.rb
CHANGED
|
@@ -19,7 +19,10 @@ def find_softokn
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
else
|
|
22
|
-
lLIBSOFTOKEN3_SO =
|
|
22
|
+
lLIBSOFTOKEN3_SO = case RUBY_PLATFORM
|
|
23
|
+
when /darwin/ then "libsoftokn3.dylib"
|
|
24
|
+
else "libsoftokn3.so"
|
|
25
|
+
end
|
|
23
26
|
lLIBNSS_PATHS = %w(
|
|
24
27
|
/usr/lib64
|
|
25
28
|
/usr/lib
|
|
@@ -27,11 +30,14 @@ def find_softokn
|
|
|
27
30
|
/usr/lib/nss
|
|
28
31
|
/usr/lib/i386-linux-gnu/nss
|
|
29
32
|
/usr/lib/x86_64-linux-gnu/nss
|
|
33
|
+
/usr/lib/x86_64-linux-gnu/
|
|
34
|
+
/opt/homebrew/opt/nss/lib/
|
|
35
|
+
/usr/local/opt/nss/lib/
|
|
30
36
|
)
|
|
31
37
|
unless so_path = ENV['SOFTOKN_PATH']
|
|
32
38
|
paths = lLIBNSS_PATHS.collect{|path| File.join(path, lLIBSOFTOKEN3_SO) }
|
|
33
39
|
so_path = paths.find do |path|
|
|
34
|
-
File.exist?(path) && open_softokn(path).close rescue false
|
|
40
|
+
File.exist?(path) && (open_softokn(path).close rescue false)
|
|
35
41
|
end
|
|
36
42
|
end
|
|
37
43
|
end
|
data/test/test_pkcs11_crypt.rb
CHANGED
|
@@ -12,6 +12,7 @@ class TestPkcs11Crypt < Minitest::Test
|
|
|
12
12
|
attr_reader :rsa_priv_key
|
|
13
13
|
attr_reader :rsa_pub_key
|
|
14
14
|
attr_reader :secret_key
|
|
15
|
+
attr_reader :secret_key_aes
|
|
15
16
|
|
|
16
17
|
def setup
|
|
17
18
|
$pkcs11 ||= open_softokn
|
|
@@ -30,12 +31,19 @@ class TestPkcs11Crypt < Minitest::Test
|
|
|
30
31
|
ENCRYPT: true, WRAP: true, DECRYPT: true, UNWRAP: true, TOKEN: false,
|
|
31
32
|
VALUE: '0123456789abcdef',
|
|
32
33
|
LABEL: 'test_secret_key')
|
|
34
|
+
|
|
35
|
+
@secret_key_aes = session.create_object(
|
|
36
|
+
CLASS: CKO_SECRET_KEY,
|
|
37
|
+
KEY_TYPE: CKK_AES,
|
|
38
|
+
ENCRYPT: true, WRAP: true, DECRYPT: true, UNWRAP: true, TOKEN: false,
|
|
39
|
+
VALUE: '123456789abcdef0',
|
|
40
|
+
LABEL: 'test_secret_aes')
|
|
33
41
|
end
|
|
34
42
|
|
|
35
43
|
def teardown
|
|
36
|
-
@secret_key
|
|
44
|
+
@secret_key&.destroy
|
|
37
45
|
# @session.logout
|
|
38
|
-
@session
|
|
46
|
+
@session&.close
|
|
39
47
|
end
|
|
40
48
|
|
|
41
49
|
def pk
|
|
@@ -58,7 +66,7 @@ class TestPkcs11Crypt < Minitest::Test
|
|
|
58
66
|
assert_equal 16, cryptogram.length, 'The cryptogram should contain some data'
|
|
59
67
|
refute_equal cryptogram, plaintext1, 'The cryptogram should be different to plaintext'
|
|
60
68
|
|
|
61
|
-
cryptogram2 =
|
|
69
|
+
cryptogram2 = String.new
|
|
62
70
|
cryptogram2 << session.encrypt( {DES3_CBC_PAD: "\0"*8}, secret_key ) do |cipher|
|
|
63
71
|
cryptogram2 << cipher.update(plaintext1[0, 8])
|
|
64
72
|
cryptogram2 << cipher.update(plaintext1[8..-1])
|
|
@@ -69,6 +77,22 @@ class TestPkcs11Crypt < Minitest::Test
|
|
|
69
77
|
assert_equal plaintext1, plaintext2, 'Decrypted plaintext should be the same'
|
|
70
78
|
end
|
|
71
79
|
|
|
80
|
+
def test_endecrypt_aes_gcm
|
|
81
|
+
skip "segfaults on Windows with softokn3.dll of Firefox-68" if RUBY_PLATFORM=~/mswin|mingw/
|
|
82
|
+
plaintext1 = "secret message"
|
|
83
|
+
mps = CK_GCM_PARAMS.new
|
|
84
|
+
mps.pIv = "i" * 12
|
|
85
|
+
mps.pAAD = ""
|
|
86
|
+
mps.ulIvBits = 96
|
|
87
|
+
mps.ulTagBits = 128
|
|
88
|
+
cryptogram = session.encrypt( CK_MECHANISM.new(CKM_AES_GCM, mps), secret_key_aes, plaintext1)
|
|
89
|
+
assert_equal 30, cryptogram.length, 'The cryptogram should contain some data'
|
|
90
|
+
refute_equal cryptogram, plaintext1, 'The cryptogram should be different to plaintext'
|
|
91
|
+
|
|
92
|
+
plaintext2 = session.decrypt( CK_MECHANISM.new(CKM_AES_GCM, mps), secret_key_aes, cryptogram)
|
|
93
|
+
assert_equal plaintext1, plaintext2, 'Decrypted plaintext should be the same'
|
|
94
|
+
end
|
|
95
|
+
|
|
72
96
|
def test_sign_verify
|
|
73
97
|
plaintext = "important text"
|
|
74
98
|
signature = session.sign( :SHA1_RSA_PKCS, rsa_priv_key, plaintext)
|
|
@@ -89,15 +113,13 @@ class TestPkcs11Crypt < Minitest::Test
|
|
|
89
113
|
end
|
|
90
114
|
|
|
91
115
|
def create_openssl_cipher(pk11_key)
|
|
92
|
-
rsa = OpenSSL::PKey::RSA.new
|
|
93
116
|
n = OpenSSL::BN.new pk11_key[:MODULUS], 2
|
|
94
117
|
e = OpenSSL::BN.new pk11_key[:PUBLIC_EXPONENT], 2
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
end
|
|
118
|
+
seq = []
|
|
119
|
+
seq << OpenSSL::ASN1::Integer(n)
|
|
120
|
+
seq << OpenSSL::ASN1::Integer(e)
|
|
121
|
+
asn1 = OpenSSL::ASN1::Sequence(seq)
|
|
122
|
+
rsa = OpenSSL::PKey::RSA.new(asn1.to_der)
|
|
101
123
|
rsa
|
|
102
124
|
end
|
|
103
125
|
|
data.tar.gz.sig
CHANGED
|
Binary file
|
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.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryosuke Kutsuna
|
|
@@ -12,26 +12,26 @@ bindir: bin
|
|
|
12
12
|
cert_chain:
|
|
13
13
|
- |
|
|
14
14
|
-----BEGIN CERTIFICATE-----
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
+
|
|
32
|
-
|
|
15
|
+
MIIDPDCCAiSgAwIBAgIBCTANBgkqhkiG9w0BAQsFADBEMQ0wCwYDVQQDDARsYXJz
|
|
16
|
+
MR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZImiZPyLGQB
|
|
17
|
+
GRYCZGUwHhcNMjYwNDAxMTg0ODAwWhcNMjcwNDAxMTg0ODAwWjBEMQ0wCwYDVQQD
|
|
18
|
+
DARsYXJzMR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZIm
|
|
19
|
+
iZPyLGQBGRYCZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZb4Uv
|
|
20
|
+
RFJfRu/VEWiy3psh2jinETjiuBrL0NeRFGf8H7iU9+gx/DI/FFhfHGLrDeIskrJx
|
|
21
|
+
YIWDMmEjVO10UUdj7wu4ZhmU++0Cd7Kq9/TyP/shIP3IjqHjVLCnJ3P6f1cl5rxZ
|
|
22
|
+
gqo+d3BAoDrmPk0rtaf6QopwUw9RBiF8V4HqvpiY+ruJotP5UQDP4/lVOKvA8PI9
|
|
23
|
+
P0GmVbFBrbc7Zt5h78N3UyOK0u+nvOC23BvyHXzCtcFsXCoEkt+Wwh0RFqVZdnjM
|
|
24
|
+
LMO2vULHKKHDdX54K/sbVCj9pN9h1aotNzrEyo55zxn0G9PHg/G3P8nMvAXPkUTe
|
|
25
|
+
brhXrfCwWRvOXA4TAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
|
|
26
|
+
A1UdDgQWBBRAHK81igrXodaDj8a8/BIKsaZrETANBgkqhkiG9w0BAQsFAAOCAQEA
|
|
27
|
+
EjU6iOXhPs6VyCWOEzQvH0qFsS9bvSO6kAY/tiiM1GoMmrFf5aJcJwVGo5dUawAO
|
|
28
|
+
MtPRglzAXUg2PBjXMvdcbcmFVrx86WEtrpt4/VrRg+Sw10A5wwb/7gsmec7CPs5j
|
|
29
|
+
t40augLjTJVe2L+8vVEGXyhI33qGiQv6CFWrMhShdfRxLkEedCE/CS/xsbiOYidf
|
|
30
|
+
VeRnDP4Xd/mWfvi0E8t+OybXpljhmsElg/X9E3Ckr3I/U8xgtCUbfmWrGXXVG6+V
|
|
31
|
+
tJgAY1NWb91NFLi8hIuvg0jUtg6bVkw/m67U70Je/O+qMayhGi/lvdSicZL0y4Ly
|
|
32
|
+
lM5sbwRVBbcM4hV2A0XuHA==
|
|
33
33
|
-----END CERTIFICATE-----
|
|
34
|
-
date:
|
|
34
|
+
date: 2026-04-01 00:00:00.000000000 Z
|
|
35
35
|
dependencies:
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: yard
|
|
@@ -39,14 +39,14 @@ dependencies:
|
|
|
39
39
|
requirements:
|
|
40
40
|
- - "~>"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version:
|
|
42
|
+
version: 0.9.36
|
|
43
43
|
type: :development
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
47
|
- - "~>"
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version:
|
|
49
|
+
version: 0.9.36
|
|
50
50
|
- !ruby/object:Gem::Dependency
|
|
51
51
|
name: rake-compiler
|
|
52
52
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,28 +67,48 @@ dependencies:
|
|
|
67
67
|
requirements:
|
|
68
68
|
- - "~>"
|
|
69
69
|
- !ruby/object:Gem::Version
|
|
70
|
-
version:
|
|
70
|
+
version: '1.2'
|
|
71
71
|
type: :development
|
|
72
72
|
prerelease: false
|
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
|
74
74
|
requirements:
|
|
75
75
|
- - "~>"
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version:
|
|
77
|
+
version: '1.2'
|
|
78
78
|
- !ruby/object:Gem::Dependency
|
|
79
79
|
name: minitest
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
|
82
|
-
- - "
|
|
82
|
+
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
84
|
version: '5.7'
|
|
85
|
+
- - "<"
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 7.0.a
|
|
85
88
|
type: :development
|
|
86
89
|
prerelease: false
|
|
87
90
|
version_requirements: !ruby/object:Gem::Requirement
|
|
88
91
|
requirements:
|
|
89
|
-
- - "
|
|
92
|
+
- - ">="
|
|
90
93
|
- !ruby/object:Gem::Version
|
|
91
94
|
version: '5.7'
|
|
95
|
+
- - "<"
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 7.0.a
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: hoe
|
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - "~>"
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '4.0'
|
|
105
|
+
type: :development
|
|
106
|
+
prerelease: false
|
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - "~>"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '4.0'
|
|
92
112
|
- !ruby/object:Gem::Dependency
|
|
93
113
|
name: hoe-bundler
|
|
94
114
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,6 +123,20 @@ dependencies:
|
|
|
103
123
|
- - "~>"
|
|
104
124
|
- !ruby/object:Gem::Version
|
|
105
125
|
version: '1.0'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: win32-registry
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - "~>"
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '0.1'
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - "~>"
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0.1'
|
|
106
140
|
- !ruby/object:Gem::Dependency
|
|
107
141
|
name: rdoc
|
|
108
142
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -123,20 +157,6 @@ dependencies:
|
|
|
123
157
|
- - "<"
|
|
124
158
|
- !ruby/object:Gem::Version
|
|
125
159
|
version: '7'
|
|
126
|
-
- !ruby/object:Gem::Dependency
|
|
127
|
-
name: hoe
|
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
|
129
|
-
requirements:
|
|
130
|
-
- - "~>"
|
|
131
|
-
- !ruby/object:Gem::Version
|
|
132
|
-
version: '3.22'
|
|
133
|
-
type: :development
|
|
134
|
-
prerelease: false
|
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
-
requirements:
|
|
137
|
-
- - "~>"
|
|
138
|
-
- !ruby/object:Gem::Version
|
|
139
|
-
version: '3.22'
|
|
140
160
|
description: 'This module allows Ruby programs to interface with "RSA Security Inc.
|
|
141
161
|
PKCS #11 Cryptographic Token Interface (Cryptoki)".'
|
|
142
162
|
email:
|
|
@@ -158,6 +178,7 @@ files:
|
|
|
158
178
|
- ".appveyor.yml"
|
|
159
179
|
- ".autotest"
|
|
160
180
|
- ".gemtest"
|
|
181
|
+
- ".github/workflows/ci.yml"
|
|
161
182
|
- ".gitignore"
|
|
162
183
|
- ".travis.yml"
|
|
163
184
|
- ".yardopts"
|
|
@@ -226,14 +247,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
226
247
|
requirements:
|
|
227
248
|
- - ">="
|
|
228
249
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 2.
|
|
250
|
+
version: 2.6.0
|
|
230
251
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
252
|
requirements:
|
|
232
253
|
- - ">="
|
|
233
254
|
- !ruby/object:Gem::Version
|
|
234
255
|
version: '0'
|
|
235
256
|
requirements: []
|
|
236
|
-
rubygems_version: 3.
|
|
257
|
+
rubygems_version: 3.3.7
|
|
237
258
|
signing_key:
|
|
238
259
|
specification_version: 4
|
|
239
260
|
summary: PKCS#11 binding for Ruby
|
metadata.gz.sig
CHANGED
|
Binary file
|