[arch-commits] Commit in gnutls/trunk (PKGBUILD align.patch)

andyrtr at archlinux.org andyrtr at archlinux.org
Fri Aug 12 06:48:04 UTC 2011


    Date: Friday, August 12, 2011 @ 02:48:04
  Author: andyrtr
Revision: 135280

upgpkg: gnutls 3.0.0-2
fix AES-NI hardware acceleration on i686 architecture

Added:
  gnutls/trunk/align.patch
Modified:
  gnutls/trunk/PKGBUILD

-------------+
 PKGBUILD    |   21 +++++++++----------
 align.patch |   64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 10 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2011-08-12 06:33:04 UTC (rev 135279)
+++ PKGBUILD	2011-08-12 06:48:04 UTC (rev 135280)
@@ -3,7 +3,7 @@
 
 pkgname=gnutls
 pkgver=3.0.0
-pkgrel=1
+pkgrel=2
 pkgdesc="A library which provides a secure layer over a reliable transport layer"
 arch=('i686' 'x86_64')
 license=('GPL3' 'LGPL')
@@ -11,11 +11,15 @@
 install=gnutls.install
 options=('!libtool' '!zipman')
 depends=('gcc-libs' 'libtasn1' 'readline' 'zlib' 'nettle>=2.2')
-source=(ftp://ftp.gnu.org/gnu/gnutls/${pkgname}-${pkgver}.tar.xz)
-md5sums=('0677a66667f48810ff8df8335a9a9f9b')
+source=(ftp://ftp.gnu.org/gnu/gnutls/${pkgname}-${pkgver}.tar.xz
+	align.patch)
+md5sums=('0677a66667f48810ff8df8335a9a9f9b'
+         'bce979498addb45d0fa8d6951f93fab3')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
+  # fix AES-NI for i686
+  patch -Np1 -i ${srcdir}/align.patch
   ./configure --prefix=/usr \
 	--with-zlib \
 	--disable-static \
@@ -24,14 +28,11 @@
   make
 }
 
-# i686 test segfault
+check() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
+  make check # passes all  || /bin/true
+}
 
-#check() {
-#  cd "${srcdir}/${pkgname}-${pkgver}"
-  #make check # passes all  || /bin/true
-#  make check # || /bin/true # see https://lists.gnu.org/archive/html/gnutls-devel/2011-06/msg00007.html
-#}
-
 package() {
   cd "${srcdir}/${pkgname}-${pkgver}"
   make DESTDIR="${pkgdir}" install

Added: align.patch
===================================================================
--- align.patch	                        (rev 0)
+++ align.patch	2011-08-12 06:48:04 UTC (rev 135280)
@@ -0,0 +1,64 @@
+diff --git a/lib/accelerated/intel/aes-x86.c b/lib/accelerated/intel/aes-x86.c
+index 6801e7e..ff5b714 100644
+--- a/lib/accelerated/intel/aes-x86.c
++++ b/lib/accelerated/intel/aes-x86.c
+@@ -40,6 +40,10 @@ struct aes_ctx
+   uint8_t iv[16];
+ };
+ 
++#define AESNI_MIN_ALIGN 16
++#define AESNI_ALIGN(x) \
++        ((void *)(((size_t)(x)+AESNI_MIN_ALIGN-1)&~(AESNI_MIN_ALIGN-1)))
++
+ static int
+ aes_cipher_init (gnutls_cipher_algorithm_t algorithm, void **_ctx)
+ {
+@@ -69,11 +73,11 @@ aes_cipher_setkey (void *_ctx, const void *userkey, size_t keysize)
+   struct aes_ctx *ctx = _ctx;
+   int ret;
+ 
+-  ret = aesni_set_encrypt_key (userkey, keysize * 8, &ctx->expanded_key);
++  ret = aesni_set_encrypt_key (userkey, keysize * 8, AESNI_ALIGN(&ctx->expanded_key));
+   if (ret != 0)
+     return gnutls_assert_val (GNUTLS_E_ENCRYPTION_FAILED);
+ 
+-  ret = aesni_set_decrypt_key (userkey, keysize * 8, &ctx->expanded_key_dec);
++  ret = aesni_set_decrypt_key (userkey, keysize * 8, AESNI_ALIGN(&ctx->expanded_key_dec));
+   if (ret != 0)
+     return gnutls_assert_val (GNUTLS_E_ENCRYPTION_FAILED);
+ 
+@@ -95,7 +99,7 @@ aes_encrypt (void *_ctx, const void *src, size_t src_size,
+ {
+   struct aes_ctx *ctx = _ctx;
+ 
+-  aesni_cbc_encrypt (src, dst, src_size, &ctx->expanded_key, ctx->iv, 1);
++  aesni_cbc_encrypt (src, dst, src_size, AESNI_ALIGN(&ctx->expanded_key), ctx->iv, 1);
+   return 0;
+ }
+ 
+@@ -105,7 +109,7 @@ aes_decrypt (void *_ctx, const void *src, size_t src_size,
+ {
+   struct aes_ctx *ctx = _ctx;
+ 
+-  aesni_cbc_encrypt (src, dst, src_size, &ctx->expanded_key_dec, ctx->iv, 0);
++  aesni_cbc_encrypt (src, dst, src_size, AESNI_ALIGN(&ctx->expanded_key_dec), ctx->iv, 0);
+ 
+   return 0;
+ }
+diff --git a/lib/accelerated/intel/aes-x86.h b/lib/accelerated/intel/aes-x86.h
+index 8f49ff3..20a169e 100644
+--- a/lib/accelerated/intel/aes-x86.h
++++ b/lib/accelerated/intel/aes-x86.h
+@@ -11,10 +11,11 @@ void register_x86_crypto (void);
+ # define ALIGN16
+ #endif
+ 
++#define AES_KEY_ALIGN_SIZE 8
+ #define AES_MAXNR 14
+ typedef struct
+ {
+-  uint32_t ALIGN16 rd_key[4 * (AES_MAXNR + 1)];
++  uint32_t rd_key[4 * (AES_MAXNR + 1)+AES_KEY_ALIGN_SIZE];
+   int rounds;
+ } AES_KEY;
+ 




More information about the arch-commits mailing list