4 #if !defined(STRICT_ALIGNMENT) && !defined(PEDANTIC)
5 # define STRICT_ALIGNMENT 0
9 size_t len,
const void *
key,
13 const unsigned char *iv = ivec;
18 #if !defined(OPENSSL_SMALL_FOOTPRINT)
20 ((
size_t) in | (
size_t) out | (
size_t) ivec) %
sizeof(
size_t) != 0) {
22 for (n = 0; n < 16; ++n)
23 out[n] = in[n] ^ iv[n];
24 (*block)(out, out,
key);
32 for (n = 0; n < 16; n +=
sizeof(size_t))
33 *(
size_t *) (out + n) =
34 *(
size_t *) (in + n) ^ *(
size_t *) (iv + n);
35 (*block)(out, out,
key);
44 for (n = 0; n < 16 && n < len; ++n)
45 out[n] = in[n] ^ iv[n];
48 (*block)(out, out,
key);
60 size_t len,
const void *
key,
65 size_t t[16 /
sizeof(size_t)];
72 #if !defined(OPENSSL_SMALL_FOOTPRINT)
74 const unsigned char *iv = ivec;
77 ((
size_t) in | (
size_t) out | (
size_t) ivec) %
sizeof(size_t) != 0) {
79 (*block)(in, out,
key);
80 for (n = 0; n < 16; ++n)
87 }
else if (16 %
sizeof(
size_t) == 0) {
89 size_t *out_t = (
size_t *) out, *iv_t = (
size_t *) iv;
91 (*block)(in, out,
key);
92 for (n = 0; n < 16 /
sizeof(size_t); n++)
100 memcpy(ivec, iv, 16);
103 ((
size_t) in | (
size_t) out | (
size_t) ivec) %
sizeof(
size_t) != 0) {
106 (*block)(in, tmp.c,
key);
107 for (n = 0; n < 16; ++n) {
109 out[n] = tmp.c[n] ^ ivec[n];
116 }
else if (16 %
sizeof(
size_t) == 0) {
118 size_t c, *out_t = (
size_t *) out, *ivec_t = (
size_t *) ivec;
119 const size_t *in_t = (
const size_t *) in;
121 (*block)(in, tmp.c,
key);
122 for (n = 0; n < 16 /
sizeof(size_t); n++) {
124 out_t[n] = tmp.t[n] ^ ivec_t[n];
136 (*block)(in, tmp.c,
key);
137 for (n = 0; n < 16 && n < len; ++n) {
139 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)