Add files for (upcoming) AES-NI support

This commit is contained in:
Manuel Pégourié-Gonnard 2013-12-16 17:12:53 +01:00
parent fe40f484fb
commit 92ac76f9db
7 changed files with 147 additions and 1 deletions

49
include/polarssl/aesni.h Normal file
View file

@ -0,0 +1,49 @@
/**
* \file aesni.h
*
* \brief AES-NI for hardware AES acceleration on some Intel processors
*
* Copyright (C) 2013, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef POLARSSL_AESNI_H
#define POLARSSL_AESNI_H
#include "aes.h"
#if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && \
( defined(__amd64__) || defined(__x86_64__) ) && \
! defined(POLARSSL_HAVE_X86_64)
#define POLARSSL_HAVE_X86_64
#endif
#if defined(POLARSSL_HAVE_X86_64)
/**
* \brief AES_NI detection routine
*
* \return 1 if CPU supports AES-NI, 0 otherwise
*/
int aesni_supported( void );
#endif /* POLARSSL_HAVE_X86_64 */
#endif /* POLARSSL_AESNI_H */

View file

@ -874,6 +874,20 @@
* \{
*/
/**
* \def POLARSSL_AESNI_C
*
* Enable AES-NI support on x86-64.
*
* Module: library/aesni.c
* Caller: library/aes.c
*
* Requires: POLARSSL_HAVE_ASM
*
* This modules adds support for the AES-NI instructions on x86-64
*/
#define POLARSSL_AESNI_C
/**
* \def POLARSSL_AES_C
*
@ -1414,6 +1428,8 @@
* Module: library/padlock.c
* Caller: library/aes.c
*
* Requires: POLARSSL_HAVE_ASM
*
* This modules adds support for the VIA PadLock on x86.
*/
#define POLARSSL_PADLOCK_C
@ -1902,6 +1918,10 @@
/*
* Sanity checks on defines and dependencies
*/
#if defined(POLARSSL_AESNI_C) && !defined(POLARSSL_HAVE_ASM)
#error "POLARSSL_AESNI_C defined, but not all prerequisites"
#endif
#if defined(POLARSSL_CERTS_C) && !defined(POLARSSL_PEM_PARSE_C)
#error "POLARSSL_CERTS_C defined, but not all prerequisites"
#endif
@ -2012,6 +2032,10 @@
#error "POLARSSL_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PADLOCK_C) && !defined(POLARSSL_HAVE_ASM)
#error "POLARSSL_PADLOCK_C defined, but not all prerequisites"
#endif
#if defined(POLARSSL_PBKDF2_C) && !defined(POLARSSL_MD_C)
#error "POLARSSL_PBKDF2_C defined, but not all prerequisites"
#endif

View file

@ -2,6 +2,7 @@ option(USE_SHARED_POLARSSL_LIBRARY "Build PolarSSL as a shared library." OFF)
set(src
aes.c
aesni.c
arc4.c
asn1parse.c
asn1write.c

View file

@ -34,7 +34,8 @@ DLEXT=dll
LDFLAGS += -lws2_32
endif
OBJS= aes.o arc4.o asn1parse.o \
OBJS= aes.o aesni.o arc4.o \
asn1parse.o \
asn1write.o base64.o bignum.o \
blowfish.o camellia.o \
certs.o cipher.o cipher_wrap.o \

61
library/aesni.c Normal file
View file

@ -0,0 +1,61 @@
/*
* AES-NI support functions
*
* Copyright (C) 2013, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
* [AES-WP] http://software.intel.com/en-us/articles/intel-advanced-encryption-standard-aes-instructions-set
*/
#include "polarssl/config.h"
#if defined(POLARSSL_AESNI_C)
#include "polarssl/aesni.h"
#if defined(POLARSSL_HAVE_X86_64)
/*
* AES-NI support detection routine, [AES-WP] figure 23
*/
int aesni_supported( void )
{
static int supported = -1;
unsigned int c;
if( supported == -1 )
{
asm( "movl $1, %%eax \n"
"cpuid \n"
: "=c" (c)
:
: "eax", "ebx", "edx" );
supported = ( ( c & 0x02000000 ) != 0 );
}
return( supported );
}
#endif /* POLARSSL_HAVE_X86_64 */
#endif /* POLARSSL_AESNI_C */

View file

@ -143,6 +143,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\include\polarssl\aes.h" />
<ClInclude Include="..\..\include\polarssl\aesni.h" />
<ClInclude Include="..\..\include\polarssl\arc4.h" />
<ClInclude Include="..\..\include\polarssl\asn1.h" />
<ClInclude Include="..\..\include\polarssl\asn1write.h" />
@ -201,6 +202,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\library\aes.c" />
<ClCompile Include="..\..\library\aesni.c" />
<ClCompile Include="..\..\library\arc4.c" />
<ClCompile Include="..\..\library\asn1parse.c" />
<ClCompile Include="..\..\library\asn1write.c" />

View file

@ -89,6 +89,10 @@ SOURCE=..\..\library\aes.c
# End Source File
# Begin Source File
SOURCE=..\..\library\aesni.c
# End Source File
# Begin Source File
SOURCE=..\..\library\arc4.c
# End Source File
# Begin Source File
@ -349,6 +353,10 @@ SOURCE=..\..\include\polarssl\aes.h
# End Source File
# Begin Source File
SOURCE=..\..\include\polarssl\aesni.h
# End Source File
# Begin Source File
SOURCE=..\..\include\polarssl\arc4.h
# End Source File
# Begin Source File