Commit 09311caa authored by Niels Möller's avatar Niels Möller
Browse files

Improved type-checking hack in CBC_ENCRYPT and similar macros.

parent fccdf01b
2014-12-12 Niels Möller <nisse@lysator.liu.se>
* cbc.h (CBC_ENCRYPT, CBC_DECRYPT): Make type-checking hack
stricter, warn if type of length argument is smaller than size_t.
* ctr.h (CTR_CRYPT): Likewise.
* eax.h (EAX_SET_KEY, EAX_SET_NONCE, EAX_UPDATE, EAX_ENCRYPT)
(EAX_DECRYPT, EAX_DIGEST): Likewise.
* gcm.h (GCM_SET_KEY, GCM_ENCRYPT, GCM_DECRYPT, GCM_DIGEST):
Likewise.
2014-11-24 Niels Möller <nisse@lysator.liu.se> 2014-11-24 Niels Möller <nisse@lysator.liu.se>
* gcm.h (GCM_SET_KEY): Rename macro argument KEY to avoid * gcm.h (GCM_SET_KEY): Rename macro argument KEY to avoid
......
...@@ -64,14 +64,16 @@ memcpy((ctx)->iv, (data), sizeof((ctx)->iv)) ...@@ -64,14 +64,16 @@ memcpy((ctx)->iv, (data), sizeof((ctx)->iv))
/* NOTE: Avoid using NULL, as we don't include anything defining it. */ /* NOTE: Avoid using NULL, as we don't include anything defining it. */
#define CBC_ENCRYPT(self, f, length, dst, src) \ #define CBC_ENCRYPT(self, f, length, dst, src) \
(0 ? ((f)(&(self)->ctx, 0, (void *)0, (void *)0)) \ (0 ? ((f)(&(self)->ctx, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0)) \
: cbc_encrypt((void *) &(self)->ctx, \ : cbc_encrypt((void *) &(self)->ctx, \
(nettle_cipher_func *) (f), \ (nettle_cipher_func *) (f), \
sizeof((self)->iv), (self)->iv, \ sizeof((self)->iv), (self)->iv, \
(length), (dst), (src))) (length), (dst), (src)))
#define CBC_DECRYPT(self, f, length, dst, src) \ #define CBC_DECRYPT(self, f, length, dst, src) \
(0 ? ((f)(&(self)->ctx, 0, (void *)0, (void *)0)) \ (0 ? ((f)(&(self)->ctx, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0)) \
: cbc_decrypt((void *) &(self)->ctx, \ : cbc_decrypt((void *) &(self)->ctx, \
(nettle_cipher_func *) (f), \ (nettle_cipher_func *) (f), \
sizeof((self)->iv), (self)->iv, \ sizeof((self)->iv), (self)->iv, \
......
...@@ -57,7 +57,8 @@ ctr_crypt(const void *ctx, nettle_cipher_func *f, ...@@ -57,7 +57,8 @@ ctr_crypt(const void *ctx, nettle_cipher_func *f,
memcpy((ctx)->ctr, (data), sizeof((ctx)->ctr)) memcpy((ctx)->ctr, (data), sizeof((ctx)->ctr))
#define CTR_CRYPT(self, f, length, dst, src) \ #define CTR_CRYPT(self, f, length, dst, src) \
(0 ? ((f)(&(self)->ctx, 0, NULL, NULL)) \ (0 ? ((f)(&(self)->ctx, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0)) \
: ctr_crypt((void *) &(self)->ctx, \ : ctr_crypt((void *) &(self)->ctx, \
(nettle_cipher_func *) (f), \ (nettle_cipher_func *) (f), \
sizeof((self)->ctr), (self)->ctr, \ sizeof((self)->ctr), (self)->ctr, \
......
...@@ -114,36 +114,42 @@ eax_digest (struct eax_ctx *eax, const struct eax_key *key, ...@@ -114,36 +114,42 @@ eax_digest (struct eax_ctx *eax, const struct eax_key *key,
#define EAX_SET_KEY(ctx, set_key, encrypt, data) \ #define EAX_SET_KEY(ctx, set_key, encrypt, data) \
do { \ do { \
(set_key)(&(ctx)->cipher, (data)); \ (set_key)(&(ctx)->cipher, (data)); \
if (0) (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0); \ if (0) (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0); \
eax_set_key (&(ctx)->key, &(ctx)->cipher, (nettle_cipher_func *) encrypt); \ eax_set_key (&(ctx)->key, &(ctx)->cipher, (nettle_cipher_func *) encrypt); \
} while (0) } while (0)
#define EAX_SET_NONCE(ctx, encrypt, length, nonce) \ #define EAX_SET_NONCE(ctx, encrypt, length, nonce) \
(0 ? (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0) \ (0 ? (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: eax_set_nonce (&(ctx)->eax, &(ctx)->key, \ : eax_set_nonce (&(ctx)->eax, &(ctx)->key, \
&(ctx)->cipher, (nettle_cipher_func *) (encrypt), \ &(ctx)->cipher, (nettle_cipher_func *) (encrypt), \
(length), (nonce))) (length), (nonce)))
#define EAX_UPDATE(ctx, encrypt, length, data) \ #define EAX_UPDATE(ctx, encrypt, length, data) \
(0 ? (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0) \ (0 ? (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: eax_update (&(ctx)->eax, &(ctx)->key, \ : eax_update (&(ctx)->eax, &(ctx)->key, \
&(ctx)->cipher, (nettle_cipher_func *) (encrypt), \ &(ctx)->cipher, (nettle_cipher_func *) (encrypt), \
(length), (data))) (length), (data)))
#define EAX_ENCRYPT(ctx, encrypt, length, dst, src) \ #define EAX_ENCRYPT(ctx, encrypt, length, dst, src) \
(0 ? (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0) \ (0 ? (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: eax_encrypt (&(ctx)->eax, &(ctx)->key, \ : eax_encrypt (&(ctx)->eax, &(ctx)->key, \
&(ctx)->cipher, (nettle_cipher_func *) (encrypt), \ &(ctx)->cipher, (nettle_cipher_func *) (encrypt), \
(length), (dst), (src))) (length), (dst), (src)))
#define EAX_DECRYPT(ctx, encrypt, length, dst, src) \ #define EAX_DECRYPT(ctx, encrypt, length, dst, src) \
(0 ? (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0) \ (0 ? (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: eax_decrypt (&(ctx)->eax, &(ctx)->key, \ : eax_decrypt (&(ctx)->eax, &(ctx)->key, \
&(ctx)->cipher, (nettle_cipher_func *) (encrypt), \ &(ctx)->cipher, (nettle_cipher_func *) (encrypt), \
(length), (dst), (src))) (length), (dst), (src)))
#define EAX_DIGEST(ctx, encrypt, length, digest) \ #define EAX_DIGEST(ctx, encrypt, length, digest) \
(0 ? (encrypt) (&(ctx)->cipher, 0, (void *) 0, (void *) 0) \ (0 ? (encrypt) (&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: eax_digest (&(ctx)->eax, &(ctx)->key, \ : eax_digest (&(ctx)->eax, &(ctx)->key, \
&(ctx)->cipher, (nettle_cipher_func *) (encrypt), \ &(ctx)->cipher, (nettle_cipher_func *) (encrypt), \
(length), (digest))) (length), (digest)))
......
...@@ -151,10 +151,11 @@ gcm_digest(struct gcm_ctx *ctx, const struct gcm_key *key, ...@@ -151,10 +151,11 @@ gcm_digest(struct gcm_ctx *ctx, const struct gcm_key *key,
{ struct gcm_key key; struct gcm_ctx gcm; type cipher; } { struct gcm_key key; struct gcm_ctx gcm; type cipher; }
/* NOTE: Avoid using NULL, as we don't include anything defining it. */ /* NOTE: Avoid using NULL, as we don't include anything defining it. */
#define GCM_SET_KEY(ctx, set_key, encrypt, gcm_key) \ #define GCM_SET_KEY(ctx, set_key, encrypt, gcm_key) \
do { \ do { \
(set_key)(&(ctx)->cipher, (gcm_key)); \ (set_key)(&(ctx)->cipher, (gcm_key)); \
if (0) (encrypt)(&(ctx)->cipher, 0, (void *)0, (void *)0); \ if (0) (encrypt)(&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0); \
gcm_set_key(&(ctx)->key, &(ctx)->cipher, \ gcm_set_key(&(ctx)->key, &(ctx)->cipher, \
(nettle_cipher_func *) (encrypt)); \ (nettle_cipher_func *) (encrypt)); \
} while (0) } while (0)
...@@ -166,19 +167,22 @@ gcm_digest(struct gcm_ctx *ctx, const struct gcm_key *key, ...@@ -166,19 +167,22 @@ gcm_digest(struct gcm_ctx *ctx, const struct gcm_key *key,
gcm_update(&(ctx)->gcm, &(ctx)->key, (length), (data)) gcm_update(&(ctx)->gcm, &(ctx)->key, (length), (data))
#define GCM_ENCRYPT(ctx, encrypt, length, dst, src) \ #define GCM_ENCRYPT(ctx, encrypt, length, dst, src) \
(0 ? (encrypt)(&(ctx)->cipher, 0, (void *)0, (void *)0) \ (0 ? (encrypt)(&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: gcm_encrypt(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \ : gcm_encrypt(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \
(nettle_cipher_func *) (encrypt), \ (nettle_cipher_func *) (encrypt), \
(length), (dst), (src))) (length), (dst), (src)))
#define GCM_DECRYPT(ctx, encrypt, length, dst, src) \ #define GCM_DECRYPT(ctx, encrypt, length, dst, src) \
(0 ? (encrypt)(&(ctx)->cipher, 0, (void *)0, (void *)0) \ (0 ? (encrypt)(&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: gcm_decrypt(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \ : gcm_decrypt(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \
(nettle_cipher_func *) (encrypt), \ (nettle_cipher_func *) (encrypt), \
(length), (dst), (src))) (length), (dst), (src)))
#define GCM_DIGEST(ctx, encrypt, length, digest) \ #define GCM_DIGEST(ctx, encrypt, length, digest) \
(0 ? (encrypt)(&(ctx)->cipher, 0, (void *)0, (void *)0) \ (0 ? (encrypt)(&(ctx)->cipher, ~(size_t) 0, \
(uint8_t *) 0, (const uint8_t *) 0) \
: gcm_digest(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \ : gcm_digest(&(ctx)->gcm, &(ctx)->key, &(ctx)->cipher, \
(nettle_cipher_func *) (encrypt), \ (nettle_cipher_func *) (encrypt), \
(length), (digest))) (length), (digest)))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment