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.
@@ -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 = Data_Make_Struct(rb_cData, CK_ULONG, 0, -1, *ptr);
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 = Data_Wrap_Struct(klass, 0, 0, ptr);
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 = Data_Wrap_Struct(klass, 0, -1, mem);
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 = Data_Wrap_Struct(klass, 0, -1, mem);
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 = Data_Make_Struct(self, s, 0, -1, info); \
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
@@ -1,6 +1,6 @@
1
1
  #ifndef RUBY_PK11_VERSION_H
2
2
  #define RUBY_PK11_VERSION_H
3
3
 
4
- static const char *VERSION = "0.3.3";
4
+ static const char *VERSION = "0.4.0";
5
5
 
6
6
  #endif
data/test/helper.rb CHANGED
@@ -19,7 +19,10 @@ def find_softokn
19
19
  end
20
20
  end
21
21
  else
22
- lLIBSOFTOKEN3_SO = "libsoftokn3.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
@@ -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.destroy
44
+ @secret_key&.destroy
37
45
  # @session.logout
38
- @session.close
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
- if rsa.respond_to?(:set_key)
96
- rsa.set_key(n, e, nil)
97
- else
98
- rsa.n = n
99
- rsa.e = e
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.3.3
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
- 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==
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: 2020-11-07 00:00:00.000000000 Z
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: '0.6'
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: '0.6'
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: 0.6.2
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: 0.6.2
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.2.0
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.1.4
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