我正在尝试确认/获取十六进制 mpi 值的无符号整数(基数 10/十进制)值。我正在使用以下代码:
#include <gcrypt.h>
#include <stdio.h>
static gcry_mpi_t privkey = NULL;
int main(){
char *parmstr = "48BFDA215C31A9F0B226B3DB11F862450A0F30DA";
printf("starting program\n");
gcry_mpi_scan(&privkey, GCRYMPI_FMT_HEX, (char *)parmstr, 0, NULL);
printf("printing hashed (?) mpi\n");
gcry_mpi_dump(privkey);
printf("\n");
size_t gablen;
unsigned char *result;
/* get length */
gcry_mpi_print (GCRYMPI_FMT_USG, NULL, 0, &gablen, privkey);
result = gcry_malloc_secure(gablen);
/* get actual value */
gcry_mpi_print (GCRYMPI_FMT_USG, result, gablen, NULL, privkey);
/* print actual value */
printf("result: %s\n", result);
printf("finished\n");
}
我得到以下结果:
$ ./foo
starting program
printing hashed (?) mpi
48BFDA215C31A9F0B226B3DB11F862450A0F30DA
result: H¿Ú!\1©ð²&³ÛøbE
0Ú
finished
我会在“结果:”行打印实际的无符号整数(以 10 为基数/十进制)值。
私钥取自我正在尝试使用的 Off-The-Record Pidgin 插件。
编辑:
任何人都可以确认实际的无符号整数(基数 10/十进制)值应该是
415325779662433871844955547383752003988573073626
我可能会更新程序以使用此值在 gcrypt 中创建一个新的 mpi,并查看 HEX 值是否与我已有的相同。我今天晚些时候会这样做。
编辑 2:
所以我正在尝试执行以下操作来打印上述 int 值的 HEX 值。出了点问题:
gcry_mpi_t cript_prime;
char buffer[50] = {0};
char number[50] = {0};
cript_prime = gcry_mpi_new(50);
strcpy(number,"415325779662433871844955547383752003988573073626");
gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL);
gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime);
printf("The number tested is: %s\n",buffer);
printf("trying to convert to HEX\n");
/* get actual value */
gcry_mpi_print (GCRYMPI_FMT_HEX, buffer, sizeof(buffer), NULL, cript_prime);
/* print actual value */
printf("result: %s\n", buffer);
输出是:
result: 48BFDA215C31A9F0B226B3DB11F862450A0F30DA
The number tested is: 415325779662433871844955547383752003988573073626
trying to convert to HEX
result: 415325779662433871844955547383752003988573073626
编辑 3:
我稍微更新了帖子,基本上我正在尝试打印由 gcrypt 库生成的十六进制值的 base10 十进制值。我正在寻找这个值来确认我为读取这些值所做的实现。我正在寻找一个 gcrypt 函数来实现这一点。似乎 gcrypt 不支持这个?