aardio 文档

附录 A - 内置椭圆曲线

附录 A.1 - 素数域内置椭圆曲线

曲线名称 标识符 OID
ANSSI FRP 256v1 FRP256v1 1.2.250.1.223.101.256.1
ECC Brainpool P160r1 brainpoolp160r1 1.3.36.3.3.2.8.1.1.1
ECC Brainpool P160t1 brainpoolp160t1 1.3.36.3.3.2.8.1.1.2
ECC Brainpool P192r1 brainpoolp192r1 1.3.36.3.3.2.8.1.1.3
ECC Brainpool P192t1 brainpoolp192t1 1.3.36.3.3.2.8.1.1.4
ECC Brainpool P224r1 brainpoolp224r1 1.3.36.3.3.2.8.1.1.5
ECC Brainpool P224t1 brainpoolp224t1 1.3.36.3.3.2.8.1.1.6
ECC Brainpool P256r1 brainpoolp256r1 1.3.36.3.3.2.8.1.1.7
ECC Brainpool P256t1 brainpoolp256t1 1.3.36.3.3.2.8.1.1.8
ECC Brainpool P320r1 brainpoolp320r1 1.3.36.3.3.2.8.1.1.9
ECC Brainpool P320t1 brainpoolp320t1 1.3.36.3.3.2.8.1.1.10
ECC Brainpool P384r1 brainpoolp384r1 1.3.36.3.3.2.8.1.1.11
ECC Brainpool P384t1 brainpoolp384t1 1.3.36.3.3.2.8.1.1.12
ECC Brainpool P512r1 brainpoolp512r1 1.3.36.3.3.2.8.1.1.13
ECC Brainpool P512t1 brainpoolp512t1 1.3.36.3.3.2.8.1.1.14
GOST RFC4357 GostR3410-2001-CryptoPro-A -
GOST RFC4357 GostR3410-2001-CryptoPro-B -
GOST RFC4357 GostR3410-2001-CryptoPro-C -
GOST RFC5832 tc26-gost-3410-2012-256-paramSetA -
GOST RFC7836 tc26-gost-3410-12-512-paramSetA -
GOST RFC7836 tc26-gost-3410-12-512-paramSetB -
GOST RFC5832 tc26_gost_3410_12_512_paramSetC -
NIST P-192 P-192 1.2.840.10045.3.1.1
NIST P-224 P-224 1.3.132.0.33
NIST P-256 P-256 1.2.840.10045.3.1.7
NIST P-384 P-384 1.3.132.0.34
NIST P-521 P-521 1.3.132.0.35
SEC secp112r1 secp112r1 1.3.132.0.6
SEC secp112r2 secp112r2 1.3.132.0.7
SEC secp128r1 secp128r1 1.3.132.0.28
SEC secp128r2 secp128r2 1.3.132.0.29
SEC secp160k1 secp160k1 1.3.132.0.9
SEC secp160r1 secp160r1 1.3.132.0.8
SEC secp160r2 secp160r2 1.3.132.0.30
SEC secp192k1 secp192k1 1.3.132.0.31
SEC secp192r1 secp192r1 1.2.840.10045.3.1.1
SEC secp224k1 secp224k1 1.3.132.0.32
SEC secp224r1 secp224r1 1.3.132.0.33
SEC secp256k1 secp256k1 1.3.132.0.10
SEC secp256r1 secp256r1 1.2.840.10045.3.1.7
SEC secp384r1 secp384r1 1.3.132.0.34
SEC secp521r1 secp521r1 1.3.132.0.35
SM2 sm2p256v1 1.2.156.10197.1.301
X9.62 prime192v1 prime192v1 1.2.840.10045.3.1.1
X9.62 prime192v2 prime192v2 1.2.840.10045.3.1.2
X9.62 prime192v3 prime192v3 1.2.840.10045.3.1.3
X9.62 prime239v1 prime239v1 1.2.840.10045.3.1.4
X9.62 prime239v2 prime239v2 1.2.840.10045.3.1.5
X9.62 prime239v3 prime239v3 1.2.840.10045.3.1.6
X9.62 prime256v1 prime256v1 1.2.840.10045.3.1.7

附录 A.2 - 二进制域内置椭圆曲线

