diff --git a/src/DeterministicKeys.cpp b/src/DeterministicKeys.cpp index 4cb416e1ff..e6717540bc 100644 --- a/src/DeterministicKeys.cpp +++ b/src/DeterministicKeys.cpp @@ -1,3 +1,4 @@ + #include #include #include @@ -286,38 +287,4 @@ EC_KEY* CKey::GeneratePrivateDeterministicKey(const NewcoinAddress& family, cons return pkey; } -static void* ecies_key_derivation(const void *input, size_t ilen, void *output, size_t *olen) -{ // This function must not be changed as it must be what ECDH_compute_key expects - if (*olen < SHA512_DIGEST_LENGTH) - return NULL; - *olen = SHA512_DIGEST_LENGTH; - return SHA512(static_cast(input), ilen, static_cast(output)); -} - - -std::vector CKey::getECIESSecret(CKey& otherKey) -{ // Retrieve a secret generated from an EC key pair. At least one private key must be known. - if(!pkey || !otherKey.pkey) - throw std::runtime_error("missing key"); - - EC_KEY *pubkey, *privkey; - if(EC_KEY_get0_private_key(pkey)) - { - privkey=pkey; - pubkey=otherKey.pkey; - } - else if(EC_KEY_get0_private_key(otherKey.pkey)) - { - privkey=otherKey.pkey; - pubkey=pkey; - } - else throw std::runtime_error("no private key"); - - std::vector ret(SHA512_DIGEST_LENGTH); - if (ECDH_compute_key(&(ret.front()), SHA512_DIGEST_LENGTH, EC_KEY_get0_public_key(pubkey), - privkey, ecies_key_derivation) != SHA512_DIGEST_LENGTH) - throw std::runtime_error("ecdh key failed"); - return ret; -} - // vim:ts=4 diff --git a/src/key.h b/src/key.h index 3caa26e4e9..f61892801e 100644 --- a/src/key.h +++ b/src/key.h @@ -274,8 +274,15 @@ public: return true; } - // Returns a 64-byte secret unique to these two keys. At least one private key must be known. + // ECIES functions. These throw on failure + + // returns a 64-byte secret unique to these two keys. At least one private key must be known. std::vector getECIESSecret(CKey& otherKey); + + // encrypt/decrypt functions with integrity checking. + // Note that the other side must somehow know what keys to use + std::vector encryptECIES(CKey& otherKey, const std::vector& plaintext); + std::vector decryptECIES(CKey& otherKey, const std::vector& ciphertext); }; #endif