projects
/
openssl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8c1f9c5
)
cbc128.c: fix strict aliasing warning.
author
Andy Polyakov
<appro@openssl.org>
Mon, 5 Nov 2012 10:04:02 +0000
(10:04 +0000)
committer
Ben Laurie
<ben@links.org>
Tue, 4 Jun 2013 13:30:49 +0000
(14:30 +0100)
crypto/modes/cbc128.c
patch
|
blob
|
history
diff --git
a/crypto/modes/cbc128.c
b/crypto/modes/cbc128.c
index 3d3782cbe1181b3ac7f9559208f0e4bb48d9eadf..34b2a2ef211fd09d85361c1e7bbf07e72f8b3d85 100644
(file)
--- a/
crypto/modes/cbc128.c
+++ b/
crypto/modes/cbc128.c
@@
-117,7
+117,7
@@
void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
unsigned char ivec[16], block128_f block)
{
size_t n;
unsigned char ivec[16], block128_f block)
{
size_t n;
- union { size_t
align
; unsigned char c[16]; } tmp;
+ union { size_t
t[16/sizeof(size_t)]
; unsigned char c[16]; } tmp;
assert(in && out && key && ivec);
assert(in && out && key && ivec);
@@
-165,19
+165,19
@@
void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
out += 16;
}
}
out += 16;
}
}
- else {
- size_t c;
+ else if (16%sizeof(size_t) == 0) { /* always true */
+ size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec;
+ const size_t *in_t=(const size_t *)in;
while (len>=16) {
while (len>=16) {
- (*block)(in, tmp.c, key);
- for(n=0; n<16; n+=sizeof(size_t)) {
- c = *(size_t *)(in+n);
- *(size_t *)(out+n) =
- *(size_t *)(tmp.c+n) ^ *(size_t *)(ivec+n);
- *(size_t *)(ivec+n) = c;
+ (*block)((const unsigned char *)in_t, tmp.c, key);
+ for(n=0; n<16/sizeof(size_t); n++) {
+ c = in_t[n];
+ out_t[n] = tmp.t[n] ^ ivec_t[n];
+ ivec_t[n] = c;
}
len -= 16;
}
len -= 16;
- in
+= 16
;
- out
+= 16
;
+ in
_t += 16/sizeof(size_t)
;
+ out
_t += 16/sizeof(size_t)
;
}
}
}
}
}
}