diff --git a/lib/libelectronic-id b/lib/libelectronic-id index d8b914fa..fb3ea68a 160000 --- a/lib/libelectronic-id +++ b/lib/libelectronic-id @@ -1 +1 @@ -Subproject commit d8b914fad9530f9643c75e4fc8724af1561ad210 +Subproject commit fb3ea68a4fdd7a8f17474964a31fa757863433da diff --git a/src/controller/command-handlers/authenticate.cpp b/src/controller/command-handlers/authenticate.cpp index c5171813..47e970c6 100644 --- a/src/controller/command-handlers/authenticate.cpp +++ b/src/controller/command-handlers/authenticate.cpp @@ -55,8 +55,9 @@ QVariantMap createAuthenticationToken(const QString& signatureAlgorithm, }; } -QByteArray createSignature(const QString& origin, const QString& challengeNonce, - const ElectronicID& eid, const pcsc_cpp::byte_vector& pin) +QByteArray createSignature(const QString& origin, const QByteArray& cert, + const QString& challengeNonce, const ElectronicID& eid, + const pcsc_cpp::byte_vector& pin) { static const std::map SIGNATURE_ALGO_TO_HASH { @@ -85,7 +86,7 @@ QByteArray createSignature(const QString& origin, const QString& challengeNonce, const pcsc_cpp::byte_vector hashToBeSigned {hashToBeSignedQBytearray.cbegin(), hashToBeSignedQBytearray.cend()}; - const auto signature = eid.signWithAuthKey(pin, hashToBeSigned); + const auto signature = eid.signWithAuthKey({cert.cbegin(), cert.cend()}, pin, hashToBeSigned); return QByteArray::fromRawData(reinterpret_cast(signature.data()), int(signature.size())) @@ -125,8 +126,8 @@ QVariantMap Authenticate::onConfirm(WebEidUI* window, auto pin = getPin(cardCertAndPin.cardInfo->eid().smartcard(), window); try { - const auto signature = - createSignature(origin.url(), challengeNonce, cardCertAndPin.cardInfo->eid(), pin); + const auto signature = createSignature(origin.url(), cardCertAndPin.certificateBytesInDer, + challengeNonce, cardCertAndPin.cardInfo->eid(), pin); // Erase the PIN memory. // TODO: Use a scope guard. Verify that the buffers are actually zeroed and no copies diff --git a/src/controller/command-handlers/sign.cpp b/src/controller/command-handlers/sign.cpp index 9c66c747..54b08e1b 100644 --- a/src/controller/command-handlers/sign.cpp +++ b/src/controller/command-handlers/sign.cpp @@ -30,11 +30,13 @@ using namespace electronic_id; namespace { -QPair signHash(const ElectronicID& eid, const pcsc_cpp::byte_vector& pin, - const QByteArray& docHash, const HashAlgorithm hashAlgo) +QPair signHash(const ElectronicID& eid, const QByteArray& cert, + const pcsc_cpp::byte_vector& pin, const QByteArray& docHash, + const HashAlgorithm hashAlgo) { const auto hashBytes = pcsc_cpp::byte_vector {docHash.begin(), docHash.end()}; - const auto signature = eid.signWithSigningKey(pin, hashBytes, hashAlgo); + const auto signature = + eid.signWithSigningKey({cert.cbegin(), cert.cend()}, pin, hashBytes, hashAlgo); const auto signatureBase64 = QByteArray::fromRawData(reinterpret_cast(signature.first.data()), @@ -98,7 +100,9 @@ QVariantMap Sign::onConfirm(WebEidUI* window, const CardCertificateAndPinInfo& c auto pin = getPin(cardCertAndPin.cardInfo->eid().smartcard(), window); try { - const auto signature = signHash(cardCertAndPin.cardInfo->eid(), pin, docHash, hashAlgo); + const auto signature = + signHash(cardCertAndPin.cardInfo->eid(), cardCertAndPin.certificateBytesInDer, pin, + docHash, hashAlgo); // Erase PIN memory. // TODO: Use a scope guard. Verify that the buffers are actually zeroed