extracting mpi from a S-exp crypted with RSA

Moritz Schulte mo at g10code.com
Wed Apr 20 16:22:41 CEST 2005

On Tue, Apr 19, 2005 at 07:00:14PM +0000, flebool wrote:


>  the crypted S-exp CRYPTED is represented as:
>           (enc-val
>             (rsa
>               (a A-MPI)))


> Calling the function:
> int legth=gcrypt_sexp_length(CRYPTED);
> I get length=2.

Correct, you have two objects in that S-Expression:

 1. "enc-val"
 2. (rsa (a A-MPI))

> i want to get the mpi (a A-MPI),(that i've understood to be the crypted text 
> in MPI format) but the function
> gcry_mpi_t internal_mpi = gcry_sexp_nth_mpi(CRYPTED,1,GCRYMPI_FMT_USG);
> fails.

You need to distringuish between the S-Expression containing the MPI
and it's label `(a A-MPI)' and the actual MPI value, which is `A-MPI'.

So, before you can use gcry_sexp_nth_mpi(), you need to extract the
sub-S-Expression, i.e.:

a = (enc-val (rsa (a A-MPI)));
b = sexp_nth (a, 1); // extract `(rsa (a A-MPI))'
mpi = sexp_mpi (b, 1; // extract `A-MPI'.

Alternatively, you can also use gcry_sexp_find_token().

> for completeness,i post the output of a 
> writt= gcry_sexp_sprint ( CRYPTED , GCRYSEXP_FMT_DEFAULT , buf_test2 ,(size_t) 
> 500);

By the way: GCRYSEXP_FMT_ADVANCED is much more appropriate for output
intended to be human-readable.


Moritz Schulte
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 193 bytes
Desc: not available
Url : /pipermail/attachments/20050420/b1ab0212/attachment-0001.pgp

More information about the Gcrypt-devel mailing list