mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	ECDSA: Add mbedtls_ecdsa_can_do
This commit is contained in:
		
							parent
							
								
									8a0f5bb3c1
								
							
						
					
					
						commit
						0082f9df6f
					
				
							
								
								
									
										11
									
								
								include/mbedtls/ecdsa.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										11
									
								
								include/mbedtls/ecdsa.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -125,6 +125,16 @@ typedef void mbedtls_ecdsa_restart_ctx;
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          This function checks whether a given group can be used
 | 
			
		||||
 *                 for ECDSA.
 | 
			
		||||
 *
 | 
			
		||||
 * \param gid      The ECP group ID to check.
 | 
			
		||||
 *
 | 
			
		||||
 * \return         \c 1 if the group can be used, \c 0 otherwise
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_ecdsa_can_do( mbedtls_ecp_group_id gid );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           This function computes the ECDSA signature of a
 | 
			
		||||
 *                  previously-hashed message.
 | 
			
		||||
@ -469,7 +479,6 @@ int mbedtls_ecdsa_read_signature_restartable( mbedtls_ecdsa_context *ctx,
 | 
			
		||||
                          const unsigned char *hash, size_t hlen,
 | 
			
		||||
                          const unsigned char *sig, size_t slen,
 | 
			
		||||
                          mbedtls_ecdsa_restart_ctx *rs_ctx );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          This function generates an ECDSA keypair on the given curve.
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								library/ecdsa.c
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										20
									
								
								library/ecdsa.c
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -263,9 +263,7 @@ static int ecdsa_sign_restartable( mbedtls_ecp_group *grp,
 | 
			
		||||
    mbedtls_mpi *pk = &k, *pr = r;
 | 
			
		||||
 | 
			
		||||
    /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
 | 
			
		||||
    if( grp->id == MBEDTLS_ECP_DP_CURVE25519 ||
 | 
			
		||||
        grp->id == MBEDTLS_ECP_DP_CURVE448 ||
 | 
			
		||||
        grp->N.p == NULL )
 | 
			
		||||
    if( !mbedtls_ecdsa_can_do( grp->id ) || grp->N.p == NULL )
 | 
			
		||||
        return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
 | 
			
		||||
 | 
			
		||||
    /* Make sure d is in range 1..n-1 */
 | 
			
		||||
@ -380,6 +378,20 @@ cleanup:
 | 
			
		||||
    return( ret );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int mbedtls_ecdsa_can_do( mbedtls_ecp_group_id gid )
 | 
			
		||||
{
 | 
			
		||||
    switch( gid )
 | 
			
		||||
    {
 | 
			
		||||
#ifdef MBEDTLS_ECP_DP_CURVE25519_ENABLED
 | 
			
		||||
    case MBEDTLS_ECP_DP_CURVE25519: return 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef MBEDTLS_ECP_DP_CURVE448_ENABLED
 | 
			
		||||
    case MBEDTLS_ECP_DP_CURVE448: return 0;
 | 
			
		||||
#endif
 | 
			
		||||
    default: return 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Compute ECDSA signature of a hashed message
 | 
			
		||||
 */
 | 
			
		||||
@ -504,7 +516,7 @@ static int ecdsa_verify_restartable( mbedtls_ecp_group *grp,
 | 
			
		||||
    mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 );
 | 
			
		||||
 | 
			
		||||
    /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
 | 
			
		||||
    if( grp->N.p == NULL )
 | 
			
		||||
    if( !mbedtls_ecdsa_can_do( grp->id ) || grp->N.p == NULL )
 | 
			
		||||
        return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
 | 
			
		||||
 | 
			
		||||
    ECDSA_RS_ENTER( ver );
 | 
			
		||||
 | 
			
		||||
@ -835,6 +835,9 @@ int main( int argc, char *argv[] )
 | 
			
		||||
             curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
 | 
			
		||||
             curve_info++ )
 | 
			
		||||
        {
 | 
			
		||||
            if( mbedtls_ecdsa_can_do( curve_info->grp_id ) == 0 )
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
            mbedtls_ecdsa_init( &ecdsa );
 | 
			
		||||
 | 
			
		||||
            if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 )
 | 
			
		||||
@ -854,6 +857,9 @@ int main( int argc, char *argv[] )
 | 
			
		||||
             curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
 | 
			
		||||
             curve_info++ )
 | 
			
		||||
        {
 | 
			
		||||
            if( mbedtls_ecdsa_can_do( curve_info->grp_id ) == 0 )
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
            mbedtls_ecdsa_init( &ecdsa );
 | 
			
		||||
 | 
			
		||||
            if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 ||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user