Function name cleanups

Also nuked some trailing spaces.
This commit is contained in:
Werner Koch 2011-01-26 17:17:43 +01:00
parent d879c287ac
commit 358afc0dc8
7 changed files with 142 additions and 141 deletions

View File

@ -1,3 +1,15 @@
2011-01-26 Werner Koch <wk@g10code.com>
* misc.c (ecdsa_qbits_from_Q): Use unsigned int.
* misc.c (iobuf_read_size_body): Move and rename to ..
* parse-packet.c (read_size_body): .. here. Make static.
* misc.c (iobuf_write_size_body_mpi): Move and rename to ..
* build-packet.c (write_size_body_mpi): .. here.
(iobuf_name_oid_write, ecdh_kek_params_write, ecdh_esk_write):
Remove macros. Replace users by direct calls to
write_size_body_mpi.
2011-01-25 Werner Koch <wk@g10code.com>
* ecdh.c (pk_ecdh_default_params_to_mpi): Remove.

View File

@ -178,17 +178,44 @@ mpi_write (iobuf_t out, gcry_mpi_t a)
return rc;
}
/* Write the name OID, encoded as an mpi, to OUT. The format of the
* content of the MPI is one byte LEN, following by LEN bytes that are
* DER representation of an ASN.1 OID. This is true for each of the 3
* following functions. */
#define iobuf_name_oid_write iobuf_write_size_body_mpi
/* Write the value of KEK fields for ECDH. */
#define ecdh_kek_params_write iobuf_write_size_body_mpi
/*
* Write a special size+body mpi A, to OUT. The format of the content
* of the MPI is one byte LEN, following by LEN bytes.
*/
gpg_error_t
write_size_body_mpi (iobuf_t out, gcry_mpi_t a)
{
gpg_error_t err;
byte buffer[256]; /* Fixed buffer for a public parameter, max possible */
size_t nbytes = (mpi_get_nbits (a)+7)/8;
/* Write the value of encrypted filed for ECDH. */
#define ecdh_esk_write iobuf_write_size_body_mpi
if (nbytes > sizeof(buffer))
{
log_error("mpi with size+body is too large (%u bytes)\n", nbytes);
return gpg_error (GPG_ERR_TOO_LARGE);
}
err = gcry_mpi_print (GCRYMPI_FMT_USG, buffer, sizeof(buffer), &nbytes, a);
if (err)
{
log_error ("failed to exported size+body mpi\n");
return err;
}
if (nbytes < 2 || buffer[0] != nbytes-1)
{
if (nbytes > 2)
log_error ("internal size mismatch in mpi size+body: "
"%02x != %02x (other bytes: %02x %02x ... %02x %02x)\n",
buffer[0], nbytes-1, buffer[1], buffer[2], buffer[nbytes-2],
buffer[nbytes-1]);
else
log_error ("internal size mismatch in mpi size+body: "
"only %d bytes\n", nbytes);
return gpg_error (GPG_ERR_INV_DATA);
}
return iobuf_write (out, buffer, nbytes);
}
/* Calculate the length of a packet described by PKT. */
@ -305,7 +332,7 @@ do_key (iobuf_t out, int ctb, PKT_public_key *pk)
|| pk->pubkey_algo == PUBKEY_ALGO_ECDH)
{
/* Write DER of OID with preceeding length byte. */
err = iobuf_name_oid_write (a, pk->pkey[0]);
err = write_size_body_mpi (a, pk->pkey[0]);
if (err)
goto leave;
/* Write point Q, the public key. */
@ -316,7 +343,7 @@ do_key (iobuf_t out, int ctb, PKT_public_key *pk)
/* Write one more public field for ECDH. */
if (pk->pubkey_algo == PUBKEY_ALGO_ECDH)
{
err = ecdh_kek_params_write(a,pk->pkey[2]);
err = write_size_body_mpi (a, pk->pkey[2]);
if (err)
goto leave;
}
@ -500,7 +527,7 @@ do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc )
assert (n == 2);
rc = mpi_write (a, enc->data[0]);
if (!rc)
rc = ecdh_esk_write (a, enc->data[1]);
rc = write_size_body_mpi (a, enc->data[1]);
}
else
{

View File

@ -161,7 +161,7 @@ pk_ecdh_encrypt_with_shared_point (int is_encrypt, gcry_mpi_t shared_mpi,
*/
{
IOBUF obuf = iobuf_temp();
err = iobuf_write_size_body_mpi ( obuf, pkey[2] ); /* KEK params */
err = write_size_body_mpi (obuf, pkey[2]); /* KEK params */
kdf_params_size = iobuf_temp_to_buffer (obuf,
kdf_params, sizeof(kdf_params));
@ -198,11 +198,11 @@ pk_ecdh_encrypt_with_shared_point (int is_encrypt, gcry_mpi_t shared_mpi,
obuf = iobuf_temp();
/* variable-length field 1, curve name OID */
err = iobuf_write_size_body_mpi ( obuf, pkey[0] );
err = write_size_body_mpi (obuf, pkey[0]);
/* fixed-length field 2 */
iobuf_put (obuf, PUBKEY_ALGO_ECDH);
/* variable-length field 3, KDF params */
err = (err ? err : iobuf_write_size_body_mpi ( obuf, pkey[2] ));
err = (err ? err : write_size_body_mpi ( obuf, pkey[2] ));
/* fixed-length field 4 */
iobuf_write (obuf, "Anonymous Sender ", 20);
/* fixed-length field 5, recipient fp */

View File

@ -161,11 +161,7 @@ int pubkey_get_nsig( int algo );
int pubkey_get_nenc( int algo );
unsigned int pubkey_nbits( int algo, gcry_mpi_t *pkey );
int mpi_print (estream_t stream, gcry_mpi_t a, int mode);
int iobuf_write_size_body_mpi (iobuf_t out, gcry_mpi_t a);
int iobuf_read_size_body (iobuf_t inp, byte *body, int body_max_size,
int pktlen, gcry_mpi_t *out);
int ecdsa_qbits_from_Q( int qbits );
unsigned int ecdsa_qbits_from_Q (unsigned int qbits);
/*-- status.c --*/
void set_status_fd ( int fd );

View File

@ -1459,7 +1459,6 @@ pubkey_nbits( int algo, gcry_mpi_t *key )
/* FIXME: Use gcry_mpi_print directly. */
int
mpi_print (estream_t fp, gcry_mpi_t a, int mode)
{
@ -1487,98 +1486,15 @@ mpi_print (estream_t fp, gcry_mpi_t a, int mode)
}
/*
* Write a special size+body mpi A, to OUT. The format of the content
* of the MPI is one byte LEN, following by LEN bytes.
*/
/* FIXME: Rename this function: it is not in iobuf.c */
int
iobuf_write_size_body_mpi (iobuf_t out, gcry_mpi_t a)
{
byte buffer[256]; /* Fixed buffer for a public parameter, max possible */
size_t nbytes = (mpi_get_nbits (a)+7)/8;
int rc;
if( nbytes > sizeof(buffer) ) {
log_error("mpi with size+body is too large (%u bytes)\n", nbytes);
return gpg_error (GPG_ERR_TOO_LARGE);
}
rc = gcry_mpi_print (GCRYMPI_FMT_USG, buffer, sizeof(buffer), &nbytes, a);
if( rc ) {
log_error("Failed to exported size+body mpi\n");
return rc;
}
if( nbytes < 2 || buffer[0] != nbytes-1 ) {
if( nbytes > 2 )
log_error("Internal size mismatch in mpi size+body: %02x != %02x (other bytes: %02x %02x ... %02x %02x)\n",
buffer[0], nbytes-1, buffer[1], buffer[2], buffer[nbytes-2], buffer[nbytes-1]);
else
log_error("Internal size mismatch in mpi size+body: only %d bytes\n", nbytes );
return gpg_error (GPG_ERR_INV_DATA);
}
return iobuf_write( out, buffer, nbytes );
}
/*
* Read a special size+body from inp into body[body_max_size] and
* return it in a buffer and as MPI. On success the number of
* consumed bytes will body[0]+1. The format of the content of the
* returned MPI is one byte LEN, following by LEN bytes. Caller is
* expected to pre-allocate fixed-size 255 byte buffer (or smaller
* when appropriate).
*/
/* FIXME: Rename this function: it is not in iobuf.c */
int
iobuf_read_size_body (iobuf_t inp, byte *body, int body_max_size,
int pktlen, gcry_mpi_t *out )
{
unsigned n;
int rc;
gcry_mpi_t result;
*out = NULL;
if( (n = iobuf_readbyte(inp)) == -1 )
{
return G10ERR_INVALID_PACKET;
}
if ( n >= body_max_size || n < 2)
{
log_error("invalid size+body field\n");
return G10ERR_INVALID_PACKET;
}
body[0] = n;
if ((n = iobuf_read(inp, body+1, n)) == -1)
{
log_error("invalid size+body field\n");
return G10ERR_INVALID_PACKET;
}
if (n+1 > pktlen)
{
log_error("size+body field is larger than the packet\n");
return G10ERR_INVALID_PACKET;
}
rc = gcry_mpi_scan (&result, GCRYMPI_FMT_USG, body, n+1, NULL);
if (rc)
log_fatal ("mpi_scan failed: %s\n", gpg_strerror (rc));
*out = result;
return rc;
}
/* pkey[1] or skey[1] is Q for ECDSA, which is an uncompressed point,
i.e. 04 <x> <y> */
int
ecdsa_qbits_from_Q (int qbits )
unsigned int
ecdsa_qbits_from_Q (unsigned int qbits)
{
if ((qbits%8) > 3)
{
log_error(_("ECDSA public key is expected to be in SEC encoding "
"multiple of 8 bits\n"));
log_error (_("ECDSA public key is expected to be in SEC encoding "
"multiple of 8 bits\n"));
return 0;
}
qbits -= qbits%8;

View File

@ -444,6 +444,7 @@ PACKET *create_gpg_control ( ctrlpkttype_t type,
/*-- build-packet.c --*/
int build_packet( iobuf_t inp, PACKET *pkt );
gpg_error_t write_size_body_mpi (iobuf_t out, gcry_mpi_t a);
u32 calc_packet_length( PACKET *pkt );
void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type,
const byte *buffer, size_t buflen );

View File

@ -741,6 +741,55 @@ read_rest (IOBUF inp, size_t pktlen, int partial)
}
/*
* Read a special size+body from inp into body[body_max_size] and
* return it in a buffer and as MPI. On success the number of
* consumed bytes will body[0]+1. The format of the content of the
* returned MPI is one byte LEN, following by LEN bytes. Caller is
* expected to pre-allocate fixed-size 255 byte buffer (or smaller
* when appropriate).
*/
static int
read_size_body (iobuf_t inp, byte *body, int body_max_size,
int pktlen, gcry_mpi_t *out )
{
unsigned int n;
int rc;
gcry_mpi_t result;
*out = NULL;
if( (n = iobuf_readbyte(inp)) == -1 )
{
return G10ERR_INVALID_PACKET;
}
if ( n >= body_max_size || n < 2)
{
log_error("invalid size+body field\n");
return G10ERR_INVALID_PACKET;
}
body[0] = n;
if ((n = iobuf_read(inp, body+1, n)) == -1)
{
log_error("invalid size+body field\n");
return G10ERR_INVALID_PACKET;
}
if (n+1 > pktlen)
{
log_error("size+body field is larger than the packet\n");
return G10ERR_INVALID_PACKET;
}
rc = gcry_mpi_scan (&result, GCRYMPI_FMT_USG, body, n+1, NULL);
if (rc)
log_fatal ("mpi_scan failed: %s\n", gpg_strerror (rc));
*out = result;
return rc;
}
/* Parse a marker packet. */
static int
parse_marker (IOBUF inp, int pkttype, unsigned long pktlen)
{
@ -947,8 +996,8 @@ parse_pubkeyenc (IOBUF inp, int pkttype, unsigned long pktlen,
n = pktlen;
k->data[0] = mpi_read (inp, &n, 0);
pktlen -= n;
rc = iobuf_read_size_body (inp, encr_buf, sizeof(encr_buf),
pktlen, k->data+1);
rc = read_size_body (inp, encr_buf, sizeof(encr_buf),
pktlen, k->data+1);
if (rc)
goto leave;
@ -1958,8 +2007,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen,
/* FIXME: The code in this function ignores the errors. */
byte name_oid[256];
err = iobuf_read_size_body (inp, name_oid, sizeof(name_oid),
pktlen, pk->pkey+0);
err = read_size_body (inp, name_oid, sizeof(name_oid),
pktlen, pk->pkey+0);
if (err)
goto leave;
n = name_oid[0];
@ -1984,8 +2033,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen,
if (algorithm == PUBKEY_ALGO_ECDH)
{
/* (NAMEOID holds the KEK params.) */
err = iobuf_read_size_body (inp, name_oid, sizeof(name_oid),
pktlen, pk->pkey+2);
err = read_size_body (inp, name_oid, sizeof(name_oid),
pktlen, pk->pkey+2);
if (err)
goto leave;
n = name_oid[0];