pkcs11 0.2.4-x64-mingw32
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.
- data.tar.gz.sig +0 -0
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/.yardopts +1 -0
- data/History.txt +57 -0
- data/MIT-LICENSE +22 -0
- data/Manifest.txt +57 -0
- data/README.rdoc +205 -0
- data/Rakefile +111 -0
- data/ext/extconf.rb +7 -0
- data/ext/generate_constants.rb +57 -0
- data/ext/generate_structs.rb +206 -0
- data/ext/generate_thread_funcs.rb +72 -0
- data/ext/include/cryptoki.h +66 -0
- data/ext/include/ct-kip.h +50 -0
- data/ext/include/otp-pkcs11.h +125 -0
- data/ext/include/pkcs-11v2-20a3.h +124 -0
- data/ext/include/pkcs11.h +299 -0
- data/ext/include/pkcs11f.h +912 -0
- data/ext/include/pkcs11t.h +1885 -0
- data/ext/pk11.c +1675 -0
- data/ext/pk11.h +81 -0
- data/ext/pk11_const.c +205 -0
- data/ext/pk11_const_def.inc +452 -0
- data/ext/pk11_const_macros.h +38 -0
- data/ext/pk11_struct.doc +792 -0
- data/ext/pk11_struct_def.inc +302 -0
- data/ext/pk11_struct_impl.inc +302 -0
- data/ext/pk11_struct_macros.h +435 -0
- data/ext/pk11_thread_funcs.c +411 -0
- data/ext/pk11_thread_funcs.h +482 -0
- data/ext/pk11_version.h +6 -0
- data/lib/2.0/pkcs11_ext.so +0 -0
- data/lib/pkcs11.rb +9 -0
- data/lib/pkcs11/extensions.rb +68 -0
- data/lib/pkcs11/helper.rb +144 -0
- data/lib/pkcs11/library.rb +140 -0
- data/lib/pkcs11/object.rb +171 -0
- data/lib/pkcs11/session.rb +765 -0
- data/lib/pkcs11/slot.rb +102 -0
- data/pkcs11_protect_server/Manifest.txt +14 -0
- data/pkcs11_protect_server/README_PROTECT_SERVER.rdoc +89 -0
- data/test/fixtures/softokn/cert8.db +0 -0
- data/test/fixtures/softokn/key3.db +0 -0
- data/test/fixtures/softokn/secmod.db +0 -0
- data/test/helper.rb +58 -0
- data/test/test_pkcs11.rb +71 -0
- data/test/test_pkcs11_crypt.rb +220 -0
- data/test/test_pkcs11_object.rb +122 -0
- data/test/test_pkcs11_session.rb +123 -0
- data/test/test_pkcs11_slot.rb +78 -0
- data/test/test_pkcs11_structs.rb +166 -0
- data/test/test_pkcs11_thread.rb +44 -0
- metadata +213 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,122 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "pkcs11"
|
3
|
+
require "test/helper"
|
4
|
+
|
5
|
+
class TestPkcs11Object < Test::Unit::TestCase
|
6
|
+
include PKCS11
|
7
|
+
|
8
|
+
attr_reader :slots
|
9
|
+
attr_reader :slot
|
10
|
+
attr_reader :session
|
11
|
+
attr_reader :object
|
12
|
+
|
13
|
+
def setup
|
14
|
+
$pkcs11 ||= open_softokn
|
15
|
+
@slots = pk.active_slots
|
16
|
+
@slot = slots.last
|
17
|
+
|
18
|
+
flags = CKF_SERIAL_SESSION #| CKF_RW_SESSION
|
19
|
+
@session = slot.C_OpenSession(flags)
|
20
|
+
# @session.login(:USER, "")
|
21
|
+
|
22
|
+
# Create session object for tests.
|
23
|
+
@object = session.create_object(
|
24
|
+
:CLASS=>CKO_DATA,
|
25
|
+
:TOKEN=>false,
|
26
|
+
:APPLICATION=>'My Application',
|
27
|
+
:VALUE=>'value')
|
28
|
+
end
|
29
|
+
|
30
|
+
def teardown
|
31
|
+
# @session.logout
|
32
|
+
@session.close
|
33
|
+
end
|
34
|
+
|
35
|
+
def pk
|
36
|
+
$pkcs11
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_attributes
|
40
|
+
assert_equal 1, object.attributes(:VALUE).length, 'There should be one resulting attribute'
|
41
|
+
assert_equal CK_ATTRIBUTE, object.attributes(:VALUE).first.class, 'Resulting attribute should be type CK_ATTRIBUTE'
|
42
|
+
assert_equal CKO_DATA, object.attributes(:CLASS).first.value, 'Resulting attribute should be Integer value CKO_DATA'
|
43
|
+
assert_equal 3, object.attributes(:VALUE, :TOKEN, :PRIVATE).length, 'An object should have some attributes'
|
44
|
+
assert_equal 3, object.attributes([:VALUE, :TOKEN, :APPLICATION]).length, 'Another way to retieve attributes'
|
45
|
+
assert_equal 2, object.attributes(:VALUE=>nil, :TOKEN=>nil).length, 'Third way to retieve attributes'
|
46
|
+
|
47
|
+
# The C language way to retrieve the attribute values:
|
48
|
+
template = [
|
49
|
+
CK_ATTRIBUTE.new(CKA_VALUE, nil),
|
50
|
+
]
|
51
|
+
attrs = pk.C_GetAttributeValue(session, object, template)
|
52
|
+
attrs.each do |attr|
|
53
|
+
assert attr.value, 'There should be a value to the object'
|
54
|
+
end
|
55
|
+
|
56
|
+
assert object.attributes.length>=4, 'There should be at least the 4 stored attributes readable'
|
57
|
+
assert_not_nil object.attributes.find{|a| a.type==CKA_CLASS}, 'CKA_CLASS should be returned for Object#attributes'
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_accessor
|
61
|
+
assert_equal 'value', object[:VALUE], "Value should be readable"
|
62
|
+
assert_equal CKO_DATA, object[:CLASS], "Class should be readable"
|
63
|
+
assert_equal ['value', CKO_DATA], object[:VALUE, :CLASS], "multiple values should be readable"
|
64
|
+
assert_equal ['value', CKO_DATA], object[[:VALUE, :CLASS]], "multiple values should be readable"
|
65
|
+
assert_equal [], object[[]], "multiple values should be readable"
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_attribute
|
69
|
+
attr = object.attributes(:CLASS).first
|
70
|
+
assert attr.inspect =~ /CLASS/, 'The attribute should tell about it\'s type'
|
71
|
+
assert attr.inspect =~ /#{CKO_DATA}/, 'The attribute should tell about it\'s type'
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_set_attribute
|
75
|
+
object[:VALUE] = 'value2'
|
76
|
+
assert_equal 'value2', object[:VALUE], "Value should have changed"
|
77
|
+
|
78
|
+
object[:VALUE] = ['value3']
|
79
|
+
assert_equal 'value3', object[:VALUE], "Value should have changed"
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_set_attributes
|
83
|
+
object.attributes = {:VALUE => 'value4', PKCS11::CKA_APPLICATION => 'app4'}
|
84
|
+
assert_equal 'value4', object[:VALUE], "Value should have changed"
|
85
|
+
assert_equal 'app4', object[:APPLICATION], "App should have changed"
|
86
|
+
|
87
|
+
object[:VALUE, PKCS11::CKA_APPLICATION] = 'value5', 'app5'
|
88
|
+
assert_equal 'value5', object[:VALUE], "Value should have changed"
|
89
|
+
assert_equal 'app5', object[:APPLICATION], "App should have changed"
|
90
|
+
assert_raise(ArgumentError) do
|
91
|
+
object[:VALUE, PKCS11::CKA_APPLICATION, :CLASS] = 'value5', 'app5'
|
92
|
+
end
|
93
|
+
|
94
|
+
assert_nothing_raised{ object[] = [] }
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_size
|
98
|
+
assert object.size, 'There should be an object size'
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_copy_without_params
|
102
|
+
new_obj = object.copy
|
103
|
+
new_obj[:APPLICATION] = 'Copied object'
|
104
|
+
assert_equal 'Copied object', new_obj[:APPLICATION], "Application should be changed"
|
105
|
+
assert_equal 'My Application', object[:APPLICATION], "Original object should be unchanged"
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_copy_with_params
|
109
|
+
new_obj = object.copy :APPLICATION=>'Copied object'
|
110
|
+
assert_equal 'value', new_obj[:VALUE], "Value should be copied"
|
111
|
+
assert_equal 'Copied object', new_obj[:APPLICATION], "Application should be changed"
|
112
|
+
assert_equal 'My Application', object[:APPLICATION], "Original object should be unchanged"
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_destroy
|
116
|
+
object.destroy
|
117
|
+
|
118
|
+
assert_raise(CKR_OBJECT_HANDLE_INVALID, 'destroyed object shouldn\'t have any attributes') do
|
119
|
+
object[:VALUE]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "pkcs11"
|
3
|
+
require "test/helper"
|
4
|
+
require "openssl"
|
5
|
+
|
6
|
+
class TestPkcs11Session < Test::Unit::TestCase
|
7
|
+
include PKCS11
|
8
|
+
|
9
|
+
attr_reader :slots
|
10
|
+
attr_reader :slot
|
11
|
+
attr_reader :session
|
12
|
+
|
13
|
+
TestCert_ID = "\230Z\275=\2614\236\337\fY\017Y\346\202\212\v\025\335\0239"
|
14
|
+
|
15
|
+
def setup
|
16
|
+
$pkcs11 ||= open_softokn
|
17
|
+
@slots = pk.active_slots
|
18
|
+
@slot = slots.last
|
19
|
+
|
20
|
+
flags = CKF_SERIAL_SESSION #| CKF_RW_SESSION
|
21
|
+
@session = slot.C_OpenSession(flags)
|
22
|
+
# @session.login(:USER, "")
|
23
|
+
end
|
24
|
+
|
25
|
+
def teardown
|
26
|
+
# @session.logout
|
27
|
+
@session.close
|
28
|
+
end
|
29
|
+
|
30
|
+
def pk
|
31
|
+
$pkcs11
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_find_objects
|
35
|
+
obj = session.find_objects(:CLASS => CKO_CERTIFICATE)
|
36
|
+
assert obj.length>2, 'There should be some certificates in the test database'
|
37
|
+
assert_equal PKCS11::Object, obj.first.class, 'Retuned objects should be class Object'
|
38
|
+
|
39
|
+
session.find_objects(:CLASS => CKO_CERTIFICATE) do |obj2|
|
40
|
+
assert obj2[:SUBJECT], 'A certificate should have a subject'
|
41
|
+
assert OpenSSL::X509::Name.new(obj2[:SUBJECT]).to_s =~ /\/CN=/i, 'Every certificate should have a CN in the subject'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_random
|
46
|
+
session.seed_random('some entropy')
|
47
|
+
rnd1 = session.generate_random(13)
|
48
|
+
assert_equal rnd1.length, 13, 'expected length'
|
49
|
+
rnd2 = session.generate_random(13)
|
50
|
+
assert_equal rnd2.length, 13, 'expected length'
|
51
|
+
assert_not_equal rnd1, rnd2, 'Two random blocks should be different'
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_session_info
|
55
|
+
info = session.info
|
56
|
+
assert info.inspect =~ /flags=/, 'Session info should have a flag attribute'
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_create_data_object
|
60
|
+
obj = session.create_object(
|
61
|
+
:CLASS=>CKO_DATA,
|
62
|
+
:TOKEN=>false,
|
63
|
+
:APPLICATION=>'My Application',
|
64
|
+
:VALUE=>'value')
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_create_certificate_object
|
68
|
+
obj1 = session.find_objects(:CLASS => CKO_CERTIFICATE, :ID=>TestCert_ID).first
|
69
|
+
|
70
|
+
obj = session.create_object(
|
71
|
+
:CLASS=>CKO_CERTIFICATE,
|
72
|
+
:SUBJECT=>obj1[:SUBJECT],
|
73
|
+
:TOKEN=>false,
|
74
|
+
:LABEL=>'test_create_object',
|
75
|
+
:CERTIFICATE_TYPE=>CKC_X_509,
|
76
|
+
:ISSUER=>obj1[:ISSUER],
|
77
|
+
:VALUE=>obj1[:VALUE],
|
78
|
+
:SERIAL_NUMBER=>'12345'
|
79
|
+
)
|
80
|
+
|
81
|
+
assert_equal '12345', obj[:SERIAL_NUMBER], 'Value as created'
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_create_public_key_object
|
85
|
+
rsa = OpenSSL::PKey::RSA.generate(512)
|
86
|
+
|
87
|
+
obj = session.create_object(
|
88
|
+
:CLASS=>CKO_PUBLIC_KEY,
|
89
|
+
:KEY_TYPE=>CKK_RSA,
|
90
|
+
:TOKEN=>false,
|
91
|
+
:MODULUS=>rsa.n.to_s(2),
|
92
|
+
:PUBLIC_EXPONENT=>rsa.e.to_s(2),
|
93
|
+
:LABEL=>'test_create_public_key_object')
|
94
|
+
|
95
|
+
assert_equal 'test_create_public_key_object', obj[:LABEL], 'Value as created'
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_get_set_operation_state
|
99
|
+
plaintext = "secret text"
|
100
|
+
|
101
|
+
# Start a digest operation
|
102
|
+
session.C_DigestInit(:SHA_1)
|
103
|
+
session.C_DigestUpdate(plaintext[0..3])
|
104
|
+
|
105
|
+
# Save the current state and close the session
|
106
|
+
state = session.get_operation_state
|
107
|
+
@session.close
|
108
|
+
|
109
|
+
assert state.length >= 4, 'There should be at least some bytes for the first part of plaintext in the state'
|
110
|
+
|
111
|
+
# Open a new session and restore the previous state
|
112
|
+
@session = @slot.open
|
113
|
+
session.login(:USER, "")
|
114
|
+
session.set_operation_state(state)
|
115
|
+
|
116
|
+
# Finish the digest
|
117
|
+
session.C_DigestUpdate(plaintext[4..-1])
|
118
|
+
digest1 = session.C_DigestFinal
|
119
|
+
digest2 = OpenSSL::Digest::SHA1.new(plaintext).digest
|
120
|
+
|
121
|
+
assert_equal digest2, digest1, 'Digests should be equal'
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "pkcs11"
|
3
|
+
require "test/helper"
|
4
|
+
|
5
|
+
class TestPkcs11Slot < Test::Unit::TestCase
|
6
|
+
include PKCS11
|
7
|
+
|
8
|
+
attr_reader :slots
|
9
|
+
attr_reader :slot
|
10
|
+
|
11
|
+
def setup
|
12
|
+
$pkcs11 ||= open_softokn
|
13
|
+
@slots = pk.active_slots
|
14
|
+
@slot = slots.last
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
end
|
19
|
+
|
20
|
+
def pk
|
21
|
+
$pkcs11
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_info
|
25
|
+
sinfo = slot.info
|
26
|
+
|
27
|
+
assert sinfo.inspect =~ /manufacturerID=/, 'Slot info should tell about manufacturerID'
|
28
|
+
|
29
|
+
assert_equal Fixnum, sinfo.flags.class
|
30
|
+
assert sinfo.manufacturerID =~ /Mozilla/i, "It's the mozilla libaray we test against"
|
31
|
+
assert sinfo.slotDescription =~ /Private Key/i, "It's the slot with users private keys"
|
32
|
+
assert_equal Fixnum, sinfo.hardwareVersion.major.class, "Version should be a number"
|
33
|
+
assert_equal Fixnum, sinfo.hardwareVersion.minor.class, "Version should be a number"
|
34
|
+
assert_equal Fixnum, sinfo.firmwareVersion.major.class, "Version should be a number"
|
35
|
+
assert_equal Fixnum, sinfo.firmwareVersion.minor.class, "Version should be a number"
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_token_info
|
39
|
+
ti = slot.token_info
|
40
|
+
assert ti.inspect =~ /serialNumber=/, 'Token info should contain a serialNumber'
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_mechanisms
|
44
|
+
assert_equal false, slot.mechanisms.empty?, 'There should be some mechanisms'
|
45
|
+
slot.mechanisms.each do |m|
|
46
|
+
info = slot.mechanism_info(m)
|
47
|
+
assert_equal CK_MECHANISM_INFO, info.class, 'Mechanism info should get a CK_MECHANISM_INFO'
|
48
|
+
assert info.inspect =~ /ulMaxKeySize=/, 'Mechanism info should tell about max key size'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_mechanism_info
|
53
|
+
info1 = slot.mechanism_info(:DES3_CBC)
|
54
|
+
assert_equal CK_MECHANISM_INFO, info1.class, 'Mechanism info should get a CK_MECHANISM_INFO'
|
55
|
+
assert info1.inspect =~ /ulMinKeySize=/, 'Mechanism info should tell about min key size'
|
56
|
+
|
57
|
+
info2 = slot.mechanism_info(CKM_DES3_CBC)
|
58
|
+
assert_equal info1.to_hash, info2.to_hash, 'Mechanism infos should be equal'
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_session
|
62
|
+
flags = CKF_SERIAL_SESSION #| CKF_RW_SESSION
|
63
|
+
session = slot.open(flags){|_session|
|
64
|
+
assert _session.info.inspect =~ /state=/, 'Session info should tell about it\'s state'
|
65
|
+
}
|
66
|
+
|
67
|
+
session = slot.open(flags)
|
68
|
+
assert session.info.inspect =~ /flags=/, 'Session info should tell about it\'s flags'
|
69
|
+
session.close
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_session2
|
73
|
+
flags = CKF_SERIAL_SESSION #| CKF_RW_SESSION
|
74
|
+
session = slot.open(flags)
|
75
|
+
slot.close_all_sessions
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "pkcs11"
|
3
|
+
require "test/helper"
|
4
|
+
|
5
|
+
class TestPkcs11Structs < Test::Unit::TestCase
|
6
|
+
include PKCS11
|
7
|
+
|
8
|
+
def setup
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_STRING_ACCESSOR
|
15
|
+
s = CK_DATE.new
|
16
|
+
assert_equal "\0\0", s.day
|
17
|
+
assert_equal "\0\0\0\0", s.year
|
18
|
+
s.day = "12345"
|
19
|
+
assert_equal "12", s.day
|
20
|
+
s.day = "9"
|
21
|
+
assert_equal "9\0", s.day
|
22
|
+
assert_raise(TypeError){ s.day = nil }
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_ULONG_ACCESSOR
|
26
|
+
s = CK_SSL3_KEY_MAT_PARAMS.new
|
27
|
+
assert_equal 0, s.ulIVSizeInBits
|
28
|
+
s.ulIVSizeInBits = 1234567890
|
29
|
+
assert_equal 1234567890, s.ulIVSizeInBits
|
30
|
+
s.ulIVSizeInBits = 2345678901
|
31
|
+
assert_equal 2345678901, s.ulIVSizeInBits
|
32
|
+
assert_raise(TypeError){ s.ulIVSizeInBits = nil }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_BOOL_ACCESSOR
|
36
|
+
s = CK_SSL3_KEY_MAT_PARAMS.new
|
37
|
+
assert_equal false, s.bIsExport
|
38
|
+
s.bIsExport = true
|
39
|
+
assert_equal true, s.bIsExport
|
40
|
+
s.bIsExport = false
|
41
|
+
assert_equal false, s.bIsExport
|
42
|
+
assert_raise(ArgumentError){ s.bIsExport = nil }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_STRING_PTR_ACCESSOR
|
46
|
+
s = CK_WTLS_MASTER_KEY_DERIVE_PARAMS.new
|
47
|
+
assert_nil s.pVersion
|
48
|
+
s.pVersion = "1.2.3"
|
49
|
+
assert_equal "1.2.3", s.pVersion
|
50
|
+
s.pVersion = nil
|
51
|
+
assert_nil s.pVersion
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_STRUCT_ACCESSOR
|
55
|
+
s = CK_SSL3_KEY_MAT_PARAMS.new
|
56
|
+
ri = s.RandomInfo
|
57
|
+
ro = s.RandomInfo
|
58
|
+
assert_nil ri.pClientRandom
|
59
|
+
assert_nil ro.pServerRandom
|
60
|
+
GC.start
|
61
|
+
ri.pServerRandom = 'serv'
|
62
|
+
ro.pClientRandom = 'client'
|
63
|
+
GC.start
|
64
|
+
assert_equal 'client', ri.pClientRandom
|
65
|
+
assert_equal 'serv', ro.pServerRandom
|
66
|
+
|
67
|
+
ro = CK_SSL3_RANDOM_DATA.new
|
68
|
+
ro.pClientRandom = 'clrnd'
|
69
|
+
s.RandomInfo = ro
|
70
|
+
assert_equal 'clrnd', ri.pClientRandom
|
71
|
+
assert_nil ri.pServerRandom
|
72
|
+
|
73
|
+
assert_raise(ArgumentError){ s.RandomInfo = nil }
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_gc_STRUCT_ACCESSOR
|
77
|
+
ri = CK_SSL3_KEY_MAT_PARAMS.new.RandomInfo
|
78
|
+
ro = CK_SSL3_KEY_MAT_PARAMS.new.RandomInfo
|
79
|
+
ri.pServerRandom = 'serv'
|
80
|
+
ro.pServerRandom = '_serv'
|
81
|
+
GC.start
|
82
|
+
assert_equal '_serv', ro.pServerRandom
|
83
|
+
assert_equal 'serv', ri.pServerRandom
|
84
|
+
assert_nil ro.pClientRandom
|
85
|
+
assert_nil ri.pClientRandom
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_STRING_PTR_LEN_ACCESSOR
|
89
|
+
s = CK_SSL3_RANDOM_DATA.new
|
90
|
+
assert_nil s.pServerRandom
|
91
|
+
GC.start
|
92
|
+
s.pServerRandom = 'serv'
|
93
|
+
s.pClientRandom = 'client'
|
94
|
+
GC.start
|
95
|
+
assert_equal 'client', s.pClientRandom
|
96
|
+
assert_equal 'serv', s.pServerRandom
|
97
|
+
GC.start
|
98
|
+
s.pServerRandom = nil
|
99
|
+
assert_nil s.pServerRandom
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_STRUCT_PTR_ACCESSOR
|
103
|
+
s = CK_SSL3_KEY_MAT_PARAMS.new
|
104
|
+
assert_nil s.pReturnedKeyMaterial
|
105
|
+
ri = s.pReturnedKeyMaterial = CK_SSL3_KEY_MAT_OUT.new
|
106
|
+
assert_nil ri.pIVClient
|
107
|
+
ri.pIVClient = 'cli'
|
108
|
+
GC.start
|
109
|
+
assert_equal 'cli', ri.pIVClient
|
110
|
+
assert_equal 'cli', s.pReturnedKeyMaterial.pIVClient
|
111
|
+
s.pReturnedKeyMaterial = nil
|
112
|
+
assert_nil s.pReturnedKeyMaterial
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_ULONG_PTR_ACCESSOR
|
116
|
+
s = CK_WTLS_PRF_PARAMS.new
|
117
|
+
assert_nil s.pulOutputLen
|
118
|
+
s.pulOutputLen = 123
|
119
|
+
GC.start
|
120
|
+
assert_equal 123, s.pulOutputLen
|
121
|
+
s.pulOutputLen = nil
|
122
|
+
assert_nil s.pulOutputLen
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_STRUCT_ARRAY_ACCESSOR
|
126
|
+
s = CK_OTP_PARAMS.new
|
127
|
+
assert_equal [], s.pParams
|
128
|
+
s1 = CK_OTP_PARAM.new
|
129
|
+
s1.type = CK_OTP_VALUE
|
130
|
+
s1.pValue = "\0xyz"
|
131
|
+
s2 = CK_OTP_PARAM.new
|
132
|
+
s2.type = CK_OTP_PIN
|
133
|
+
s2.pValue = "1234"
|
134
|
+
s.pParams = [s1, s2]
|
135
|
+
assert_equal [s1.to_hash, s2.to_hash], s.pParams.map{|e| e.to_hash }
|
136
|
+
GC.start
|
137
|
+
assert_raise(ArgumentError){ s.pParams = [s1, s2, nil] }
|
138
|
+
assert_equal [s1.to_hash, s2.to_hash], s.pParams.map{|e| e.to_hash }
|
139
|
+
|
140
|
+
s.pParams = []
|
141
|
+
assert_equal [], s.pParams
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_CStruct
|
145
|
+
s = CK_DATE.new
|
146
|
+
s.day, s.month, s.year = "31", "12", "2010"
|
147
|
+
|
148
|
+
assert s.inspect =~ /year="2010"/, 'There should be a year in CK_DATE'
|
149
|
+
assert_equal ["year", "month", "day"], s.members, 'CK_DATE should contain some attributes'
|
150
|
+
assert_equal ["2010", "12", "31"], s.values, 'values of CK_DATE'
|
151
|
+
assert_equal( {:day=>"31", :month=>"12", :year=>"2010"}, s.to_hash, 'CK_DATE as hash' )
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_bignum_attribute
|
155
|
+
bignum = [-1].pack("l_").unpack("L_")[0]
|
156
|
+
attr = CK_ATTRIBUTE.new(CKA_KEY_TYPE, bignum)
|
157
|
+
assert_equal bignum, attr.value, "The bignum value should set"
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_bignum_mechanism
|
161
|
+
bignum = [-1].pack("l_").unpack("L_")[0]
|
162
|
+
mech = CK_MECHANISM.new(bignum-1, bignum)
|
163
|
+
assert_equal bignum-1, mech.mechanism, "The bignum mechanism should set"
|
164
|
+
assert_equal [-1].pack("l_"), mech.pParameter, "The bignum parameter is retrieved as String"
|
165
|
+
end
|
166
|
+
end
|