montgomery
#include "bn.h"
int main(int argc, char *argv[])
{
BN_CTX *ctx = BN_CTX_new();
//BN_CTX_start(ctx);
auto a= BN_CTX_get(ctx);
a->neg = -1;
BN_set_word(a, 0xff7655f);
//a->neg = -1;
auto b= BN_CTX_get(ctx);
BN_set_word(b, 0xff45fff3);
auto c= BN_CTX_get(ctx);
auto e= BN_CTX_get(ctx);
auto cm= BN_CTX_get(ctx);
auto m= BN_CTX_get(ctx);
BN_set_word(m, 0xfffffff3);
int r;
//r = BN_add(a,a, b);
// r = BN_div(c, m, a, b, ctx);
#if 01
//for(int i=0; i<0x7fff; ++i)
{
//r = BN_mod_mul(e, a, b, m, ctx);
r = BN_mod_exp(e, a, b, m, ctx);
}
#endif
BN_MONT_CTX *mont_ctx = BN_MONT_CTX_new();
BN_MONT_CTX_init(mont_ctx);
r =BN_MONT_CTX_set(mont_ctx, m, ctx);
auto am= BN_CTX_get(ctx);
BN_to_montgomery(am, a,mont_ctx, ctx);
auto bm= BN_CTX_get(ctx);
BN_to_montgomery(bm, b,mont_ctx, ctx);
#if 01
//for(int i=0; i<0x7fff; ++i)
{
// r = BN_mod_mul_montgomery(cm, am, bm, mont_ctx, ctx);
// r = BN_from_montgomery(c, cm, mont_ctx, ctx);
//r = BN_mod_exp_mont(cm, am, bm, m, ctx, mont_ctx);
//r = BN_from_montgomery(c, cm, mont_ctx, ctx);
r = BN_mod_exp_mont(c, a, b, m, ctx, mont_ctx);
}
#endif
//r = BN_mod_exp(c,a,b,m,ctx);
//r = BN_mod_exp_mont(c,a,b,m,ctx, mont_ctx);
BN_MONT_CTX_free(mont_ctx);
BN_cmp(a,b);
BN_CTX_free(ctx);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理