[PATCH] g10: Fix ECDH secret compressed/uncompressed format

NIIBE Yutaka gniibe at fsij.org
Wed Oct 26 10:42:47 CEST 2016

On 10/26/2016 05:00 PM, Arnaud Fontaine wrote:
> Actually, the result my applet is returning is padded with zeros, but after it is
> received it is stored in the shared_mpi and then copied to secret_x using
> gcry_mpi_print
> (g10/ecdh.c line 125), so the leading zeros have disappeared.
> Adding a prefix could solve this problem, and it would not be a problem to
> impement it,
> but I agree with you that it should be addressed in the OpenPGP card
> specification so that
> every one will follow the same rule.

Thank you for your explanation.  I understand the situation.

So, how about the following?

* In the OpenPGP card specification

The result from card should be one of:

  (1) Standard one, that is:  04 || X || Y

  (2) Fixed length native x-coordinate only
      In case of classic ECC, native means big-endian MPI.
      For X25519, native means little endian.

* Modification in scdaemon

In case of (2) for classic ECC, just like the case of X25519, scdaemon
adds the prefix of 0x41 to the result by card/token.  GnuPG frontend
receives the bytes with the prefix, it is always fixed length.

* Modification in gpg

Add the support of the prefix 0x41 handling.

More information about the Gnupg-devel mailing list