mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-10-30 19:20:40 -04:00 
			
		
		
		
	Optimize more common cases in ecp_muladd()
This commit is contained in:
		
							parent
							
								
									8a7a189220
								
							
						
					
					
						commit
						de9f953b9f
					
				| @ -1683,8 +1683,39 @@ cleanup: | |||||||
| } | } | ||||||
| #endif /* ECP_SHORTWEIERSTRASS */ | #endif /* ECP_SHORTWEIERSTRASS */ | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * R = m * P with shortcuts for m == 1 and m == -1 | ||||||
|  |  * NOT constant-time - ONLY for short Weierstrass! | ||||||
|  |  */ | ||||||
|  | static int mbedtls_ecp_mul_shortcuts( mbedtls_ecp_group *grp, | ||||||
|  |                                       mbedtls_ecp_point *R, | ||||||
|  |                                       const mbedtls_mpi *m, | ||||||
|  |                                       const mbedtls_ecp_point *P ) | ||||||
|  | { | ||||||
|  |     int ret; | ||||||
|  | 
 | ||||||
|  |     if( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) | ||||||
|  |     { | ||||||
|  |         MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); | ||||||
|  |     } | ||||||
|  |     else if( mbedtls_mpi_cmp_int( m, -1 ) == 0 ) | ||||||
|  |     { | ||||||
|  |         MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); | ||||||
|  |         if( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 ) | ||||||
|  |             MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &R->Y, &grp->P, &R->Y ) ); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, R, m, P, NULL, NULL ) ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | cleanup: | ||||||
|  |     return( ret ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Linear combination |  * Linear combination | ||||||
|  |  * NOT constant-time | ||||||
|  */ |  */ | ||||||
| int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, | int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, | ||||||
|              const mbedtls_mpi *m, const mbedtls_ecp_point *P, |              const mbedtls_mpi *m, const mbedtls_ecp_point *P, | ||||||
| @ -1698,16 +1729,8 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, | |||||||
| 
 | 
 | ||||||
|     mbedtls_ecp_point_init( &mP ); |     mbedtls_ecp_point_init( &mP ); | ||||||
| 
 | 
 | ||||||
|     /* Optimize some simple special cases */ |     MBEDTLS_MPI_CHK( mbedtls_ecp_mul_shortcuts( grp, &mP, m, P ) ); | ||||||
|     if( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) |     MBEDTLS_MPI_CHK( mbedtls_ecp_mul_shortcuts( grp, R,   n, Q ) ); | ||||||
|         MBEDTLS_MPI_CHK( mbedtls_ecp_copy( &mP, P ) ); |  | ||||||
|     else |  | ||||||
|         MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, &mP, m, P, NULL, NULL ) ); |  | ||||||
| 
 |  | ||||||
|     if( mbedtls_mpi_cmp_int( n, 1 ) == 0 ) |  | ||||||
|         MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, Q ) ); |  | ||||||
|     else |  | ||||||
|         MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, R,   n, Q, NULL, NULL ) ); |  | ||||||
| 
 | 
 | ||||||
|     MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, &mP, R ) ); |     MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, &mP, R ) ); | ||||||
|     MBEDTLS_MPI_CHK( ecp_normalize_jac( grp, R ) ); |     MBEDTLS_MPI_CHK( ecp_normalize_jac( grp, R ) ); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Manuel Pégourié-Gonnard
						Manuel Pégourié-Gonnard