diff options
author | Andy Polyakov <appro@openssl.org> | 2011-04-20 08:13:58 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2011-04-20 08:13:58 +0000 |
commit | daaf5088fd20fe7c00a96a1cbae05e47b5dd2fc5 (patch) | |
tree | 2a5a06f64a093f4ee87e29e8470803152441878e /crypto/modes | |
parent | e382e4e603079bec1c565b08fdaa2b3c5bd70b49 (diff) |
xts128.c: minor optimization and clarified prototype.
Diffstat (limited to 'crypto/modes')
-rw-r--r-- | crypto/modes/modes.h | 2 | ||||
-rw-r--r-- | crypto/modes/xts128.c | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/crypto/modes/modes.h b/crypto/modes/modes.h index feacfb77ed..5cf1935db0 100644 --- a/crypto/modes/modes.h +++ b/crypto/modes/modes.h @@ -121,5 +121,5 @@ size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); typedef struct xts128_context XTS128_CONTEXT; -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char *iv, +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], const unsigned char *inp, unsigned char *out, size_t len, int enc); diff --git a/crypto/modes/xts128.c b/crypto/modes/xts128.c index aaa44e05f0..6859ab65d5 100644 --- a/crypto/modes/xts128.c +++ b/crypto/modes/xts128.c @@ -58,7 +58,7 @@ #endif #include <assert.h> -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char *iv, +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], const unsigned char *inp, unsigned char *out, size_t len, int enc) { @@ -84,9 +84,14 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char *iv, scratch.u[1] = ((u64*)inp)[1]^tweak.u[1]; #endif (*ctx->block1)(scratch.c,scratch.c,ctx->key1); +#if defined(STRICT_ALIGNMENT) scratch.u[0] ^= tweak.u[0]; scratch.u[1] ^= tweak.u[1]; memcpy(out,scratch.c,16); +#else + ((u64*)out)[0] = scratch.u[0]^tweak.u[0]; + ((u64*)out)[1] = scratch.u[1]^tweak.u[1]; +#endif inp += 16; out += 16; len -= 16; @@ -166,9 +171,14 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char *iv, scratch.u[0] ^= tweak.u[0]; scratch.u[1] ^= tweak.u[1]; (*ctx->block1)(scratch.c,scratch.c,ctx->key1); +#if defined(STRICT_ALIGNMENT) scratch.u[0] ^= tweak.u[0]; scratch.u[1] ^= tweak.u[1]; memcpy (out,scratch.c,16); +#else + ((u64*)out)[0] = scratch.u[0]^tweak.u[0]; + ((u64*)out)[1] = scratch.u[1]^tweak.u[1]; +#endif } return 0; |