OpenSSL API

Posted on 2019-11-07 20:05  Volcano3511  阅读(255)  评论(0编辑  收藏  举报

TOC

BN大数系列函数

//新生成一个BIGNUM结构
BIGNUM *BN_new(void);

//释放一个BIGNUM结构,释放完后a=NULL;
void BN_free(BIGNUM *a);

//初始化所有项均为0,一般为BN_ init(&c)
void BN_init(BIGNUM *);

//将a中所有项均赋值为0,但是内存并没有释放
void BN_clear(BIGNUM *a);

//相当与将BN_free和BN_clear综合,要不就赋值0,要不就释放空间。
void BN_clear_free(BIGNUM *a);

//设置大数a为整数w
int BN_set_word(BIGNUM *a, unsigned long w);

//假如大数a能表示为long型,那么返回一个long型数
unsigned long BN_get_word(BIGNUM *a);

//产生一个加密用的强bits的伪随机数
//若top=-1,最高位为0,top=0,最高位为1,top=1,最高位和次高位为1,bottom为真,随机数为偶数
int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);

//将 a 转化为字符串存入to,to的空间必须大于BN_num_bytes(a)
int BN_bn2bin(const BIGNUM *a, unsigned char *to);

//将s中的len位的正整数转化为大数
BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); 

//将大数转化为16进制字符串
char *BN_bn2hex(const BIGNUM *a);

//将大数转化为10进制字符串
char *BN_bn2dec(const BIGNUM *a);

//将16进制字符串转成大数
int BN_hex2bn(BIGNUM **a, const char *str);

//将10进制字符串传成大数
int BN_dec2bn(BIGNUM **a, const char *str);

【公钥对象PUBKEY的IO】

EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x,pem_password_cb *cb, void *u);
EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,pem_password_cb *cb, void *u);
int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x);
int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
这四个函数对EVP_PKEY结构的公钥进行PEM格式的读写处理。公钥是作为SubjectPublicKeyInfo存储结构进行编码的。

【RSA私钥对象RSAPrivateKey的IO】

RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);
int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);

这四个函数对RSA结构的RSA私钥进行PEM格式的读写处理。它使用跟PrivateKey相同的函数进行处理,但如果私钥类型不是RSA,就会返回错误信息。

【RSA公钥对象RSAPublicKey的IO】

RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x);
int PEM_write_RSAPublicKey(FILE *fp, RSA *x);

这四个函数是对RSA结构的公钥进行PEM格式的读写处理。本函数使用PKCS#1 RSAPublicKey结构标准对RSA公钥进行编码操作。

【RSA公钥对象RSA_PUBKEY的IO】

RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x,pem_password_cb *cb, void *u);

RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x,pem_password_cb *cb, void *u);

int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x);

int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
这四个函数也是对RSA结构的公钥进行PEM格式的读写处理。但是本函数使用SubjectPublicKeyInfo结构标准对RSA公钥进行编码操作,如果公钥类型不是RSA,就出错返回失败信息。