@@ -40,13 +40,19 @@ class AEAD_Tests final : public Text_Based_Test {
4040 result.confirm (" AEAD name is not empty" , !enc->name ().empty ());
4141 result.confirm (" AEAD default nonce size is accepted" , enc->valid_nonce_length (enc->default_nonce_length ()));
4242
43- Botan::secure_vector< uint8_t > garbage = rng.random_vec (enc->update_granularity ());
43+ auto get_garbage = [&] { return rng.random_vec (enc->update_granularity ()); } ;
4444
4545 if (is_siv == false ) {
46- result.test_throws (" Unkeyed object throws for encrypt" , [&]() { enc->update (garbage); });
46+ result.test_throws (" Unkeyed object throws for encrypt" , [&]() {
47+ auto garbage = get_garbage ();
48+ enc->update (garbage);
49+ });
4750 }
4851
49- result.test_throws (" Unkeyed object throws for encrypt" , [&]() { enc->finish (garbage); });
52+ result.test_throws (" Unkeyed object throws for encrypt" , [&]() {
53+ auto garbage = get_garbage ();
54+ enc->finish (garbage);
55+ });
5056
5157 if (enc->associated_data_requires_key ()) {
5258 result.test_throws (" Unkeyed object throws for set AD" ,
@@ -61,12 +67,20 @@ class AEAD_Tests final : public Text_Based_Test {
6167 result.test_eq (" key is set" , enc->has_keying_material (), true );
6268
6369 if (is_siv == false ) {
64- result.test_throws (" Cannot process data until nonce is set (enc)" , [&]() { enc->update (garbage); });
65- result.test_throws (" Cannot process data until nonce is set (enc)" , [&]() { enc->finish (garbage); });
70+ result.test_throws (" Cannot process data until nonce is set (enc)" , [&]() {
71+ auto garbage = get_garbage ();
72+ enc->update (garbage);
73+ });
74+ result.test_throws (" Cannot process data until nonce is set (enc)" , [&]() {
75+ auto garbage = get_garbage ();
76+ enc->finish (garbage);
77+ });
6678 }
6779
6880 enc->set_associated_data (mutate_vec (ad, rng));
6981 enc->start (mutate_vec (nonce, rng));
82+
83+ auto garbage = get_garbage ();
7084 enc->update (garbage);
7185
7286 // reset message specific state
@@ -195,13 +209,19 @@ class AEAD_Tests final : public Text_Based_Test {
195209
196210 result.test_eq (" AEAD decrypt output_length is correct" , dec->output_length (input.size ()), expected.size ());
197211
198- Botan::secure_vector< uint8_t > garbage = rng.random_vec (dec->update_granularity ());
212+ auto get_garbage = [&] { return rng.random_vec (dec->update_granularity ()); } ;
199213
200214 if (is_siv == false ) {
201- result.test_throws (" Unkeyed object throws for decrypt" , [&]() { dec->update (garbage); });
215+ result.test_throws (" Unkeyed object throws for decrypt" , [&]() {
216+ auto garbage = get_garbage ();
217+ dec->update (garbage);
218+ });
202219 }
203220
204- result.test_throws (" Unkeyed object throws for decrypt" , [&]() { dec->finish (garbage); });
221+ result.test_throws (" Unkeyed object throws for decrypt" , [&]() {
222+ auto garbage = get_garbage ();
223+ dec->finish (garbage);
224+ });
205225
206226 if (dec->associated_data_requires_key ()) {
207227 result.test_throws (" Unkeyed object throws for set AD" ,
@@ -216,12 +236,18 @@ class AEAD_Tests final : public Text_Based_Test {
216236 dec->set_associated_data (mutate_vec (ad, rng));
217237
218238 if (is_siv == false ) {
219- result.test_throws (" Cannot process data until nonce is set (dec)" , [&]() { dec->update (garbage); });
220- result.test_throws (" Cannot process data until nonce is set (dec)" , [&]() { dec->finish (garbage); });
239+ result.test_throws (" Cannot process data until nonce is set (dec)" , [&]() {
240+ auto garbage = get_garbage ();
241+ dec->update (garbage);
242+ });
243+ result.test_throws (" Cannot process data until nonce is set (dec)" , [&]() {
244+ auto garbage = get_garbage ();
245+ dec->finish (garbage);
246+ });
221247 }
222248
223249 dec->start (mutate_vec (nonce, rng));
224-
250+ auto garbage = get_garbage ();
225251 dec->update (garbage);
226252
227253 // reset message specific state
0 commit comments