33 #if defined(POLARSSL_DHM_C)
40 static int dhm_read_bignum(
mpi *X,
42 const unsigned char *end )
49 n = ( (*p)[0] << 8 ) | (*p)[1];
52 if( (
int)( end - *p ) < n )
72 static int dhm_check_range(
const mpi *param,
const mpi *P )
97 const unsigned char *end )
103 if( ( ret = dhm_read_bignum( &ctx->
P, p, end ) ) != 0 ||
104 ( ret = dhm_read_bignum( &ctx->
G, p, end ) ) != 0 ||
105 ( ret = dhm_read_bignum( &ctx->
GY, p, end ) ) != 0 )
108 if( ( ret = dhm_check_range( &ctx->
GY, &ctx->
P ) ) != 0 )
116 n = ( (*p)[0] << 8 ) | (*p)[1];
129 unsigned char *output,
size_t *olen,
130 int (*f_rng)(
void *,
unsigned char *,
size_t),
150 while( dhm_check_range( &ctx->
X, &ctx->
P ) != 0 );
156 &ctx->
P , &ctx->
RP ) );
158 if( ( ret = dhm_check_range( &ctx->
GX, &ctx->
P ) ) != 0 )
164 #define DHM_MPI_EXPORT(X,n) \
165 MPI_CHK( mpi_write_binary( X, p + 2, n ) ); \
166 *p++ = (unsigned char)( n >> 8 ); \
167 *p++ = (unsigned char)( n ); p += n;
174 DHM_MPI_EXPORT( &ctx->
P , n1 );
175 DHM_MPI_EXPORT( &ctx->
G , n2 );
176 DHM_MPI_EXPORT( &ctx->
GX, n3 );
194 const unsigned char *input,
size_t ilen )
198 if( ctx == NULL || ilen < 1 || ilen > ctx->
len )
211 unsigned char *output,
size_t olen,
212 int (*f_rng)(
void *,
unsigned char *,
size_t),
217 if( ctx == NULL || olen < 1 || olen > ctx->
len )
233 while( dhm_check_range( &ctx->
X, &ctx->
P ) != 0 );
236 &ctx->
P , &ctx->
RP ) );
238 if( ( ret = dhm_check_range( &ctx->
GX, &ctx->
P ) ) != 0 )
255 unsigned char *output,
size_t *olen )
259 if( ctx == NULL || *olen < ctx->len )
263 &ctx->
P, &ctx->
RP ) );
265 if( ( ret = dhm_check_range( &ctx->
GY, &ctx->
P ) ) != 0 )
290 #if defined(POLARSSL_SELF_TEST)