Skip to content

Commit 384d147

Browse files
committed
Add VerifyPinCommandAPDU
WE2-1055 Signed-off-by: Mart Somermaa <mrts@users.noreply.github.com>
1 parent 7395eb2 commit 384d147

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

lib/libpcsc-cpp/include/pcsc-cpp/pcsc-cpp.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ struct CommandApdu
180180

181181
constexpr operator const byte_vector&() const { return d; }
182182

183+
virtual ~CommandApdu() = default;
184+
183185
/**
184186
* A helper function to create a SELECT command APDU.
185187
*

src/electronic-ids/pcsc/pcsc-common.hpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,38 @@ addPaddingToPin(pcsc_cpp::byte_vector&& pin, size_t paddingLength, pcsc_cpp::byt
5656
return std::move(pin);
5757
}
5858

59+
struct VerifyPinCommandAPDU : public pcsc_cpp::CommandApdu
60+
{
61+
public:
62+
// Make it move-only
63+
VerifyPinCommandAPDU(const VerifyPinCommandAPDU&) = delete;
64+
VerifyPinCommandAPDU& operator=(const VerifyPinCommandAPDU&) = delete;
65+
66+
VerifyPinCommandAPDU(VerifyPinCommandAPDU&&) noexcept = default;
67+
VerifyPinCommandAPDU& operator=(VerifyPinCommandAPDU&&) noexcept = default;
68+
69+
VerifyPinCommandAPDU(pcsc_cpp::byte_type p2, pcsc_cpp::byte_vector&& pin, size_t paddingLength,
70+
pcsc_cpp::byte_type paddingChar) :
71+
CommandApdu(0x00, 0x20, 0x00, p2,
72+
addPaddingToPin(std::move(pin), paddingLength, paddingChar))
73+
{
74+
}
75+
76+
~VerifyPinCommandAPDU() { std::fill(d.begin(), d.end(), 0); }
77+
};
78+
5979
inline void verifyPin(pcsc_cpp::SmartCard& card, pcsc_cpp::byte_type p2,
6080
pcsc_cpp::byte_vector&& pin, uint8_t pinMinLength, size_t paddingLength,
6181
pcsc_cpp::byte_type paddingChar)
6282
{
6383
pcsc_cpp::ResponseApdu response;
6484

6585
if (card.readerHasPinPad()) {
66-
const pcsc_cpp::CommandApdu verifyPin {0x00, 0x20, 0x00, p2,
67-
addPaddingToPin({}, paddingLength, paddingChar)};
86+
VerifyPinCommandAPDU verifyPin {p2, {}, paddingLength, paddingChar};
6887
response = card.transmitCTL(verifyPin, 0, pinMinLength);
6988

7089
} else {
71-
const pcsc_cpp::CommandApdu verifyPin {
72-
0x00, 0x20, 0x00, p2, addPaddingToPin(std::move(pin), paddingLength, paddingChar)};
73-
90+
VerifyPinCommandAPDU verifyPin {p2, std::move(pin), paddingLength, paddingChar};
7491
response = card.transmit(verifyPin);
7592
}
7693

0 commit comments

Comments
 (0)