非对称加密引擎
概述
非对称加密引擎(Asymmetric Crypto Engine,简称 PKE)是 SoC 芯片内专门用于处理公钥密码学运算的硬件加速单元。相比软件实现,硬件加速引擎能够显著提升非对称加密算法的执行效率,同时通过物理隔离机制保护密钥安全,在物联网安全系统中具有重要作用。
应用背景
在物联网设备的安全场景中,非对称加密算法被广泛应用于数字签名、密钥交换和身份认证等关键安全流程。然而,这类算法涉及大量复杂数学运算(如大数模幂运算、椭圆曲线点乘运算等),若完全由软件实现,会消耗大量 CPU 资源且执行效率较低。非对称加密引擎通过专用硬件电路实现这些核心运算,可在保证安全性的前提下大幅提升运算速度。
工作原理
非对称加密引擎通过 APB 总线与 CPU 连接,内部包含专门的运算单元和存储单元。当应用层需要执行非对称加密运算时,CPU 将运算参数写入引擎的寄存器和存储区,配置控制寄存器启动运算,引擎硬件自动完成核心密码学运算并返回结果。整个过程对上层应用透明,用户通过 API 即可完成操作。
安全特性
非对称加密引擎在架构设计上充分考虑了安全防护需求:
物理隔离:引擎内部存储单元与系统总线隔离,防止密钥被总线嗅探攻击窃取
OTP 密钥支持:支持将私钥预烧录到 OTP(One Time Programmable)区域,OTP 密钥与引擎直连,无法被外部读取或篡改
侧信道攻击防护:部分芯片型号支持 DPA(差分功耗分析)、SPA(简单功耗分析)和 Timing Attack(时序攻击)防护
TrustZone 支持:部分芯片型号支持 ARM TrustZone 技术,可自动识别 CPU 的安全/非安全访问状态
方案优点
相比纯软件实现,非对称加密引擎具有以下优势:
高性能:硬件加速可大幅缩短运算时间,减少 CPU 占用
低功耗:专用硬件电路比通用 CPU 运行软件算法功耗更低
高安全性:物理隔离机制和 OTP 密钥存储有效防止密钥泄露
易用性:提供封装良好的 API 接口,用户无需关注底层硬件细节
功能架构
以下按芯片系列列出非对称加密引擎的功能规格,包括基本功能等。
不支持。
基本功能
密钥生成:利用椭圆曲线数学性质生成公私钥对。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
基本功能
密钥生成:利用椭圆曲线数学性质生成公私钥对。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
基本功能
密钥生成:利用椭圆曲线数学性质生成公私钥对。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
基本功能
密钥生成:利用椭圆曲线数学性质生成公私钥对。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
基本功能
密钥生成:利用椭圆曲线数学性质生成公私钥对。
数字签名:
支持签名算法:ECDSA、EdDSA 和 RSA
ECC 运算曲线支持:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
爱德华兹曲线(Edwards Curves):Ed25519
RSA 加密和解密:256~3072 bits
密钥交换:支持 ECDH。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
引擎支持 DPA、SPA 和 Timing Attack 防护,算法已通过 NIST CAVP 认证。
基本功能
密钥生成:
RSA 密钥生成:包括质数筛选和生成相应的公私钥对
ECC 密钥生成:利用椭圆曲线数学性质生成公私钥对,具备比 RSA 更高的密钥效率
数字签名:
支持签名算法:RSA-SSA、ECDSA 和 EdDSA
ECC 运算曲线支持:
素数域曲线(Prime field):112~512 位(包括 SM2)
二进制域曲线(Binary Field):113~512 位
蒙哥马利曲线(Montgomery Curves):128~512 位(包括 X25519、X448)
爱德华兹曲线(Edwards Curves):128~512 位(包括 Ed25519、Ed448)
RSA 加密和解密:256~4096 bits
密钥交换:支持 RSA 和 ECC 密钥交换。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
安全架构
非对称加密引擎支持 TrustZone 技术,可自动识别 CPU 的访问是处于 Secure 状态还是 Non-secure 状态。引擎内置硬件互斥锁机制,确保多任务环境下的并发安全。
当 Secure 状态的 CPU 持有锁时,所有 Non-secure 访问均会被阻止;只有 Secure CPU 释放锁后,Non-secure CPU 才能重新获取锁。若 Non-secure CPU 持有锁,Secure CPU 可通过专用抢占寄存器强制解除 Non-secure 锁并重置引擎,从而立即获得引擎使用权。
此外,每次释放锁时引擎会自动清除硬件和寄存器状态中的敏感信息,防止密钥泄露。
引擎支持 DPA、SPA 和 Timing Attack 防护,算法已通过 NIST CAVP 认证。
基本功能
密钥生成:
RSA 密钥生成:包括质数筛选和生成相应的公私钥对
ECC 密钥生成:利用椭圆曲线数学性质生成公私钥对,具备比 RSA 更高的密钥效率
数字签名:
支持签名算法:RSA-SSA、ECDSA 和 EdDSA
ECC 运算曲线支持:
素数域曲线(Prime field):112~512 位(包括 SM2)
二进制域曲线(Binary Field):113~512 位
蒙哥马利曲线(Montgomery Curves):128~512 位(包括 X25519、X448)
爱德华兹曲线(Edwards Curves):128~512 位(包括 Ed25519、Ed448)
RSA 加密和解密:256~4096 bits
密钥交换:支持 RSA 和 ECC 密钥交换。
OTP 密钥(仅用于 ECDSA 公钥生成和签名):
支持物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防止总线嗅探攻击)
安全架构
非对称加密引擎支持 TrustZone 技术,可自动识别 CPU 的访问是处于 Secure 状态还是 Non-secure 状态。引擎内置硬件互斥锁机制,确保多任务环境下的并发安全。
当 Secure 状态的 CPU 持有锁时,所有 Non-secure 访问均会被阻止;只有 Secure CPU 释放锁后,Non-secure CPU 才能重新获取锁。若 Non-secure CPU 持有锁,Secure CPU 可通过专用抢占寄存器强制解除 Non-secure 锁并重置引擎,从而立即获得引擎使用权。
此外,每次释放锁时引擎会自动清除硬件和寄存器状态中的敏感信息,防止密钥泄露。
OTP 密钥支持
除软件密钥外,引擎还支持将私钥预烧录到 OTP 区域。OTP 密钥与引擎通过物理隔离机制直连,无法被外部读取或篡改,是生产环境中保护核心私钥的推荐方案。
不支持。
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个供 ECDSA 使用的私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
OTP 密钥配置如下:
OTP 密钥 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理地址 0x280 |
256 |
0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理地址 0x2A0 |
256 |
0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理地址 0x366[3] |
1 |
1 |
0:启用 ECDSA Key1 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理地址 0x366[4] |
1 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理地址 0x366[5] |
1 |
1 |
0:启用 ECDSA Key2 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key2 写保护 |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个供 ECDSA 使用的私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
OTP 密钥配置如下:
OTP 密钥 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理地址 0x280 |
256 |
0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理地址 0x2A0 |
256 |
0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理地址 0x366[3] |
1 |
1 |
0:启用 ECDSA Key1 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理地址 0x366[4] |
1 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理地址 0x366[5] |
1 |
1 |
0:启用 ECDSA Key2 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key2 写保护 |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个供 ECDSA 使用的私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
OTP 密钥配置如下:
OTP 密钥 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理地址 0x280 |
256 |
0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理地址 0x2A0 |
256 |
0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理地址 0x366[3] |
1 |
1 |
0:启用 ECDSA Key1 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理地址 0x366[4] |
1 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理地址 0x366[5] |
1 |
1 |
0:启用 ECDSA Key2 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key2 写保护 |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个供 ECDSA 使用的私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
OTP 密钥配置如下:
OTP 密钥 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理地址 0x280 |
256 |
0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理地址 0x2A0 |
256 |
0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理地址 0x366[3] |
1 |
1 |
0:启用 ECDSA Key1 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理地址 0x366[4] |
1 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理地址 0x366[5] |
1 |
1 |
0:启用 ECDSA Key2 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key2 写保护 |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个供 ECDSA 使用的私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
OTP 密钥配置如下:
OTP 密钥 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理地址 0x280 |
256 |
0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理地址 0x2A0 |
256 |
0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理地址 0x366[3] |
1 |
1 |
0:启用 ECDSA Key1 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理地址 0x366[4] |
1 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理地址 0x366[5] |
1 |
1 |
0:启用 ECDSA Key2 写保护,防止密钥被恶意写入全 0 1:禁用 ECDSA Key2 写保护 |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
默认情况下,OTP 密钥只能通过 Secure 状态的 CPU 访问。在 Secure 状态下可调用 pke_ecdsa_share_hw_key API 将 OTP 密钥配置为共享或非共享状态,允许 Non-secure CPU 访问。
OTP 密钥配置如下:
密钥ID |
密钥类型 |
长度(比特) | OTP地址 | 密钥使用权限 |
||
|---|---|---|---|---|
0 |
OTP |
256 |
0x280 |
Secure(默认)/Non-secure |
1 |
OTP |
256 |
0x2A0 |
Secure(默认)/Non-secure |
非对称加密引擎的 OTP 密钥仅支持 ECDSA 公钥生成和签名操作。OTP 密钥与引擎直连,通过物理隔离机制防止密钥被总线嗅探攻击窃取。
引擎可以通过以下两种方式获取私钥:
软件密钥:用户将私钥传递给 API,由 API 将其写入引擎寄存器中
OTP 密钥:引擎自动从 OTP 区域读取预烧录的私钥
OTP 区域可存储两个私钥,仅能通过引擎触发访问,无法被外部读取或篡改。使用 OTP 密钥前需先将私钥烧录到指定 OTP 地址。
默认情况下,OTP 密钥只能通过 Secure 状态的 CPU 访问。在 Secure 状态下可调用 pke_ecdsa_share_hw_key API 将 OTP 密钥配置为共享或非共享状态,允许 Non-secure CPU 访问。
OTP 密钥配置如下:
密钥ID |
密钥类型 |
长度(比特) | OTP地址 | 密钥使用权限 |
||
|---|---|---|---|---|
0 |
OTP |
256 |
0x340 |
Secure(默认)/Non-secure |
1 |
OTP |
256 |
0x360 |
Secure(默认)/Non-secure |
工作原理
非对称加密引擎通过 APB 总线与 CPU 连接,采用 Slave 模式工作。引擎内部包含运算单元、存储单元和控制寄存器,CPU 通过读写这些寄存器完成运算参数配置和结果获取。
为保障多任务环境下的并发安全,引擎内置硬件互斥锁机制。当 Secure 状态的 CPU 持有锁时,所有 Non-secure 访问均会被阻止;若 Non-secure CPU 持有锁,Secure CPU 可通过专用抢占寄存器强制获取使用权,确保安全任务优先。
工作流程
引擎的标准操作流程如下:
获取互斥锁:CPU 获取引擎的硬件互斥锁
写入运算参数:将算法参数写入引擎的存储单元
配置运算模式:设置控制寄存器选择所需的运算模式
启动运算:使能引擎开始执行计算
监测运算进度:轮询状态寄存器监测运算进度
获取运算结果:检测到结束标志位后,从存储单元读取运算结果
释放互斥锁:释放互斥锁,使其他任务可以使用引擎
异常处理
引擎具备以下异常处理机制:
错误识别:状态寄存器包含错误标志位,轮询时检测到错误可立即终止流程
错误反馈:API 返回预定义错误码(非零值表示错误,0 表示正常完成)
使用方法
介绍了引擎的工作原理和流程后,以下介绍引擎的具体使用方法。引擎提供了两种使用方式:底层直接 API 和 MbedTLS 集成 API。
开发阶段
在开发阶段,用户通常使用软件密钥进行功能验证和调试:
选择 API 类型:
使用底层 API 直接控制引擎,功能更全面,但需要了解引擎工作原理
使用 MbedTLS 集成 API,接口更通用,但仅支持软件密钥
配置 SDK:
在 SDK menuconfig 中启用非对称加密引擎相关选项
根据需求选择支持的算法曲线
调用 API:
参考示例代码调用相应 API 完成密钥生成、签名或验签操作
生产阶段
在生产阶段,推荐使用 OTP 密钥以获得更高安全性:
生成密钥对:
开发阶段生成公私钥对
保存公钥用于验签,私钥用于 OTP 烧录
烧录 OTP 密钥:
将私钥烧录到 OTP 指定地址(参见上文 OTP 密钥表)
配置密钥读保护/写保护位
警告
OTP(One Time Programmable)区域只能写入一次,无法擦除或撤销。请在执行写入命令前,仔细核对地址和数据。
使用底层 API:
使用 OTP 密钥时必须调用底层 API
MbedTLS API 不支持 OTP 密钥
API 接口
无论使用软件密钥还是 OTP 密钥,Realtek 都提供了完善的 API 接口,用户无需关心底层寄存器操作细节。
底层 API
底层 API 提供对引擎的完整控制,支持软件密钥和 OTP 密钥:
密钥生成 API:生成 ECC 或 RSA 密钥对
签名 API:使用私钥对数据进行数字签名
验签 API:使用公钥验证签名有效性
密钥交换 API:执行 ECDH 密钥交换
OTP 密钥配置 API:配置 OTP 密钥的访问权限
MbedTLS 集成 API
为提高兼容性,Realtek 已将硬件加速引擎集成到 MbedTLS API 中。用户可以使用标准的 MbedTLS ECDSA/ECDH API,底层自动调用硬件加速。MbedTLS API 仅支持软件密钥,不支持 OTP 密钥。由于硬件限制,已关闭 MbedTLS 的 SECP521R1 曲线支持。
支持的算法与曲线
各芯片支持的算法曲线如下,ROM 中已预置常用曲线参数,无需用户额外提供:
不支持。
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
ED25519
SECP192R1
SECP224R1
SECP256R1
SECP384R1
BP256R1
BP384R1
BP512R1
CURVE25519
SECP192K1
SECP224K1
SECP256K1
CURVE448
ED25519
ED448
SECP192R1
SECP224R1
SECP256R1
SECP384R1
BP256R1
BP384R1
BP512R1
CURVE25519
SECP192K1
SECP224K1
SECP256K1
CURVE448
ED25519
ED448