mirror of
https://github.com/yuzu-emu/mbedtls
synced 2024-11-24 15:58:12 +00:00
Allow detection of CLMUL
This commit is contained in:
parent
5b685653ef
commit
8eaf20b18d
3 changed files with 17 additions and 11 deletions
|
@ -29,6 +29,9 @@
|
||||||
|
|
||||||
#include "aes.h"
|
#include "aes.h"
|
||||||
|
|
||||||
|
#define POLARSSL_AESNI_AES 0x02000000u
|
||||||
|
#define POLARSSL_AESNI_CLMUL 0x00000002u
|
||||||
|
|
||||||
#if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && \
|
#if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && \
|
||||||
( defined(__amd64__) || defined(__x86_64__) ) && \
|
( defined(__amd64__) || defined(__x86_64__) ) && \
|
||||||
! defined(POLARSSL_HAVE_X86_64)
|
! defined(POLARSSL_HAVE_X86_64)
|
||||||
|
@ -38,11 +41,14 @@
|
||||||
#if defined(POLARSSL_HAVE_X86_64)
|
#if defined(POLARSSL_HAVE_X86_64)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief AES-NI detection routine
|
* \brief AES-NI features detection routine
|
||||||
*
|
*
|
||||||
* \return 1 if CPU supports AES-NI, 0 otherwise
|
* \param what The feature to detect
|
||||||
|
* (POLARSSL_AESNI_AES or POLARSSL_AESNI_CLMUL)
|
||||||
|
*
|
||||||
|
* \return 1 if CPU has support for the feature, 0 otherwise
|
||||||
*/
|
*/
|
||||||
int aesni_supported( void );
|
int aesni_supports( unsigned int what );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief AES-NI AES-ECB block en(de)cryption
|
* \brief AES-NI AES-ECB block en(de)cryption
|
||||||
|
|
|
@ -677,7 +677,7 @@ int aes_crypt_ecb( aes_context *ctx,
|
||||||
uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
|
uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
|
||||||
|
|
||||||
#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64)
|
#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64)
|
||||||
if( aesni_supported() )
|
if( aesni_supports( POLARSSL_AESNI_AES ) )
|
||||||
return( aesni_crypt_ecb( ctx, mode, input, output ) );
|
return( aesni_crypt_ecb( ctx, mode, input, output ) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -37,24 +37,24 @@
|
||||||
#if defined(POLARSSL_HAVE_X86_64)
|
#if defined(POLARSSL_HAVE_X86_64)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AES-NI support detection routine, [AES-WP] figure 23
|
* AES-NI support detection routine
|
||||||
*/
|
*/
|
||||||
int aesni_supported( void )
|
int aesni_supports( unsigned int what )
|
||||||
{
|
{
|
||||||
static int supported = -1;
|
static int done = 0;
|
||||||
unsigned int c;
|
static unsigned int c = 0;
|
||||||
|
|
||||||
if( supported == -1 )
|
if( ! done )
|
||||||
{
|
{
|
||||||
asm( "movl $1, %%eax \n"
|
asm( "movl $1, %%eax \n"
|
||||||
"cpuid \n"
|
"cpuid \n"
|
||||||
: "=c" (c)
|
: "=c" (c)
|
||||||
:
|
:
|
||||||
: "eax", "ebx", "edx" );
|
: "eax", "ebx", "edx" );
|
||||||
supported = ( ( c & 0x02000000 ) != 0 );
|
done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return( supported );
|
return( ( c & what ) != 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue