我正在使用BouncyCastle库在C#中实现ECDSA,而我很难理解TestECDsa192bitPrime()示例。
FpCurve curve = new FpCurve(
new BigInteger(
"6277101735386680763835789423207666416083908700390324961279"), // q
new BigInteger(
"fffffffffffffffffffffffffffffffefffffffffffffffc", 16), // a
new BigInteger(
"64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); // b
ECDomainParameters parameters = new ECDomainParameters(curve,
curve.DecodePoint(Hex.Decode(
"03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), // G
new BigInteger(
"6277101735386680763835789423176059013767194773182842284081")); // n
ECPrivateKeyParameters priKey = new ECPrivateKeyParameters(
"ECDSA",
new BigInteger(
"651056770906015076056810763456358567190100156695615665659"), // d
parameters);
ParametersWithRandom param = new ParametersWithRandom(priKey, k);
ECDsaSigner ecdsa = new ECDsaSigner();
ecdsa.Init(true, param);
curve.DecodePoint(Hex.Decode(
"0262b12d60690cdcf330babab6e69763b471f994dd702d16a5")), // Q
parameters);
在上面的例子中,BouncyCastle如何直接计算G(Basepoint)和Q(公钥)。
答案 0 :(得分:2)
这是确保签名过程正确的测试。 G和Q的值取自1998年的X9.62 standard,第152页的J.3.1节,ECDSA的字段Fp,192位素数的例子。
本文不公开,但可以在Mathematical routines for the NIST prime elliptic curves论文的第26页找到相同的值。