新建的密钥(EC_KEY_new)中并没有公私钥信息,所以,在密钥中写入公私钥信息需要使用专门的函数EC_KEY_generate_key(随机生成公私钥对),EC_KEY_set_private_key(设置私钥),EC_KEY_set_public_key(设置公钥)。
读取公私钥信息可以使用EC_KEY_get0_private_key(读取私钥信息)和EC_KEY_get0_public_key(读取公钥信息)。
───────────────────────────────────────
int EC_KEY_generate_key(EC_KEY *eckey)
功能: 生成密钥
输入: eckey
输出: eckey【生成了密钥对信息】
返回: 1【正常】or 0【出错】
出处: ec\ec_key.c
备注: 随机生成私钥,再生成对应的公钥。
───────────────────────────────────────
设置私钥。
───────────────────────────────────────
int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv_key)
功能: 设置私钥
输入: priv_key
输出: key【key-> priv_key ←priv_key】
返回: 1 【key->priv_key非空】or 0【key->priv_key空】
出处: ec\ec_key.c
───────────────────────────────────────
设置公钥。
───────────────────────────────────────
int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub_key)
功能: 设置公钥
输入: pub_key
输出: key【key->pub_key ← pub_key】
返回: 1 【key->pub_key非空】or 0【key->pub_key空】
出处: ec\ec_key.c
───────────────────────────────────────
读取私钥。
───────────────────────────────────────
const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key)
功能: 从密钥中获取私钥
输入: key
输出: -
返回: 私钥【return key->priv_key】
出处: ec\ec_key.c
───────────────────────────────────────
读取公钥。
───────────────────────────────────────
const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key)
功能: 从密钥中获取公钥
输入: key
输出: -
返回: 公钥【return key->pub_key】
出处: ec\ec_key.c
───────────────────────────────────────
生成的公私钥对是否正确可用,可利用EC_KEY_check_key检查。该函数检查:1) 公钥在曲线上;2) 公钥不是无穷原点,3) 私钥×基点=公钥。如果以上三条检查项目都通过,则密钥正确;否则,密钥出错。
───────────────────────────────────────
int EC_KEY_check_key(const EC_KEY *eckey)
功能: 检查密钥是否正确
输入: eckey
输出: -
返回: 1【正确】 or 0【出错】
出处: ec\ec_key.c
备注: 检查项目:①公钥在曲线上;②公钥不是无穷原点,③私钥×基点=公钥。
───────────────────────────────────────