Botan 3.3.0
Crypto and TLS for C&
p11_session.cpp
Go to the documentation of this file.
1/*
2* PKCS#11 Session
3* (C) 2016 Daniel Neus, Sirrix AG
4* (C) 2016 Philipp Weber, Sirrix AG
5*
6* Botan is released under the Simplified BSD License (see license.txt)
7*/
8
9#include <botan/p11_types.h>
10
11namespace Botan::PKCS11 {
12
13Session::Session(Slot& slot, bool read_only) :
14 Session(slot, PKCS11::flags(Flag::SerialSession | (read_only ? Flag::None : Flag::RwSession)), nullptr, nullptr) {
15}
16
17Session::Session(Slot& slot, Flags flags, VoidPtr callback_data, Notify notify_callback) :
18 m_slot(slot), m_handle(0), m_logged_in(false) {
19 module()->C_OpenSession(m_slot.slot_id(), flags, callback_data, notify_callback, &m_handle);
20}
21
22Session::Session(Slot& slot, SessionHandle handle) : m_slot(slot), m_handle(handle) {
23 SessionInfo info = get_info();
24 if(info.state == static_cast<CK_STATE>(SessionState::RoPublicSession) ||
25 info.state == static_cast<CK_STATE>(SessionState::RwPublicSession)) {
26 m_logged_in = false;
27 } else {
28 m_logged_in = true;
29 }
30}
31
33 try {
34 if(m_handle) {
35 if(m_logged_in) {
36 module()->C_Logout(m_handle, nullptr);
37 }
38 module()->C_CloseSession(m_handle, nullptr);
39 m_handle = 0;
40 }
41 } catch(...) {
42 // exception during noexcept destructor is ignored
43 }
44}
45
48 std::swap(handle, m_handle);
49 return handle;
50}
51
52void Session::login(UserType user_type, const secure_string& pin) {
53 module()->C_Login(m_handle, user_type, pin);
54 m_logged_in = true;
55}
56
58 module()->C_Logout(m_handle);
59 m_logged_in = false;
60}
61
63 SessionInfo info;
64 module()->C_GetSessionInfo(m_handle, &info);
65 return info;
66}
67
68// NOLINTNEXTLINE(readability-make-member-function-const)
69void Session::set_pin(const secure_string& old_pin, const secure_string& new_pin) {
70 module()->C_SetPIN(m_handle, old_pin, new_pin);
71}
72
73// NOLINTNEXTLINE(readability-make-member-function-const)
74void Session::init_pin(const secure_string& new_pin) {
75 module()->C_InitPIN(m_handle, new_pin);
76}
77
78} // namespace Botan::PKCS11
bool C_GetSessionInfo(SessionHandle session, SessionInfo *info_ptr, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:208
bool C_Logout(SessionHandle session, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:237
bool C_OpenSession(SlotId slot_id, Flags flags, VoidPtr application, Notify notify, SessionHandle *session_ptr, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:190
bool C_InitPIN(SessionHandle session, Utf8Char *pin_ptr, Ulong pin_len, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:174
bool C_CloseSession(SessionHandle session, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:200
bool C_Login(SessionHandle session, UserType user_type, Utf8Char *pin_ptr, Ulong pin_len, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:231
bool C_SetPIN(SessionHandle session, Utf8Char *old_pin_ptr, Ulong old_len, Utf8Char *new_pin_ptr, Ulong new_len, ReturnValue *return_value=ThrowException) const
Definition p11.cpp:178
Represents a PKCS#11 session.
Definition p11_types.h:121
void set_pin(const secure_string &old_pin, const secure_string &new_pin)
Calls C_SetPIN to change the PIN using the old PIN (requires a logged in session)
Module & module() const
Definition p11_types.h:157
void logoff()
Logout from this session.
SessionHandle handle() const
Definition p11_types.h:154
SessionHandle release()
SessionInfo get_info() const
Session(Slot &slot, bool read_only)
void init_pin(const secure_string &new_pin)
Calls C_InitPIN to change or initialize the PIN using the SO_PIN (requires a logged in session)
void login(UserType userType, const secure_string &pin)
~Session() noexcept
Logout user and close the session on destruction.
Represents a PKCS#11 Slot, i.e., a card reader.
Definition p11_types.h:74
SlotId slot_id() const
Definition p11_types.h:86
secure_vector< uint8_t > secure_string
Definition p11.h:59
CK_NOTIFY Notify
Definition p11.h:820
CK_VOID_PTR VoidPtr
Definition p11.h:804
CK_FLAGS Flags
Definition p11.h:810
Flags flags(Flag flags)
Definition p11.h:836
CK_SESSION_HANDLE SessionHandle
Definition p11.h:821
CK_ULONG CK_STATE
Definition pkcs11t.h:271
CK_STATE state
Definition pkcs11t.h:281