Crypto ++和ECC + ChaCha20

时间:2017-08-22 15:34:57

标签: c++ crypto++

我对图书馆还不是很熟悉。 我需要的是ECIES的功能,但没有在消息中添加MAC。 我想选择一条我将执行ECDH的曲线。我需要派生一个对称密钥并使用ChaCha加密数据。

我查看了pubkey.h中的Encrypt函数,它似乎实现了我想要的东西:

void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs &parameters = 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> &params = 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中)我错过了什么?

0 个答案:

没有答案