int main(int argc, char** argv) { BigInteger p("6277101735386680763835789423207666416083908700390324961279", 10); printf("p ---> %s\n", p.ToString().c_str()); BigInteger a("-3", 10); printf("a ---> %s\n", a.ToString().c_str()); BigInteger b("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16); printf("b ---> %s\n", b.ToString(16).c_str()); BigInteger n("ffffffffffffffffffffffff99def836146bc9b1b4d22831", 16); printf("n ---> %s\n", n.ToString(16).c_str()); std::string xGs = "03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012"; std::vector<byte> xG = FromHexStringToByte(xGs); printf("xG ---> %s\n", xGs.c_str()); std::string test = "test"; std::vector<unsigned char> bytes(test.begin(), test.end()); HashGOST hash(256); std::vector<unsigned char> H = hash.GetHash(bytes); std::string hres = ""; for (auto ttt : H) { char tmp[2]; sprintf(tmp, "%02x", ttt); hres += tmp; } printf("\n"); printf("HASH ---> %s\n", hres.c_str()); DSGost DS(p, a, b, n, xG); BigInteger d = DS.GenPrivateKey(192); printf("private key = %s\n", d.ToString(10).c_str()); ECPoint Q = DS.GenPublicKey(d); printf("\n\npublic key\n"); printf("a ---> %s\n", Q.a.ToString().c_str()); printf("b ---> %s\n", Q.b.ToString().c_str()); printf("FieldChar ---> %s\n", Q.FieldChar.ToString().c_str()); printf("x ---> %s\n", Q.x.ToString().c_str()); printf("y ---> %s\n", Q.y.ToString().c_str()); std::string sign = DS.SingGen(H, d); printf("\n\n\n"); printf("Sign --> %s\n", sign.c_str()); bool result = DS.SingVer(H, sign, Q); if (result) { printf("Correct\n"); } else { printf("Wrong\n"); } return 0; }
BigInteger::BigInteger(const BigInteger & input) : BigInteger(input.ToString()) { /* empty */ }