## 附录 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 内置椭圆曲线的示例代码：

```aardio
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` 属性中

注意：在实际应用中，私钥需要妥善保管，不应直接输出到控制台。