/ tests / test-blinding.cpp
test-blinding.cpp
 1  #include <cassert>
 2  #include <memory>
 3  #include <string.h>
 4  #include "Blinding.h"
 5  #include "Identity.h"
 6  #include "Timestamp.h"
 7  
 8  using namespace i2p::data;
 9  using namespace i2p::util;
10  using namespace i2p::crypto;
11  
12  void BlindTest (SigningKeyType sigType)
13  {
14  	auto keys = PrivateKeys::CreateRandomKeys (sigType);
15  	BlindedPublicKey blindedKey (keys.GetPublic ());
16  	auto timestamp = GetSecondsSinceEpoch ();
17  	char date[9];
18  	GetDateString (timestamp, date);
19  	uint8_t blindedPriv[32], blindedPub[32];
20  	auto publicKeyLen = blindedKey.BlindPrivateKey (keys.GetSigningPrivateKey (), date, blindedPriv, blindedPub);
21  	uint8_t blindedPub1[32];
22  	blindedKey.GetBlindedKey (date, blindedPub1);
23  	// check if public key produced from private blinded key matches blided public key
24  	assert (!memcmp (blindedPub, blindedPub1, publicKeyLen));
25  	// try to sign and verify
26  	std::unique_ptr<Signer> blindedSigner (PrivateKeys::CreateSigner (blindedKey.GetBlindedSigType (), blindedPriv));
27  	uint8_t buf[100], signature[64];
28  	memset (buf, 1, 100);
29  	blindedSigner->Sign (buf, 100, signature);
30  	std::unique_ptr<Verifier> blindedVerifier (IdentityEx::CreateVerifier (blindedKey.GetBlindedSigType ()));
31  	blindedVerifier->SetPublicKey (blindedPub);
32  	assert (blindedVerifier->Verify (buf, 100, signature));
33  }
34  
35  int main ()
36  {
37  	// EdDSA test
38  	BlindTest (SIGNING_KEY_TYPE_EDDSA_SHA512_ED25519);
39  	// RedDSA test
40  	BlindTest (SIGNING_KEY_TYPE_REDDSA_SHA512_ED25519);
41  }