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 }