summaryrefslogtreecommitdiff
path: root/validat8.cpp
diff options
context:
space:
mode:
authorAndrew Wason <rectalogic@rectalogic.com>2019-07-02 10:47:46 -0400
committerAndrew Wason <rectalogic@rectalogic.com>2019-07-02 10:47:46 -0400
commit9c307ff4ba3de01d7604d2ef86f7a3796b2fcb71 (patch)
tree878900eb5f51beb7246b43e59c3135a5e41aef00 /validat8.cpp
parent18d5e5528f480885d3373d200dffc8cd6beeca81 (diff)
downloadcryptopp-git-9c307ff4ba3de01d7604d2ef86f7a3796b2fcb71.tar.gz
Use MAC::DIGESTSIZE in ECIES SymmetricEncrypt/SymmetricDecrypt
Fixes #856
Diffstat (limited to 'validat8.cpp')
-rw-r--r--validat8.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/validat8.cpp b/validat8.cpp
index c168a406..16d2daba 100644
--- a/validat8.cpp
+++ b/validat8.cpp
@@ -139,6 +139,49 @@ bool ValidateECP_Encrypt()
return pass;
}
+class NULLHash : public CryptoPP::IteratedHashWithStaticTransform
+ <CryptoPP::word32, CryptoPP::BigEndian, 32, 0, NULLHash, 0>
+{
+public:
+ static void InitState(HashWordType *state) {}
+ static void Transform(CryptoPP::word32 *digest, const CryptoPP::word32 *data) {}
+ static const char *StaticAlgorithmName() {return "NULL HASH";}
+};
+
+template <class EC, class HASH = SHA1, class COFACTOR_OPTION = NoCofactorMultiplication, bool DHAES_MODE = true, bool LABEL_OCTETS = false>
+struct ECIES_NULLDigest
+ : public DL_ES<
+ DL_Keys_EC<EC>,
+ DL_KeyAgreementAlgorithm_DH<typename EC::Point, COFACTOR_OPTION>,
+ DL_KeyDerivationAlgorithm_P1363<typename EC::Point, DHAES_MODE, P1363_KDF2<HASH> >,
+ DL_EncryptionAlgorithm_Xor<HMAC<NULLHash>, DHAES_MODE, LABEL_OCTETS>,
+ ECIES<EC> >
+{
+ // TODO: fix this after name is standardized
+ CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "ECIES NULLDigest";}
+};
+
+bool ValidateECP_NULLDigest_Encrypt()
+{
+ ECIES_NULLDigest<ECP>::Decryptor cpriv(GlobalRNG(), ASN1::secp256k1());
+ ECIES_NULLDigest<ECP>::Encryptor cpub(cpriv);
+ ByteQueue bq;
+ cpriv.GetKey().DEREncode(bq);
+ cpub.AccessKey().AccessGroupParameters().SetEncodeAsOID(true);
+ cpub.GetKey().DEREncode(bq);
+
+ cpub.AccessKey().Precompute();
+ cpriv.AccessKey().Precompute();
+ bool pass = CryptoSystemValidate(cpriv, cpub);
+
+ std::cout << "Turning on point compression..." << std::endl;
+ cpriv.AccessKey().AccessGroupParameters().SetPointCompression(true);
+ cpub.AccessKey().AccessGroupParameters().SetPointCompression(true);
+ pass = CryptoSystemValidate(cpriv, cpub) && pass;
+
+ return pass;
+}
+
bool ValidateEC2N_Encrypt()
{
// DEREncode() changed to Save() at Issue 569.