* src/gcrypt.h.in (_GCRY_GCC_ATTR_NONSTRING): New. * cipher/chacha20.c (chacha20_keysetup): Use _GCRY_GCC_ATTR_NONSTRING. * cipher/cipher-gcm-siv.c (gcm_siv_selftest): Likewise. * cipher/ecc.c (compute_keygrip): Likewise. * cipher/serpent.c (serpent_test): Likewise. * tests/basic.c (check_aes128_cbc_cts_cipher): Likewise. (_check_gcm_cipher, check_gcm_siv_cipher): Likewise. (check_ocb_cipher_largebuf_split, check_ocb_cipher_checksum): Likewise. * tests/keygrip.c (key_grips): Likewise.
-- GnuPG-bug-id: 7617 Signed-off-by: NIIBE Yutaka <gni...@fsij.org> --- cipher/chacha20.c | 4 ++-- cipher/cipher-gcm-siv.c | 16 ++++++++-------- cipher/ecc.c | 2 +- cipher/serpent.c | 6 +++--- src/gcrypt.h.in | 9 +++++++++ tests/basic.c | 34 +++++++++++++++++----------------- tests/keygrip.c | 2 +- 7 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/cipher/chacha20.c b/cipher/chacha20.c index 8b547db3..848adbe5 100644 --- a/cipher/chacha20.c +++ b/cipher/chacha20.c @@ -428,8 +428,8 @@ static void chacha20_keysetup (CHACHA20_context_t *ctx, const byte *key, unsigned int keylen) { - static const char sigma[16] = "expand 32-byte k"; - static const char tau[16] = "expand 16-byte k"; + static const char sigma[16] _GCRY_GCC_ATTR_NONSTRING = "expand 32-byte k"; + static const char tau[16] _GCRY_GCC_ATTR_NONSTRING = "expand 16-byte k"; const char *constants; ctx->input[4] = buf_get_le32(key + 0); diff --git a/cipher/cipher-gcm-siv.c b/cipher/cipher-gcm-siv.c index 1f7a52bc..b92ae45d 100644 --- a/cipher/cipher-gcm-siv.c +++ b/cipher/cipher-gcm-siv.c @@ -248,22 +248,22 @@ do_ctr_le32 (gcry_cipher_hd_t c, byte *outbuf, const byte *inbuf, static int gcm_siv_selftest (gcry_cipher_hd_t c) { - static const byte in1[GCRY_SIV_BLOCK_LEN] = + static const byte in1[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; - static const byte out1[GCRY_SIV_BLOCK_LEN] = + static const byte out1[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; - static const byte in2[GCRY_SIV_BLOCK_LEN] = + static const byte in2[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\x9c\x98\xc0\x4d\xf9\x38\x7d\xed\x82\x81\x75\xa9\x2b\xa6\x52\xd8"; - static const byte out2[GCRY_SIV_BLOCK_LEN] = + static const byte out2[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\x4e\x4c\x60\x26\xfc\x9c\x3e\xf6\xc1\x40\xba\xd4\x95\xd3\x29\x6c"; - static const byte polyval_key[GCRY_SIV_BLOCK_LEN] = + static const byte polyval_key[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\x25\x62\x93\x47\x58\x92\x42\x76\x1d\x31\xf8\x26\xba\x4b\x75\x7b"; - static const byte ghash_key[GCRY_SIV_BLOCK_LEN] = + static const byte ghash_key[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\xdc\xba\xa5\xdd\x13\x7c\x18\x8e\xbb\x21\x49\x2c\x23\xc9\xb1\x12"; - static const byte polyval_data[GCRY_SIV_BLOCK_LEN * 2] = + static const byte polyval_data[GCRY_SIV_BLOCK_LEN * 2] _GCRY_GCC_ATTR_NONSTRING = "\x4f\x4f\x95\x66\x8c\x83\xdf\xb6\x40\x17\x62\xbb\x2d\x01\xa2\x62" "\xd1\xa2\x4d\xdd\x27\x21\xd0\x06\xbb\xe4\x5f\x20\xd3\xc9\xf3\x62"; - static const byte polyval_tag[GCRY_SIV_BLOCK_LEN] = + static const byte polyval_tag[GCRY_SIV_BLOCK_LEN] _GCRY_GCC_ATTR_NONSTRING = "\xf7\xa3\xb4\x7b\x84\x61\x19\xfa\xe5\xb7\x86\x6c\xf5\xe5\xb7\x7e"; byte tmp[GCRY_SIV_BLOCK_LEN]; diff --git a/cipher/ecc.c b/cipher/ecc.c index d9cd32c3..51364b64 100644 --- a/cipher/ecc.c +++ b/cipher/ecc.c @@ -1699,7 +1699,7 @@ static gpg_err_code_t compute_keygrip (gcry_md_hd_t md, gcry_sexp_t keyparms) { #define N_COMPONENTS 6 - static const char names[N_COMPONENTS] = "pabgnq"; + static const char names[N_COMPONENTS] _GCRY_GCC_ATTR_NONSTRING = "pabgnq"; gpg_err_code_t rc; gcry_sexp_t l1; gcry_mpi_t values[N_COMPONENTS]; diff --git a/cipher/serpent.c b/cipher/serpent.c index 74d132ab..72a2287d 100644 --- a/cipher/serpent.c +++ b/cipher/serpent.c @@ -1880,9 +1880,9 @@ serpent_test (void) static struct test { int key_length; - unsigned char key[32]; - unsigned char text_plain[16]; - unsigned char text_cipher[16]; + unsigned char key[32] _GCRY_GCC_ATTR_NONSTRING; + unsigned char text_plain[16] _GCRY_GCC_ATTR_NONSTRING; + unsigned char text_cipher[16] _GCRY_GCC_ATTR_NONSTRING; } test_data[] = { { diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in index a9c36aa6..aa8a1f37 100644 --- a/src/gcrypt.h.in +++ b/src/gcrypt.h.in @@ -96,6 +96,12 @@ extern "C" { #define _GCRY_GCC_ATTR_SENTINEL(a) __attribute__ ((sentinel(a))) #endif +#if _GCRY_GCC_VERSION >= 80000 +#define _GCRY_GCC_ATTR_NONSTRING __attribute__((__nonstring__)) +#else +#define _GCRY_GCC_ATTR_NONSTRING +#endif + #endif /*__GNUC__*/ #ifndef _GCRY_GCC_ATTR_DEPRECATED @@ -113,6 +119,9 @@ extern "C" { #ifndef _GCRY_GCC_ATTR_SENTINEL #define _GCRY_GCC_ATTR_SENTINEL(a) #endif +#ifndef _GCRY_GCC_ATTR_NONSTRING +#define _GCRY_GCC_ATTR_NONSTRING +#endif /* Make up an attribute to mark functions and types as deprecated but allow internal use by Libgcrypt. */ diff --git a/tests/basic.c b/tests/basic.c index 72c65b58..b62a9a90 100644 --- a/tests/basic.c +++ b/tests/basic.c @@ -589,7 +589,7 @@ check_cbc_mac_cipher (void) static void check_aes128_cbc_cts_cipher (void) { - static const char key[128 / 8] = "chicken teriyaki"; + static const char key[128 / 8] _GCRY_GCC_ATTR_NONSTRING = "chicken teriyaki"; static const unsigned char plaintext[] = "I would like the General Gau's Chicken, please, and wonton soup."; static const struct tv @@ -3550,15 +3550,15 @@ _check_gcm_cipher (unsigned int step) static const struct tv { int algo; - char key[MAX_DATA_LEN]; - char iv[MAX_DATA_LEN]; + char key[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; + char iv[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; int ivlen; - unsigned char aad[MAX_DATA_LEN]; + unsigned char aad[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; int aadlen; - unsigned char plaintext[MAX_GCM_DATA_LEN]; + unsigned char plaintext[MAX_GCM_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; int inlen; - char out[MAX_GCM_DATA_LEN]; - char tag[MAX_DATA_LEN]; + char out[MAX_GCM_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; + char tag[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; int taglen; int should_fail; } tv[] = @@ -5743,14 +5743,14 @@ check_gcm_siv_cipher (void) { int algo; int flags; - char key[MAX_DATA_LEN]; - char nonce[12]; - char ad[MAX_DATA_LEN]; + char key[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; + char nonce[12] _GCRY_GCC_ATTR_NONSTRING; + char ad[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; int adlen; - unsigned char plaintext[MAX_DATA_LEN * 2]; + unsigned char plaintext[MAX_DATA_LEN * 2] _GCRY_GCC_ATTR_NONSTRING; int inlen; - char out[MAX_DATA_LEN * 2]; - char tag[MAX_DATA_LEN]; + char out[MAX_DATA_LEN * 2] _GCRY_GCC_ATTR_NONSTRING; + char tag[MAX_DATA_LEN] _GCRY_GCC_ATTR_NONSTRING; } tv[] = { /* Test vectors from RFC8452 */ @@ -9059,10 +9059,10 @@ static void check_ocb_cipher_largebuf_split (int algo, int keylen, const char *tagexpect, unsigned int splitpos) { - static const unsigned char key[32] = + static const unsigned char key[32] _GCRY_GCC_ATTR_NONSTRING = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; - static const unsigned char nonce[12] = + static const unsigned char nonce[12] _GCRY_GCC_ATTR_NONSTRING = "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x00\x01\x02\x03"; const size_t buflen = 1024 * 1024 * 2 + 32; unsigned char *inbuf; @@ -9282,10 +9282,10 @@ out_free: static void check_ocb_cipher_checksum (int algo, int keylen) { - static const unsigned char key[32] = + static const unsigned char key[32] _GCRY_GCC_ATTR_NONSTRING = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; - static const unsigned char nonce[12] = + static const unsigned char nonce[12] _GCRY_GCC_ATTR_NONSTRING = "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x00\x01\x02\x03"; const size_t buflen = 128 * 16; unsigned char *inbuf, *outbuf; diff --git a/tests/keygrip.c b/tests/keygrip.c index cf650350..503a2c05 100644 --- a/tests/keygrip.c +++ b/tests/keygrip.c @@ -56,7 +56,7 @@ static struct { int algo; const char *key; - const unsigned char grip[20]; + const unsigned char grip[20] _GCRY_GCC_ATTR_NONSTRING; int skip_when_fips; } key_grips[] = {
_______________________________________________ Gcrypt-devel mailing list Gcrypt-devel@gnupg.org https://lists.gnupg.org/mailman/listinfo/gcrypt-devel