c - LibCrypt BN_div 上的 `ctx` 参数有什么用?
问题描述
在我尝试使用纯 CI 实现Burmester-Desmedt密钥协议时,需要划分 2 个公钥,因此我认为BN_div应该可以完成这项工作。但是当我阅读文档时:
将 a 除以 d 并将结果放入 dv 并将余数放入 rem (dv=a/d, rem=a%d)。dv 和 rem 中的任何一个都可能为 NULL,在这种情况下不返回各自的值。结果向零舍入;因此,如果 a 为负数,则余数将为零或负数。要除以 2 的幂,请使用 BN_rshift(3)。
我无法理解参数ctx
的用途,到目前为止,我理解的 wjat 是:
rem=a%d
dv=a/d
在ctx
此操作中,用于某种递归的参数应设置为NULL
?
解决方案
对于所有函数,ctx 是先前分配的用于临时变量的 BN_CTX;见 BN_CTX_new。
所以你必须做
BN_CTX *ctx = BN_CTX_new();
BIGNUM dv;
BIGNUM rem;
BIGNUM a = ...;
BIGNUM d = ...;
if (!BN_div(&dv, &rem, &a, &d, ctx))
...error case
else
...ok case
如果您有其他BN_xx
电话可以重复使用相同的ctx,这就是目标
推荐阅读
- xamarin - 当我从 xamarin 中的同步领域数据库中删除项目时出现空引用异常
- java - 将 C++ 向量传递给文件编写器
- python-3.x - 如何在 Bokeh 中按 z 列的分类数据制作散点图?像 matplotlib 'rainbow' 颜色图
- android - 我需要让 ImageView 消失。我怎么能做到?这是我需要做的最后一个
- python - 如何在取消停靠后调整几何图形后触发 QTreeView 的更新
- java - 给定一个HashMap,如何根据Java中的重复值对其进行过滤
- php - 1PL MLE计算机自适应测试模型回答问题后如何计算新的能力估计?
- sqlite - 如何根据 mod 条件按结果排序?
- spss - 你什么时候控制初步判断与拿第一次和第二次判断之间的差异?
- javascript - 使用 TypeScript Enum 和 PropTypes 来定义 React 组件道具