mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-11-03 20:33:16 +03:00 
			
		
		
		
	Fix ECDSA signature verification edge-case
For R and S equal to 1, ensure the public key is checked for validity. Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
This commit is contained in:
		@@ -2797,14 +2797,17 @@ static int mbedtls_ecp_mul_shortcuts( mbedtls_ecp_group *grp,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if( mbedtls_mpi_cmp_int( m, 0 ) == 0 )
 | 
					    if( mbedtls_mpi_cmp_int( m, 0 ) == 0 )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_check_pubkey( grp, P ) );
 | 
				
			||||||
        MBEDTLS_MPI_CHK( mbedtls_ecp_set_zero( R ) );
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_set_zero( R ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if( mbedtls_mpi_cmp_int( m, 1 ) == 0 )
 | 
					    else if( mbedtls_mpi_cmp_int( m, 1 ) == 0 )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_check_pubkey( grp, P ) );
 | 
				
			||||||
        MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) );
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if( mbedtls_mpi_cmp_int( m, -1 ) == 0 )
 | 
					    else if( mbedtls_mpi_cmp_int( m, -1 ) == 0 )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_check_pubkey( grp, P ) );
 | 
				
			||||||
        MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) );
 | 
					        MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) );
 | 
				
			||||||
        if( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 )
 | 
					        if( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 )
 | 
				
			||||||
            MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &R->Y, &grp->P, &R->Y ) );
 | 
					            MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &R->Y, &grp->P, &R->Y ) );
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user