【Applied Algebra】c++大整数计算GMP库的安装和使用(Ubuntu/Mint)

本文介绍了如何在Ubuntu或Mint上安装和使用GMP库进行大整数计算,包括编译、运行示例程序以及演示了使用C++和汇编实现的抗侧信道攻击的椭圆曲线计算。通过示例展示了GMP库在高精度计算中的应用,如大数乘法和椭圆曲线运算。

c++大整数计算GMP库的安装和使用(Ubuntu/Mint)


GMP库(详情见在线文档)一个免费的任意精度的大数算术库,可对有符号整数、有理数和浮点数进行计算操作;除了GMP运行的计算平台中可用内存所指定的限制外,精度没有实际限制.GMP有一套丰富的功能,主要目标应用是密码学应用和研究、互联网安全应用、代数系统、计算代数研究等.


安装

注意加上"–enable-cxx"以使得c++可以调用(这样才会生成"libgmpxx.so");

[hanss@Mint]$ ./configure --enable-cxx
[hanss@Mint]$ make
[hanss@Mint]$ make check
[hanss@Mint]$ make install

编译使用

编写计算大数乘法的程序:

#include <iostream>
#include <gmpxx.h>
#include <time.h>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
   
   
    clock_t time = clock();
    gmp_randstate_t grt;
    gmp_randinit_default(grt);
    gmp_randseed_ui(grt, time);
    mpz_class p256(0);
    p256 = "115792089210356248762697446949407573530086143415290314195533631308867097853951";

    gmp_randclass r(gmp_randinit_default);
    mpz_class a256, b256, c256, d256;
    a256 = r.get_z_range(p256); b256 = r.get_z_range(p256); c256 = r.get_z_range(p256); d256 = r.get_z_range(p256);

    mpz_class a256_1, b256_1, c256_1, d256_1, e256_1, exp256_f, exp256_fs, exp256_leg, exp256_i;
    exp256_f = (3 * p256 - 5) / 4; exp256_fs = (p256 + 1) / 4; exp256_leg = (p256 - 1) / 2; exp256_i = p256 - 2;
    a256_1 = a256 * c256 % p256; b256_1 = b256 * d256 % p256; c256_1 = a256 * a256_1 % p256; d256_1 = b256 * b256_1 % p256; e256_1 = c256_1 + d256_1;
    mpz_t inv_1;
    mpz_init(inv_1);
    mpz_invert(inv_1, e256_1.get_mpz_t(), p256.get_mpz_t());
    mpz_class inv_2(inv_1);
    e256_1 = c256_1 * d256_1 % p256;
    e256_1 = e256_1 * inv_2 % p256;

    cout<< "exp256_f = " <<exp256_f<<" ;"<<endl;
    cout<< "exp256_fs = " <<exp256_fs<<" ;"<<endl;
    cout<< "exp256_leg = " <<exp256_leg<<" ;"<<endl;
    cout<< "exp256_i = " <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值