mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Add ecdsa_from_keypair()
Also fix bug/limitation in mpi_copy: would segfault if src just initialised and not set to a value yet. (This case occurs when copying a context which contains only the public part of the key, eg.)
This commit is contained in:
		
							parent
							
								
									cc0a9d040d
								
							
						
					
					
						commit
						f499993cb2
					
				@ -142,6 +142,16 @@ int ecdsa_read_signature( ecdsa_context *ctx,
 | 
			
		||||
int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
 | 
			
		||||
                  int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           Set an ECDSA context from an EC key pair
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx       ECDSA context to set
 | 
			
		||||
 * \param key       EC key to use
 | 
			
		||||
 *
 | 
			
		||||
 * \return          0 on success, or a POLARSSL_ERR_ECP code.
 | 
			
		||||
 */
 | 
			
		||||
int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           Initialize context
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -130,6 +130,12 @@ int mpi_copy( mpi *X, const mpi *Y )
 | 
			
		||||
    if( X == Y )
 | 
			
		||||
        return( 0 );
 | 
			
		||||
 | 
			
		||||
    if( Y->p == NULL )
 | 
			
		||||
    {
 | 
			
		||||
        mpi_free( X );
 | 
			
		||||
        return( 0 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for( i = Y->n - 1; i > 0; i-- )
 | 
			
		||||
        if( Y->p[i] != 0 )
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
@ -283,6 +283,20 @@ int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
 | 
			
		||||
            ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set context from an ecp_keypair
 | 
			
		||||
 */
 | 
			
		||||
int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key )
 | 
			
		||||
{
 | 
			
		||||
    int ret = ecp_group_copy( &ctx->grp, &key->grp ) ||
 | 
			
		||||
              mpi_copy( &ctx->d, &key->d ) ||
 | 
			
		||||
              ecp_copy( &ctx->Q, &key->Q );
 | 
			
		||||
 | 
			
		||||
    if( ret != 0 )
 | 
			
		||||
        ecdsa_free( ctx );
 | 
			
		||||
 | 
			
		||||
    return( ret );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialize context
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user