1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

agent: Fix registering SSH Key of Ed25519.

* agent/command-ssh.c (stream_read_string): Add the prefix of 0x40.

--

GnuPG-bug-id: 2096
This commit is contained in:
NIIBE Yutaka 2015-09-16 10:37:38 +09:00
parent faee25e670
commit 7d5999f096

View File

@ -580,8 +580,9 @@ stream_read_string (estream_t stream, unsigned int secure,
/* Read a binary string from STREAM and store it as an opaque MPI at /* Read a binary string from STREAM and store it as an opaque MPI at
R_MPI. Depending on SECURE use secure memory. If the string is R_MPI, adding 0x40 (this is the prefix for EdDSA key in OpenPGP).
too large for key material return an error. */ Depending on SECURE use secure memory. If the string is too large
for key material return an error. */
static gpg_error_t static gpg_error_t
stream_read_blob (estream_t stream, unsigned int secure, gcry_mpi_t *r_mpi) stream_read_blob (estream_t stream, unsigned int secure, gcry_mpi_t *r_mpi)
{ {
@ -607,9 +608,9 @@ stream_read_blob (estream_t stream, unsigned int secure, gcry_mpi_t *r_mpi)
/* Allocate space. */ /* Allocate space. */
if (secure) if (secure)
buffer = xtrymalloc_secure (length? length:1); buffer = xtrymalloc_secure (length+1);
else else
buffer = xtrymalloc (length?length:1); buffer = xtrymalloc (length+1);
if (!buffer) if (!buffer)
{ {
err = gpg_error_from_syserror (); err = gpg_error_from_syserror ();
@ -617,11 +618,12 @@ stream_read_blob (estream_t stream, unsigned int secure, gcry_mpi_t *r_mpi)
} }
/* Read data. */ /* Read data. */
err = stream_read_data (stream, buffer, length); err = stream_read_data (stream, buffer + 1, length);
if (err) if (err)
goto leave; goto leave;
*r_mpi = gcry_mpi_set_opaque (NULL, buffer, 8*length); buffer[0] = 0x40;
*r_mpi = gcry_mpi_set_opaque (NULL, buffer, 8*(length+1));
buffer = NULL; buffer = NULL;
leave: leave: