Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
BigInteger::BigInteger(const BigInteger & input) :
		BigInteger(input.ToString()) {
	/* empty */
}