On 2013-02-27 00:04, Bjorn Kuiper wrote:
Hi,
I'm trying to develop a C# implementation of the Off-the-record
library, but I'm having some problems with the libgcrypt library.
Can somebody explain to me how you can print out the actual integer
value of an hex'd MPI ?
Basically i want to know the integer value of this 'private' key
48BFDA215C31A9F0B226B3DB11F862450A0F30DA
That *is* the integer value. It's in base 16 though.
I think it is
415325779662433871844955547383752003988573073626
In base 10, yes.
but I'm unable to find a way to confirm this using libgcrypt
I tried the following code:
-- code snippit 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); -- end of code snippit
which results in:
-- output The number tested is:
415325779662433871844955547383752003988573073626 trying to convert to
HEX result: 415325779662433871844955547383752003988573073626 -- end
of output
That's because your buffer is too small and the second gcry_mpi_print
fails (which you never realize because you don't check the return code).
The buffer remains unmodified.
If you initialized your buffer with:
char buffer[101] = {0};
you get this output:
The number tested is: 415325779662433871844955547383752003988573073626
trying to convert to HEX
result:
3431353332353737393636323433333837313834343935353534373338333735323030333938383537333037333632360000
0x34 => ascii 4
0x31 => ascii 1
0x35 => ascii 5
... you get the idea
Conclusion:
GRYMPI_FMT_USG does not print the integer in a string representation but
instead uses the bytes to store a variable length unsigned integer.
GCRYMPI_FMT_HEX does indeed print the integer in a string
representation, but in hexadecimal instead of decimal.
libgcrypt does not seem to offer decimal string output.
--
Kjell
_______________________________________________
OTR-dev mailing list
OTR-dev@lists.cypherpunks.ca
http://lists.cypherpunks.ca/mailman/listinfo/otr-dev