ffi-pkcs11 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd6f4b5ce9c4b6b6fe51184c11b052bfb278b1e8
4
- data.tar.gz: c12881078bb7be5e5b68762e6a73a7faad9732bc
3
+ metadata.gz: 5cd973b3cb1028c6b59975bf3facfe532b214763
4
+ data.tar.gz: 1c96f3ea73b70127d4c70522000ca29743887aff
5
5
  SHA512:
6
- metadata.gz: 770748cb742be5064d4043ef88b61bf15cb38cec59bc1af3e0a8084d07305f3436d5da23d08b41983185b872dc92a87c16f9e056a8f47bc6a2d499ea97686909
7
- data.tar.gz: 5242f88b5094743287650c56c49903de2bc2be684d8cf3eb70345a0f2ecfa8c4ce53a5c0dd4b8810bbbfaf9a8388f8d6df18c083b2fa0c53fe95b6dc4d73e46d
6
+ metadata.gz: 25f284e9df5e6ae7114493b6182b540a2cd18f8ad08e68ee7a4089fb153b96a816f859be8059354492e0f04474843636f528e4a61fb7cbc6060cc49206f53240
7
+ data.tar.gz: 505e7c278da451261e2a4eb404fde4df17f46d67900d079d340b9958bb7848e2360b109f3c15d69fe8f43b2bfd30e679bc4b5617f3187c219778458153f93b66
data/README.md CHANGED
@@ -32,7 +32,18 @@ if result == Pkcs11::CKR_OK
32
32
 
33
33
  ### High-level API
34
34
 
35
- Coming soon (TM).
35
+ ```ruby
36
+ session = Pkcs11::Session.new
37
+ session.open(slot_id) do |_|
38
+ session.login(pin) do |_|
39
+ return_value = Pkcs11::C_Digest(session.session_handle,
40
+ some_data,
41
+ some_data_size,
42
+ digest_data,
43
+ digest_data_length)
44
+ if return_value.ok?
45
+ [...]
46
+ ```
36
47
 
37
48
  ## Development
38
49
 
data/lib/ffi-pkcs11.rb CHANGED
@@ -1,6 +1,11 @@
1
1
  require "ffi-pkcs11/version"
2
2
 
3
3
  require 'ffi-pkcs11/error'
4
+
5
+ require 'ffi'
6
+
7
+ require 'ffi-pkcs11/pkcs11'
4
8
  require 'ffi-pkcs11/return_value'
9
+ require 'ffi-pkcs11/types'
5
10
  require 'ffi-pkcs11/functions'
6
11
  require 'ffi-pkcs11/session'
@@ -1,62 +1,29 @@
1
- require 'ffi'
2
-
3
1
  module Pkcs11
4
- extend FFI::Library
5
-
6
- ffi_lib 'cryptoki'
7
-
8
- typedef :ulong, :CK_RV
9
-
10
- CKS_RO_PUBLIC_SESSION = 0
11
- CKS_RO_USER_FUNCTIONS = 1
12
- CKS_RW_PUBLIC_SESSION = 2
13
- CKS_RW_USER_FUNCTIONS = 3
14
- CKS_RW_SO_FUNCTIONS = 4
15
-
16
- class CK_SESSION_INFO < FFI::Struct
17
- layout :slot_id, :ulong,
18
- :state, :ulong,
19
- :flags, :ulong,
20
- :u_device_error, :ulong
21
- end
22
-
23
- enum :CK_ATTRIBUTE_TYPE, [
24
- :CKA_CLASS, 0x00000000,
25
- :CKA_TOKEN, 0x00000001,
26
- :CKA_PRIVATE, 0x00000002,
27
- :CKA_LABEL, 0x00000003
28
- ]
29
-
30
- class CK_ATTRIBUTE < FFI::Struct
31
- layout :type, :CK_ATTRIBUTE_TYPE,
32
- :value, :pointer,
33
- :value_len, :ulong
34
- end
35
-
36
- CKF_RW_SESSION = 0x00000002
37
- CKF_SERIAL_SESSION = 0x00000004
38
-
39
- CKM_MD5 = 0x00000210
40
- CKM_SHA_1 = 0x00000220
41
- CKM_VENDOR_DEFINED = 0x80000000
42
-
43
- CKU_SO = 0
44
- CKU_USER = 1
45
- CKU_CONTEXT_SPECIFIC = 2
46
-
47
2
  def self.import_function(function_name, *args)
48
3
  function_symbol = "native_#{function_name}".to_sym
49
4
  attach_function(function_symbol, function_name, *args)
50
5
 
51
6
  self.class.send(:define_method, function_name) do |*arguments|
