let plaintext_buf = &mut [0; 1024]; // Can't use PLAINTEXT.len() here. let plaintext = dec
.decrypt(1, AAD, ciphertext, plaintext_buf)
.expect("decrypt should also work");
assert_eq!(plaintext, PLAINTEXT);
// Decryption failures... // Different counter. let res = dec.decrypt(2, AAD, ciphertext, plaintext_buf);
assert!(res.is_err());
// Front-truncate ciphertext. let res = dec.decrypt(1, AAD, &ciphertext[1..], plaintext_buf);
assert!(res.is_err());
// End-truncate ciphertext. let ciphertext_last = ciphertext.len() - 1; let res = dec.decrypt(1, AAD, &ciphertext[..ciphertext_last], plaintext_buf);
assert!(res.is_err());
// Mess with the buffer. letmut scratch = Vec::new();
scratch.extend_from_slice(ciphertext);
// Toggle first octet.
scratch[0] ^= TOGGLE; let res = dec.decrypt(1, AAD, &scratch[..], plaintext_buf);
assert!(res.is_err());
// Toggle the auth tag.
scratch[0] ^= TOGGLE;
scratch[ciphertext_last] ^= TOGGLE; let res = dec.decrypt(1, AAD, &scratch[..], plaintext_buf);
assert!(res.is_err());
// Mess with the AAD.
scratch.clear();
scratch.extend_from_slice(AAD);
// Front-truncate. let res = dec.decrypt(1, &scratch[1..], ciphertext, plaintext_buf);
assert!(res.is_err());
// End-truncate. let aad_last = AAD.len() - 1; let res = dec.decrypt(1, &scratch[..aad_last], ciphertext, plaintext_buf);
assert!(res.is_err());
scratch[0] ^= TOGGLE; let res = dec.decrypt(1, &scratch[..], ciphertext, plaintext_buf);
assert!(res.is_err());
}
#[test] fn aead_encrypt_in_place_too_small_buffer() { let aead = make_aead(&make_secret(), TLS_AES_128_GCM_SHA256, Mode::Encrypt);
// Create a buffer that's smaller than the expansion size letmut small_buffer = vec![0u8; aead.expansion() - 1];
let result = aead.encrypt_in_place(1, AAD, &mut small_buffer);
assert!(result.is_err());
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.