将RFC5114中定义的 1024 位 P 和 G 值加载到 boost uint1024 中

Load 1024bit P and G value defined in the RFC5114 into boost uint1024

本文关键字:加载 boost uint1024 定义 RFC5114 1024      更新时间:2023-10-16

我正在尝试实现一个diffie-hellman密钥交换系统。对于我的 P 和 G 值,我计划使用 RFC5114 2.1 中定义的值。所以我有以下代码:

#Code

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using namespace std;

int main(){
uint1024_t P;
P = 0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371;
cout << "P is: " << P << endl;
cout << "Maximum value for uint1024_t is:" <<std::numeric_limits<uint1024_t>::max() << endl;

return 0;
}

#Output

P is: 16077765716036174705
Maximum value for uint1024_t is:179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215
// that value is equal to 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
// which is larger than the value that i try to assign to P

#Warning 警告:整数常量对于其类型来说太大

所以。。。 ###What 我在这里做错了吗?我该如何解决这个问题?

您可以从字符串构造整数:

uint1024_t P = "0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371";

但是,这将在运行时构造文本。如果要在编译时构造它,可以使用 boost::multiprecision 提供的用户定义文本:

constexpr auto P = 0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371_cppui1024;

C++ 中的整数文本的类型最多是(unsigned) long long int(如果实现支持,则为更大的类型(。在您的情况下,文本太大,因此将缩小到该类型。

请参阅boost::multiprecision文档第 1 部分和第 2 部分。