Skip to content

Commit 212ddea

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

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

src/controller/command-handlers/authenticate.cpp

Lines changed: 6 additions & 5 deletions
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 std::map<JsonWebSignatureAlgorithm, QCryptographicHash::Algorithm>
6263
SIGNATURE_ALGO_TO_HASH {
@@ -85,7 +86,7 @@ QByteArray createSignature(const QString& origin, const QString& challengeNonce,
8586
const pcsc_cpp::byte_vector hashToBeSigned {hashToBeSignedQBytearray.cbegin(),
8687
hashToBeSignedQBytearray.cend()};
8788

88-
const auto signature = eid.signWithAuthKey(pin, hashToBeSigned);
89+
const auto signature = eid.signWithAuthKey({cert.cbegin(), cert.cend()}, pin, hashToBeSigned);
8990

9091
return QByteArray::fromRawData(reinterpret_cast<const char*>(signature.data()),
9192
int(signature.size()))
@@ -125,8 +126,8 @@ QVariantMap Authenticate::onConfirm(WebEidUI* window,
125126
auto pin = getPin(cardCertAndPin.cardInfo->eid().smartcard(), window);
126127

127128
try {
128-
const auto signature =
129-
createSignature(origin.url(), challengeNonce, cardCertAndPin.cardInfo->eid(), pin);
129+
const auto signature = createSignature(origin.url(), cardCertAndPin.certificateBytesInDer,
130+
challengeNonce, cardCertAndPin.cardInfo->eid(), pin);
130131

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

src/controller/command-handlers/sign.cpp

Lines changed: 8 additions & 4 deletions
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)