Skip to content

Commit 10b95d3

Browse files
committed
Add VerifyPinCommandAPDU
WE2-479 Signed-off-by: Mart Somermaa <mrts@users.noreply.github.com>
1 parent ec1884c commit 10b95d3

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
@@ -172,6 +172,8 @@ struct CommandApdu
172172

173173
constexpr operator const byte_vector&() const { return d; }
174174

175+
virtual ~CommandApdu() = default;
176+
175177
byte_vector d;
176178
};
177179

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

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,38 @@ inline pcsc_cpp::byte_vector addPaddingToPin(pcsc_cpp::byte_vector&& pin, size_t
5050
return std::move(pin);
5151
}
5252

53+
struct VerifyPinCommandAPDU : public pcsc_cpp::CommandApdu
54+
{
55+
public:
56+
// Make it move-only
57+
VerifyPinCommandAPDU(const VerifyPinCommandAPDU&) = delete;
58+
VerifyPinCommandAPDU& operator=(const VerifyPinCommandAPDU&) = delete;
59+
60+
VerifyPinCommandAPDU(VerifyPinCommandAPDU&&) noexcept = default;
61+
VerifyPinCommandAPDU& operator=(VerifyPinCommandAPDU&&) noexcept = default;
62+
63+
VerifyPinCommandAPDU(pcsc_cpp::byte_type p2, pcsc_cpp::byte_vector&& pin, size_t paddingLength,
64+
pcsc_cpp::byte_type paddingChar) :
65+
CommandApdu(0x00, 0x20, 0x00, p2,
66+
addPaddingToPin(std::move(pin), paddingLength, paddingChar))
67+
{
68+
}
69+
70+
~VerifyPinCommandAPDU() { std::fill(d.begin(), d.end(), 0); }
71+
};
72+
5373
inline void verifyPin(pcsc_cpp::SmartCard& card, pcsc_cpp::byte_type p2,
5474
pcsc_cpp::byte_vector&& pin, uint8_t pinMinLength, size_t paddingLength,
5575
pcsc_cpp::byte_type paddingChar)
5676
{
5777
pcsc_cpp::ResponseApdu response;
5878

5979
if (card.readerHasPinPad()) {
60-
const pcsc_cpp::CommandApdu verifyPin {0x00, 0x20, 0x00, p2,
61-
addPaddingToPin({}, paddingLength, paddingChar)};
80+
VerifyPinCommandAPDU verifyPin {p2, {}, paddingLength, paddingChar};
6281
response = card.transmitCTL(verifyPin, 0, pinMinLength);
6382

6483
} else {
65-
const pcsc_cpp::CommandApdu verifyPin {
66-
0x00, 0x20, 0x00, p2, addPaddingToPin(std::move(pin), paddingLength, paddingChar)};
67-
84+
VerifyPinCommandAPDU verifyPin {p2, std::move(pin), paddingLength, paddingChar};
6885
response = card.transmit(verifyPin);
6986
}
7087

0 commit comments

Comments
 (0)