From aa341655cd08be7b827e1bd3331d1bb6bb9df29c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 26 Jul 2006 11:10:45 +0000 Subject: Collected changes - see ChangeLogs --- mpi/ChangeLog | 12 +++++++ mpi/Makefile.am | 1 + mpi/config.links | 2 +- mpi/mpicoder.c | 108 +++++++++++++++++++++++++++++-------------------------- mpi/mpiutil.c | 2 +- 5 files changed, 72 insertions(+), 53 deletions(-) (limited to 'mpi') diff --git a/mpi/ChangeLog b/mpi/ChangeLog index 2439e564..c82cc6c6 100644 --- a/mpi/ChangeLog +++ b/mpi/ChangeLog @@ -1,3 +1,15 @@ +2006-07-26 Werner Koch + + * mpiutil.c (gcry_mpi_randomize): Changed P to unsigned char*. + + * mpicoder.c (gcry_mpi_scan): Changed arg BUFFER to void*. + (mpi_read_from_buffer): Made BUFFER arg const. + (gcry_mpi_scan): Removed now needless cast. Add cast for arg to + mpi_fromstr. + (gcry_mpi_print): Made TMP unsigned. + + * Makefile.am (AM_CCASFLAGS): New. + 2005-10-09 Moritz Schulte * mpi-cmp.c (gcry_mpi_cmp_ui): Rewritten; correctly handle case of diff --git a/mpi/Makefile.am b/mpi/Makefile.am index e1098bb8..a1eb810e 100644 --- a/mpi/Makefile.am +++ b/mpi/Makefile.am @@ -23,6 +23,7 @@ INCLUDES = -I$(top_srcdir)/src ASFLAGS = @MPI_SFLAGS@ +AM_CCASFLAGS = $(NOEXECSTACK_FLAGS) # We don't have .S sources listed, so automake does not autocreate these CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) diff --git a/mpi/config.links b/mpi/config.links index a5abb67a..b27157e2 100644 --- a/mpi/config.links +++ b/mpi/config.links @@ -1,4 +1,4 @@ -# config.links - helper for ../configure +# config.links - helper for ../configure -*- mode: sh -*- # Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # # This file is part of Libgcrypt. diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c index d501fe4b..038bf899 100644 --- a/mpi/mpicoder.c +++ b/mpi/mpicoder.c @@ -32,50 +32,54 @@ static gcry_mpi_t -mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure) +mpi_read_from_buffer (const unsigned char *buffer, unsigned *ret_nread, + int secure) { - int i, j; - unsigned int nbits, nbytes, nlimbs, nread=0; - mpi_limb_t a; - gcry_mpi_t val = MPI_NULL; - - if( *ret_nread < 2 ) - goto leave; - nbits = buffer[0] << 8 | buffer[1]; - if( nbits > MAX_EXTERN_MPI_BITS ) { - log_error("mpi too large (%u bits)\n", nbits); - goto leave; + int i, j; + unsigned int nbits, nbytes, nlimbs, nread=0; + mpi_limb_t a; + gcry_mpi_t val = MPI_NULL; + + if ( *ret_nread < 2 ) + goto leave; + nbits = buffer[0] << 8 | buffer[1]; + if ( nbits > MAX_EXTERN_MPI_BITS ) + { + log_error ("mpi too large (%u bits)\n", nbits); + goto leave; } - else if( !nbits ) { - log_error("an mpi of size 0 is not allowed\n"); - goto leave; + else if( !nbits ) + { + log_error ("an mpi of size 0 is not allowed\n"); + goto leave; } - buffer += 2; - nread = 2; - - nbytes = (nbits+7) / 8; - nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; - val = secure? mpi_alloc_secure( nlimbs ) - : mpi_alloc( nlimbs ); - i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; - i %= BYTES_PER_MPI_LIMB; - j= val->nlimbs = nlimbs; - val->sign = 0; - for( ; j > 0; j-- ) { - a = 0; - for(; i < BYTES_PER_MPI_LIMB; i++ ) { - if( ++nread > *ret_nread ) - log_bug("mpi larger than buffer"); - a <<= 8; - a |= *buffer++; + buffer += 2; + nread = 2; + + nbytes = (nbits+7) / 8; + nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; + val = secure? mpi_alloc_secure (nlimbs) : mpi_alloc( nlimbs ); + i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; + i %= BYTES_PER_MPI_LIMB; + j= val->nlimbs = nlimbs; + val->sign = 0; + for ( ; j > 0; j-- ) + { + a = 0; + for (; i < BYTES_PER_MPI_LIMB; i++ ) + { + if ( ++nread > *ret_nread ) + log_bug ("mpi larger than buffer"); + a <<= 8; + a |= *buffer++; } - i = 0; - val->d[j-1] = a; + i = 0; + val->d[j-1] = a; } - - leave: - *ret_nread = nread; - return val; + + leave: + *ret_nread = nread; + return val; } @@ -333,8 +337,9 @@ _gcry_mpi_set_buffer( gcry_mpi_t a, const byte *buffer, unsigned nbytes, int sig bytes actually scanned after a successful operation. */ gcry_error_t gcry_mpi_scan( struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, - const unsigned char *buffer, size_t buflen, size_t *nscanned ) + const void *buffer_arg, size_t buflen, size_t *nscanned ) { + const unsigned char *buffer = (const unsigned char*)buffer_arg; struct gcry_mpi *a = NULL; unsigned int len; int secure = (buffer && gcry_is_secure (buffer)); @@ -384,7 +389,7 @@ gcry_mpi_scan( struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, return gcry_error (GPG_ERR_NO_ERROR); } else if( format == GCRYMPI_FMT_PGP ) { - a = mpi_read_from_buffer( (char*)buffer, &len, secure); + a = mpi_read_from_buffer (buffer, &len, secure); if( nscanned ) *nscanned = len; if( ret_mpi && a ) { @@ -396,7 +401,7 @@ gcry_mpi_scan( struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, return gcry_error (a ? GPG_ERR_NO_ERROR : GPG_ERR_INV_OBJ); } else if( format == GCRYMPI_FMT_SSH ) { - const byte *s = buffer; + const unsigned char *s = buffer; size_t n; if( len && len < 4 ) @@ -437,7 +442,7 @@ gcry_mpi_scan( struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, return gcry_error (GPG_ERR_INV_ARG); /* can only handle C strings for now */ a = secure? mpi_alloc_secure (0) : mpi_alloc(0); - if( mpi_fromstr( a, buffer ) ) + if( mpi_fromstr ( a, (const char *)buffer ) ) return gcry_error (GPG_ERR_INV_OBJ); if( ret_mpi ) { mpi_normalize ( a ); @@ -472,7 +477,7 @@ gcry_mpi_print( enum gcry_mpi_format format, len = buflen; *nwritten = 0; if( format == GCRYMPI_FMT_STD ) { - char *tmp; + unsigned char *tmp; int extra = 0; unsigned int n; @@ -486,11 +491,12 @@ gcry_mpi_print( enum gcry_mpi_format format, } if (buffer && n > len) { - gcry_free(tmp); - return gcry_error (GPG_ERR_TOO_SHORT); /* the provided buffer is too short */ + /* The provided buffer is too short. */ + gcry_free (tmp); + return gcry_error (GPG_ERR_TOO_SHORT); } if( buffer ) { - byte *s = buffer; + unsigned char *s = buffer; if( extra ) *s++ = 0; @@ -509,7 +515,7 @@ gcry_mpi_print( enum gcry_mpi_format format, if (buffer && n > len) return gcry_error (GPG_ERR_TOO_SHORT); /* the provided buffer is too short */ if( buffer ) { - char *tmp; + unsigned char *tmp; tmp = _gcry_mpi_get_buffer( a, &n, NULL ); memcpy( buffer, tmp, n ); gcry_free(tmp); @@ -526,8 +532,8 @@ gcry_mpi_print( enum gcry_mpi_format format, if (buffer && n+2 > len) return gcry_error (GPG_ERR_TOO_SHORT); /* the provided buffer is too short */ if( buffer ) { - char *tmp; - byte *s = buffer; + unsigned char *tmp; + unsigned char *s = buffer; s[0] = nbits >> 8; s[1] = nbits; @@ -539,7 +545,7 @@ gcry_mpi_print( enum gcry_mpi_format format, return gcry_error (GPG_ERR_NO_ERROR); } else if( format == GCRYMPI_FMT_SSH ) { - char *tmp; + unsigned char *tmp; int extra = 0; unsigned int n; diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c index f50268f3..f6f9a8b2 100644 --- a/mpi/mpiutil.c +++ b/mpi/mpiutil.c @@ -405,7 +405,7 @@ void gcry_mpi_randomize( gcry_mpi_t w, unsigned int nbits, enum gcry_random_level level ) { - char *p; + unsigned char *p; size_t nbytes = (nbits+7)/8; if (level == GCRY_WEAK_RANDOM) -- cgit v1.2.1