Add files for (upcoming) AES-NI support
diff --git a/include/polarssl/aesni.h b/include/polarssl/aesni.h
new file mode 100644
index 0000000..9aaeff1
--- /dev/null
+++ b/include/polarssl/aesni.h
@@ -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 */
diff --git a/include/polarssl/config.h b/include/polarssl/config.h
index d98bdb3..283e294 100644
--- a/include/polarssl/config.h
+++ b/include/polarssl/config.h
@@ -875,6 +875,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
*
* Enable the AES block cipher.
@@ -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
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 411c07d..1a5efde 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -2,6 +2,7 @@
set(src
aes.c
+ aesni.c
arc4.c
asn1parse.c
asn1write.c
diff --git a/library/Makefile b/library/Makefile
index a9c86f8..3f80162 100644
--- a/library/Makefile
+++ b/library/Makefile
@@ -34,7 +34,8 @@
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 \
diff --git a/library/aesni.c b/library/aesni.c
new file mode 100644
index 0000000..2882298
--- /dev/null
+++ b/library/aesni.c
@@ -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 */
diff --git a/visualc/VS2010/PolarSSL.vcxproj b/visualc/VS2010/PolarSSL.vcxproj
index 33f0031..4c067be 100644
--- a/visualc/VS2010/PolarSSL.vcxproj
+++ b/visualc/VS2010/PolarSSL.vcxproj
@@ -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" />
diff --git a/visualc/VS6/polarssl.dsp b/visualc/VS6/polarssl.dsp
index c40b75b..b6a82c0 100644
--- a/visualc/VS6/polarssl.dsp
+++ b/visualc/VS6/polarssl.dsp
@@ -89,6 +89,10 @@
# 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 @@
# 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