]> granicus.if.org Git - pdns/commitdiff
fix ECDSA from ISCMap in cryptopp driver, thanks Aki Tuomi
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 10 Jan 2013 15:35:16 +0000 (15:35 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 10 Jan 2013 15:35:16 +0000 (15:35 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@3036 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/cryptoppsigners.cc

index d44255cb17260f43becb47a6789afb6ce2eb70ee..b83e9f6869199adc58cc110702a3981e808ed080 100644 (file)
@@ -82,18 +82,26 @@ DNSCryptoKeyEngine::storvector_t CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BI
   storvect.push_back(make_pair("PrivateKey", string((char*)buffer, sizeof(buffer))));
   return storvect;
 }
+
 template<class HASHER, class CURVE, int BITS>
 void CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BITS>::fromISCMap(DNSKEYRecordContent& drc, std::map<std::string, std::string>& stormap )
 {
+  AutoSeededRandomPool prng;
   privatekey_t* privateKey = new privatekey_t;
-  const CryptoPP::Integer x;
+  const CryptoPP::Integer x(reinterpret_cast<const unsigned char*>(stormap["privatekey"].c_str()), BITS/8); // well it should be this long
   CryptoPP::OID oid=CURVE();
-  privateKey->Initialize(oid, x );
+  privateKey->Initialize(oid, x);
+  bool result = privateKey->Validate(prng, 3);
+  if (!result) {
+      throw "Cannot load private key - validation failed!";
+  }
   d_key = shared_ptr<privatekey_t>(privateKey);
   publickey_t* publicKey = new publickey_t();
   d_key->MakePublicKey(*publicKey);
   d_pubkey = shared_ptr<publickey_t>(publicKey);
+  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
 }
+
 template<class HASHER, class CURVE, int BITS>
 std::string CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BITS>::getPubKeyHash() const
 {