如何用充气城堡生成EC Keypair



我当前的项目仅用于添加/解密签名的FIPS资源,等等。.键仍然与通常的C#弹力城堡一起生成。现在,因为那是浪费,所以我想更改代码,但是我找不到有关如何执行此操作的任何文件。

到目前为止我拥有的东西:

ECDomainParameters s = new ECDomainParameters(...?)
        FipsEC.KeyPairGenerator ecGen = CryptoServicesRegistrar.CreateGenerator(new FipsEC.KeyGenerationParameters(s));

但是如何指定曲线的类型,G和N?

预先感谢您是否可以帮助您。

我在Bouncycastle单元测试中找到了一些示例。尝试通过测试下载其代码:https://www.bouncycastle.org/csharp/download/bccrypto-csharp-1.8.1-src.zip或在其网页上找到适当的来源:https://wwwwww.bouncycycastle。org/csharp/index.html

然后在单位测试中寻找类:Ectest

例如,他们具有这样的代码:

/**
 * key generation test
 */
[Test]
public void TestECDsaKeyGenTest()
{
    SecureRandom random = new SecureRandom();
    BigInteger n = new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307");
    FpCurve curve = new FpCurve(
        new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), // q
        new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a
        new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16), // b
        n, BigInteger.One);
    ECDomainParameters parameters = new ECDomainParameters(
        curve,
        curve.DecodePoint(Hex.Decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G
        n);
    ECKeyPairGenerator pGen = new ECKeyPairGenerator();
    ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(
        parameters,
        random);
    pGen.Init(genParam);
    AsymmetricCipherKeyPair pair = pGen.GenerateKeyPair();
    ParametersWithRandom param = new ParametersWithRandom(pair.Private, random);
    ECDsaSigner ecdsa = new ECDsaSigner();
    ecdsa.Init(true, param);
    byte[] message = new BigInteger("968236873715988614170569073515315707566766479517").ToByteArray();
    BigInteger[] sig = ecdsa.GenerateSignature(message);
    ecdsa.Init(false, pair.Public);
    if (!ecdsa.VerifySignature(message, sig[0], sig[1]))
    {
        Fail("signature fails");
    }
}

最新更新