SM2算法第二十六篇:openSSL 中BIGNUM的使用记录
来源:互联网 发布:c语言如何输入若干个数 编辑:程序博客网 时间:2024/05/16 18:05
出处:http://blog.163.com/xiaoting_hu/blog/static/5046477220136215847597/
转载原因:对于我理解(1)BN_CTX_get() (2)BN_set_word() 有很大帮助
功能:求两个向量的内积
第一种方法
int uInnerProduct(int dime, BIGNUM *r,BIGNUM a[],BIGNUM b[])
{
BIGNUM *temp;
BN_CTX *ctx = NULL; //定义一个BN_CTX类型变量
ctx = BN_CTX_new();
BN_CTX_start(ctx); // 如果有大数函数(如BN-mul())中有BN_CTX变量,也需要在加入这三句。使用完用后面的end和free释放。
temp=BN_CTX_get(ctx); //给Temp分配一个空间
BN_set_word(r,0); //给r所指向的变量赋值为0
//计算内积
for(int i=0;i<dime;i++)
{
BN_mul(temp,&a[i],&b[i],ctx);
BN_add(r,r,temp);
}
BN_CTX_end(ctx);
BN_CTX_free(ctx); //配合上面的new和start
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
BIGNUM a[4];
BIGNUM b[4];
BIGNUM *ret;
ret=BN_new(); //和BN_free()配对
int dime=4;
for(int i=0;i<dime;i++)
{
BN_init(&a[i]); //如果不是指针定义方法,则必须在使用该变量前对其初始化,类似于BN-new()
BN_init(&b[i]);
BN_rand(&a[i],512,1,0);
BN_rand(&b[i],512,0,1); //但每次产生的都是一样的
BN_print_fp(stdout,&a[i]);
printf("\n");
BN_print_fp(stdout,&b[i]);
printf("\n");
}
uInnerProduct(dime,ret,a,b);
for(int i=0;i<dime;i++)
{
BN_free(&a[i]); //使用完必须释放
BN_free(&b[i]);
}
BN_print_fp(stdout,ret);
BN_free(ret);
system("pause");
return 0;
}
- SM2算法第二十六篇:openSSL 中BIGNUM的使用记录
- SM2算法第二十三篇:openssl库中BIGNUM的使用
- SM2算法第二十七篇: openssl库中的BIGNUM(超赞)
- openSSL 中BIGNUM的使用记录(二)——BIGNUM的使用
- SM2算法第二十四篇:谈谈PBOC3.0中使用的国密SM2算法
- openssl库中BIGNUM的使用
- SM2算法第二十八篇:Openssl有关大数运算函数介绍(全面)
- SM2第二十一篇:OpenSSL中关于RSA_new和RSA_free的内存泄漏(CRYPTO_cleanup_all_ex_data)
- 用openssl实现sm2算法文档中示例,包含sm3
- openssl BIGNUM
- 谈谈PBOC3.0中使用的国密SM2算法
- 谈谈PBOC3.0中使用的国密SM2算法
- PBOC3.0中使用的国密SM2算法
- 谈谈PBOC3.0中使用的国密SM2算法
- SM2算法第七篇:Windows下Openssl安装与配置
- SM2算法第四篇:基于Openssl实现SM2秘钥协商协议
- SM2算法第二篇:“七问”SM2椭圆曲线公钥密码算法
- 关于openssl BIGNUM
- Advanced Installer 安装前卸载旧版本的办法
- android高级编程之加载大图片到内存
- 学生信息管理系统增加过程
- IOS文件保存(重名不覆盖解决方案)
- linux安装IPython四种方法
- SM2算法第二十六篇:openSSL 中BIGNUM的使用记录
- 线性回归算法总结
- 静态存储实现通讯录
- VMware克隆CentOS修改Linux MAC地址加配置集群
- BZOJ4519——[cqoi2016]不同的最小割
- eclipse各个版本号对应的地址
- d3.js学习笔记(1)
- MKL库矩阵乘法
- 七、多个线程间共享数据的应用