4 #if !defined(STRICT_ALIGNMENT) && !defined(PEDANTIC)
5 # define STRICT_ALIGNMENT 0
8 #if defined(__GNUC__) && !STRICT_ALIGNMENT
9 typedef size_t size_t_aX __attribute((__aligned__(1)));
15 size_t len,
const void *
key,
19 const unsigned char *iv = ivec;
24 #if !defined(OPENSSL_SMALL_FOOTPRINT)
26 ((
size_t)in | (
size_t)out | (
size_t)ivec) %
sizeof(
size_t) != 0) {
28 for (n = 0; n < 16; ++n)
29 out[n] = in[n] ^ iv[n];
30 (*block) (out, out,
key);
38 for (n = 0; n < 16; n +=
sizeof(size_t))
39 *(size_t_aX *)(out + n) =
40 *(size_t_aX *)(in + n) ^ *(size_t_aX *)(iv + n);
41 (*block) (out, out,
key);
50 for (n = 0; n < 16 && n < len; ++n)
51 out[n] = in[n] ^ iv[n];
54 (*block) (out, out,
key);
67 size_t len,
const void *
key,
72 size_t t[16 /
sizeof(size_t)];
79 #if !defined(OPENSSL_SMALL_FOOTPRINT)
81 const unsigned char *iv = ivec;
84 ((
size_t)in | (
size_t)out | (
size_t)ivec) %
sizeof(size_t) != 0) {
86 (*block) (in, out,
key);
87 for (n = 0; n < 16; ++n)
94 }
else if (16 %
sizeof(
size_t) == 0) {
96 size_t_aX *out_t = (size_t_aX *)out;
97 size_t_aX *iv_t = (size_t_aX *)iv;
99 (*block) (in, out,
key);
100 for (n = 0; n < 16 /
sizeof(size_t); n++)
109 memcpy(ivec, iv, 16);
112 ((
size_t)in | (
size_t)out | (
size_t)ivec) %
sizeof(
size_t) != 0) {
115 (*block) (in, tmp.c,
key);
116 for (n = 0; n < 16; ++n) {
118 out[n] = tmp.c[n] ^ ivec[n];
125 }
else if (16 %
sizeof(
size_t) == 0) {
128 size_t_aX *out_t = (size_t_aX *)out;
129 size_t_aX *ivec_t = (size_t_aX *)ivec;
130 const size_t_aX *in_t = (
const size_t_aX *)in;
132 (*block) (in, tmp.c,
key);
133 for (n = 0; n < 16 /
sizeof(size_t); n++) {
135 out_t[n] = tmp.t[n] ^ ivec_t[n];
147 (*block) (in, tmp.c,
key);
148 for (n = 0; n < 16 && n < len; ++n) {
150 out[n] = tmp.c[n] ^ ivec[n];
static constexpr wchar_t key[]
void(* block128_f)(const unsigned char in[16], unsigned char out[16], const void *key)
void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block)
void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block)