我对图书馆还不是很熟悉。 我需要的是ECIES的功能,但没有在消息中添加MAC。 我想选择一条我将执行ECDH的曲线。我需要派生一个对称密钥并使用ChaCha加密数据。
我查看了pubkey.h中的Encrypt函数,它似乎实现了我想要的东西:
void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const
{
const DL_KeyAgreementAlgorithm<T> &agreeAlg = this->GetKeyAgreementAlgorithm();
const DL_KeyDerivationAlgorithm<T> &derivAlg = this->GetKeyDerivationAlgorithm();
const DL_SymmetricEncryptionAlgorithm &encAlg = this->GetSymmetricEncryptionAlgorithm();
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
const DL_PublicKey<T> &key = this->GetKeyInterface();
Integer x(rng, Integer::One(), params.GetMaxExponent());
Element q = params.ExponentiateBase(x);
params.EncodeElement(true, q, ciphertext);
unsigned int elementSize = params.GetEncodedElementSize(true);
ciphertext += elementSize;
Element z = agreeAlg.AgreeWithEphemeralPrivateKey(params, key.GetPublicPrecomputation(), x);
SecByteBlock derivedKey(encAlg.GetSymmetricKeyLength(plaintextLength));
derivAlg.Derive(params, derivedKey, derivedKey.size(), z, q, parameters);
encAlg.SymmetricEncrypt(rng, derivedKey, plaintext, plaintextLength, ciphertext, parameters);
}
,但是你会建议如何以最优雅的方式接近这个主题吗?我看到ECIES已经准备好开箱即用了。如何实现这样的自定义方案,任何一个例子?我需要的是一种小巧的方法。
在上面的加密函数中,我没有看到附加MAC的位置,但是,这个函数直接用于基准测试ECIES(在bench2.cpp中的BenchMarkEncryption中)我错过了什么?