Skip to content

Commit cd8d5a3

Browse files
committed
Verify given signature validity
WE2-818 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent b219e14 commit cd8d5a3

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

src/controller/command-handlers/authenticate.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ QVariantMap createAuthenticationToken(const QString& signatureAlgorithm,
5555
};
5656
}
5757

58-
QByteArray createSignature(const QString& origin, const QString& challengeNonce,
59-
const ElectronicID& eid, const pcsc_cpp::byte_vector& pin)
58+
QByteArray createSignature(const QString& origin, const QByteArray& cert,
59+
const QString& challengeNonce, const ElectronicID& eid,
60+
const pcsc_cpp::byte_vector& pin)
6061
{
6162
static const auto SIGNATURE_ALGO_TO_HASH =
6263
std::map<JsonWebSignatureAlgorithm, QCryptographicHash::Algorithm> {
@@ -83,7 +84,7 @@ QByteArray createSignature(const QString& origin, const QString& challengeNonce,
8384
const auto hashToBeSigned =
8485
pcsc_cpp::byte_vector {hashToBeSignedQBytearray.cbegin(), hashToBeSignedQBytearray.cend()};
8586

86-
const auto signature = eid.signWithAuthKey(pin, hashToBeSigned);
87+
const auto signature = eid.signWithAuthKey({cert.cbegin(), cert.cend()}, pin, hashToBeSigned);
8788

8889
return QByteArray::fromRawData(reinterpret_cast<const char*>(signature.data()),
8990
int(signature.size()))
@@ -122,8 +123,8 @@ QVariantMap Authenticate::onConfirm(WebEidUI* window,
122123
auto pin = getPin(cardCertAndPin.cardInfo->eid().smartcard(), window);
123124

124125
try {
125-
const auto signature =
126-
createSignature(origin.url(), challengeNonce, cardCertAndPin.cardInfo->eid(), pin);
126+
const auto signature = createSignature(origin.url(), cardCertAndPin.certificateBytesInDer,
127+
challengeNonce, cardCertAndPin.cardInfo->eid(), pin);
127128

128129
// Erase the PIN memory.
129130
// TODO: Use a scope guard. Verify that the buffers are actually zeroed and no copies

src/controller/command-handlers/sign.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ using namespace electronic_id;
3030
namespace
3131
{
3232

33-
QPair<QString, QVariantMap> signHash(const ElectronicID& eid, const pcsc_cpp::byte_vector& pin,
34-
const QByteArray& docHash, const HashAlgorithm hashAlgo)
33+
QPair<QString, QVariantMap> signHash(const ElectronicID& eid, const QByteArray& cert,
34+
const pcsc_cpp::byte_vector& pin, const QByteArray& docHash,
35+
const HashAlgorithm hashAlgo)
3536
{
3637
const auto hashBytes = pcsc_cpp::byte_vector {docHash.begin(), docHash.end()};
37-
const auto signature = eid.signWithSigningKey(pin, hashBytes, hashAlgo);
38+
const auto signature =
39+
eid.signWithSigningKey({cert.cbegin(), cert.cend()}, pin, hashBytes, hashAlgo);
3840

3941
const auto signatureBase64 =
4042
QByteArray::fromRawData(reinterpret_cast<const char*>(signature.first.data()),
@@ -98,7 +100,9 @@ QVariantMap Sign::onConfirm(WebEidUI* window, const CardCertificateAndPinInfo& c
98100
auto pin = getPin(cardCertAndPin.cardInfo->eid().smartcard(), window);
99101

100102
try {
101-
const auto signature = signHash(cardCertAndPin.cardInfo->eid(), pin, docHash, hashAlgo);
103+
const auto signature =
104+
signHash(cardCertAndPin.cardInfo->eid(), cardCertAndPin.certificateBytesInDer, pin,
105+
docHash, hashAlgo);
102106

103107
// Erase PIN memory.
104108
// TODO: Use a scope guard. Verify that the buffers are actually zeroed

0 commit comments

Comments
 (0)