1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #include <cassert>
- #include <memory>
- #include <string.h>
- #include "Blinding.h"
- #include "Identity.h"
- #include "Timestamp.h"
- using namespace i2p::data;
- using namespace i2p::util;
- using namespace i2p::crypto;
- void BlindTest (SigningKeyType sigType)
- {
- auto keys = PrivateKeys::CreateRandomKeys (sigType);
- BlindedPublicKey blindedKey (keys.GetPublic ());
- auto timestamp = GetSecondsSinceEpoch ();
- char date[9];
- GetDateString (timestamp, date);
- uint8_t blindedPriv[64], blindedPub[128];
- auto publicKeyLen = blindedKey.BlindPrivateKey (keys.GetSigningPrivateKey (), date, blindedPriv, blindedPub);
- uint8_t blindedPub1[128];
- blindedKey.GetBlindedKey (date, blindedPub1);
- // check if public key produced from private blinded key matches blided public key
- assert (!memcmp (blindedPub, blindedPub1, publicKeyLen));
- // try to sign and verify
- std::unique_ptr<Signer> blindedSigner (PrivateKeys::CreateSigner (sigType, blindedPriv));
- uint8_t buf[100], signature[128];
- memset (buf, 1, 100);
- blindedSigner->Sign (buf, 100, signature);
- std::unique_ptr<Verifier> blindedVerifier (IdentityEx::CreateVerifier (sigType));
- blindedVerifier->SetPublicKey (blindedPub1);
- assert (blindedVerifier->Verify (buf, 100, signature));
- }
- int main ()
- {
- // RedDSA test
- BlindTest (SIGNING_KEY_TYPE_REDDSA_SHA512_ED25519);
- // P256 test
- BlindTest (SIGNING_KEY_TYPE_ECDSA_SHA256_P256);
- // P384 test
- BlindTest (SIGNING_KEY_TYPE_ECDSA_SHA384_P384);
- }
|