Data type conversions
Sergi Blanch i Torné
sergi at calcurco.cat
Fri Jan 8 20:58:36 CET 2010
I see that, and I can use gcry_mpi_scan() for the other way transformation.
thanks.
/Sergi.
On Fri, Jan 8, 2010 at 2:12 PM, Werner Koch <wk at gnupg.org> wrote:
> On Fri, 8 Jan 2010 11:52:46 +0100, Sergi Blanch i Torné wrote:
>> means, from the point of view of the data, that I have to transform
>> 'gcry_mpi_t' data form/to 'byte*'. In the libgcrypt documentation I
>> didn't find a method for this conversion.
>
> That is easy: Use gcry_mpi_print with a suitable format specifier.
> Have a look at this code in gnupg/g10/build-packet.c:
>
> /*
> * Write the mpi A to OUT.
> */
> static int
> mpi_write (iobuf_t out, gcry_mpi_t a)
> {
> char buffer[(MAX_EXTERN_MPI_BITS+7)/8+2]; /* 2 is for the mpi length. */
> size_t nbytes;
> int rc;
>
> nbytes = DIM(buffer);
> rc = gcry_mpi_print (GCRYMPI_FMT_PGP, buffer, nbytes, &nbytes, a );
> if( !rc )
> rc = iobuf_write( out, buffer, nbytes );
> else if (gpg_err_code(rc) == GPG_ERR_TOO_SHORT )
> {
> log_info ("mpi too large (%u bits)\n", gcry_mpi_get_nbits (a));
> /* The buffer was too small. We better tell the user about the MPI. */
> rc = gpg_error (GPG_ERR_TOO_LARGE);
> }
>
> return rc;
> }
>
> If you don't want to put an upper limit on the size of the MPI or you
> want to store int in secure memory you need to allocate the buffer.
> gcry_mpi_aprint does this for you and automagically decides whether to
> allocate from the standard or the secure memory pool. See the gcrypt
> manual.
>
>
> Salam-Shalom,
>
> Werner
>
> --
> Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz.
>
>
More information about the Gcrypt-devel
mailing list