Botan 3.0.0-alpha0
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 {
20 module()->C_OpenSession(m_slot.slot_id(), flags, callback_data, notify_callback, &m_handle);
21 }
22
24 : m_slot(slot), m_handle(handle)
25 {
26 SessionInfo info = get_info();
27 if(info.state == static_cast<CK_STATE>(SessionState::RoPublicSession)
28 || info.state == static_cast<CK_STATE>(SessionState::RwPublicSession))
29 {
30 m_logged_in = false;
31 }
32 else
33 {
34 m_logged_in = true;
35 }
36 }
37
39 {
40 try
41 {
42 if(m_handle)
43 {
44 if(m_logged_in)
45 {
46 module()->C_Logout(m_handle, nullptr);
47 }
48 module()->C_CloseSession(m_handle, nullptr);
49 m_handle = 0;
50 }
51 }
52 catch(...)
53 {
54 // exception during noexcept destructor is ignored
55 }
56 }
57
59 {
61 std::swap(handle, m_handle);
62 return handle;
63 }
64
65void Session::login(UserType user_type, const secure_string& pin)
66 {
67 module()->C_Login(m_handle, user_type, pin);
68 m_logged_in = true;
69 }
70
72 {
73 module()->C_Logout(m_handle);
74 m_logged_in = false;
75 }
76
78 {
79 SessionInfo info;
80 module()->C_GetSessionInfo(m_handle, &info);
81 return info;
82 }
83
84void Session::set_pin(const secure_string& old_pin, const secure_string& new_pin)
85 {
86 module()->C_SetPIN(m_handle, old_pin, new_pin);
87 }
88
89void Session::init_pin(const secure_string& new_pin)
90 {
91 module()->C_InitPIN(m_handle, new_pin);
92 }
93
94}
bool C_GetSessionInfo(SessionHandle session, SessionInfo *info_ptr, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:256
bool C_Logout(SessionHandle session, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:293
bool C_OpenSession(SlotId slot_id, Flags flags, VoidPtr application, Notify notify, SessionHandle *session_ptr, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:233
bool C_InitPIN(SessionHandle session, Utf8Char *pin_ptr, Ulong pin_len, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:212
bool C_CloseSession(SessionHandle session, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:244
bool C_Login(SessionHandle session, UserType user_type, Utf8Char *pin_ptr, Ulong pin_len, ReturnValue *return_value=ThrowException) const
Definition: p11.cpp:283
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:220
Represents a PKCS#11 session.
Definition: p11_types.h:131
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)
Definition: p11_session.cpp:84
Module & module() const
Definition: p11_types.h:173
void logoff()
Logout from this session.
Definition: p11_session.cpp:71
SessionHandle handle() const
Definition: p11_types.h:167
SessionHandle release()
Definition: p11_session.cpp:58
SessionInfo get_info() const
Definition: p11_session.cpp:77
Session(Slot &slot, bool read_only)
Definition: p11_session.cpp:13
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)
Definition: p11_session.cpp:89
void login(UserType userType, const secure_string &pin)
Definition: p11_session.cpp:65
~Session() noexcept
Logout user and close the session on destruction.
Definition: p11_session.cpp:38
Represents a PKCS#11 Slot, i.e., a card reader.
Definition: p11_types.h:77
SlotId slot_id() const
Definition: p11_types.h:92
CK_FLAGS Flags
Definition: p11.h:834
CK_NOTIFY Notify
Definition: p11.h:844
secure_vector< uint8_t > secure_string
Definition: p11.h:63
CK_VOID_PTR VoidPtr
Definition: p11.h:828
CK_SESSION_HANDLE SessionHandle
Definition: p11.h:845
Flags flags(Flag flags)
Definition: p11.h:860
CK_ULONG CK_STATE
Definition: pkcs11t.h:271
CK_STATE state
Definition: pkcs11t.h:281