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

LudovicRousseau / PyKCS11 / 15581227322

11 Jun 2025 09:27AM UTC coverage: 87.592% (+0.7%) from 86.908%
15581227322

push

github

LudovicRousseau
Test PyKCS11.LowLevel.ckbytelist()

9 of 9 new or added lines in 1 file covered. (100.0%)

40 existing lines in 2 files now uncovered.

3078 of 3514 relevant lines covered (87.59%)

0.88 hits per line

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

83.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.ckulonglist()
1✔
49
        self.assertIsNotNone(slotList)
1✔
50

51
        longList = PyKCS11.LowLevel.ckulonglist(1)
1✔
52
        longList[0] = 42
1✔
53
        self.assertEqual(longList[0], 42)
1✔
54
        longList[0] = 0x80000000
1✔
55
        self.assertEqual(longList[0], 2147483648)
1✔
56
        longList[0] = 0xffffffff
1✔
57
        self.assertEqual(longList[0], 4294967295)
1✔
58
        # negative numbers are not allowed
59
        with self.assertRaises(TypeError):
1✔
60
            longList[0] = -1
1✔
61

62
        a.Load(lib)
1✔
63

64
        self.assertEqual(a.C_GetInfo(info), PyKCS11.LowLevel.CKR_OK)
1✔
65
        manufacturerID = info.GetManufacturerID()
1✔
66
        self.assertEqual(manufacturerID, "SoftHSM".ljust(32))
1✔
67
        del info
1✔
68

69
        a.C_GetSlotList(0, slotList)
1✔
70
        slot = slotList[0]
1✔
71

72
        self.assertEqual(a.C_GetSlotInfo(slot, slotInfo), PyKCS11.LowLevel.CKR_OK)
1✔
73

74
        self.assertEqual(
1✔
75
            a.C_OpenSession(
76
                slot,
77
                PyKCS11.LowLevel.CKF_SERIAL_SESSION | PyKCS11.LowLevel.CKF_RW_SESSION,
78
                session,
79
            ),
80
            PyKCS11.LowLevel.CKR_OK,
81
        )
82
        self.assertEqual(
1✔
83
            a.C_GetSessionInfo(session, sessionInfo), PyKCS11.LowLevel.CKR_OK
84
        )
85

86
        self.assertEqual(a.C_GetTokenInfo(slot, tokenInfo), PyKCS11.LowLevel.CKR_OK)
1✔
87
        label = tokenInfo.GetLabel()
1✔
88
        manufacturerID = tokenInfo.GetManufacturerID()
1✔
89
        flags = tokenInfo.flags
1✔
90
        model = tokenInfo.GetModel()
1✔
91

92
        pin = ckbytelist("1234")
1✔
93
        self.assertEqual(
1✔
94
            a.C_Login(session, PyKCS11.LowLevel.CKU_USER, pin), PyKCS11.LowLevel.CKR_OK
95
        )
96
        self.assertEqual(a.C_Logout(session), PyKCS11.LowLevel.CKR_OK)
1✔
97
        self.assertEqual(a.C_CloseSession(session), PyKCS11.LowLevel.CKR_OK)
1✔
98

99
        self.assertEqual(
1✔
100
            a.C_OpenSession(slotList[0], PyKCS11.LowLevel.CKF_SERIAL_SESSION, session),
101
            PyKCS11.LowLevel.CKR_OK,
102
        )
103
        self.assertEqual(
1✔
104
            a.C_Login(session, PyKCS11.LowLevel.CKU_USER, pin), PyKCS11.LowLevel.CKR_OK
105
        )
106

107
        SearchResult = PyKCS11.LowLevel.ckulonglist(10)
1✔
108
        SearchTemplate = PyKCS11.LowLevel.ckattrlist(2)
1✔
109
        SearchTemplate[0].SetNum(
1✔
110
            PyKCS11.LowLevel.CKA_CLASS, PyKCS11.LowLevel.CKO_CERTIFICATE
111
        )
112
        SearchTemplate[1].SetBool(PyKCS11.LowLevel.CKA_TOKEN, True)
1✔
113

114
        self.assertEqual(
1✔
115
            a.C_FindObjectsInit(session, SearchTemplate), PyKCS11.LowLevel.CKR_OK
116
        )
117
        self.assertEqual(
1✔
118
            a.C_FindObjects(session, SearchResult), PyKCS11.LowLevel.CKR_OK
119
        )
120
        self.assertEqual(a.C_FindObjectsFinal(session), PyKCS11.LowLevel.CKR_OK)
1✔
121

122
        for x in SearchResult:
1✔
UNCOV
123
            print("object: " + hex(x.value()))
×
UNCOV
124
            valTemplate = PyKCS11.LowLevel.ckattrlist(2)
×
UNCOV
125
            valTemplate[0].SetType(PyKCS11.LowLevel.CKA_LABEL)
×
126
            # valTemplate[0].Reserve(128)
UNCOV
127
            valTemplate[1].SetType(PyKCS11.LowLevel.CKA_CLASS)
×
128
            # valTemplate[1].Reserve(4)
UNCOV
129
            print(
×
130
                "C_GetAttributeValue(): "
131
                + hex(a.C_GetAttributeValue(session, x, valTemplate))
132
            )
133
            print(
×
134
                "CKA_LABEL Len: ",
135
                valTemplate[0].GetLen(),
136
                " CKA_CLASS Len: ",
137
                valTemplate[1].GetLen(),
138
            )
UNCOV
139
            print(
×
140
                "C_GetAttributeValue(): "
141
                + hex(a.C_GetAttributeValue(session, x, valTemplate))
142
            )
UNCOV
143
            print("\tCKO_CERTIFICATE: " + valTemplate[0].GetString())
×
UNCOV
144
            print("\tCKA_TOKEN: " + str(valTemplate[1].GetNum()))
×
145

146
        self.assertEqual(a.C_Logout(session), PyKCS11.LowLevel.CKR_OK)
1✔
147
        self.assertEqual(a.C_CloseSession(session), PyKCS11.LowLevel.CKR_OK)
1✔
148
        self.assertEqual(a.C_Finalize(), PyKCS11.LowLevel.CKR_OK)
1✔
149
        a.Unload()
1✔
150

151

152
if __name__ == "__main__":
1✔
UNCOV
153
    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