BouncyCastle ESDSA实施

时间:2014-02-03 15:20:18

标签: c# bouncycastle elliptic-curve ecdsa

我正在使用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(公钥)。

1 个答案:

答案 0 :(得分:2)

这是确保签名过程正确的测试。 G和Q的值取自1998年的X9.62 standard,第152页的J.3.1节,ECDSA的字段Fp,192位素数的例子。

本文不公开,但可以在Mathematical routines for the NIST prime elliptic curves论文的第26页找到相同的值。