曲线名称 标识符 OID
NIST B-163 B-163 1.3.132.0.15
NIST B-233 B-233 1.3.132.0.27
NIST B-283 B-283 1.3.132.0.17
NIST B-409 B-409 1.3.132.0.37
NIST B-571 B-571 1.3.132.0.39
NIST K-163 K-163 1.3.132.0.1
NIST K-233 K-233 1.3.132.0.26
NIST K-283 K-283 1.3.132.0.16
NIST K-409 K-409 1.3.132.0.36
NIST K-571 K-571 1.3.132.0.38
SEC sect113r1 sect113r1 1.3.132.0.4
SEC sect113r2 sect113r2 1.3.132.0.5
SEC sect131r1 sect131r1 1.3.132.0.22
SEC sect131r2 sect131r2 1.3.132.0.23
SEC sect163k1 sect163k1 1.3.132.0.1
SEC sect163r1 sect163r1 1.3.132.0.2
SEC sect163r2 sect163r2 1.3.132.0.15
SEC sect193r1 sect193r1 1.3.132.0.24
SEC sect193r2 sect193r2 1.3.132.0.25
SEC sect233k1 sect233k1 1.3.132.0.26
SEC sect233r1 sect233r1 1.3.132.0.27
SEC sect239k1 sect239k1 1.3.132.0.3
SEC sect283k1 sect283k1 1.3.132.0.16
SEC sect409k1 sect409k1 1.3.132.0.36
SEC sect409r1 sect409r1 1.3.132.0.37
SEC sect571k1 sect571k1 1.3.132.0.38
SEC sect571r1 sect571r1 1.3.132.0.39
X9.62 c2pnb163v1 c2pnb163v1 1.2.840.10045.3.0.1
X9.62 c2pnb163v2 c2pnb163v2 1.2.840.10045.3.0.2
X9.62 c2pnb163v3 c2pnb163v3 1.2.840.10045.3.0.3
X9.62 c2pnb176w1 c2pnb176w1 1.2.840.10045.3.0.4
X9.62 c2tnb191v1 c2tnb191v1 1.2.840.10045.3.0.5
X9.62 c2tnb191v2 c2tnb191v2 1.2.840.10045.3.0.6
X9.62 c2tnb191v3 c2tnb191v3 1.2.840.10045.3.0.7
X9.62 c2pnb208w1 c2pnb208w1 1.2.840.10045.3.0.10
X9.62 c2tnb239v1 c2tnb239v1 1.2.840.10045.3.0.11
X9.62 c2tnb239v2 c2tnb239v2 1.2.840.10045.3.0.12
X9.62 c2tnb239v3 c2tnb239v3 1.2.840.10045.3.0.13
X9.62 c2pnb272w1 c2pnb272w1 1.2.840.10045.3.0.16
X9.62 c2pnb304w1 c2pnb304w1 1.2.840.10045.3.0.17
X9.62 c2tnb359v1 c2tnb359v1 1.2.840.10045.3.0.18
X9.62 c2pnb368w1 c2pnb368w1 1.2.840.10045.3.0.19
X9.62 c2tnb431r1 c2tnb431r1 1.2.840.10045.3.0.20

使用示例

以下是在 aardio 中使用 BouncyCastle 内置椭圆曲线的示例代码:

import BouncyCastle;
import console;

// 获取 secp256r1 曲线参数
var ecParams = BouncyCastle.Asn1.X9.ECNamedCurveTable.GetByName("secp256r1");

// 创建椭圆曲线域参数
var domainParams = BouncyCastle.Crypto.Parameters.ECDomainParameters(
    ecParams.Curve, 
    ecParams.G, 
    ecParams.N, 
    ecParams.H,
    ecParams.GetSeed()
);

// 创建密钥对生成器
var generator = BouncyCastle.Crypto.Generators.ECKeyPairGenerator();
var keyGenParams = BouncyCastle.Crypto.Parameters.ECKeyGenerationParameters(
    domainParams, 
    BouncyCastle.Security.SecureRandom()
);
generator.Init(keyGenParams);

// 生成密钥对
var keyPair = generator.GenerateKeyPair();

// 获取公钥和私钥
var publicKey = keyPair.Public;
var privateKey = keyPair.Private;

console.log("公钥:", publicKey.Q.ToString());
console.log("私钥:", privateKey.D.ToString());
console.pause();

代码说明

  1. 首先通过 ECNamedCurveTable.GetByName 方法获取预定义的椭圆曲线参数
  2. 使用获取的参数创建椭圆曲线域参数对象 ECDomainParameters
  3. 初始化密钥对生成器 ECKeyPairGenerator 并设置参数
  4. 生成密钥对后,可以分别获取公钥和私钥
  5. 公钥存储在 Q 属性中,私钥存储在 D 属性中

注意:在实际应用中,私钥需要妥善保管,不应直接输出到控制台。

Markdown 格式