summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/modes/cbc128.c13
-rw-r--r--src/lib/libcrypto/modes/ccm128.c8
-rw-r--r--src/lib/libcrypto/modes/cfb128.c4
-rw-r--r--src/lib/libcrypto/modes/ctr128.c2
-rw-r--r--src/lib/libcrypto/modes/gcm128.c6
-rw-r--r--src/lib/libcrypto/modes/modes_lcl.h12
-rw-r--r--src/lib/libcrypto/modes/ofb128.c2
-rw-r--r--src/lib/libcrypto/modes/xts128.c9
-rw-r--r--src/lib/libcrypto/sha/sha512.c5
-rw-r--r--src/lib/libssl/src/crypto/modes/cbc128.c13
-rw-r--r--src/lib/libssl/src/crypto/modes/ccm128.c8
-rw-r--r--src/lib/libssl/src/crypto/modes/cfb128.c4
-rw-r--r--src/lib/libssl/src/crypto/modes/ctr128.c2
-rw-r--r--src/lib/libssl/src/crypto/modes/gcm128.c6
-rw-r--r--src/lib/libssl/src/crypto/modes/modes_lcl.h12
-rw-r--r--src/lib/libssl/src/crypto/modes/ofb128.c2
-rw-r--r--src/lib/libssl/src/crypto/modes/xts128.c9
-rw-r--r--src/lib/libssl/src/crypto/sha/sha512.c5
18 files changed, 52 insertions, 70 deletions
diff --git a/src/lib/libcrypto/modes/cbc128.c b/src/lib/libcrypto/modes/cbc128.c
index 0e54f75470..e4920a93ac 100644
--- a/src/lib/libcrypto/modes/cbc128.c
+++ b/src/lib/libcrypto/modes/cbc128.c
@@ -59,8 +59,11 @@
59#endif 59#endif
60#include <assert.h> 60#include <assert.h>
61 61
62#ifndef STRICT_ALIGNMENT 62#undef STRICT_ALIGNMENT
63# define STRICT_ALIGNMENT 0 63#ifdef __STRICT_ALIGNMENT
64#define STRICT_ALIGNMENT 1
65#else
66#define STRICT_ALIGNMENT 0
64#endif 67#endif
65 68
66void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, 69void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
@@ -136,8 +139,7 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
136 in += 16; 139 in += 16;
137 out += 16; 140 out += 16;
138 } 141 }
139 } 142 } else if (16%sizeof(size_t) == 0) { /* always true */
140 else if (16%sizeof(size_t) == 0) { /* always true */
141 while (len>=16) { 143 while (len>=16) {
142 size_t *out_t=(size_t *)out, *iv_t=(size_t *)iv; 144 size_t *out_t=(size_t *)out, *iv_t=(size_t *)iv;
143 145
@@ -166,8 +168,7 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
166 in += 16; 168 in += 16;
167 out += 16; 169 out += 16;
168 } 170 }
169 } 171 } else if (16%sizeof(size_t) == 0) { /* always true */
170 else if (16%sizeof(size_t) == 0) { /* always true */
171 while (len>=16) { 172 while (len>=16) {
172 size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec; 173 size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec;
173 const size_t *in_t=(const size_t *)in; 174 const size_t *in_t=(const size_t *)in;
diff --git a/src/lib/libcrypto/modes/ccm128.c b/src/lib/libcrypto/modes/ccm128.c
index 3ce11d0d98..13bc7adf31 100644
--- a/src/lib/libcrypto/modes/ccm128.c
+++ b/src/lib/libcrypto/modes/ccm128.c
@@ -197,7 +197,7 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
197 if (ctx->blocks > (U64(1)<<61)) return -2; /* too much data */ 197 if (ctx->blocks > (U64(1)<<61)) return -2; /* too much data */
198 198
199 while (len>=16) { 199 while (len>=16) {
200#if defined(STRICT_ALIGNMENT) 200#ifdef __STRICT_ALIGNMENT
201 union { u64 u[2]; u8 c[16]; } temp; 201 union { u64 u[2]; u8 c[16]; } temp;
202 202
203 memcpy (temp.c,inp,16); 203 memcpy (temp.c,inp,16);
@@ -210,7 +210,7 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
210 (*block)(ctx->cmac.c,ctx->cmac.c,key); 210 (*block)(ctx->cmac.c,ctx->cmac.c,key);
211 (*block)(ctx->nonce.c,scratch.c,key); 211 (*block)(ctx->nonce.c,scratch.c,key);
212 ctr64_inc(ctx->nonce.c); 212 ctr64_inc(ctx->nonce.c);
213#if defined(STRICT_ALIGNMENT) 213#ifdef __STRICT_ALIGNMENT
214 temp.u[0] ^= scratch.u[0]; 214 temp.u[0] ^= scratch.u[0];
215 temp.u[1] ^= scratch.u[1]; 215 temp.u[1] ^= scratch.u[1];
216 memcpy(out,temp.c,16); 216 memcpy(out,temp.c,16);
@@ -268,12 +268,12 @@ int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
268 if (n!=len) return -1; 268 if (n!=len) return -1;
269 269
270 while (len>=16) { 270 while (len>=16) {
271#if defined(STRICT_ALIGNMENT) 271#ifdef __STRICT_ALIGNMENT
272 union { u64 u[2]; u8 c[16]; } temp; 272 union { u64 u[2]; u8 c[16]; } temp;
273#endif 273#endif
274 (*block)(ctx->nonce.c,scratch.c,key); 274 (*block)(ctx->nonce.c,scratch.c,key);
275 ctr64_inc(ctx->nonce.c); 275 ctr64_inc(ctx->nonce.c);
276#if defined(STRICT_ALIGNMENT) 276#ifdef __STRICT_ALIGNMENT
277 memcpy (temp.c,inp,16); 277 memcpy (temp.c,inp,16);
278 ctx->cmac.u[0] ^= (scratch.u[0] ^= temp.u[0]); 278 ctx->cmac.u[0] ^= (scratch.u[0] ^= temp.u[0]);
279 ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]); 279 ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]);
diff --git a/src/lib/libcrypto/modes/cfb128.c b/src/lib/libcrypto/modes/cfb128.c
index 4e6f5d35e1..731cb2864a 100644
--- a/src/lib/libcrypto/modes/cfb128.c
+++ b/src/lib/libcrypto/modes/cfb128.c
@@ -83,7 +83,7 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
83 --len; 83 --len;
84 n = (n+1) % 16; 84 n = (n+1) % 16;
85 } 85 }
86#if defined(STRICT_ALIGNMENT) 86#ifdef __STRICT_ALIGNMENT
87 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 87 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
88 break; 88 break;
89#endif 89#endif
@@ -128,7 +128,7 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
128 --len; 128 --len;
129 n = (n+1) % 16; 129 n = (n+1) % 16;
130 } 130 }
131#if defined(STRICT_ALIGNMENT) 131#ifdef __STRICT_ALIGNMENT
132 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 132 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
133 break; 133 break;
134#endif 134#endif
diff --git a/src/lib/libcrypto/modes/ctr128.c b/src/lib/libcrypto/modes/ctr128.c
index 96af854f8a..ab45e0bd7a 100644
--- a/src/lib/libcrypto/modes/ctr128.c
+++ b/src/lib/libcrypto/modes/ctr128.c
@@ -133,7 +133,7 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
133 n = (n+1) % 16; 133 n = (n+1) % 16;
134 } 134 }
135 135
136#if defined(STRICT_ALIGNMENT) 136#ifdef __STRICT_ALIGNMENT
137 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 137 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
138 break; 138 break;
139#endif 139#endif
diff --git a/src/lib/libcrypto/modes/gcm128.c b/src/lib/libcrypto/modes/gcm128.c
index 92b7f4f3c8..f3bcb7dd6e 100644
--- a/src/lib/libcrypto/modes/gcm128.c
+++ b/src/lib/libcrypto/modes/gcm128.c
@@ -60,7 +60,7 @@
60#endif 60#endif
61#include <assert.h> 61#include <assert.h>
62 62
63#if defined(BSWAP4) && defined(STRICT_ALIGNMENT) 63#if defined(BSWAP4) && defined(__STRICT_ALIGNMENT)
64/* redefine, because alignment is ensured */ 64/* redefine, because alignment is ensured */
65#undef GETU32 65#undef GETU32
66#define GETU32(p) BSWAP4(*(const u32 *)(p)) 66#define GETU32(p) BSWAP4(*(const u32 *)(p))
@@ -935,7 +935,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
935 return 0; 935 return 0;
936 } 936 }
937 } 937 }
938#if defined(STRICT_ALIGNMENT) 938#ifdef __STRICT_ALIGNMENT
939 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0) 939 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0)
940 break; 940 break;
941#endif 941#endif
@@ -1113,7 +1113,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
1113 return 0; 1113 return 0;
1114 } 1114 }
1115 } 1115 }
1116#if defined(STRICT_ALIGNMENT) 1116#ifdef __STRICT_ALIGNMENT
1117 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0) 1117 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0)
1118 break; 1118 break;
1119#endif 1119#endif
diff --git a/src/lib/libcrypto/modes/modes_lcl.h b/src/lib/libcrypto/modes/modes_lcl.h
index 68c0e355ad..a53333df3d 100644
--- a/src/lib/libcrypto/modes/modes_lcl.h
+++ b/src/lib/libcrypto/modes/modes_lcl.h
@@ -22,14 +22,6 @@ typedef unsigned long long u64;
22typedef unsigned int u32; 22typedef unsigned int u32;
23typedef unsigned char u8; 23typedef unsigned char u8;
24 24
25#define STRICT_ALIGNMENT 1
26#if defined(__i386) || defined(__i386__) || \
27 defined(__x86_64) || defined(__x86_64__) || \
28 defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
29 defined(__s390__) || defined(__s390x__)
30# undef STRICT_ALIGNMENT
31#endif
32
33#if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) 25#if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
34#if defined(__GNUC__) && __GNUC__>=2 26#if defined(__GNUC__) && __GNUC__>=2
35# if defined(__x86_64) || defined(__x86_64__) 27# if defined(__x86_64) || defined(__x86_64__)
@@ -47,7 +39,7 @@ typedef unsigned char u8;
47# define BSWAP4(x) ({ u32 ret=(x); \ 39# define BSWAP4(x) ({ u32 ret=(x); \
48 asm ("bswapl %0" \ 40 asm ("bswapl %0" \
49 : "+r"(ret)); ret; }) 41 : "+r"(ret)); ret; })
50# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) 42# elif (defined(__arm__) || defined(__arm)) && !defined(__STRICT_ALIGNMENT)
51# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \ 43# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
52 asm ("rev %0,%0; rev %1,%1" \ 44 asm ("rev %0,%0; rev %1,%1" \
53 : "+r"(hi),"+r"(lo)); \ 45 : "+r"(hi),"+r"(lo)); \
@@ -60,7 +52,7 @@ typedef unsigned char u8;
60#endif 52#endif
61#endif 53#endif
62 54
63#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) 55#if defined(BSWAP4) && !defined(__STRICT_ALIGNMENT)
64#define GETU32(p) BSWAP4(*(const u32 *)(p)) 56#define GETU32(p) BSWAP4(*(const u32 *)(p))
65#define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) 57#define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v)
66#else 58#else
diff --git a/src/lib/libcrypto/modes/ofb128.c b/src/lib/libcrypto/modes/ofb128.c
index 01c01702c4..147c80c549 100644
--- a/src/lib/libcrypto/modes/ofb128.c
+++ b/src/lib/libcrypto/modes/ofb128.c
@@ -82,7 +82,7 @@ void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
82 --len; 82 --len;
83 n = (n+1) % 16; 83 n = (n+1) % 16;
84 } 84 }
85#if defined(STRICT_ALIGNMENT) 85#ifdef __STRICT_ALIGNMENT
86 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 86 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
87 break; 87 break;
88#endif 88#endif
diff --git a/src/lib/libcrypto/modes/xts128.c b/src/lib/libcrypto/modes/xts128.c
index de23de457d..9dcd16885d 100644
--- a/src/lib/libcrypto/modes/xts128.c
+++ b/src/lib/libcrypto/modes/xts128.c
@@ -47,6 +47,7 @@
47 * ==================================================================== 47 * ====================================================================
48 */ 48 */
49 49
50#include <machine/endian.h>
50#include <openssl/crypto.h> 51#include <openssl/crypto.h>
51#include "modes_lcl.h" 52#include "modes_lcl.h"
52#include <string.h> 53#include <string.h>
@@ -74,7 +75,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
74 if (!enc && (len%16)) len-=16; 75 if (!enc && (len%16)) len-=16;
75 76
76 while (len>=16) { 77 while (len>=16) {
77#if defined(STRICT_ALIGNMENT) 78#ifdef __STRICT_ALIGNMENT
78 memcpy(scratch.c,inp,16); 79 memcpy(scratch.c,inp,16);
79 scratch.u[0] ^= tweak.u[0]; 80 scratch.u[0] ^= tweak.u[0];
80 scratch.u[1] ^= tweak.u[1]; 81 scratch.u[1] ^= tweak.u[1];
@@ -83,7 +84,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
83 scratch.u[1] = ((u64*)inp)[1]^tweak.u[1]; 84 scratch.u[1] = ((u64*)inp)[1]^tweak.u[1];
84#endif 85#endif
85 (*ctx->block1)(scratch.c,scratch.c,ctx->key1); 86 (*ctx->block1)(scratch.c,scratch.c,ctx->key1);
86#if defined(STRICT_ALIGNMENT) 87#ifdef __STRICT_ALIGNMENT
87 scratch.u[0] ^= tweak.u[0]; 88 scratch.u[0] ^= tweak.u[0];
88 scratch.u[1] ^= tweak.u[1]; 89 scratch.u[1] ^= tweak.u[1];
89 memcpy(out,scratch.c,16); 90 memcpy(out,scratch.c,16);
@@ -152,7 +153,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
152 } 153 }
153 tweak1.c[0] ^= (u8)(0x87&(0-c)); 154 tweak1.c[0] ^= (u8)(0x87&(0-c));
154 } 155 }
155#if defined(STRICT_ALIGNMENT) 156#ifdef __STRICT_ALIGNMENT
156 memcpy(scratch.c,inp,16); 157 memcpy(scratch.c,inp,16);
157 scratch.u[0] ^= tweak1.u[0]; 158 scratch.u[0] ^= tweak1.u[0];
158 scratch.u[1] ^= tweak1.u[1]; 159 scratch.u[1] ^= tweak1.u[1];
@@ -172,7 +173,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
172 scratch.u[0] ^= tweak.u[0]; 173 scratch.u[0] ^= tweak.u[0];
173 scratch.u[1] ^= tweak.u[1]; 174 scratch.u[1] ^= tweak.u[1];
174 (*ctx->block1)(scratch.c,scratch.c,ctx->key1); 175 (*ctx->block1)(scratch.c,scratch.c,ctx->key1);
175#if defined(STRICT_ALIGNMENT) 176#ifdef __STRICT_ALIGNMENT
176 scratch.u[0] ^= tweak.u[0]; 177 scratch.u[0] ^= tweak.u[0];
177 scratch.u[1] ^= tweak.u[1]; 178 scratch.u[1] ^= tweak.u[1];
178 memcpy (out,scratch.c,16); 179 memcpy (out,scratch.c,16);
diff --git a/src/lib/libcrypto/sha/sha512.c b/src/lib/libcrypto/sha/sha512.c
index d8fa933cde..e05718d0a8 100644
--- a/src/lib/libcrypto/sha/sha512.c
+++ b/src/lib/libcrypto/sha/sha512.c
@@ -53,10 +53,7 @@
53 53
54const char SHA512_version[]="SHA-512" OPENSSL_VERSION_PTEXT; 54const char SHA512_version[]="SHA-512" OPENSSL_VERSION_PTEXT;
55 55
56#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ 56#if !defined(__STRICT_ALIGNMENT) || defined(SHA512_ASM)
57 defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) || \
58 defined(__s390__) || defined(__s390x__) || \
59 defined(SHA512_ASM)
60#define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA 57#define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA
61#endif 58#endif
62 59
diff --git a/src/lib/libssl/src/crypto/modes/cbc128.c b/src/lib/libssl/src/crypto/modes/cbc128.c
index 0e54f75470..e4920a93ac 100644
--- a/src/lib/libssl/src/crypto/modes/cbc128.c
+++ b/src/lib/libssl/src/crypto/modes/cbc128.c
@@ -59,8 +59,11 @@
59#endif 59#endif
60#include <assert.h> 60#include <assert.h>
61 61
62#ifndef STRICT_ALIGNMENT 62#undef STRICT_ALIGNMENT
63# define STRICT_ALIGNMENT 0 63#ifdef __STRICT_ALIGNMENT
64#define STRICT_ALIGNMENT 1
65#else
66#define STRICT_ALIGNMENT 0
64#endif 67#endif
65 68
66void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, 69void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
@@ -136,8 +139,7 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
136 in += 16; 139 in += 16;
137 out += 16; 140 out += 16;
138 } 141 }
139 } 142 } else if (16%sizeof(size_t) == 0) { /* always true */
140 else if (16%sizeof(size_t) == 0) { /* always true */
141 while (len>=16) { 143 while (len>=16) {
142 size_t *out_t=(size_t *)out, *iv_t=(size_t *)iv; 144 size_t *out_t=(size_t *)out, *iv_t=(size_t *)iv;
143 145
@@ -166,8 +168,7 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
166 in += 16; 168 in += 16;
167 out += 16; 169 out += 16;
168 } 170 }
169 } 171 } else if (16%sizeof(size_t) == 0) { /* always true */
170 else if (16%sizeof(size_t) == 0) { /* always true */
171 while (len>=16) { 172 while (len>=16) {
172 size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec; 173 size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec;
173 const size_t *in_t=(const size_t *)in; 174 const size_t *in_t=(const size_t *)in;
diff --git a/src/lib/libssl/src/crypto/modes/ccm128.c b/src/lib/libssl/src/crypto/modes/ccm128.c
index 3ce11d0d98..13bc7adf31 100644
--- a/src/lib/libssl/src/crypto/modes/ccm128.c
+++ b/src/lib/libssl/src/crypto/modes/ccm128.c
@@ -197,7 +197,7 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
197 if (ctx->blocks > (U64(1)<<61)) return -2; /* too much data */ 197 if (ctx->blocks > (U64(1)<<61)) return -2; /* too much data */
198 198
199 while (len>=16) { 199 while (len>=16) {
200#if defined(STRICT_ALIGNMENT) 200#ifdef __STRICT_ALIGNMENT
201 union { u64 u[2]; u8 c[16]; } temp; 201 union { u64 u[2]; u8 c[16]; } temp;
202 202
203 memcpy (temp.c,inp,16); 203 memcpy (temp.c,inp,16);
@@ -210,7 +210,7 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
210 (*block)(ctx->cmac.c,ctx->cmac.c,key); 210 (*block)(ctx->cmac.c,ctx->cmac.c,key);
211 (*block)(ctx->nonce.c,scratch.c,key); 211 (*block)(ctx->nonce.c,scratch.c,key);
212 ctr64_inc(ctx->nonce.c); 212 ctr64_inc(ctx->nonce.c);
213#if defined(STRICT_ALIGNMENT) 213#ifdef __STRICT_ALIGNMENT
214 temp.u[0] ^= scratch.u[0]; 214 temp.u[0] ^= scratch.u[0];
215 temp.u[1] ^= scratch.u[1]; 215 temp.u[1] ^= scratch.u[1];
216 memcpy(out,temp.c,16); 216 memcpy(out,temp.c,16);
@@ -268,12 +268,12 @@ int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
268 if (n!=len) return -1; 268 if (n!=len) return -1;
269 269
270 while (len>=16) { 270 while (len>=16) {
271#if defined(STRICT_ALIGNMENT) 271#ifdef __STRICT_ALIGNMENT
272 union { u64 u[2]; u8 c[16]; } temp; 272 union { u64 u[2]; u8 c[16]; } temp;
273#endif 273#endif
274 (*block)(ctx->nonce.c,scratch.c,key); 274 (*block)(ctx->nonce.c,scratch.c,key);
275 ctr64_inc(ctx->nonce.c); 275 ctr64_inc(ctx->nonce.c);
276#if defined(STRICT_ALIGNMENT) 276#ifdef __STRICT_ALIGNMENT
277 memcpy (temp.c,inp,16); 277 memcpy (temp.c,inp,16);
278 ctx->cmac.u[0] ^= (scratch.u[0] ^= temp.u[0]); 278 ctx->cmac.u[0] ^= (scratch.u[0] ^= temp.u[0]);
279 ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]); 279 ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]);
diff --git a/src/lib/libssl/src/crypto/modes/cfb128.c b/src/lib/libssl/src/crypto/modes/cfb128.c
index 4e6f5d35e1..731cb2864a 100644
--- a/src/lib/libssl/src/crypto/modes/cfb128.c
+++ b/src/lib/libssl/src/crypto/modes/cfb128.c
@@ -83,7 +83,7 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
83 --len; 83 --len;
84 n = (n+1) % 16; 84 n = (n+1) % 16;
85 } 85 }
86#if defined(STRICT_ALIGNMENT) 86#ifdef __STRICT_ALIGNMENT
87 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 87 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
88 break; 88 break;
89#endif 89#endif
@@ -128,7 +128,7 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
128 --len; 128 --len;
129 n = (n+1) % 16; 129 n = (n+1) % 16;
130 } 130 }
131#if defined(STRICT_ALIGNMENT) 131#ifdef __STRICT_ALIGNMENT
132 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 132 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
133 break; 133 break;
134#endif 134#endif
diff --git a/src/lib/libssl/src/crypto/modes/ctr128.c b/src/lib/libssl/src/crypto/modes/ctr128.c
index 96af854f8a..ab45e0bd7a 100644
--- a/src/lib/libssl/src/crypto/modes/ctr128.c
+++ b/src/lib/libssl/src/crypto/modes/ctr128.c
@@ -133,7 +133,7 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
133 n = (n+1) % 16; 133 n = (n+1) % 16;
134 } 134 }
135 135
136#if defined(STRICT_ALIGNMENT) 136#ifdef __STRICT_ALIGNMENT
137 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 137 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
138 break; 138 break;
139#endif 139#endif
diff --git a/src/lib/libssl/src/crypto/modes/gcm128.c b/src/lib/libssl/src/crypto/modes/gcm128.c
index 92b7f4f3c8..f3bcb7dd6e 100644
--- a/src/lib/libssl/src/crypto/modes/gcm128.c
+++ b/src/lib/libssl/src/crypto/modes/gcm128.c
@@ -60,7 +60,7 @@
60#endif 60#endif
61#include <assert.h> 61#include <assert.h>
62 62
63#if defined(BSWAP4) && defined(STRICT_ALIGNMENT) 63#if defined(BSWAP4) && defined(__STRICT_ALIGNMENT)
64/* redefine, because alignment is ensured */ 64/* redefine, because alignment is ensured */
65#undef GETU32 65#undef GETU32
66#define GETU32(p) BSWAP4(*(const u32 *)(p)) 66#define GETU32(p) BSWAP4(*(const u32 *)(p))
@@ -935,7 +935,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
935 return 0; 935 return 0;
936 } 936 }
937 } 937 }
938#if defined(STRICT_ALIGNMENT) 938#ifdef __STRICT_ALIGNMENT
939 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0) 939 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0)
940 break; 940 break;
941#endif 941#endif
@@ -1113,7 +1113,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
1113 return 0; 1113 return 0;
1114 } 1114 }
1115 } 1115 }
1116#if defined(STRICT_ALIGNMENT) 1116#ifdef __STRICT_ALIGNMENT
1117 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0) 1117 if (((size_t)in|(size_t)out)%sizeof(size_t) != 0)
1118 break; 1118 break;
1119#endif 1119#endif
diff --git a/src/lib/libssl/src/crypto/modes/modes_lcl.h b/src/lib/libssl/src/crypto/modes/modes_lcl.h
index 68c0e355ad..a53333df3d 100644
--- a/src/lib/libssl/src/crypto/modes/modes_lcl.h
+++ b/src/lib/libssl/src/crypto/modes/modes_lcl.h
@@ -22,14 +22,6 @@ typedef unsigned long long u64;
22typedef unsigned int u32; 22typedef unsigned int u32;
23typedef unsigned char u8; 23typedef unsigned char u8;
24 24
25#define STRICT_ALIGNMENT 1
26#if defined(__i386) || defined(__i386__) || \
27 defined(__x86_64) || defined(__x86_64__) || \
28 defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
29 defined(__s390__) || defined(__s390x__)
30# undef STRICT_ALIGNMENT
31#endif
32
33#if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) 25#if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
34#if defined(__GNUC__) && __GNUC__>=2 26#if defined(__GNUC__) && __GNUC__>=2
35# if defined(__x86_64) || defined(__x86_64__) 27# if defined(__x86_64) || defined(__x86_64__)
@@ -47,7 +39,7 @@ typedef unsigned char u8;
47# define BSWAP4(x) ({ u32 ret=(x); \ 39# define BSWAP4(x) ({ u32 ret=(x); \
48 asm ("bswapl %0" \ 40 asm ("bswapl %0" \
49 : "+r"(ret)); ret; }) 41 : "+r"(ret)); ret; })
50# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) 42# elif (defined(__arm__) || defined(__arm)) && !defined(__STRICT_ALIGNMENT)
51# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \ 43# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
52 asm ("rev %0,%0; rev %1,%1" \ 44 asm ("rev %0,%0; rev %1,%1" \
53 : "+r"(hi),"+r"(lo)); \ 45 : "+r"(hi),"+r"(lo)); \
@@ -60,7 +52,7 @@ typedef unsigned char u8;
60#endif 52#endif
61#endif 53#endif
62 54
63#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) 55#if defined(BSWAP4) && !defined(__STRICT_ALIGNMENT)
64#define GETU32(p) BSWAP4(*(const u32 *)(p)) 56#define GETU32(p) BSWAP4(*(const u32 *)(p))
65#define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) 57#define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v)
66#else 58#else
diff --git a/src/lib/libssl/src/crypto/modes/ofb128.c b/src/lib/libssl/src/crypto/modes/ofb128.c
index 01c01702c4..147c80c549 100644
--- a/src/lib/libssl/src/crypto/modes/ofb128.c
+++ b/src/lib/libssl/src/crypto/modes/ofb128.c
@@ -82,7 +82,7 @@ void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
82 --len; 82 --len;
83 n = (n+1) % 16; 83 n = (n+1) % 16;
84 } 84 }
85#if defined(STRICT_ALIGNMENT) 85#ifdef __STRICT_ALIGNMENT
86 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0) 86 if (((size_t)in|(size_t)out|(size_t)ivec)%sizeof(size_t) != 0)
87 break; 87 break;
88#endif 88#endif
diff --git a/src/lib/libssl/src/crypto/modes/xts128.c b/src/lib/libssl/src/crypto/modes/xts128.c
index de23de457d..9dcd16885d 100644
--- a/src/lib/libssl/src/crypto/modes/xts128.c
+++ b/src/lib/libssl/src/crypto/modes/xts128.c
@@ -47,6 +47,7 @@
47 * ==================================================================== 47 * ====================================================================
48 */ 48 */
49 49
50#include <machine/endian.h>
50#include <openssl/crypto.h> 51#include <openssl/crypto.h>
51#include "modes_lcl.h" 52#include "modes_lcl.h"
52#include <string.h> 53#include <string.h>
@@ -74,7 +75,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
74 if (!enc && (len%16)) len-=16; 75 if (!enc && (len%16)) len-=16;
75 76
76 while (len>=16) { 77 while (len>=16) {
77#if defined(STRICT_ALIGNMENT) 78#ifdef __STRICT_ALIGNMENT
78 memcpy(scratch.c,inp,16); 79 memcpy(scratch.c,inp,16);
79 scratch.u[0] ^= tweak.u[0]; 80 scratch.u[0] ^= tweak.u[0];
80 scratch.u[1] ^= tweak.u[1]; 81 scratch.u[1] ^= tweak.u[1];
@@ -83,7 +84,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
83 scratch.u[1] = ((u64*)inp)[1]^tweak.u[1]; 84 scratch.u[1] = ((u64*)inp)[1]^tweak.u[1];
84#endif 85#endif
85 (*ctx->block1)(scratch.c,scratch.c,ctx->key1); 86 (*ctx->block1)(scratch.c,scratch.c,ctx->key1);
86#if defined(STRICT_ALIGNMENT) 87#ifdef __STRICT_ALIGNMENT
87 scratch.u[0] ^= tweak.u[0]; 88 scratch.u[0] ^= tweak.u[0];
88 scratch.u[1] ^= tweak.u[1]; 89 scratch.u[1] ^= tweak.u[1];
89 memcpy(out,scratch.c,16); 90 memcpy(out,scratch.c,16);
@@ -152,7 +153,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
152 } 153 }
153 tweak1.c[0] ^= (u8)(0x87&(0-c)); 154 tweak1.c[0] ^= (u8)(0x87&(0-c));
154 } 155 }
155#if defined(STRICT_ALIGNMENT) 156#ifdef __STRICT_ALIGNMENT
156 memcpy(scratch.c,inp,16); 157 memcpy(scratch.c,inp,16);
157 scratch.u[0] ^= tweak1.u[0]; 158 scratch.u[0] ^= tweak1.u[0];
158 scratch.u[1] ^= tweak1.u[1]; 159 scratch.u[1] ^= tweak1.u[1];
@@ -172,7 +173,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
172 scratch.u[0] ^= tweak.u[0]; 173 scratch.u[0] ^= tweak.u[0];
173 scratch.u[1] ^= tweak.u[1]; 174 scratch.u[1] ^= tweak.u[1];
174 (*ctx->block1)(scratch.c,scratch.c,ctx->key1); 175 (*ctx->block1)(scratch.c,scratch.c,ctx->key1);
175#if defined(STRICT_ALIGNMENT) 176#ifdef __STRICT_ALIGNMENT
176 scratch.u[0] ^= tweak.u[0]; 177 scratch.u[0] ^= tweak.u[0];
177 scratch.u[1] ^= tweak.u[1]; 178 scratch.u[1] ^= tweak.u[1];
178 memcpy (out,scratch.c,16); 179 memcpy (out,scratch.c,16);
diff --git a/src/lib/libssl/src/crypto/sha/sha512.c b/src/lib/libssl/src/crypto/sha/sha512.c
index d8fa933cde..e05718d0a8 100644
--- a/src/lib/libssl/src/crypto/sha/sha512.c
+++ b/src/lib/libssl/src/crypto/sha/sha512.c
@@ -53,10 +53,7 @@
53 53
54const char SHA512_version[]="SHA-512" OPENSSL_VERSION_PTEXT; 54const char SHA512_version[]="SHA-512" OPENSSL_VERSION_PTEXT;
55 55
56#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ 56#if !defined(__STRICT_ALIGNMENT) || defined(SHA512_ASM)
57 defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) || \
58 defined(__s390__) || defined(__s390x__) || \
59 defined(SHA512_ASM)
60#define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA 57#define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA
61#endif 58#endif
62 59