]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Use hashed input for ECDSA 2404/head
authorAki Tuomi <cmouse@desteem.org>
Tue, 31 Mar 2015 20:09:22 +0000 (23:09 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 31 Mar 2015 20:09:22 +0000 (23:09 +0300)
pdns/pkcs11signers.cc

index f955fe28f93bccaf89695354413649cfa333cbda..5db3386fad0ae65318cb31c072e4fe187c6d82df 100644 (file)
@@ -738,7 +738,12 @@ std::string PKCS11DNSCryptoKeyEngine::sign(const std::string& msg) const {
   mech.mechanism = dnssec2smech[d_algorithm];
   mech.pParameter = NULL;
   mech.ulParameterLen = 0;
-  if (d_slot->Sign(msg, result, &mech)) throw PDNSException("Could not sign data");
+
+  if (mech.mechanism == CKM_ECDSA) {
+    if (d_slot->Sign(this->hash(msg), result, &mech)) throw PDNSException("Could not sign data");
+  } else {
+    if (d_slot->Sign(msg, result, &mech)) throw PDNSException("Could not sign data");
+  }
   return result;
 };
 
@@ -798,7 +803,11 @@ bool PKCS11DNSCryptoKeyEngine::verify(const std::string& msg, const std::string&
   mech.mechanism = dnssec2smech[d_algorithm];
   mech.pParameter = NULL;
   mech.ulParameterLen = 0;
-  return (d_slot->Verify(msg, signature, &mech) == 0);
+  if (mech.mechanism == CKM_ECDSA) {
+    return (d_slot->Verify(this->hash(msg), signature, &mech)==0);
+  } else {
+    return (d_slot->Verify(msg, signature, &mech) == 0);
+  }
 };
 
 std::string PKCS11DNSCryptoKeyEngine::getPubKeyHash() const {