mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
intermediate check in
This commit is contained in:
parent
6fbee8ab86
commit
9b609091ab
38 changed files with 812 additions and 180 deletions
|
@ -1,3 +1,12 @@
|
|||
Wed Aug 5 15:11:12 1998 Werner Koch (wk@(none))
|
||||
|
||||
* mpicoder.c (mpi_read_from_buffer): New.
|
||||
|
||||
* mpiutil.c (mpi_set_opaque): New.
|
||||
(mpi_get_opaque): New.
|
||||
(mpi_copy): Changed to support opauqe flag
|
||||
(mpi_free): Ditto.
|
||||
|
||||
Sat Jul 4 10:11:11 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* mpiutil.c (mpi_clear): Reset flags.
|
||||
|
|
|
@ -123,6 +123,50 @@ mpi_read(IOBUF inp, unsigned *ret_nread, int secure)
|
|||
}
|
||||
|
||||
|
||||
MPI
|
||||
mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure)
|
||||
{
|
||||
int i, j;
|
||||
unsigned nbits, nbytes, nlimbs, nread=0;
|
||||
mpi_limb_t a;
|
||||
MPI 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;
|
||||
}
|
||||
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;
|
||||
val->nbits = nbits;
|
||||
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;
|
||||
}
|
||||
|
||||
leave:
|
||||
*ret_nread = nread;
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Make an mpi from a character string.
|
||||
|
|
|
@ -193,12 +193,16 @@ mpi_free( MPI a )
|
|||
return;
|
||||
if( DBG_MEMORY )
|
||||
log_debug("mpi_free\n" );
|
||||
#ifdef M_DEBUG
|
||||
mpi_debug_free_limb_space(a->d, info);
|
||||
#else
|
||||
mpi_free_limb_space(a->d);
|
||||
#endif
|
||||
if( a->flags & ~3 )
|
||||
if( a->flags & 4 )
|
||||
m_free( a->d );
|
||||
else {
|
||||
#ifdef M_DEBUG
|
||||
mpi_debug_free_limb_space(a->d, info);
|
||||
#else
|
||||
mpi_free_limb_space(a->d);
|
||||
#endif
|
||||
}
|
||||
if( a->flags & ~7 )
|
||||
log_bug("invalid flag value in mpi\n");
|
||||
m_free(a);
|
||||
}
|
||||
|
@ -232,6 +236,47 @@ mpi_set_secure( MPI a )
|
|||
}
|
||||
|
||||
|
||||
MPI
|
||||
mpi_set_opaque( MPI a, void *p, int len )
|
||||
{
|
||||
if( !a ) {
|
||||
#ifdef M_DEBUG
|
||||
a = mpi_debug_alloc(0,"alloc_opaque");
|
||||
#else
|
||||
a = mpi_alloc(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
if( a->flags & 4 )
|
||||
m_free( a->d );
|
||||
else {
|
||||
#ifdef M_DEBUG
|
||||
mpi_debug_free_limb_space(a->d, "alloc_opaque");
|
||||
#else
|
||||
mpi_free_limb_space(a->d);
|
||||
#endif
|
||||
}
|
||||
|
||||
a->d = p;
|
||||
a->alloced = 0;
|
||||
a->nlimbs = 0;
|
||||
a->nbits = len;
|
||||
a->flags = 4;
|
||||
return a;
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
mpi_get_opaque( MPI a, int *len )
|
||||
{
|
||||
if( !(a->flags & 4) )
|
||||
log_bug("mpi_get_opaque on normal mpi\n");
|
||||
if( len )
|
||||
*len = a->nbits;
|
||||
return a->d;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Note: This copy function should not interpret the MPI
|
||||
* but copy it transparently.
|
||||
|
@ -246,7 +291,13 @@ mpi_copy( MPI a )
|
|||
int i;
|
||||
MPI b;
|
||||
|
||||
if( a ) {
|
||||
if( a && (a->flags & 4) ) {
|
||||
void *p = m_is_secure(a->d)? m_alloc_secure( a->nbits )
|
||||
: m_alloc( a->nbits );
|
||||
memcpy( p, a->d, a->nbits );
|
||||
b = mpi_set_opaque( NULL, p, a->nbits );
|
||||
}
|
||||
else if( a ) {
|
||||
#ifdef M_DEBUG
|
||||
b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info )
|
||||
: mpi_debug_alloc( a->nlimbs, info );
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue