Skip to content

Commit 0445dd4

Browse files
committed
Clear PIN buffer
IB-8944 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent bc64a76 commit 0445dd4

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

src/crypto/PKCS11Signer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class PKCS11Signer::Private
7373
void *h {};
7474
#endif
7575

76+
~Private() { OPENSSL_cleanse(pin.data(), pin.size()); }
77+
7678
CK_FUNCTION_LIST *f {};
7779
struct SignSlot
7880
{
@@ -335,6 +337,7 @@ X509Cert PKCS11Signer::selectSigningCertificate(const vector<X509Cert> &certific
335337
*/
336338
void PKCS11Signer::setPin(const string &pin)
337339
{
340+
OPENSSL_cleanse(d->pin.data(), d->pin.size());
338341
d->pin = pin;
339342
}
340343

@@ -382,6 +385,7 @@ vector<unsigned char> PKCS11Signer::sign(const string &method, const vector<unsi
382385
{
383386
string _pin = pin(d->sign.certificate);
384387
rv = d->f->C_Login(session.handle, CKU_USER, CK_BYTE_PTR(_pin.c_str()), CK_ULONG(_pin.size()));
388+
OPENSSL_cleanse(_pin.data(), _pin.size());
385389
}
386390
switch(rv)
387391
{

src/crypto/WinSigner.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class WinSigner::Private
7777
static BOOL WINAPI CertFilter(PCCERT_CONTEXT cert_context,
7878
PBOOL is_initial_selected_cert, PVOID callback_data);
7979

80+
~Private() { SecureZeroMemory(pin.data(), pin.size()); }
81+
8082
X509Cert cert;
8183
HCRYPTPROV_OR_NCRYPT_KEY_HANDLE key {};
8284
DWORD spec {};
@@ -219,6 +221,7 @@ string WinSigner::method() const
219221
*/
220222
void WinSigner::setPin(const string &pin)
221223
{
224+
SecureZeroMemory(d->pin.data(), d->pin.size());
222225
d->pin = pin;
223226
}
224227

@@ -273,6 +276,7 @@ vector<unsigned char> WinSigner::sign(const string &method, const vector<unsigne
273276
{
274277
wstring pin = util::File::encodeName(d->pin);
275278
err = NCryptSetProperty(d->key, NCRYPT_PIN_PROPERTY, PBYTE(pin.c_str()), DWORD(pin.size()), 0);
279+
SecureZeroMemory(pin.data(), pin.size() * sizeof(wchar_t));
276280
if(err != ERROR_SUCCESS)
277281
break;
278282
}

0 commit comments

Comments
 (0)