• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

LudovicRousseau / PyKCS11 / 12855273166

19 Jan 2025 04:26PM UTC coverage: 86.678% (-0.008%) from 86.686%
12855273166

push

github

LudovicRousseau
test_derive: document test_deriveKey_CKM_EXTRACT_KEY_FROM_KEY

2993 of 3453 relevant lines covered (86.68%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.33
/test/test_LowLevel.py
1
import os
1✔
2
import platform
1✔
3
import unittest
1✔
4

5
import PyKCS11.LowLevel
1✔
6
from PyKCS11 import ckbytelist
1✔
7

8

9
class TestUtil(unittest.TestCase):
1✔
10
    def test_LowLevel(self):
1✔
11
        a = PyKCS11.LowLevel.CPKCS11Lib()
1✔
12
        self.assertIsNotNone(a)
1✔
13

14
        # File not found
15
        self.assertEqual(a.Load("NoFile"), -1)
1✔
16

17
        # C_GetFunctionList() not found
18
        if platform.system() == "Linux":
1✔
19
            # GNU/Linux
20
            lib = "libc.so.6"
1✔
21
        elif platform.system() == "Darwin":
×
22
            # macOS
23
            lib = "/usr/lib/libSystem.B.dylib"
×
24
        else:
25
            # Windows
26
            lib = "WinSCard.dll"
×
27
        self.assertEqual(a.Load(lib), -4)
1✔
28

29
        info = PyKCS11.LowLevel.CK_INFO()
1✔
30
        self.assertIsNotNone(info)
1✔
31

32
        slotInfo = PyKCS11.LowLevel.CK_SLOT_INFO()
1✔
33
        self.assertIsNotNone(slotInfo)
1✔
34

35
        lib = os.getenv("PYKCS11LIB")
1✔
36
        if lib is None:
1✔
37
            raise (Exception("Define PYKCS11LIB"))
×
38

39
        session = PyKCS11.LowLevel.CK_SESSION_HANDLE()
1✔
40
        self.assertIsNotNone(session)
1✔
41

42
        sessionInfo = PyKCS11.LowLevel.CK_SESSION_INFO()
1✔
43
        self.assertIsNotNone(sessionInfo)
1✔
44

45
        tokenInfo = PyKCS11.LowLevel.CK_TOKEN_INFO()
1✔
46
        self.assertIsNotNone(tokenInfo)
1✔
47

48
        slotList = PyKCS11.LowLevel.ckintlist()
1✔
49
        self.assertIsNotNone(slotList)
1✔
50

51
        a.Load(lib)
1✔
52

53
        self.assertEqual(a.C_GetInfo(info), PyKCS11.LowLevel.CKR_OK)
1✔
54
        manufacturerID = info.GetManufacturerID()
1✔
55
        self.assertEqual(manufacturerID, "SoftHSM".ljust(32))
1✔
56
        del info
1✔
57

58
        a.C_GetSlotList(0, slotList)
1✔
59
        slot = slotList[0]
1✔
60

61
        self.assertEqual(a.C_GetSlotInfo(slot, slotInfo), PyKCS11.LowLevel.CKR_OK)
1✔
62

63
        self.assertEqual(
1✔
64
            a.C_OpenSession(
65
                slot,
66
                PyKCS11.LowLevel.CKF_SERIAL_SESSION | PyKCS11.LowLevel.CKF_RW_SESSION,
67
                session,
68
            ),
69
            PyKCS11.LowLevel.CKR_OK,
70
        )
71
        self.assertEqual(
1✔
72
            a.C_GetSessionInfo(session, sessionInfo), PyKCS11.LowLevel.CKR_OK
73
        )
74

75
        self.assertEqual(a.C_GetTokenInfo(slot, tokenInfo), PyKCS11.LowLevel.CKR_OK)
1✔
76
        label = tokenInfo.GetLabel()
1✔
77
        manufacturerID = tokenInfo.GetManufacturerID()
1✔
78
        flags = tokenInfo.flags
1✔
79
        model = tokenInfo.GetModel()
1✔
80

81
        pin = ckbytelist("1234")
1✔
82
        self.assertEqual(
1✔
83
            a.C_Login(session, PyKCS11.LowLevel.CKU_USER, pin), PyKCS11.LowLevel.CKR_OK
84
        )
85
        self.assertEqual(a.C_Logout(session), PyKCS11.LowLevel.CKR_OK)
1✔
86
        self.assertEqual(a.C_CloseSession(session), PyKCS11.LowLevel.CKR_OK)
1✔
87

88
        self.assertEqual(
1✔
89
            a.C_OpenSession(slotList[0], PyKCS11.LowLevel.CKF_SERIAL_SESSION, session),
90
            PyKCS11.LowLevel.CKR_OK,
91
        )
92
        self.assertEqual(
1✔
93
            a.C_Login(session, PyKCS11.LowLevel.CKU_USER, pin), PyKCS11.LowLevel.CKR_OK
94
        )
95

96
        SearchResult = PyKCS11.LowLevel.ckobjlist(10)
1✔
97
        SearchTemplate = PyKCS11.LowLevel.ckattrlist(2)
1✔
98
        SearchTemplate[0].SetNum(
1✔
99
            PyKCS11.LowLevel.CKA_CLASS, PyKCS11.LowLevel.CKO_CERTIFICATE
100
        )
101
        SearchTemplate[1].SetBool(PyKCS11.LowLevel.CKA_TOKEN, True)
1✔
102

103
        self.assertEqual(
1✔
104
            a.C_FindObjectsInit(session, SearchTemplate), PyKCS11.LowLevel.CKR_OK
105
        )
106
        self.assertEqual(
1✔
107
            a.C_FindObjects(session, SearchResult), PyKCS11.LowLevel.CKR_OK
108
        )
109
        self.assertEqual(a.C_FindObjectsFinal(session), PyKCS11.LowLevel.CKR_OK)
1✔
110

111
        for x in SearchResult:
1✔
112
            print("object: " + hex(x.value()))
×
113
            valTemplate = PyKCS11.LowLevel.ckattrlist(2)
×
114
            valTemplate[0].SetType(PyKCS11.LowLevel.CKA_LABEL)
×
115
            # valTemplate[0].Reserve(128)
116
            valTemplate[1].SetType(PyKCS11.LowLevel.CKA_CLASS)
×
117
            # valTemplate[1].Reserve(4)
118
            print(
×
119
                "C_GetAttributeValue(): "
120
                + hex(a.C_GetAttributeValue(session, x, valTemplate))
121
            )
122
            print(
×
123
                "CKA_LABEL Len: ",
124
                valTemplate[0].GetLen(),
125
                " CKA_CLASS Len: ",
126
                valTemplate[1].GetLen(),
127
            )
128
            print(
×
129
                "C_GetAttributeValue(): "
130
                + hex(a.C_GetAttributeValue(session, x, valTemplate))
131
            )
132
            print("\tCKO_CERTIFICATE: " + valTemplate[0].GetString())
×
133
            print("\tCKA_TOKEN: " + str(valTemplate[1].GetNum()))
×
134

135
        self.assertEqual(a.C_Logout(session), PyKCS11.LowLevel.CKR_OK)
1✔
136
        self.assertEqual(a.C_CloseSession(session), PyKCS11.LowLevel.CKR_OK)
1✔
137
        self.assertEqual(a.C_Finalize(), PyKCS11.LowLevel.CKR_OK)
1✔
138
        a.Unload()
1✔
139

140

141
if __name__ == "__main__":
1✔
142
    unittest.main()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc