summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2022-04-30 00:09:37 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2022-04-30 13:02:07 +0300
commit9ba1f0091ff408d6140ee75a56fd67f02d0d3f30 (patch)
tree24242af6611ad03a5f2661cdfb8b8c050687430a
parente239738b4af28b64ab617900fced8a216552e9f1 (diff)
downloadlibgcrypt-9ba1f0091ff408d6140ee75a56fd67f02d0d3f30.tar.gz
tests/basic: add testing for partial bulk processing code paths
* tests/basic.c (check_one_cipher_core): Add 'split_mode' parameter and handling for split_mode==1. (check_one_cipher): Use split_mode==0 for existing check_one_cipher_core calls; Add new large buffer check with split_mode==1. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-rw-r--r--tests/basic.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/tests/basic.c b/tests/basic.c
index 85764591..40a0a474 100644
--- a/tests/basic.c
+++ b/tests/basic.c
@@ -10940,7 +10940,7 @@ static int
check_one_cipher_core (int algo, int mode, int flags,
const char *key, size_t nkey,
const unsigned char *plain, size_t nplain,
- int bufshift, int pass)
+ int bufshift, int split_mode, int pass)
{
gcry_cipher_hd_t hd;
unsigned char *in_buffer, *out_buffer;
@@ -11199,7 +11199,9 @@ check_one_cipher_core (int algo, int mode, int flags,
}
pos += piecelen;
- piecelen = piecelen * 2 - ((piecelen != blklen) ? blklen : 0);
+ piecelen = split_mode == 1
+ ? (piecelen + blklen)
+ : (piecelen * 2 - ((piecelen != blklen) ? blklen : 0));
}
if (taglen > 0)
@@ -11246,7 +11248,9 @@ check_one_cipher_core (int algo, int mode, int flags,
}
pos += piecelen;
- piecelen = piecelen * 2 - ((piecelen != blklen) ? blklen : 0);
+ piecelen = split_mode == 1
+ ? (piecelen + blklen)
+ : (piecelen * 2 - ((piecelen != blklen) ? blklen : 0));
}
if (taglen > 0)
@@ -11292,7 +11296,9 @@ check_one_cipher_core (int algo, int mode, int flags,
}
pos += piecelen;
- piecelen = piecelen * 2 - ((piecelen != blklen) ? blklen : 0);
+ piecelen = split_mode == 1
+ ? (piecelen + blklen)
+ : (piecelen * 2 - ((piecelen != blklen) ? blklen : 0));
}
if (memcmp (enc_result, out, nplain))
@@ -11321,7 +11327,9 @@ check_one_cipher_core (int algo, int mode, int flags,
}
pos += piecelen;
- piecelen = piecelen * 2 - ((piecelen != blklen) ? blklen : 0);
+ piecelen = split_mode == 1
+ ? (piecelen + blklen)
+ : (piecelen * 2 - ((piecelen != blklen) ? blklen : 0));
}
if (memcmp (plain, out, nplain))
@@ -11581,28 +11589,28 @@ check_one_cipher (int algo, int mode, int flags)
}
if (check_one_cipher_core (algo, mode, flags, key, 64, plain,
- medium_buffer_size, bufshift,
+ medium_buffer_size, bufshift, 0,
0+10*bufshift))
goto out;
/* Pass 1: Key not aligned. */
memmove (key+1, key, 64);
if (check_one_cipher_core (algo, mode, flags, key+1, 64, plain,
- medium_buffer_size, bufshift,
+ medium_buffer_size, bufshift, 0,
1+10*bufshift))
goto out;
/* Pass 2: Key not aligned and data not aligned. */
memmove (plain+1, plain, medium_buffer_size);
if (check_one_cipher_core (algo, mode, flags, key+1, 64, plain+1,
- medium_buffer_size, bufshift,
+ medium_buffer_size, bufshift, 0,
2+10*bufshift))
goto out;
/* Pass 3: Key aligned and data not aligned. */
memmove (key, key+1, 64);
if (check_one_cipher_core (algo, mode, flags, key, 64, plain+1,
- medium_buffer_size, bufshift,
+ medium_buffer_size, bufshift, 0,
3+10*bufshift))
goto out;
}
@@ -11621,10 +11629,15 @@ check_one_cipher (int algo, int mode, int flags)
}
if (check_one_cipher_core (algo, mode, flags, key, 64, plain,
- large_buffer_size, bufshift,
+ large_buffer_size, bufshift, 0,
50))
goto out;
+ if (check_one_cipher_core (algo, mode, flags, key, 64, plain,
+ large_buffer_size, bufshift, 1,
+ 51))
+ goto out;
+
/* Pass 6: Counter overflow tests for ChaCha20 and CTR mode. */
if (mode == GCRY_CIPHER_MODE_STREAM && algo == GCRY_CIPHER_CHACHA20)
{