16進数のmpi値のunsignedint(基数10 / 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
'result:'行を使用して、実際のunsigned int(基数10 / 10進数)値を出力します。
秘密鍵は、私が使用しようとしているOff-The-RecordPidginプラグインから取得しています。
編集:
実際のunsignedint(基数10 / 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ライブラリによって生成された16進値の10進数のbase10値を出力しようとしています。これらの値を読み取るために作成した実装を確認するために、この値を探しています。これを実現するためのgcrypt関数を探していました。gcryptはこれをサポートしていないようですか?