Lines Matching refs:X

84 void mbedtls_mpi_init( mbedtls_mpi *X )  in mbedtls_mpi_init()  argument
86 MPI_VALIDATE( X != NULL ); in mbedtls_mpi_init()
88 X->s = 1; in mbedtls_mpi_init()
89 X->n = 0; in mbedtls_mpi_init()
90 X->p = NULL; in mbedtls_mpi_init()
96 void mbedtls_mpi_free( mbedtls_mpi *X ) in mbedtls_mpi_free() argument
98 if( X == NULL ) in mbedtls_mpi_free()
101 if( X->p != NULL ) in mbedtls_mpi_free()
103 mbedtls_mpi_zeroize( X->p, X->n ); in mbedtls_mpi_free()
104 mbedtls_free( X->p ); in mbedtls_mpi_free()
107 X->s = 1; in mbedtls_mpi_free()
108 X->n = 0; in mbedtls_mpi_free()
109 X->p = NULL; in mbedtls_mpi_free()
115 int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) in mbedtls_mpi_grow() argument
118 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_grow()
123 if( X->n < nblimbs ) in mbedtls_mpi_grow()
128 if( X->p != NULL ) in mbedtls_mpi_grow()
130 memcpy( p, X->p, X->n * ciL ); in mbedtls_mpi_grow()
131 mbedtls_mpi_zeroize( X->p, X->n ); in mbedtls_mpi_grow()
132 mbedtls_free( X->p ); in mbedtls_mpi_grow()
135 X->n = nblimbs; in mbedtls_mpi_grow()
136 X->p = p; in mbedtls_mpi_grow()
146 int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) in mbedtls_mpi_shrink() argument
150 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_shrink()
156 if( X->n <= nblimbs ) in mbedtls_mpi_shrink()
157 return( mbedtls_mpi_grow( X, nblimbs ) ); in mbedtls_mpi_shrink()
160 for( i = X->n - 1; i > 0; i-- ) in mbedtls_mpi_shrink()
161 if( X->p[i] != 0 ) in mbedtls_mpi_shrink()
171 if( X->p != NULL ) in mbedtls_mpi_shrink()
173 memcpy( p, X->p, i * ciL ); in mbedtls_mpi_shrink()
174 mbedtls_mpi_zeroize( X->p, X->n ); in mbedtls_mpi_shrink()
175 mbedtls_free( X->p ); in mbedtls_mpi_shrink()
178 X->n = i; in mbedtls_mpi_shrink()
179 X->p = p; in mbedtls_mpi_shrink()
185 static int mbedtls_mpi_resize_clear( mbedtls_mpi *X, size_t limbs ) in mbedtls_mpi_resize_clear() argument
189 mbedtls_mpi_free( X ); in mbedtls_mpi_resize_clear()
192 else if( X->n == limbs ) in mbedtls_mpi_resize_clear()
194 memset( X->p, 0, limbs * ciL ); in mbedtls_mpi_resize_clear()
195 X->s = 1; in mbedtls_mpi_resize_clear()
200 mbedtls_mpi_free( X ); in mbedtls_mpi_resize_clear()
201 return( mbedtls_mpi_grow( X, limbs ) ); in mbedtls_mpi_resize_clear()
214 int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) in mbedtls_mpi_copy() argument
218 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_copy()
221 if( X == Y ) in mbedtls_mpi_copy()
226 if( X->n != 0 ) in mbedtls_mpi_copy()
228 X->s = 1; in mbedtls_mpi_copy()
229 memset( X->p, 0, X->n * ciL ); in mbedtls_mpi_copy()
239 X->s = Y->s; in mbedtls_mpi_copy()
241 if( X->n < i ) in mbedtls_mpi_copy()
243 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i ) ); in mbedtls_mpi_copy()
247 memset( X->p + i, 0, ( X->n - i ) * ciL ); in mbedtls_mpi_copy()
250 memcpy( X->p, Y->p, i * ciL ); in mbedtls_mpi_copy()
260 void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y ) in mbedtls_mpi_swap() argument
263 MPI_VALIDATE( X != NULL ); in mbedtls_mpi_swap()
266 memcpy( &T, X, sizeof( mbedtls_mpi ) ); in mbedtls_mpi_swap()
267 memcpy( X, Y, sizeof( mbedtls_mpi ) ); in mbedtls_mpi_swap()
337 int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign ) in mbedtls_mpi_safe_cond_assign() argument
342 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_safe_cond_assign()
361 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); in mbedtls_mpi_safe_cond_assign()
363 X->s = mpi_safe_cond_select_sign( X->s, Y->s, assign ); in mbedtls_mpi_safe_cond_assign()
365 mpi_safe_cond_assign( Y->n, X->p, Y->p, assign ); in mbedtls_mpi_safe_cond_assign()
367 for( i = Y->n; i < X->n; i++ ) in mbedtls_mpi_safe_cond_assign()
368 X->p[i] &= ~limb_mask; in mbedtls_mpi_safe_cond_assign()
380 int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char swap ) in mbedtls_mpi_safe_cond_swap() argument
386 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_safe_cond_swap()
389 if( X == Y ) in mbedtls_mpi_safe_cond_swap()
408 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); in mbedtls_mpi_safe_cond_swap()
409 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( Y, X->n ) ); in mbedtls_mpi_safe_cond_swap()
411 s = X->s; in mbedtls_mpi_safe_cond_swap()
412 X->s = mpi_safe_cond_select_sign( X->s, Y->s, swap ); in mbedtls_mpi_safe_cond_swap()
416 for( i = 0; i < X->n; i++ ) in mbedtls_mpi_safe_cond_swap()
418 tmp = X->p[i]; in mbedtls_mpi_safe_cond_swap()
419 X->p[i] = ( X->p[i] & ~limb_mask ) | ( Y->p[i] & limb_mask ); in mbedtls_mpi_safe_cond_swap()
430 int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ) in mbedtls_mpi_lset() argument
433 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_lset()
435 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, 1 ) ); in mbedtls_mpi_lset()
436 memset( X->p, 0, X->n * ciL ); in mbedtls_mpi_lset()
438 X->p[0] = ( z < 0 ) ? -z : z; in mbedtls_mpi_lset()
439 X->s = ( z < 0 ) ? -1 : 1; in mbedtls_mpi_lset()
449 int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ) in mbedtls_mpi_get_bit() argument
451 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_get_bit()
453 if( X->n * biL <= pos ) in mbedtls_mpi_get_bit()
456 return( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); in mbedtls_mpi_get_bit()
460 #define GET_BYTE( X, i ) \ argument
461 ( ( ( X )->p[( i ) / ciL] >> ( ( ( i ) % ciL ) * 8 ) ) & 0xff )
466 int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) in mbedtls_mpi_set_bit() argument
471 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_set_bit()
476 if( X->n * biL <= pos ) in mbedtls_mpi_set_bit()
481 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, off + 1 ) ); in mbedtls_mpi_set_bit()
484 X->p[off] &= ~( (mbedtls_mpi_uint) 0x01 << idx ); in mbedtls_mpi_set_bit()
485 X->p[off] |= (mbedtls_mpi_uint) val << idx; in mbedtls_mpi_set_bit()
495 size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ) in mbedtls_mpi_lsb() argument
498 MBEDTLS_INTERNAL_VALIDATE_RET( X != NULL, 0 ); in mbedtls_mpi_lsb()
500 for( i = 0; i < X->n; i++ ) in mbedtls_mpi_lsb()
502 if( ( ( X->p[i] >> j ) & 1 ) != 0 ) in mbedtls_mpi_lsb()
529 size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) in mbedtls_mpi_bitlen() argument
533 if( X->n == 0 ) in mbedtls_mpi_bitlen()
536 for( i = X->n - 1; i > 0; i-- ) in mbedtls_mpi_bitlen()
537 if( X->p[i] != 0 ) in mbedtls_mpi_bitlen()
540 j = biL - mbedtls_clz( X->p[i] ); in mbedtls_mpi_bitlen()
548 size_t mbedtls_mpi_size( const mbedtls_mpi *X ) in mbedtls_mpi_size() argument
550 return( ( mbedtls_mpi_bitlen( X ) + 7 ) >> 3 ); in mbedtls_mpi_size()
573 int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) in mbedtls_mpi_read_string() argument
580 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_read_string()
590 mbedtls_mpi_free( X ); in mbedtls_mpi_read_string()
609 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, n ) ); in mbedtls_mpi_read_string()
610 MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); in mbedtls_mpi_read_string()
615 X->p[j / ( 2 * ciL )] |= d << ( ( j % ( 2 * ciL ) ) << 2 ); in mbedtls_mpi_read_string()
620 MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); in mbedtls_mpi_read_string()
625 MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T, X, radix ) ); in mbedtls_mpi_read_string()
626 MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, &T, d ) ); in mbedtls_mpi_read_string()
630 if( sign < 0 && mbedtls_mpi_bitlen( X ) != 0 ) in mbedtls_mpi_read_string()
631 X->s = -1; in mbedtls_mpi_read_string()
643 static int mpi_write_hlp( mbedtls_mpi *X, int radix, in mpi_write_hlp() argument
658 MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, radix ) ); in mpi_write_hlp()
659 MBEDTLS_MPI_CHK( mbedtls_mpi_div_int( X, NULL, X, radix ) ); in mpi_write_hlp()
669 } while( mbedtls_mpi_cmp_int( X, 0 ) != 0 ); in mpi_write_hlp()
682 int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, in mbedtls_mpi_write_string() argument
689 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_write_string()
696 n = mbedtls_mpi_bitlen( X ); /* Number of bits necessary to present `n`. */ in mbedtls_mpi_write_string()
720 if( X->s == -1 ) in mbedtls_mpi_write_string()
731 for( i = X->n, k = 0; i > 0; i-- ) in mbedtls_mpi_write_string()
735 c = ( X->p[i - 1] >> ( ( j - 1 ) << 3) ) & 0xFF; in mbedtls_mpi_write_string()
748 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &T, X ) ); in mbedtls_mpi_write_string()
770 int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ) in mbedtls_mpi_read_file() argument
781 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_read_file()
803 return( mbedtls_mpi_read_string( X, radix, p + 1 ) ); in mbedtls_mpi_read_file()
809 int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE *fout ) in mbedtls_mpi_write_file() argument
818 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_write_file()
825 MBEDTLS_MPI_CHK( mbedtls_mpi_write_string( X, radix, s, sizeof( s ) - 2, &n ) ); in mbedtls_mpi_write_file()
943 int mbedtls_mpi_read_binary_le( mbedtls_mpi *X, in mbedtls_mpi_read_binary_le() argument
951 MBEDTLS_MPI_CHK( mbedtls_mpi_resize_clear( X, limbs ) ); in mbedtls_mpi_read_binary_le()
954 X->p[i / ciL] |= ((mbedtls_mpi_uint) buf[i]) << ((i % ciL) << 3); in mbedtls_mpi_read_binary_le()
969 int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t buflen ) in mbedtls_mpi_read_binary() argument
976 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_read_binary()
980 MBEDTLS_MPI_CHK( mbedtls_mpi_resize_clear( X, limbs ) ); in mbedtls_mpi_read_binary()
986 Xp = (unsigned char*) X->p; in mbedtls_mpi_read_binary()
989 mpi_bigendian_to_host( X->p, limbs ); in mbedtls_mpi_read_binary()
1005 int mbedtls_mpi_write_binary_le( const mbedtls_mpi *X, in mbedtls_mpi_write_binary_le() argument
1008 size_t stored_bytes = X->n * ciL; in mbedtls_mpi_write_binary_le()
1024 if( GET_BYTE( X, i ) != 0 ) in mbedtls_mpi_write_binary_le()
1030 buf[i] = GET_BYTE( X, i ); in mbedtls_mpi_write_binary_le()
1044 int mbedtls_mpi_write_binary( const mbedtls_mpi *X, in mbedtls_mpi_write_binary() argument
1052 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_write_binary()
1055 stored_bytes = X->n * ciL; in mbedtls_mpi_write_binary()
1076 if( GET_BYTE( X, i ) != 0 ) in mbedtls_mpi_write_binary()
1082 p[bytes_to_copy - i - 1] = GET_BYTE( X, i ); in mbedtls_mpi_write_binary()
1090 int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) in mbedtls_mpi_shift_l() argument
1095 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_shift_l()
1100 i = mbedtls_mpi_bitlen( X ) + count; in mbedtls_mpi_shift_l()
1102 if( X->n * biL < i ) in mbedtls_mpi_shift_l()
1103 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, BITS_TO_LIMBS( i ) ) ); in mbedtls_mpi_shift_l()
1112 for( i = X->n; i > v0; i-- ) in mbedtls_mpi_shift_l()
1113 X->p[i - 1] = X->p[i - v0 - 1]; in mbedtls_mpi_shift_l()
1116 X->p[i - 1] = 0; in mbedtls_mpi_shift_l()
1124 for( i = v0; i < X->n; i++ ) in mbedtls_mpi_shift_l()
1126 r1 = X->p[i] >> (biL - t1); in mbedtls_mpi_shift_l()
1127 X->p[i] <<= t1; in mbedtls_mpi_shift_l()
1128 X->p[i] |= r0; in mbedtls_mpi_shift_l()
1141 int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) in mbedtls_mpi_shift_r() argument
1145 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_shift_r()
1150 if( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) in mbedtls_mpi_shift_r()
1151 return mbedtls_mpi_lset( X, 0 ); in mbedtls_mpi_shift_r()
1158 for( i = 0; i < X->n - v0; i++ ) in mbedtls_mpi_shift_r()
1159 X->p[i] = X->p[i + v0]; in mbedtls_mpi_shift_r()
1161 for( ; i < X->n; i++ ) in mbedtls_mpi_shift_r()
1162 X->p[i] = 0; in mbedtls_mpi_shift_r()
1170 for( i = X->n; i > 0; i-- ) in mbedtls_mpi_shift_r()
1172 r1 = X->p[i - 1] << (biL - v1); in mbedtls_mpi_shift_r()
1173 X->p[i - 1] >>= v1; in mbedtls_mpi_shift_r()
1174 X->p[i - 1] |= r0; in mbedtls_mpi_shift_r()
1185 int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ) in mbedtls_mpi_cmp_abs() argument
1188 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_cmp_abs()
1191 for( i = X->n; i > 0; i-- ) in mbedtls_mpi_cmp_abs()
1192 if( X->p[i - 1] != 0 ) in mbedtls_mpi_cmp_abs()
1207 if( X->p[i - 1] > Y->p[i - 1] ) return( 1 ); in mbedtls_mpi_cmp_abs()
1208 if( X->p[i - 1] < Y->p[i - 1] ) return( -1 ); in mbedtls_mpi_cmp_abs()
1217 int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ) in mbedtls_mpi_cmp_mpi() argument
1220 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_cmp_mpi()
1223 for( i = X->n; i > 0; i-- ) in mbedtls_mpi_cmp_mpi()
1224 if( X->p[i - 1] != 0 ) in mbedtls_mpi_cmp_mpi()
1234 if( i > j ) return( X->s ); in mbedtls_mpi_cmp_mpi()
1237 if( X->s > 0 && Y->s < 0 ) return( 1 ); in mbedtls_mpi_cmp_mpi()
1238 if( Y->s > 0 && X->s < 0 ) return( -1 ); in mbedtls_mpi_cmp_mpi()
1242 if( X->p[i - 1] > Y->p[i - 1] ) return( X->s ); in mbedtls_mpi_cmp_mpi()
1243 if( X->p[i - 1] < Y->p[i - 1] ) return( -X->s ); in mbedtls_mpi_cmp_mpi()
1287 int mbedtls_mpi_lt_mpi_ct( const mbedtls_mpi *X, const mbedtls_mpi *Y, in mbedtls_mpi_lt_mpi_ct() argument
1294 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_lt_mpi_ct()
1298 if( X->n != Y->n ) in mbedtls_mpi_lt_mpi_ct()
1305 X_is_negative = ( X->s & 2 ) >> 1; in mbedtls_mpi_lt_mpi_ct()
1322 for( i = X->n; i > 0; i-- ) in mbedtls_mpi_lt_mpi_ct()
1331 cond = ct_lt_mpi_uint( Y->p[i - 1], X->p[i - 1] ); in mbedtls_mpi_lt_mpi_ct()
1342 cond = ct_lt_mpi_uint( X->p[i - 1], Y->p[i - 1] ); in mbedtls_mpi_lt_mpi_ct()
1353 int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ) in mbedtls_mpi_cmp_int() argument
1357 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_cmp_int()
1364 return( mbedtls_mpi_cmp_mpi( X, &Y ) ); in mbedtls_mpi_cmp_int()
1370 int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) in mbedtls_mpi_add_abs() argument
1375 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_add_abs()
1379 if( X == B ) in mbedtls_mpi_add_abs()
1381 const mbedtls_mpi *T = A; A = X; B = T; in mbedtls_mpi_add_abs()
1384 if( X != A ) in mbedtls_mpi_add_abs()
1385 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); in mbedtls_mpi_add_abs()
1390 X->s = 1; in mbedtls_mpi_add_abs()
1396 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, j ) ); in mbedtls_mpi_add_abs()
1398 o = B->p; p = X->p; c = 0; in mbedtls_mpi_add_abs()
1412 if( i >= X->n ) in mbedtls_mpi_add_abs()
1414 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + 1 ) ); in mbedtls_mpi_add_abs()
1415 p = X->p + i; in mbedtls_mpi_add_abs()
1463 int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) in mbedtls_mpi_sub_abs() argument
1468 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_sub_abs()
1482 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, A->n ) ); in mbedtls_mpi_sub_abs()
1488 memcpy( X->p + n, A->p + n, ( A->n - n ) * ciL ); in mbedtls_mpi_sub_abs()
1489 if( X->n > A->n ) in mbedtls_mpi_sub_abs()
1490 memset( X->p + A->n, 0, ( X->n - A->n ) * ciL ); in mbedtls_mpi_sub_abs()
1492 carry = mpi_sub_hlp( n, X->p, A->p, B->p ); in mbedtls_mpi_sub_abs()
1496 for( ; n < X->n && X->p[n] == 0; n++ ) in mbedtls_mpi_sub_abs()
1497 --X->p[n]; in mbedtls_mpi_sub_abs()
1500 if( n == X->n ) in mbedtls_mpi_sub_abs()
1505 --X->p[n]; in mbedtls_mpi_sub_abs()
1509 X->s = 1; in mbedtls_mpi_sub_abs()
1518 int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) in mbedtls_mpi_add_mpi() argument
1521 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_add_mpi()
1530 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); in mbedtls_mpi_add_mpi()
1531 X->s = s; in mbedtls_mpi_add_mpi()
1535 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); in mbedtls_mpi_add_mpi()
1536 X->s = -s; in mbedtls_mpi_add_mpi()
1541 MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); in mbedtls_mpi_add_mpi()
1542 X->s = s; in mbedtls_mpi_add_mpi()
1553 int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) in mbedtls_mpi_sub_mpi() argument
1556 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_sub_mpi()
1565 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); in mbedtls_mpi_sub_mpi()
1566 X->s = s; in mbedtls_mpi_sub_mpi()
1570 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); in mbedtls_mpi_sub_mpi()
1571 X->s = -s; in mbedtls_mpi_sub_mpi()
1576 MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); in mbedtls_mpi_sub_mpi()
1577 X->s = s; in mbedtls_mpi_sub_mpi()
1588 int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ) in mbedtls_mpi_add_int() argument
1592 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_add_int()
1600 return( mbedtls_mpi_add_mpi( X, A, &B ) ); in mbedtls_mpi_add_int()
1606 int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ) in mbedtls_mpi_sub_int() argument
1610 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_sub_int()
1618 return( mbedtls_mpi_sub_mpi( X, A, &B ) ); in mbedtls_mpi_sub_int()
1712 int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) in mbedtls_mpi_mul_mpi() argument
1718 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_mul_mpi()
1724 if( X == A ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); A = &TA; } in mbedtls_mpi_mul_mpi()
1725 if( X == B ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); B = &TB; } in mbedtls_mpi_mul_mpi()
1739 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + j ) ); in mbedtls_mpi_mul_mpi()
1740 MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); in mbedtls_mpi_mul_mpi()
1743 mpi_mul_hlp( i, A->p, X->p + j - 1, B->p[j - 1] ); in mbedtls_mpi_mul_mpi()
1750 X->s = 1; in mbedtls_mpi_mul_mpi()
1752 X->s = A->s * B->s; in mbedtls_mpi_mul_mpi()
1764 int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b ) in mbedtls_mpi_mul_int() argument
1766 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_mul_int()
1778 return( mbedtls_mpi_lset( X, 0 ) ); in mbedtls_mpi_mul_int()
1791 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, n + 1 ) ); in mbedtls_mpi_mul_int()
1792 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); in mbedtls_mpi_mul_int()
1793 mpi_mul_hlp( n, A->p, X->p, b - 1 ); in mbedtls_mpi_mul_int()
1903 mbedtls_mpi X, Y, Z, T1, T2; in mbedtls_mpi_div_mpi() local
1911 mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); in mbedtls_mpi_div_mpi()
1931 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &X, A ) ); in mbedtls_mpi_div_mpi()
1933 X.s = Y.s = 1; in mbedtls_mpi_div_mpi()
1943 MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &X, k ) ); in mbedtls_mpi_div_mpi()
1948 n = X.n - 1; in mbedtls_mpi_div_mpi()
1952 while( mbedtls_mpi_cmp_mpi( &X, &Y ) >= 0 ) in mbedtls_mpi_div_mpi()
1955 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &Y ) ); in mbedtls_mpi_div_mpi()
1961 if( X.p[i] >= Y.p[t] ) in mbedtls_mpi_div_mpi()
1965 Z.p[i - t - 1] = mbedtls_int_div_int( X.p[i], X.p[i - 1], in mbedtls_mpi_div_mpi()
1969 T2.p[0] = ( i < 2 ) ? 0 : X.p[i - 2]; in mbedtls_mpi_div_mpi()
1970 T2.p[1] = ( i < 1 ) ? 0 : X.p[i - 1]; in mbedtls_mpi_div_mpi()
1971 T2.p[2] = X.p[i]; in mbedtls_mpi_div_mpi()
1987 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); in mbedtls_mpi_div_mpi()
1989 if( mbedtls_mpi_cmp_int( &X, 0 ) < 0 ) in mbedtls_mpi_div_mpi()
1993 MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &X, &X, &T1 ) ); in mbedtls_mpi_div_mpi()
2006 MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &X, k ) ); in mbedtls_mpi_div_mpi()
2007 X.s = A->s; in mbedtls_mpi_div_mpi()
2008 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, &X ) ); in mbedtls_mpi_div_mpi()
2016 mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); in mbedtls_mpi_div_mpi()
2298 int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, in mbedtls_mpi_exp_mod() argument
2310 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_exp_mod()
2350 MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, j ) ); in mbedtls_mpi_exp_mod()
2401 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &RR ) ); in mbedtls_mpi_exp_mod()
2402 mpi_montred( X, N, mm, &T ); in mbedtls_mpi_exp_mod()
2462 mpi_montmul( X, X, N, mm, &T ); in mbedtls_mpi_exp_mod()
2480 mpi_montmul( X, X, N, mm, &T ); in mbedtls_mpi_exp_mod()
2486 mpi_montmul( X, &WW, N, mm, &T ); in mbedtls_mpi_exp_mod()
2499 mpi_montmul( X, X, N, mm, &T ); in mbedtls_mpi_exp_mod()
2504 mpi_montmul( X, &W[1], N, mm, &T ); in mbedtls_mpi_exp_mod()
2510 mpi_montred( X, N, mm, &T ); in mbedtls_mpi_exp_mod()
2514 X->s = -1; in mbedtls_mpi_exp_mod()
2515 MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( X, N, X ) ); in mbedtls_mpi_exp_mod()
2654 mbedtls_mpi *X, size_t n_bytes, in mpi_fill_random_internal() argument
2661 if( X->n < limbs ) in mpi_fill_random_internal()
2664 memset( X->p, 0, overhead ); in mpi_fill_random_internal()
2665 memset( (unsigned char *) X->p + limbs * ciL, 0, ( X->n - limbs ) * ciL ); in mpi_fill_random_internal()
2666 MBEDTLS_MPI_CHK( f_rng( p_rng, (unsigned char *) X->p + overhead, n_bytes ) ); in mpi_fill_random_internal()
2667 mpi_bigendian_to_host( X->p, limbs ); in mpi_fill_random_internal()
2680 int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, in mbedtls_mpi_fill_random() argument
2687 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_fill_random()
2691 MBEDTLS_MPI_CHK( mbedtls_mpi_resize_clear( X, limbs ) ); in mbedtls_mpi_fill_random()
2695 ret = mpi_fill_random_internal( X, size, f_rng, p_rng ); in mbedtls_mpi_fill_random()
2701 int mbedtls_mpi_random( mbedtls_mpi *X, in mbedtls_mpi_random() argument
2743 MBEDTLS_MPI_CHK( mbedtls_mpi_resize_clear( X, N->n ) ); in mbedtls_mpi_random()
2757 MBEDTLS_MPI_CHK( mpi_fill_random_internal( X, n_bytes, f_rng, p_rng ) ); in mbedtls_mpi_random()
2758 MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, 8 * n_bytes - n_bits ) ); in mbedtls_mpi_random()
2766 MBEDTLS_MPI_CHK( mbedtls_mpi_lt_mpi_ct( X, &lower_bound, &lt_lower ) ); in mbedtls_mpi_random()
2767 MBEDTLS_MPI_CHK( mbedtls_mpi_lt_mpi_ct( X, N, &lt_upper ) ); in mbedtls_mpi_random()
2779 int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *N ) in mbedtls_mpi_inv_mod() argument
2783 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_inv_mod()
2863 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &V1 ) ); in mbedtls_mpi_inv_mod()
2910 static int mpi_check_small_factors( const mbedtls_mpi *X ) in mpi_check_small_factors() argument
2916 if( ( X->p[0] & 1 ) == 0 ) in mpi_check_small_factors()
2921 if( mbedtls_mpi_cmp_int( X, small_prime[i] ) <= 0 ) in mpi_check_small_factors()
2924 MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, small_prime[i] ) ); in mpi_check_small_factors()
2937 static int mpi_miller_rabin( const mbedtls_mpi *X, size_t rounds, in mpi_miller_rabin() argument
2945 MPI_VALIDATE_RET( X != NULL ); in mpi_miller_rabin()
2956 MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &W, X, 1 ) ); in mpi_miller_rabin()
2968 MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &A, X->n * ciL, f_rng, p_rng ) ); in mpi_miller_rabin()
2987 MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &A, &A, &R, X, &RR ) ); in mpi_miller_rabin()
3000 MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &A, &T, X ) ); in mpi_miller_rabin()
3030 int mbedtls_mpi_is_prime_ext( const mbedtls_mpi *X, int rounds, in mbedtls_mpi_is_prime_ext() argument
3036 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_is_prime_ext()
3040 XX.n = X->n; in mbedtls_mpi_is_prime_ext()
3041 XX.p = X->p; in mbedtls_mpi_is_prime_ext()
3068 int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int flags, in mbedtls_mpi_gen_prime() argument
3085 MPI_VALIDATE_RET( X != NULL ); in mbedtls_mpi_gen_prime()
3118 MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); in mbedtls_mpi_gen_prime()
3120 if( X->p[n-1] < CEIL_MAXUINT_DIV_SQRT2 ) continue; in mbedtls_mpi_gen_prime()
3123 if( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits ) ); in mbedtls_mpi_gen_prime()
3124 X->p[0] |= 1; in mbedtls_mpi_gen_prime()
3128 ret = mbedtls_mpi_is_prime_ext( X, rounds, f_rng, p_rng ); in mbedtls_mpi_gen_prime()
3141 X->p[0] |= 2; in mbedtls_mpi_gen_prime()
3143 MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, 3 ) ); in mbedtls_mpi_gen_prime()
3145 MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 8 ) ); in mbedtls_mpi_gen_prime()
3147 MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 4 ) ); in mbedtls_mpi_gen_prime()
3150 MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Y, X ) ); in mbedtls_mpi_gen_prime()
3159 if( ( ret = mpi_check_small_factors( X ) ) == 0 && in mbedtls_mpi_gen_prime()
3161 ( ret = mpi_miller_rabin( X, rounds, f_rng, p_rng ) ) in mbedtls_mpi_gen_prime()
3175 MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 12 ) ); in mbedtls_mpi_gen_prime()
3207 mbedtls_mpi A, E, N, X, Y, U, V; in mbedtls_mpi_self_test() local
3209 mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N ); mbedtls_mpi_init( &X ); in mbedtls_mpi_self_test()
3229 MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &A, &N ) ); in mbedtls_mpi_self_test()
3243 if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) in mbedtls_mpi_self_test()
3255 MBEDTLS_MPI_CHK( mbedtls_mpi_div_mpi( &X, &Y, &A, &N ) ); in mbedtls_mpi_self_test()
3268 if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 || in mbedtls_mpi_self_test()
3281 MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &X, &A, &E, &N, NULL ) ); in mbedtls_mpi_self_test()
3291 if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) in mbedtls_mpi_self_test()
3303 MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &X, &A, &N ) ); in mbedtls_mpi_self_test()
3313 if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) in mbedtls_mpi_self_test()
3330 MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &X, gcd_pairs[i][0] ) ); in mbedtls_mpi_self_test()
3333 MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &A, &X, &Y ) ); in mbedtls_mpi_self_test()
3353 mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N ); mbedtls_mpi_free( &X ); in mbedtls_mpi_self_test()