52
- result = send(function_symbol, *arguments)
53
- ReturnValue[result]
7
+ if ENV['PKCS11_DEBUG']
8
+ start_time = Time.now
9
+ begin
10
+ result = send(function_symbol, *arguments)
11
+ ensure
12
+ end_time = Time.now
13
+ puts "#{function_name} - #{result} - #{end_time - start_time}"
14
+ end
15
+ ReturnValue[result]
16
+ else
17
+ result = send(function_symbol, *arguments)
18
+ ReturnValue[result]
19
+ end
54
20
  end
55
21
  end
56
22
 
57
23
  import_function :C_Initialize, [:pointer], :CK_RV
58
24
  import_function :C_Finalize, [:pointer], :CK_RV
59
25
 
26
+ import_function :C_GetInfo, [:pointer], :CK_RV
60
27
  import_function :C_GetSlotList, [:bool, :pointer, :pointer], :CK_RV
61
28
 
62
29
  import_function :C_GetSessionInfo, [:ulong, :pointer], :CK_RV
@@ -0,0 +1,7 @@
1
+ module Pkcs11
2
+ extend FFI::Library
3
+
4
+ ffi_lib 'cryptoki'
5
+
6
+ typedef :ulong, :CK_RV
7
+ end
@@ -16,6 +16,18 @@ module Pkcs11
16
16
  @session_pointer.read_ulong == 0
17
17
  end
18
18
 
19
+ def info
20
+ session_info = Pkcs11::CK_SESSION_INFO.new
21
+ result = Pkcs11::C_GetSessionInfo(session_handle, session_info)
22
+ check result
23
+ {
24
+ slot_id: session_info[:slot_id],
25
+ state: session_info[:state],
26
+ flags: session_info[:flags],
27
+ u_device_error: session_info[:u_device_error]
28
+ }
29
+ end
30
+
19
31
  def login(pin)
20
32
  result = Pkcs11.C_Login(session_handle, Pkcs11::CKU_USER, pin, pin.size)
21
33
  check result
@@ -0,0 +1,46 @@
1
+ module Pkcs11
2
+ CKS_RO_PUBLIC_SESSION = 0
3
+ CKS_RO_USER_FUNCTIONS = 1
4
+ CKS_RW_PUBLIC_SESSION = 2
5
+ CKS_RW_USER_FUNCTIONS = 3
6
+ CKS_RW_SO_FUNCTIONS = 4
7
+
8
+ CKF_RW_SESSION = 0x00000002
9
+ CKF_SERIAL_SESSION = 0x00000004
10
+
11
+ CKM_MD5 = 0x00000210
12
+ CKM_SHA_1 = 0x00000220
13
+ CKM_VENDOR_DEFINED = 0x80000000
14
+
15
+ CKU_SO = 0
16
+ CKU_USER = 1
17
+ CKU_CONTEXT_SPECIFIC = 2
18
+
19
+ class CK_INFO < FFI::Struct
20
+ layout :cryptoki_version, [:uchar, 2],
21
+ :manufacturer_id, [:uchar, 32],
22
+ :flags, :ulong,
23
+ :library_description, [:uchar, 32],
24
+ :library_version, [:uchar, 2]
25
+ end
26
+
27
+ class CK_SESSION_INFO < FFI::Struct
28
+ layout :slot_id, :ulong,
29
+ :state, :ulong,
30
+ :flags, :ulong,
31
+ :u_device_error, :ulong
32
+ end
33
+
34
+ enum :CK_ATTRIBUTE_TYPE, [
35
+ :CKA_CLASS, 0x00000000,
36
+ :CKA_TOKEN, 0x00000001,
37
+ :CKA_PRIVATE, 0x00000002,
38
+ :CKA_LABEL, 0x00000003
39
+ ]
40
+
41
+ class CK_ATTRIBUTE < FFI::Struct
42
+ layout :type, :CK_ATTRIBUTE_TYPE,
43
+ :value, :pointer,
44
+ :value_len, :ulong
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module Pkcs11
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-pkcs11
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Touchard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-09 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -100,8 +100,10 @@ files:
100
100
  - lib/ffi-pkcs11.rb
101
101
  - lib/ffi-pkcs11/error.rb
102
102
  - lib/ffi-pkcs11/functions.rb
103
+ - lib/ffi-pkcs11/pkcs11.rb
103
104
  - lib/ffi-pkcs11/return_value.rb
104
105
  - lib/ffi-pkcs11/session.rb
106
+ - lib/ffi-pkcs11/types.rb
105
107
  - lib/ffi-pkcs11/version.rb
106
108
  homepage: https://github.com/touchardv/ffi-pkcs11
107
109
  licenses: []