ffi-pkcs11 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: []