ECDSA (Elliptic Curve Digital Sign Algorithm [PrimeField]
)
copy includes
folder to your project
add ecdsa.h
to your source file
link crypto_pseudo_random_generator.lib
to your project
link sha512.lib
to your project
link aes.lib
to your project
link ecdsa_primefield.lib
to your project
link thread_pool.lib
to your project
copy includes
folder to your project
add ecdsa.h
to your source file
link libcrypto_pseudo_random_generator.a
to your project
link libsha512.a
to your project
link libaes.a
to your project
link libecdsa_primefield.a
to your project
link libthread_pool.a
to your project
Example Use NIST Standart P384
auto NIST = std::make_shared<ECDSA_NIST_384>();
std::string SecretKey (" 1234567890098765432112345678900987654321" );
std::string Message (" Hello Alice! My name is Bob!" );
// CreateKeyCheckDigitalSign
std::pair<std::string, std::string> KeyCheckDigitalSign = NIST->CreateKeyCheckDigitalSign (SecretKey);
// CreateDigitalSign
std::pair<std::string, std::string> DigitalSign = NIST->CreateDigitalSign (SecretKey, Message);
// Message += "?"; //Change Message (Attack to integrity)
// CheckDigitalSign
bool result = NIST->CheckDigitalSign (DigitalSign, Message, KeyCheckDigitalSign);
Example Use GOST Standart P512
auto GOST = std::make_shared<ECDSA_GOST_512>();
std::string SecretKey (" 1234567890098765432112345678900987654321" );
std::string Message (" Hello Alice! My name is Bob!" );
// CreateKeyCheckDigitalSign
std::pair<std::string, std::string> KeyCheckDigitalSign = GOST->CreateKeyCheckDigitalSign (SecretKey);
// CreateDigitalSign
std::pair<std::string, std::string> DigitalSign = GOST->CreateDigitalSign (SecretKey, Message);
// Message += "?"; //Change Message (Attack to integrity)
// CheckDigitalSign
bool result = GOST->CheckDigitalSign (DigitalSign, Message, KeyCheckDigitalSign);
Example ECDHE (Elliptic Curve Diffie-Hellman
)
auto NIST = std::make_shared<ECDSA_NIST_521>();
// secret parameter UserA
bigint dA;
// secret parameter UserB
bigint dB;
// Generate Pseudo Random Number
CryptoPseudoRandomGenerator generator;
auto pseudo_random_number = generator.generate(1024 );
// Get Secret Key for Elliptic Curve UserA
dA.FromString(NIST->hexStr (pseudo_random_number), 16);
// Get Public Elliptic Curve Point UserA
auto QA = NIST->MultiplyOnBasePoint (dA);
// Generate Pseudo Random Number
pseudo_random_number = generator.generate(1024 );
// Get Secret Key for Elliptic Curve UserB
dB.FromString(NIST->hexStr (pseudo_random_number), 16);
// Get Public Elliptic Curve Point UserB
auto QB = NIST->MultiplyOnBasePoint (dB);
// Calculate Common Session Key for UserA
ecpoint FriendQB (NIST);
FriendQB.setCoordinate(
std::string (QB.first),
std::string(QB.second)
);
ecpoint SecretPointA = FriendQB*dA;
// Calculate Common Session Key for UserB
ecpoint FriendQA (NIST);
FriendQA.setCoordinate(
std::string (QA.first),
std::string(QA.second)
);
ecpoint SecretPointB = FriendQA*dB;
// check equals shared secret
auto result = SecretPointB.getXCoordinate() == SecretPointA.getXCoordinate() ? true : false ;
aes
crypto_pseudo_random_generator
ecdsa (GOST_256, GOST_512, NIST_192 ... curves)
ecdsa_primefield
sha512