From 7ebaa4d7a92a4452347fe3f4f47f82517e551065 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 13 Jul 2026 15:04:41 +0200 Subject: [PATCH] Add c2sp.org/chunked-encryption (Cobblestone) test vectors --- README.md | 1 + doc/c2sp_chunked_encryption.md | 90 +++ schemas/c2sp_chunked_encryption_schema.json | 308 ++++++++++ ...p_chunked_encryption_aes_128_gcm_test.json | 548 ++++++++++++++++++ ...p_chunked_encryption_aes_256_gcm_test.json | 548 ++++++++++++++++++ tools/vectorlint/main.go | 40 ++ 6 files changed, 1535 insertions(+) create mode 100644 doc/c2sp_chunked_encryption.md create mode 100644 schemas/c2sp_chunked_encryption_schema.json create mode 100644 testvectors_v1/c2sp_chunked_encryption_aes_128_gcm_test.json create mode 100644 testvectors_v1/c2sp_chunked_encryption_aes_256_gcm_test.json diff --git a/README.md b/README.md index 5a75c3f5..e67ac2ea 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ including - ASCON v1.2 (not yet SP 800-232) - Camellia - ChaCha20-Poly1305 +- [Chunked encryption (Cobblestone)](doc/c2sp_chunked_encryption.md) - XChaCha20-Poly1305 - [DH](doc/dh.md) - DHIES diff --git a/doc/c2sp_chunked_encryption.md b/doc/c2sp_chunked_encryption.md new file mode 100644 index 00000000..dedb1f8f --- /dev/null +++ b/doc/c2sp_chunked_encryption.md @@ -0,0 +1,90 @@ +# Chunked encryption + +This document explains how to apply Wycheproof test vectors to an +implementation of the [c2sp.org/chunked-encryption][] scheme (Cobblestone). + +> [!TIP] +> This document can double as an LLM "skill" if you ask an agent to apply it. + +There is one test vector file per instantiation: + +- `testvectors_v1/c2sp_chunked_encryption_aes_128_gcm_test.json` for + Cobblestone-128 +- `testvectors_v1/c2sp_chunked_encryption_aes_256_gcm_test.json` for + Cobblestone-256 + +The `aead` property of each test group is the underlying AEAD by IANA registry +name (`AEAD_AES_128_GCM` or `AEAD_AES_256_GCM`), and the `sha` property is the +hash function used for HKDF-Expand (`SHA-512` in both Cobblestone +instantiations). + +### Ciphertext compression + +The `ct` property is the ciphertext, zlib-compressed and then hex-encoded: +decode the hex, then decompress the resulting zlib stream. (Some vectors +exercise the rollover of the chunk counter past one byte, and are more than +4 MiB long. They are generated such that the ciphertext is almost entirely +zero bytes, which compresses very well.) + +For example, in Python use `zlib.decompress(bytes.fromhex(ct))`, or in Go use +`compress/zlib`. + +### Decryption + +Decryption can be tested by decrypting `ct` with `key` as the input key and +`ctx` as the context. `ctx` is a hex-encoded byte string, and may be empty +or contain arbitrary bytes. + +Decryption of `valid` vectors must succeed, and the resulting message must be +`msgLength` bytes long with SHA-512 hash `msgSha512`. (The message itself is +not included in the vectors because it can be multiple MiB long.) + +Decryption of `invalid` vectors must fail. Vectors with the `InvalidKeySize` +flag must be rejected when the key is provided. + +### Streaming decryption + +`invalid` vectors with the `PartialPlaintext` flag start with validly +encrypted chunks: their `msgLength` and `msgSha512` properties describe the +longest valid message prefix. A streaming decryption implementation may +produce up to that prefix before detecting the error. It must not produce any +message bytes beyond the prefix, it must eventually return an error, and it +must keep returning an error (rather than e.g. a clean end-of-message +signal) if reads continue. + +### Random access decryption + +If random access (seeking) decryption is supported, the same vectors should be +applied through that interface: reading the whole message must succeed for +`valid` vectors and fail for `invalid` ones. Note that reading *only a range +covered by validly encrypted chunks* of an `invalid` vector may legitimately +succeed, like for streaming decryption. + +Authenticating the message length by decrypting the final chunk (e.g. to seek +relative to the end of the message) must succeed for `valid` vectors and fail +for `invalid` ones, except those with the `ValidFinalChunk` flag: their final +chunk is validly encrypted at the correct index (the error is elsewhere in +the ciphertext), so length authentication may succeed. + +### Raw mode + +Vectors without the `HeaderFailure` flag can also be applied to +a raw mode implementation: remove the 56-byte header (the 24-byte salt and +the 32-byte commitment) from the beginning of the ciphertext, and decrypt it +with `aeadKey` and `baseNonce` directly. + +### Encryption + +Encryption uses a random salt, so its output can't be compared directly +against the vectors. It can be tested in one of the following ways: + +1. Raw mode encryption is deterministic: decrypt a `valid` vector to recover + the message, re-encrypt it with `aeadKey` and `baseNonce`, and check the + result matches the ciphertext without its 56-byte header. +2. If the implementation exposes a way to inject the salt (the first 24 bytes + of the ciphertext), re-encrypt the message of a `valid` vector with `key`, + `ctx`, and the salt, and check the result matches `ct` entirely. +3. Otherwise, round-trip: encrypt the message of a `valid` vector and check + that it decrypts correctly. + +[c2sp.org/chunked-encryption]: https://c2sp.org/chunked-encryption diff --git a/schemas/c2sp_chunked_encryption_schema.json b/schemas/c2sp_chunked_encryption_schema.json new file mode 100644 index 00000000..1d3944a8 --- /dev/null +++ b/schemas/c2sp_chunked_encryption_schema.json @@ -0,0 +1,308 @@ +{ + "type": "object", + "definitions": { + "ChunkedEncryptionTestGroup": { + "type": "object", + "properties": { + "type": { + "enum": [ + "ChunkedEncryption" + ] + }, + "aead": { + "enum": [ + "AEAD_AES_128_GCM", + "AEAD_AES_256_GCM" + ], + "description": "The underlying AEAD, by IANA registry name" + }, + "sha": { + "enum": [ + "SHA-512" + ], + "description": "The hash function used for HKDF-Expand" + }, + "tests": { + "type": "array", + "items": { + "$ref": "#/definitions/ChunkedEncryptionTestVector" + } + }, + "source": { + "$ref": "common.json#/definitions/Source" + } + }, + "additionalProperties": false, + "required": [ + "type", + "aead", + "sha", + "tests", + "source" + ] + }, + "ChunkedEncryptionTestVector": { + "type": "object", + "properties": { + "tcId": { + "type": "integer", + "description": "Identifier of the test case" + }, + "comment": { + "type": "string", + "description": "A brief description of the test case" + }, + "key": { + "type": "string", + "format": "HexBytes", + "description": "The input key (may have an invalid length)" + }, + "ctx": { + "type": "string", + "format": "HexBytes", + "description": "The context byte string (may be empty)" + }, + "ct": { + "type": "string", + "format": "CompressedHexBytes", + "description": "The ciphertext, zlib-compressed and then hex-encoded" + }, + "aeadKey": { + "type": "string", + "format": "HexBytes", + "description": "The derived AEAD key, for testing raw mode directly (absent for invalid vectors that exercise key derivation or the commitment check)" + }, + "baseNonce": { + "type": "string", + "format": "HexBytes", + "description": "The derived base nonce, for testing raw mode directly (absent for invalid vectors that exercise key derivation or the commitment check)" + }, + "msgLength": { + "type": "integer", + "minimum": 0, + "description": "The length in bytes of the message (for valid tests), or of the valid message prefix a streaming implementation may produce before failing (for invalid tests, if present)" + }, + "msgSha512": { + "type": "string", + "format": "HexBytes", + "description": "The SHA-512 hash of the message (for valid tests), or of the valid message prefix a streaming implementation may produce before failing (for invalid tests, if present)" + }, + "result": { + "$ref": "common.json#/definitions/Result" + }, + "flags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of flags" + } + }, + "allOf": [ + { + "if": { + "properties": { + "result": { + "const": "valid" + } + } + }, + "then": { + "required": [ + "aeadKey", + "baseNonce", + "msgLength", + "msgSha512" + ] + } + }, + { + "if": { + "properties": { + "flags": { + "contains": { + "const": "HeaderFailure" + } + } + } + }, + "then": { + "properties": { + "result": { + "const": "invalid" + } + }, + "not": { + "anyOf": [ + { + "required": [ + "aeadKey" + ] + }, + { + "required": [ + "baseNonce" + ] + }, + { + "required": [ + "msgLength" + ] + }, + { + "required": [ + "msgSha512" + ] + } + ] + } + } + }, + { + "if": { + "properties": { + "flags": { + "contains": { + "const": "PartialPlaintext" + } + } + } + }, + "then": { + "properties": { + "result": { + "const": "invalid" + } + }, + "required": [ + "aeadKey", + "baseNonce", + "msgLength", + "msgSha512" + ] + } + }, + { + "if": { + "properties": { + "flags": { + "contains": { + "const": "ValidFinalChunk" + } + } + } + }, + "then": { + "properties": { + "result": { + "const": "invalid" + } + }, + "required": [ + "aeadKey", + "baseNonce" + ] + } + }, + { + "if": { + "properties": { + "result": { + "const": "invalid" + }, + "flags": { + "not": { + "anyOf": [ + { + "contains": { + "const": "HeaderFailure" + } + }, + { + "contains": { + "const": "PartialPlaintext" + } + } + ] + } + } + } + }, + "then": { + "required": [ + "aeadKey", + "baseNonce" + ], + "not": { + "anyOf": [ + { + "required": [ + "msgLength" + ] + }, + { + "required": [ + "msgSha512" + ] + } + ] + } + } + } + ], + "additionalProperties": false, + "required": [ + "tcId", + "comment", + "key", + "ctx", + "ct", + "result", + "flags" + ] + } + }, + "properties": { + "algorithm": { + "enum": [ + "Cobblestone-128", + "Cobblestone-256" + ], + "description": "the primitive tested in the test file" + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "additional documentation" + }, + "notes": { + "$ref": "common.json#/definitions/Notes" + }, + "numberOfTests": { + "type": "integer", + "description": "the number of test vectors in this test" + }, + "schema": { + "enum": [ + "c2sp_chunked_encryption_schema.json" + ] + }, + "testGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/ChunkedEncryptionTestGroup" + } + } + }, + "additionalProperties": false, + "required": [ + "algorithm", + "header", + "notes", + "numberOfTests", + "schema", + "testGroups" + ] +} diff --git a/testvectors_v1/c2sp_chunked_encryption_aes_128_gcm_test.json b/testvectors_v1/c2sp_chunked_encryption_aes_128_gcm_test.json new file mode 100644 index 00000000..3feb0113 --- /dev/null +++ b/testvectors_v1/c2sp_chunked_encryption_aes_128_gcm_test.json @@ -0,0 +1,548 @@ +{ + "algorithm": "Cobblestone-128", + "header": [ + "Test vectors of type ChunkedEncryption are meant for the decryption of Cobblestone-128 (c2sp.org/chunked-encryption) messages", + "See doc/c2sp_chunked_encryption.md for details on how to apply these test vectors." + ], + "notes": { + "ChunkReordering": { + "bugType": "AUTH_BYPASS", + "description": "Encrypted chunks were reordered or duplicated. The per-chunk nonce derivation must cause decryption to fail." + }, + "CounterRollover": { + "bugType": "EDGE_CASE", + "description": "The message is long enough that the chunk counter XOR'd into the nonce crosses a byte boundary. Implementations with an incorrect counter encoding may fail to decrypt this valid message." + }, + "HeaderFailure": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext must be rejected while processing the header (because of its length, the key size, or the commitment check), before any chunk is decrypted. aeadKey and baseNonce are omitted, and raw mode does not apply." + }, + "InvalidKeySize": { + "bugType": "BASIC", + "description": "The input key length doesn't match the AEAD key size, and must be rejected." + }, + "ModifiedCiphertext": { + "bugType": "AUTH_BYPASS", + "description": "Part of the ciphertext (a chunk body, an authentication tag, the salt, or the commitment) was modified. Decryption must fail." + }, + "PartialPlaintext": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext is invalid, but it starts with validly encrypted chunks: msgLength and msgSha512 describe the longest valid message prefix. Streaming implementations may produce that prefix before detecting the error, but must eventually fail and keep failing." + }, + "TrailingData": { + "bugType": "AUTH_BYPASS", + "description": "The ciphertext has extra data (garbage bytes or even a validly encrypted chunk) after the short final chunk. Decryption must fail." + }, + "Truncation": { + "bugType": "AUTH_BYPASS", + "description": "The ciphertext has an invalid (e.g. truncated) length: it may be missing part of the header, part of a chunk, an authentication tag, or the required short final chunk. Decryption must fail." + }, + "ValidFinalChunk": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext is invalid, but its final chunk is validly encrypted at the correct index: authenticating the message length by decrypting the final chunk (e.g. to seek from the end) may succeed. It must fail for all other invalid vectors." + }, + "WrongContext": { + "bugType": "MISSING_STEP", + "description": "A valid ciphertext decrypted with a different context: the commitment check must reject it before any chunk is decrypted." + }, + "WrongKey": { + "bugType": "MISSING_STEP", + "description": "A valid ciphertext decrypted with a different key: the commitment check must reject it before any chunk is decrypted." + } + }, + "numberOfTests": 35, + "schema": "c2sp_chunked_encryption_schema.json", + "testGroups": [ + { + "type": "ChunkedEncryption", + "aead": "AEAD_AES_128_GCM", + "sha": "SHA-512", + "source": { + "name": "filippo.io/cobblestone", + "version": "5203de0d5c09d83d3a4ea7a99748c8245c39fcaa" + }, + "tests": [ + { + "tcId": 1, + "comment": "empty message", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da004800b7ff187cab8e8e163c24b527dc7cb554eca847e5d7dc592714ea7d7b5967607c6a68302fb25b26e0b032a6d39a239914ea2dc86aa17ec6d0beb1fdb011c7ad45ed1089aeffe3465fdf59010000ffff0c6f2574", + "aeadKey": "27c0195e3ac974de5c97f6fa08cbdc41", + "baseNonce": "eb673ca5da204afa6361cd11", + "msgLength": 0, + "msgSha512": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", + "result": "valid", + "flags": [] + }, + { + "tcId": 2, + "comment": "short message, single chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da004f00b0ff99ef5b6b98795b7b37a41d6321d8dd472347c76185f40027e921542dd7e4305bb67a175e5088a8a4db92ef4d3419bda917dd5099085be2f35cf32165613d4fe58db45dd4619b454586232f2661a2bf010000ffffd8e1254a", + "aeadKey": "18efc971cf196407e112951a187c63b6", + "baseNonce": "5f73d9f150410098b2cc408c", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 3, + "comment": "full chunk followed by short chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0ad4a03010000e0530e85c32058c4a8ed8241b870a02058fcc3e203885e1114c422d82cd744834145dfc06032892886855bde5696ee185b1f630c16f6182bdfb7b355e4ef8f6bcf5fc3381fcfaef6ef8fd77b4741fb74b47277f0fdb2b8fcfb73919d476761ab395f0e6ae97e78552e9c5c6f6701000000000000000000000000000000307549755b9f5bea6eecbd254fff9b0f87413153959f1f7f97d14dfcdae8a4bb93000000ffff3021296c", + "aeadKey": "d450cadb2ef8c58e264acb4d33375ee9", + "baseNonce": "324d7338db0feeccec4de6ac", + "msgLength": 16385, + "msgSha512": "72b0c82119222070adf3117d445bbf53d7ffb70b75be4809ecaf8939f058fcb6caceeece412a1f0d8c90f8c4db8fe9d199edf3e5007c2005d486c2e09d97ae45", + "result": "valid", + "flags": [] + }, + { + "tcId": 4, + "comment": "two full chunks followed by empty terminating chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd03f2b0501000070258bf2d48b0f6192c140ca6a7a947f19a46c5e52f246770c47b998943f590cb72b8bc9a2502675a4a3946460605277c3d5fb18b7fc7e1fe1b7f138df3a8cd3fa7e5996e7ddfd4ff9ead97b16d5b7ee6bbd8dcef1ffd1cbe4a836524ceef55d87e1f0cac5dd6cf0915d358be70e000000000000000000000000000000a072bf43c78337c1cbdbe7c049b4d6d8fc3102000000000000000000000000000000d55b5f3c9d9a197b589a88ff5eb3a4ab952ff7ec6eef34d38385b9e9fcf6fbab1d0000ffff6adc385e", + "aeadKey": "411a97c4432608adb858702ee75aa565", + "baseNonce": "b5e665df74b59a0f9dde3c02", + "msgLength": 32768, + "msgSha512": "cff833725cba01006e4d9a4fb23a949cf4082ca98fce3570edb07f71a01686579b5d0f3175edb8521139684b3552a0293adfcd55960206764fbbf60ec89adb12", + "result": "valid", + "flags": [] + }, + { + "tcId": 5, + "comment": "two full chunks followed by short chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd0bf2b05010000e0b72145af5e166f607231bc32c86836bc85e12965f36bf0e33158e83299cc6c8a2c472919d8e4a26eb9145d62b39194747583f267dcf27d7fc2f7b6f5bcdd9a194eabb5b1d59eced3a987dacfc0fa4177efd9dff774769517c1fc45f0f4d975bdb69bd6774e16c3a4ff75bce3a8685600000000000000000000000000000080d25de693d568f6fdf876f3e6bed9d8383702000000000000000000000000000000e51b8d070f97c395bef6dcd2e3ef48d2a8c443d1cbfec744fdaeb5d0cebe82bdff000000ffffcc093424", + "aeadKey": "b83aa6f6bac22ae965b50af86d9081a6", + "baseNonce": "5c592504342574a81eee52b3", + "msgLength": 32769, + "msgSha512": "f16c8845d526b3d2af655cabd27d47c6f1123916a357e376c0d5f230e842ca2c86b2fd97b8e37667afd147a98d5a7ca766c18cbb522a47d19970ad542bb7991c", + "result": "valid", + "flags": [] + }, + { + "tcId": 6, + "comment": "full chunk followed by empty terminating chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0312b05010000e01b6ebe6ed715523a17759348162911e315d3fd031b7519fc022e83fc0019a41483c8425126a3c1f05e6f7cc3ab375eeff5defb196ff9be93e63f19ee167341ebfaf1ee70f56ce567a3ee75669bd7e3fbe4a35e5fce77a2e7cba5abb5977c547e45e142fab9ff56768faa0000000000000000000000000000000098ba876c1c5e6ca74fb7ed62efe0fc77fea69c79ffeb2f66a7dff1606b33ae26010000fffff7962905", + "aeadKey": "36a243cbdbf2d2baf6b8a1fba28b6817", + "baseNonce": "9c15f6d0aad0dc0e280d6aef", + "msgLength": 16384, + "msgSha512": "aae514ccbcdfd4d3ce7146a116b7fef8a485fbcdc90fb6f6cba89b6c3095cb7688cef7e8735c69f3638e7bba770f4a37fa8d91eb98c94157c2a708c06373c0af", + "result": "valid", + "flags": [] + }, + { + "tcId": 7, + "comment": "256 full chunks plus short chunk, tests counter rollover past 0xFF", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd0796308f4e300602acce69a0ebe399b2337c9e41612a98cc8915ba610a1dc3565c6543a5c15ba36b949e488246cee9c21a2596e62480ae1f7323ebf3f9ee7253c7b2edc5cd86f65abadc36abf9b3f2d6ad547850b166c37bee55f05ffa87cbc744c9b65fd6b4426be57b158ae92f30e65c656bef2dc9c9706ff3566fb6ba7a2b301000000000000000000000000000000c1250dff7ac3c5379a6e9bfd71f2ab2d1f3e7dc70800000000000000000000000000000084d77ad3e34d66b5ad9c32e1d1ff5adf7565c67c23000000000000000000000000000000105e9e4f7aecb8f4dca576355a14ea7f72fffdd78c00000000000000000000000000000040785bb6271fcbfdd69b65a33b257669fdc8d0a24600000000000000000000000000000020bc9815dba68e6c7276f3d831835e4bfeedbf914600000000000000000000000000000020bcbf46f42a929a38f2dda7bfdeb7e84cb777638c00000000000000000000000000000040780fb7aa9efbb3ce896372b52d54606f8769e38d00000000000000000000000000000040783b6bd76f596f60f32ddbbf7f61ee23655f8c3002000000000000000000000000000000e15d1bd57fdaf001dfbf3cbbfb92a9b9f6ac2d6b04000000000000000000000000000000c28b9897de75d18232bd8b753e77b0f1c1d6ab8d0000000000000000000000000000004078eb667c7f3339b6d2e80a45275dd954a3df5a2300000000000000000000000000000010de7bc92f57e873e0db668b2e1f5bfa5a9742e58c000000000000000000000000000000407863fe38f15de1a92b9edffbf58dd3fd260fea6e04000000000000000000000000000000c27bf6af932faf6d5023e1970937336a467dd0ca0800000000000000000000000000000084773d7257c1b12b3e1fbc2c2131fbecc36bae1b01000000000000000000000000000080f0debdb5ebbf21ebf24e493d77fef6f7ef357dcb0800000000000000000000000000000084b76659e53559f33bf62972bec9f3abcf7f5add080000000000000000000000000000008457faad2ddb6f6c6e9d72293d6bf1ea6f67c61a01000000000000000000000000000080f0de8aa9fe7bd22b1d7b3438b225f9d94edf1c3602000000000000000000000000000000e16d29d230397641f3fe2d9a8fcd7ce7df65dd8c0000000000000000000000000000004078ad5a3dbe3fade486a81f638e367c3fb6ec462300000000000000000000000000000010deabdb0f1f3bd1f9ee512f2e1b38324fd6a8224600000000000000000000000000000020bc3ddb2fcfafb3e29556b39ff8f5ee222dbf4f3202000000000000000000000000000000e1f51cfdc18f43320ebd32aed0ca0bd5e7cfeb6204000000000000000000000000000000c28b1d55e3a5d4c15d37e4fff4d3f40ef39b0c3602000000000000000000000000000000e19dbe1517ddadfaba2e91c31e4d7a30dfd3538c00000000000000000000000000000040787f2d1979284ffdc8ffca94aef4e0a42d8dcb1a01000000000000000000000000000080f0164f6d99daf2a335e9eb173e7dff171f3e916204000000000000000000000000000000c2cb1a9af0d4e1afc78e28f965bde8de4d3fa96404000000000000000000000000000000c2dbf2e8b75b37d54f7b616f6af2b894114d161801000000000000000000000000000080f05ac47489cffcadc82fd9cf2c79a5526a5c1923000000000000000000000000000000105eed4b5fb64d792eeaf0b601178a3ef3dfa78d8c00000000000000000000000000000040780911852e3db26c4e56ccbbc752df9c3fb58411000000000000000000000000000000086fd8bea4bc110f75f9b4e1e00d91854eb53f6f04000000000000000000000000000000c2fbf7edec3b73441caa3c34e9c11773661fb3da0800000000000000000000000000000084b76356f651a576b54ece1cf14ead8db7136a1801000000000000000000000000000080f0ae8d8bbe6f7cdaae9e3bfb669ff67bf4a9424600000000000000000000000000000020bc3fe3f7df48ffe0d294d4ac7f9bc65c19d8d10800000000000000000000000000000084772affce1397771ddc3a71c89b85fe4ade106304000000000000000000000000000000c27beeece777bd56f96cd694376e57b8ab68c6552300000000000000000000000000000010dee4522f97bc556fe15d1fe6aa916b4497bc1d8c000000000000000000000000000000407873da56b9b4ba73f31d8bf2748bab5db5d4f34600000000000000000000000000000020bcbb8ec4dcc97372f7ef756f47c595ae3d32b71100000000000000000000000000000008aff99e0d6786dff7ef273b66fe53afffabb32f1801000000000000000000000000000080f096f419f5bfef67cd895bddfbb5879f9df9c7002300000000000000000000000000000010debd5b7a6eacf544a53da5fbcd89bfb422f70823000000000000000000000000000000105e54cb022f3d75e762a111ed3e5d91eb48e5d78d0000000000000000000000000000004078bfb5aad17870c7cc520ddef8eefe6ec316bd6204000000000000000000000000000000c26bdc6cc1be16853696a89956abdfe43215f21a01000000000000000000000000000080f06a1f8d491b902fe56c54fb3389eff5cb31dc0800000000000000000000000000000084f7c282c8a5cf2d5afec0a3df249c8ceed0ff5e2300000000000000000000000000000010dec25187c76dfda46c978ff7666e1fdf3df3b41100000000000000000000000000000008afe6d2f53d8efefc58d5e76bee4fcef5ebbc478d0000000000000000000000000000004078c57ebab6a271f302396f7df6ee8c417f3f3fc90800000000000000000000000000000084d7aac5a32d1fbeb56d5ff53f37ecaf7ab19710000000000000000000000000000000f87fa0718e1c8d6b3e31b8e4bca99b8a445cbc5cce0800000000000000000000000000000084376cf2a01addbb2f5e53bf68c7f2cd63d7ff6604000000000000000000000000000000c28b9f56e160e1b20333aa1c88fae9a79f774d3302000000000000000000000000000000e10dcfb5af6099161517963c96b5a3c5d8e5314600000000000000000000000000000020bc01b9df8a9c7cb15d9b4d3f44ee9fb070fc434600000000000000000000000000000020bc02110d9e9dd6b5c3ad8ec51bf66a3abf7d5d2300000000000000000000000000000010def15be93f279fabfbd9fbab6a6fc891fc748c1100000000000000000000000000000008aff284ddbb87bffdcd861e75f2d7e899312fbf11000000000000000000000000000000086fd280b9df352c5c32f9e39f3e6fd6b6d6c10c2300000000000000000000000000000010de63553adcfe5fe6d506633a44bfd57ac2e07b8c0000000000000000000000000000004078ddd76da9f8cecac6b5574f2abfedd49b8fec3102000000000000000000000000000000e19dc91c58fbeec2ddd21fa8fb40efea3f179d6604000000000000000000000000000000c26b576aeee9f78ee4e953aa6faf97b6cf5affb01100000000000000000000000000000008affcca997f4f7f6b4de7848c22df261dc9ffb111000000000000000000000000000000086f5eeef9a72f7f5c3a766cc12a0f6f6d7afb3523000000000000000000000000000000f0ff40eb9ed5123e89b9f940c2dcec5b670ecb1002000000000000000000000000000000e18d9db07acf07edfacfad762bdf9bbdde8c5a6904000000000000000000000000000000c27b3a47877557379499757be1d617531eec50d0080000000000000000000000000000008457f9a11f1666f59af5d3b7f3d34ffd393f3ecd0800000000000000000000000000000084f745ed964f161bb0e478875f72e798d4b6fed74600000000000000000000000000000020bc7bebf6997cf58baeab776c5eb1acd896015d8d00000000000000000000000000000040788f2f393567c0c23d6546e7eed2f9b17a57d61801000000000000000000000000000080f0560d6d794fbef4dba7ce6e7d3777af0e5fad3202000000000000000000000000000000e1c5af7a3dabef9d52710f3c57236d4a62e1c78c0000000000000000000000000000004078e31fcf95f8edc8ff5d9df6c75be75273fe38d80800000000000000000000000000000084b7627bea8c1b27a3b776aa1bf959fc871fcd3302000000000000000000000000000000e135bf18d52eadcac6dd671badd875ffecb8b24600000000000000000000000000000020bc41ebf26ee93caff0b69cb37a949b1ad5b1971100000000000000000000000000000008afda636d4b0db8d1b07af3a9d7df7c73c29df64600000000000000000000000000000020bc5f068f4b5af262fd935d6f7e39fad4b48fde3602000000000000000000000000000000e17d3f34f6ca4f076ff488fbe9e2735dd2ef396704000000000000000000000000000000c24bdddbbec58ec8c545622a563b3665d4a43f8d000000000000000000000000000000407827c7571f707be07d15f32dae5efc9e366b731a01000000000000000000000000000080f066e7de3fb74d7cf91c39221f9ebe7dd69aaf8c00000000000000000000000000000040782d2277bd3eb3e0964af18fcf5b7d3ce1622323000000000000000000000000000000105ed5af5312267ebff240b5a46a59ad96366c6e04000000000000000000000000000000c2fbb5ffd52faede7f61e9db27e636efd4efd61a2300000000000000000000000000000010dec9c1bfc5952a906d5ad97d317f5ce834f73e2300000000000000000000000000000010dec6528f0e5898eff4c4eb55b7d5fce787c1cf1801000000000000000000000000000080f0fe2cf8fc81f88f1f28dffab16cd3b28ded30d30800000000000000000000000000000084d7f7c4e3e9ad7f8818d6a9e2c2ae9dce56c83002000000000000000000000000000000e1ad1db2abe6cce157cf4fb9bd77d9a925296d8c0000000000000000000000000000004078cb7395eb78fada86525d2b7fd4f28d7f868e3702000000000000000000000000000000e125df4cdbbdad53c48779ea5c3ff27ae5f1038c00000000000000000000000000000040786b8ead6d38297f4ade3199dd7ea95d36f2a81100000000000000000000000000000008ef815716ff3876d0c9816dae5ffe3e67a9564f1901000000000000000000000000000080f072f41d5f74eda27d9d2a3c93f9685a8f49894600000000000000000000000000000020bc01ff467fd5b340d319f7dd7a78e1f5cba3561901000000000000000000000000000080f0b2371cbc3cf1f8cd7183329a34ea3e28b6911100000000000000000000000000000008efe39b9d172c2f9d54bb5b95acce2b3a45143702000000000000000000000000000000e155cb3166e09edf672714aff963a331f715eb6004000000000000000000000000000000c22b9ce3f69107df1e75677391d855db7ba4363302000000000000000000000000000000e1754c9dd8a6d5e20a71a90532f73cf7c2ca978d0000000000000000000000000000004078efbd31a1ddf3d3b7ae1db2f8faa86365df2c6704000000000000000000000000000000c25bba25a5db5d353e9d139df641a9e4ebbf9d3102000000000000000000000000000000e19d3c3ba877fb7b775539d675738b49350fec3402000000000000000000000000000000e15d3e3fb7f8c471ef365c9cfbc34db587afffd1080000000000000000000000000000008477cfe2c4f6b70b64644b3db42b6a6fa15e9d8d000000000000000000000000000000407817b22af54f2ad3f648f9c2137e58f754c59e4600000000000000000000000000000020bc6939ab9dbf79aee1dcc227f24c3e94fdcc6823000000000000000000000000000000105e8e79cd135ab57fe9d0d10691ed168e7cbd841100000000000000000000000000000008af59c481871abc3068e4f68577b2fe4dbab7a111000000000000000000000000000000082f2badd7faf2e7aa3e90d16e758f4b6b53fa1a01000000000000000000000000000080f0ca37cbbd6178f39d8d1eeb31edc5839fff50c0080000000000000000000000000000008437e84cbbb6d73bf59e3277e4f6b289ebbaaf3002000000000000000000000000000000e1955cbf75caa5096d9ac43589af333d69515b2300000000000000000000000000000010de9e132f9d5bf2ed9c8e4dff98bd6f729bcf328c0000000000000000000000000000004078d185ab5e8d1f5b65d6e497136b9ee95ff7a61100000000000000000000000000000008efc6889f5aaf7da3d92b73fe6afeead1b861b78c000000000000000000000000000000407877c75dfd28364fd36ef79e9893d171fef12a4600000000000000000000000000000020bcc563faa6bdb4b47faed1597bbf8eae9f31cb080000000000000000000000000000008477b94aaf7397530b17d8b33df6e3cb65f7a61901000000000000000000000000000080f02aac7933a9def1af32dbafed7c6fe1facd9a1801000000000000000000000000000080f04a64fdf4e5a05a4dda8f7c7659f6accfabae3302000000000000000000000000000000e1b57daad87d99ad6ff7d9b5a36bc14f57ae483402000000000000000000000000000000e1dd7cade08fe38a363af37af7ddd1a34e2cf8c4080000000000000000000000000000008477a1488799e57a65a4fc78f7e07a1b2e9f493002000000000000000000000000000000e1e5dfbca4d2b89ebd7fbcbbe1a1845f5f5fd2d208000000000000000000000000000000849777c0f472f38fd61a782e73c4afbbaec43f6f04000000000000000000000000000000c28b88aadbe2caef37b6ed3994ebf40b1deb573002000000000000000000000000000000e1356d907efb667ad5b79b9d1f9067faf1a74e1b01000000000000000000000000000080f072e6fbacd1c1a76f159f757c69ffc5115b0b1b01000000000000000000000000000080f08ea664ebb7ec95b4533bfb969adde4ca882f8d0000000000000000000000000000004078c323fe4ee8357dcc91b5eb2ade776ad633078c0000000000000000000000000000004078d766dd796642eff4e21b72d53bf7f8d36b2b1801000000000000000000000000000080f07ec9bcf47bb1afb27f7379f4b4cdcd86dc296404000000000000000000000000000000c2cbdb23212ad795bbc7f66efedc574bded8f29f1100000000000000000000000000000008efbd69e9efaf28b5f7898caf573d9dfbae43478d0000000000000000000000000000004078a347adcf9772b8706695215fdd3dffdae0ad4600000000000000000000000000000020bc5afd8a741ed5ff95de4dbf1c14f5ddda970f1a01000000000000000000000000000080f09a2d8f8acc882f141d7d285bf7cf963c31c80800000000000000000000000000000084d7e8dab28756f669556fedde5cfd4e949d37dd080000000000000000000000000000008497b7f9eea7bf6d95f44ddb6a39af3d1431fe0323000000000000000000000000000000105e44be9b5dfb579fb777d88d8245a39fc9136304000000000000000000000000000000c2bb18f17ed1e2377bf428596ec0d41cc7af8e3402000000000000000000000000000000e13df1e4b05a676306e698dce099a43b7f8e78dc080000000000000000000000000000008457acfbc82b03c636ae5b6bf9f4175a9718176504000000000000000000000000000000c29b533babc57be3367f5fe768ebf7fb2e18fa8d11000000000000000000000000000000082faecfc11737260f999defecbb856e2e4c596d04000000000000000000000000000000c27b75fea923db0f96ee3323f1e033857b3cf48d1100000000000000000000000000000008eff17de557557da1729e3bd73f2c13dbf9e6652300000000000000000000000000000010deaa130b2ae629fe77a74dff9649ba5a69f4762300000000000000000000000000000010de3bf7241c8c9fb6f08b59ab8e4fcf3a5eafb111000000000000000000000000000000086fe1e977329edefc4ae5c3ffa4ff7569c4edb78d0000000000000000000000000000004078df6d5ab57fd5f39b9abf15b368d7fdf99a1d3602000000000000000000000000000000e1e5fb60ea47d5d6351e17b362468767cfbf77db080000000000000000000000000000008437392e29bdcbee612757e45d72e7cece21bd8d00000000000000000000000000000040783ff4acbdbcf2f4363f1fef16ffd584cc99b58d00000000000000000000000000000040785fcefdf58b596b0eed2d31a1d8dd77e65dce6f04000000000000000000000000000000c2fb66f8c03a43c7de8a4efeee9d82939f7dff5123000000000000000000000000000000105e7c4abb428bcfff7172dfa2676a5f8cf85f9c1100000000000000000000000000000008ef6aa70a79fa7eb4e5b57a25967e5669fcd7858c00000000000000000000000000000040787d23a76f9ed9afcdb43bfb2754bdeb4e9d554600000000000000000000000000000020bc4fe3b76dfa734ac1ec978fb6daf8e2d63ef71b01000000000000000000000000000080f066262dbfdab8e45f5fbd73ee4cc136c576af3702000000000000000000000000000000e1a5d4fd22c786d9313336cefcb86ddb25bf5d3602000000000000000000000000000000e15dca2cf0f9c97c1d93d71f8bffb163e53b958c00000000000000000000000000000040783ff75a35f3526489891f5c58b0e4cf4543f61901000000000000000000000000000080f06a367e76628b69c346e76a75f5c1098b4a471901000000000000000000000000000080f0567c55e37062bdaf37ef8dbdbeabc3aee46823000000000000000000000000000000105ef7c8316b46dd1bbb65dbd26c0de2d6f5ab6704000000000000000000000000000000c2eb95a7fefc9a1bfee879ae62ef1f620f3fb6d1080000000000000000000000000000008457bae6ecfc0df60f6e59e67ad52265dbd5facf0800000000000000000000000000000084b7325baed7229ba4ee9cd13871e6c4b11f241801000000000000000000000000000080f0e6bc31a35eb1bcd97a5dcd5fe8f97beae43d6504000000000000000000000000000000c27bf7e20babefd974b1c5ff22460f19b023ae8311000000000000000000000000000000086fd953130b54ca733ddba5c52943861dbe50d80800000000000000000000000000000084f7d4d66c57ee2ffdcbb96bbd97ef3e992bf18611000000000000000000000000000000f87fe0fc4b29af76da3daefda6e34f556837aeae1000000000000000000000000000000008efef723f97bdd1f6c1033b2fd58aa9566b7aac1100000000000000000000000000000008afed5d3d9e7d7b5adc8c93739a979c51e5c97d4600000000000000000000000000000020bcf17dbf1853e7c09ea1a90d57ffd633714e861100000000000000000000000000000008efc109d3b79688f92e766f89821d36d729dfd80800000000000000000000000000000084d7eccae6492597957836b2e8bdeba2377cbec80800000000000000000000000000000084975aa1dabd832ee41d93d4bdc24bb5a67cd3ce0800000000000000000000000000000084376c6acdc1bf9e3a7c3dea91ba2fcd6d9763921100000000000000000000000000000008afdcaaaa6f7c77bdd5914ed7fe7bffd5fa639f3402000000000000000000000000000000e11d3cd871c8c7395e7db2cab5efa656ae5e25cd0800000000000000000000000000000084b7e9e6eae5a3cb5de9fbc0d879713d7fc94c3702000000000000000000000000000000e15def542e7de0b03bfd6a3fd960d6c57a15b71b01000000000000000000000000000080f02aae2e7e6aeab56d7f6fbd9027adce8dd4ce4600000000000000000000000000000020bc2e4bd3771cad357476b573ffe47aa859bb264600000000000000000000000000000020bc754dd74d9e58fe7fff6cded12c7e4e9f47161a01000000000000000000000000000080f0b2beddbb2c5fcada3f1a0d19f77eeb557dbb1901000000000000000000000000000080f096541c7a386de5d055ff7cf1d9e40dfd86973502000000000000000000000000000000e1fd5ea0c18288b15d3e4b78e146ce85db73c61a01000000000000000000000000000080f0ba0e3e91d8e2c97287bb36aff6d1aba3be1c6404000000000000000000000000000000c2fbb5cac41e23daaf6f17d576c6df25eec99d6904000000000000000000000000000000c2fbf7f6d49c8f0f7bfb9dd6c57f397035ed83c1460000f83f76e8fd3904fb0000788b6aacba85736a1eeda96e419d2bb590920ea39b929a47839259ccbb5e453dda0845d0341a95c4a9d88625ea32b924658db0d2b43169cb76b82344182ae9d6f5bcd23521627fc6773f7c3e7fc20700000000000000000000000080f086c416deabbcb8277fcc8f578d685ff85e372300000000000000000000000000000010de99ec2b79d9f953cf5ef961df4d2dc7ce686604000000000000000000000000000000c21bd0a76d8fa884ce73d34be32b2247cddc6a04000000000000000000000000000000c26bd26b77d485761deedfdc929a59b8bfe2412300000000000000000000000000000010de23c9f54facecdf79d2fcfcfe7fad9a34ff0b23000000000000000000000000000000105eee373529a34e3539f1dfd81fe5cf2a5a39cd080000000000000000000000000000008437b47a72cab6af13537bc7c6edfe2ebbb1ca080000000000000000000000000000008497d86bd36b67778c2d7de956d681faf45bb54600000000000000000000000000000020bc4ff72f9cb5f2d2bab2d865fb72df1f36f09011000000000000000000000000000000082f3d23b96f75f6cd03ffda79e44a97b413fd8c0000000000000000000000000000004078c98d634e4f59b073fe4f3be4adfeedd8715f1a01000000000000000000000000000080f0760f1935fa2faf15b6be7bfdd8c4114fdd2c3302000000000000000000000000000000e1adaeefd77e5861ffd5236f759c501c91126104000000000000000000000000000000c26b9138346d4ad6a1d3658b927ac6b5283d6604000000000000000000000000000000c26b9df18711d79f4f9ed830f96e43f2f481c54600000000000000000000000000000020bcf86e7d2b1e3c7f62f8b5178a5f8df9f078bc1100000000000000000000000000000008ef1763da256dcd9fd8b8e98127bf2f587ae4a21100000000000000000000000000000008ef950e5d72e70f7a72e1869317ae3e1059f6a81100000000000000000000000000000008af6b64f6f13fb65f3af9b9cd191f26ddee37ca08000000000000000000000000000000fc1f78715ddd99a22ead36677f94f2f027676a840000000000000000000000000000004078d91f545676f8f3dad2ed998989ade696cf3502000000000000000000000000000000e12544ff7cc1a523479bb58869b2724f4eec202300000000000000000000000000000010de4f16a7c4356c5cb12f72eaaf3634e645171b01000000000000000000000000000080f0729b6fddfff49cfa716f1ec9b991d4a9a4b711000000000000000000000000000000086ff6c0e5f37ef6d9cd9a1eb5139a7e91b0e6a811000000000000000000000000000000086f6d97ff94f79dfed8fade77229ba7170fdd6b04000000000000000000000000000000c26b717b70f9d2735b378cfdddb9b7da6c4cd96504000000000000000000000000000000c2db37ed0713a637344ba84b2ed933a7a0a6ce080000000000000000000000000000008457f766c38de6df9665a72dbbb3392eb5479e1100000000000000000000000000000008afa0fab3bb9d2e454e7abbaa79ebb284b2d34600000000000000000000000000000020bcb6bb2eaf4adf7f39e2f08a536da3ceb7ed6804000000000000000000000000000000c22b9af9e9ecc71a0fefbdf7f0bfa35eafd9f8a211000000000000000000000000000000082fb74d4946e4a84ebdbfcbc9ba33a72aadbb1100000000000000000000000000000008efd97b4d125b554fcb4cecb9a0a8246fe4782300000000000000000000000000000010de23bd1ead8b691297967ff585b75f897da8a711000000000000000000000000000000086f4af2e85e8b8714bd73af5d51d5c161c7471a01000000000000000000000000000080f0bedeb6e4f280babfbdb56de8d58cc72f455f3702000000000000000000000000000000e1758aaaed33353afee3f5a97ffa242169df322300000000000000000000000000000010de97add7560cefbeecc69a88b8593d2717351801000000000000000000000000000080f0def94d497d54cae50399af7ffbc1e717c77f6504000000000000000000000000000000c24b197cfef9a2a60beece6b1993b065eddf4b8d0000000000000000000000000000004078bd67d4a60d8edd9295b53475f6bb19a3138d0000000000000000000000000000004078bbcadfc87bf5e3e527673fd4367b71fcaf171901000000000000000000000000000080f0067c73b4cde35b6646dd193e76fb33d79aad3702000000000000000000000000000000e115b63c3c6eee7b252fe7c655efec9ad626da0800000000000000000000000000000084d76747b72b1d4e3cd1f2e2b34fc56c483c3ac90800000000000000000000000000000084777063d7a2fb130ff548ae7c2e62c5a99c0c2300000000000000000000000000000010debc53dfaf6ffcfda431ffbc965c5bd9fdf86c2300000000000000000000000000000010de8c82af322336ec893ff7f4bac2a5235f2e3002000000000000000000000000000000e19d7c37a7e5c2c5f1cffc32fd8da62fad39586a04000000000000000000000000000000c2fb68e6ded8b3ab3a2f3f58d0bee3a2f73fbf6d04000000000000000000000000000000c25b703da9c5d49af5237694ff634d4cf492630f4c6b187fa159af8edb962cda5e51b278d0fdff050000ffff56f21ccc", + "aeadKey": "202b8b7562c760ef0eee18726d128167", + "baseNonce": "142edbd97fd0ce550ae7f90a", + "msgLength": 4194305, + "msgSha512": "cb220cd135cfd449f22167c2299fa6e9446cd19160e7e007c906293a2c8b67ea5e1ae87de8d98f7cad0b3391453af143015176d2fa184d51a6cbd0dbb27bfce3", + "result": "valid", + "flags": [ + "CounterRollover" + ] + }, + { + "tcId": 8, + "comment": "257 full chunks plus short chunk, tests counter rollover past 0xFF", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecdc778308f4e3c0f168882489701717657fc9484842664821d92ec928fb2887ac33b357c8de2b542ee3b26787b3a24338232b95996c7e0fe3f3fbe3f57a08ef07f06eb62dc7d313f3a5febbfddb9d077fd7ad48e556791f248fca187df4d89ac649dfaead54a14c8e0bbf44ae4ebb21a16ac3d76b2c5f93a5caad6fdaf75ff943e7c700000000000000000000000000000080e0761fff24dfba96fb738dab98fbf9f5771f7f4911000000000000000000000000000000086f49d5d13fbf94d43ffa64d15fb366ef5bb6992200000000000000000000000000000010deb8de7b5a36cabf6e69cdf23d127a1fdc1faf080000000000000000000000000000008457644b74b1f8d85ccd565c886ef1e89b6b791501000000000000000000000000000080f0f637fce5e30773eb54cdf8defa0da5524d68a9080000000000000000000000000000008457affeb44173ba4c6d9d27d7d709a3172fdda0080000000000000000000000000000008457bfd9b42f5f7d33cdcd4f366f2d95aa4fba3f1501000000000000000000000000000080f0de6fd036f666ebf73b96aab972c49391b50401000000000000000000000000000080ff070eadddbf7edba56e6f56191ed5a5efccac298a00000000000000000000000000000040783f2dfceafeca25c9e753656e5972d4d15a0b1401000000000000000000000000000080f0d2aebdbb61dd8c724fb67afd894645b3e4b9a00800000000000000000000000000000084973866f4e8dd8d0e1f7ef7eb19b9720c1b335211000000000000000000000000000000082ff353cbff37f9e2a4ee9fa5aa75f348c2d5268a00000000000000000000000000000040783185db4e3cfef1a1013916168bfaa75e9ba68a000000000000000000000000000000407839da177ebcd0ec21b58f7d3eb6c0dc3191c31501000000000000000000000000000080f06ecf8e5dd5ed4089727d5a74f9f28ba1238b2b02000000000000000000000000000000e13df7c9defebd0e942898f8fed9afd2cdca955a11000000000000000000000000000000086f44d2c8f6e7927afc9aa5f391dc1da754bea1080000000000000000000000000000008457bdd0a0856376246ecab8ba62eda8c9657f5704000000000000000000000000000000c23bdcefe180ae1d4f9c7eb4acdf9c01694ffea9080000000000000000000000000000008477edc5be57d73c53e7c7fa639677ca35bbf37b8a000000000000000000000000000000407899e7f53a33f5e6d6a87f3ebb70aa40dff8ad8a0000000000000000000000000000004078afce5ff27dde351ba3fffe2cd7d894c8be2d1401000000000000000000000000000080f0aabebd746afbd21113ca36abf9d9ca93e54a2a02000000000000000000000000000000e1656bdda362ad02af6dba977ace8c7f5e9a5d5a1100000000000000000000000000000008ef61ed9af5cbde5fb272ddcc9f4b6cb85ce52d4500000000000000000000000000000020bcf933f7c575cff7f0fb1f326fcad7bc598e348a0000000000000000000000000000004078b3f7fc75f6d873c3bb65adda37434cb57d591501000000000000000000000000000080f02ea4ceddaaf9af6dd66faf9b614a81a8e5791501000000000000000000000000000080f08a24965d56a3d87f191ba5ee9fe9dd32632b2b02000000000000000000000000000000e1b5f86a4b9d332fbfb3b36854f954e77f985a5a11000000000000000000000000000000082f6642efe8daa58bbdd22aeac480b1fbc61c5404000000000000000000000000000000c25b70bb5185a395de5cf977ca9d16651a3f2cae080000000000000000000000000000008497aadefd94cd91b31b4faef8c7e99c996f565104000000000000000000000000000000c27ba2466cd33e9d1e3c36f650fe761ff4ed555a11000000000000000000000000000000086fe2570935c6554f1830aee2ffaa4fb8f1db654500000000000000000000000000000020bc172ebe57b3f2fdfd97fed994f6fa6f95d3b45404000000000000000000000000000000c28b3bb5ac50e5fed3562edc76bc54c7a3a9762a02000000000000000000000000000000e1cd1e1e9ff879ba19c9d11b4be4a95cb6679422000000000000000000000000000000105ecea59d8e9d3af16199372bce6cb3ee8771db1401000000000000000000000000000080f00a16dd7563f3f49d75cb6e38dd764e9e5cd31401000000000000000000000000000080f01ae53b7c78c8f1d76e7fd8f0bdb9d3536f495104000000000000000000000000000000c2cbd428ffa4930d322c8ed8f6bf7b7b4afef24811000000000000000000000000000000086fcdb845fd7e9d5a7fda9cb8d18d5aaf8d2ea0080000000000000000000000000000008497b9cade57db1cc89290f14abd632bee258c5504000000000000000000000000000000c27ba76c866e75330f1c1137ecfa37f1695f38a5080000000000000000000000000000008417d1e8d41769eaccf9aad3fd6a054f953c3c4f1100000000000000000000000000000008ef58bdc905f7be31fed6d43ca32f6c1d52a9bb22000000000000000000000000000000105eeae3491fa73e105be2a3d44dc6dc2b10bb4a11000000000000000000000000000000082fb249dddb3d47aeddf7efa803cfc6eddd7d4f11000000000000000000000000000000082fea9b55b306565e1937e28d5bdd331d3b574e11000000000000000000000000000000086fdebc8b312fce7e7e579b94eecd674cee19a5080000000000000000000000000000008457a8e099d445dfdf91b0b96cf28b110f0b272b02000000000000000000000000000000e1c5bc54bb5b89c1a9f73dbcf6f8e523a54ae55304000000000000000000000000000000c29b9de5c1a23afb2e677a373e5d8e9377939f5104000000000000000000000000000000c24bdb36c79019f7dfec51bafba8972fb71e1fa90800000000000000000000000000000084f74a81b8d2f91a8e1d3dffd561790a6d9c73461100000000000000000000000000000008afc117e5570ffefe9f53956faf7afe6ebe498f1401000000000000000000000000000080f05e3f9b3e67aaee4973db1589ad3c7d7ad6a18a0000000000000000000000000000004078f7f2c74717395cbedfae6a6992aa2e2f95a8080000000000000000000000000000008497abc8c3e4cc190e66ffbb7bd6cecf2614f84511000000000000000000000000000000082fe79d671bcc5bf74db6b9ffbc3d7460a941571501000000000000000000000000000080f0e66c786a799fc657b36c4f5fae4ce51d6fc72802000000000000000000000000000000e17d51ffd79c533b24f7cb392677fefbcb7bce5504000000000000000000000000000000c2eb3faf71fcf2a19553754ae9f37cf2bff94b2802000000000000000000000000000000e155e8fee5cc5695bf6e54b579bdeacd177e1ba70800000000000000000000000000000084772cebba677a5789bd9c72e1b9b3d757c44f5104000000000000000000000000000000c25bb97dda3b7f579d7eed89fe911ff7abfe458c22000000000000000000000000000000105e93a4c8fe1bef3dda95e3c492dacb3265dbad080000000000000000000000000000008437e6e096e95d46747e6769ced6bd1e1bdff64f4500000000000000000000000000000020bc57b7b5d8f57bb5c157b2acca55b769a7074f2902000000000000000000000000000000e14d3f9bf8b04ddb160d92f6364988385c38972200000000000000000000000000000010decd5dd9ebed5efefaf77d8bd7fcb7cad5f1531501000000000000000000000000000080f0626616ff36f5f8c985bf9b5ae4d617694ab75704000000000000000000000000000000c2db9439f1b998d89f6ecd1cb8f9d54e25aba55604000000000000000000000000000000c2fbacddd7d366fc75bc7acfa78bc53d75b0f64a4500000000000000000000000000000020bce347d63c3e247d4a9b82eb8bfe52ba5b896a8a0000000000000000000000000000004078ede232bef75dc641f17967345ff049bd886c8a0000000000000000000000000000004078f3f29dbc7929dde80153861d3a51ef4cadf48a0000000000000000000000000000004078059a745ef944e4ea88e42e493f949ff5d9154500000000000000000000000000000020bcae1fbd1ebf6c548d3a170f0c8d5aba335db422000000000000000000000000000000105e4aa64a35eeff2fc3c6df7e2a9dfcea9f97162b02000000000000000000000000000000e15dacf0f9d55a73073e1add21ddf857774e2faf0800000000000000000000000000000084573d39a25abff4ed3eea3da06be2f12e2bdf5004000000000000000000000000000000c2db74f9a762edbf3bf5d68403999bdc4a33f9034500000000000000000000000000000020bc5267fe7cef5ca78b6fa79efcd4d37ffdf56f4e4500000000000000000000000000000020bc8a5d1f64cff843d71537b3a6ceb8f7eaee538a000000000000000000000000000000407855caa55cccf430d3f4f79a450ebb16db79ba22000000000000000000000000000000105ec61983562cdf383fe3a21f7fa874bafbf5ab8a00000000000000000000000000000040788f125b176c96aecbc8f4e57e3b75e3f9ae671401000000000000000000000000000080f03226b6e97fe3e8b9d82125ff6c77b0dec92b8a0000000000000000000000000000004078c73b5c9d5430d7d2ce5d2bedb9526e7bb6f98a00000000000000000000000000000040788b0ee63937f174b6d57bf2fff87ec4ea27ef2b02000000000000000000000000000000e17dd8ebf55f539293baedcf79a05df6bf8bcf5604000000000000000000000000000000c28b3a1fd129dd96bd33eaecf838a5fb5be3931501000000000000000000000000000080f016a56ab5bbe8855e2b1a3fbcd9eaa51c655e5204000000000000000000000000000000c25b7362de8f2553ed4b33f4ad9f9b9cdbf554114500000000000000000000000000000020bc54a986b5f96dc1bda91bbf7db1f19aaf0f755704000000000000000000000000000000c22b95fdf9c7265ecff8fef6a4d8c6cd867ed25c11000000000000000000000000000000086f608e765daa3c2a1ab96dfc891ea73216ccab080000000000000000000000000000008497bd6cc1ce23d64cc975a8c7b28e3ddf28705b11000000000000000000000000000000086ffddd3bfd2f1d19d3e046ce62957a5ffaefa02200000000000000000000000000000010dec8b50bfe1872b2f5f659f12d0bf5ffbc63554500000000000000000000000000000020bcb87513eb4c2977aa48ad697f1dbe54ecd9cd8a00000000000000000000000000000040787712637eddb5fcc1f83a7b77975cdd7ec26b8a000000000000000000000000000000407823572cabf772ecf9421d4af798daf8952ec51501000000000000000000000000000080f00af49f1e7b354fb7a4eadb7a1c78624ee7568a000000000000000000000000000000407811dbbad5993b62c8dea6f56b1e99f5feda2e8a0000000000000000000000000000004078655ade587afd9d4125ce8fbbf352c6cd4b0a2a02000000000000000000000000000000e13538ba34ddf4b2cd9f8d183abae4e08e89b71401000000000000000000000000000080f04aecdb372ec3c1b8c806af2f9af7f686feed1401000000000000000000000000000080f056cd897b70b4eeec1cbf96d87f38e6eefae58a00000000000000000000000000000040780793c6b51c30ec8d66357b96dcbca3ffcc244500000000000000000000000000000020bca251db527294ea72a3e28135cbd357ccbb4411000000000000000000000000000000082fe2e9baf79ecffa61adfcf5277fdc23434a154500000000000000000000000000000020bc33891f645f3f7ddb2b999b4fccf673b5be831401000000000000000000000000000080f0f644b46db7e999819f664cfebd5dbb79798f2a02000000000000000000000000000000e15dde9375d792f8ec5f57df76fbde9e8af9e21401000000000000000000000000000080f0764c6bf1db959d95eaaefde9f2e057e6e7adad0800000000000000000000000000000084971471ee50e5424f9efffcd6a2051d06ec9aaf0800000000000000000000000000000084777ae4fbadb2cc3f5025a15ea1bf2ec7f4f20300000000000000000000000000000080ff07ea551cf1fc9261e37b944a9ef4dae1e2312d1401000000000000000000000000000080f01ac4e6ccf365f5af76667d7cdac2226d97a55304000000000000000000000000000000c22b55b8cfee3f96c6bed16159e3ae3b07fc7e4c11000000000000000000000000000000086f56aa86e30f57ed1937e295748f3efea26b654500000000000000000000000000000020bc6eddc6164faefaf99aec5bca1d9cdaf3cc1c4500000000000000000000000000000020bc293bcf3ff8ace08377bb3668f77b8ebb9bf62802000000000000000000000000000000e1a5fb71758189355f2f117f796b8b2fbbb76da10800000000000000000000000000000084b7ae6eb64389557a4f9fd22c31fe9be14fce5704000000000000000000000000000000c24b175332f547a59ad4499afbe685f6b34f545104000000000000000000000000000000c2eb3122a5fce5d2d7963edd3d6dc9cc1f3dfa431100000000000000000000000000000008af5dfdf475fbbebc7cd4a6c40a5dfa14887a461100000000000000000000000000000008effbaccb0e5c997769e5a45d79223bf6fcb48d2200000000000000000000000000000010dedf2f97df57ebd2e5366922ff1b7e74619b038a00000000000000000000000000000040782737bcf6fdde94e7dafe5ceed489bc336abea3080000000000000000000000000000008437e5a775c3df8aac31eff38d57d68c79bc664d4500000000000000000000000000000020bc923ffed43a3221fa8f1d69375c8dae9da3af2200000000000000000000000000000010def1e303e6d4e85263f1fcad3d6a651b3b25b722000000000000000000000000000000105ee6b8c837bbae487aa9da9049dd9e9a9879a62200000000000000000000000000000010dea283ab1a2dda73725372858e0f6a266c9da0080000000000000000000000000000008437b855f171efbcf141c5c2110b9edf3db8d3184500000000000000000000000000000020bc8d771e369d727a60c4c05e3dbe387672fb764500000000000000000000000000000020bcb327da2744155ef4eda3233167d346deaba60800000000000000000000000000000084f7e4bbf95fbcb3ed72d3a92b731fda993e7a832200000000000000000000000000000010dec9a97bfbecde522df3aa23737247ad68345e11000000000000000000000000000000086fffecfd095b0fe53eb6ff99f8354de77c585c11000000000000000000000000000000f87fa0d46387f757bcd8a8d6a8b7a67e7b70f8264100000000000000000000000000000020bc37a2cfe7af95edd6d80d71c77ed8f7e4e6858a0000000000000000000000000000004078e7fe2997b5c794fb13061fe83d3257b3499b1401000000000000000000000000000080f08e96aaf56754c4730fbb967ab270b181335f5404000000000000000000000000000000c25b3eacd7d6da35f64d3ab87f5cf2c8311db32902000000000000000000000000000000e1d55c5ca661e498a7761cd95e61f2dd91ff2d5704000000000000000000000000000000c29b962f21e5c331b5be9bfd4ccddd25c7741da20800000000000000000000000000000084777dc288770a4fafd7e2c8737b0a46b468df5c11000000000000000000000000000000082fa9e2f9545f46bdbc24367d8b5fd2b6bfd24b1100000000000000000000000000000008af75dcf8fc3d0626d4b87cefd384f9b1791a2a02000000000000000000000000000000e11d5b97e5e06ba70617de95bd48e9f2dd768f5704000000000000000000000000000000c26b9a3069dee6bbaf56ead0efef93cfa55ccba108000000000000000000000000000000847772f6e61772df8eae70ee48adaecf95da725b1100000000000000000000000000000008af67ee0d236fd7ed332fcd9a4d19865cfbe83f4500000000000000000000000000000020bcdc97af3c7d28fbbf0bf6a7e9f0f2850a51771401000000000000000000000000000080f0067c3aabcd0b4bfe18fbbf1b835362323549ad0800000000000000000000000000000084376bd4f9986f6ad51a71afc8d37517177b50531100000000000000000000000000000008afda67eb4fac3cf5f499c57123cfdffcaef9104500000000000000000000000000000020bcb80f3ab72d3929be744c8122559a47f58a5304000000000000000000000000000000c26bb0abdffe7f5eb952bfe4cf235f3b7965716f4500000000000000000000000000000020bc5cbd4e3ddfedc21b8b272eda71fde633450f2b02000000000000000000000000000000e1ad29d074d1aaef5f2ed730cb6fc31ebb3b2b521100000000000000000000000000000008efe2d642373357bc75b7fe92c34bc7ff9776862200000000000000000000000000000010dec9c1733a7f1bfd62f95a51ef4e2873a7c5278a0000000000000000000000000000004078d7d2defc7e52f3efd63dfcacddd59eed1af55204000000000000000000000000000000c2eb34a370fafd953b156ef730f97af73e8f975404000000000000000000000000000000c2ab96e9dba333fb9f8858933bae5fc3a4b8c28a00000000000000000000000000000040782f7629d0e85ed1c61dfe5c78ea52a9c54f9d5504000000000000000000000000000000c2bb70e4faa2851786ee3fda264dbbd7564d3cac0800000000000000000000000000000084b7bff38f6f5f383d286ff7120f067c7f687f174500000000000000000000000000000020bcc86e231eb46af453d717dffde16ec5d48fdf5304000000000000000000000000000000c2cb9ce6bd2dfdfa54d95eefa94ef75ac6ce9cae0800000000000000000000000000000084377fe5aefb57e25f987861f0aa1cc5bea9df441100000000000000000000000000000008efed474fbfda76f5ac1ea9ce4c5cd035367d654500000000000000000000000000000020bcef8e246c9ed2fddf294b0a8c1955f3e5672b2802000000000000000000000000000000e1d52f5d2ec36b2f4c78ec44da5dbbfb6d7b30561100000000000000000000000000000008efe0ca98fa7beffcd1bf69f2fb13367c343d5111000000000000000000000000000000082fdbb4ea8f963dbcf24f7499e1d31e459f7e5a11000000000000000000000000000000082f66cf9b273714295becb54f477569f0c733af2b02000000000000000000000000000000e1bddd7cca177b9bd46dfef9b1c47ef1430b7da8080000000000000000000000000000008477e8dd8647aaacbbb2ea8d664de75d78b25b794500000000000000000000000000000020bc962bba171dfece2b19deadb73dd5bf4baeae5204000000000000000000000000000000c2dbf661dcbc5ffeaa3d79cb92170e649fd968b42200000000000000000000000000000010deacdb3fbef266fffae7def9e08959536a679ba80800000000000000000000000000000084373771ebb87a1917a4cb33abea8626a3b3272b02000000000000000000000000000000e14d1d5268dfbfcf54bd3d3b22ead8f067238a2b02000000000000000000000000000000e10d1b58bac1a0d6f9bf2c71afcf8811bbb75c5004000000000000000000000000000000c2fb20a5608e66ad8a4caf78b1d9a51b9f1e4a5004000000000000000000000000000000c2dbb8f4fef0ec592adfdfdcb268991a2f2d29a6080000000000000000000000000000008497faed719f7f5c29ff9cd55fadaa70ecf3cbd31401000000000000000000000000000080f01656ba9d6ffd90adc33acc3dd2eaecda4ff62802000000000000000000000000000000e1fdf4d6dae9d123737f95ef746cf6013f76cfa7080000000000000000000000000000008497796bd956f5ce569cb6adcaae431dd6ad6aa70800000000000000000000000000000084376dc2b5c4f83b43b3ac4c5fe2f09feb7b5f5404000000000000000000000000000000c2cb347ce5fa7cab0b4c4dd3f15afb237b4ff75304000000000000000000000000000000c2ebf4e5949a7fe73bd823a250f31683faec59a10800000000000000000000000000000084977ffdb755762dea173da4d58ef5bf7dd237bf22000000000000000000000000000000105ec50f4ad7fe6ae0b286fbba2d2cdbf2d99b898a0000f07fecd0f97708f60100f0d026a8f0d2ad9610c455ab4797aab8568a399239ba9252eac8f65063e23e2aae95a52d16cc99768f27d8e2451af78caa6a638246e648a66bd58ada1c4bde92ad49d1cefe8cef7ef87cfe840f00000000000000000000000000e1a53db520f7f4a0510be624e62e4a9d7ae1792300000000000000000000000000000010debceec767f64dba3dbea6fdc2b5ef27741f6104000000000000000000000000000000c2dbbf68ecacffe41495479f1b1c9d373f669e1100000000000000000000000000000008efea9039e96d0e9d898a8f1810b1bbfa99fa4600000000000000000000000000000020bcacfdb18b6326170d2d8fc98f6e7d71dc412300000000000000000000000000000010de9f467fda2179d1a0cb13fba715978d9bdccb0800000000000000000000000000000084b7bdc1a2c12746b6ffe1a159752fbc36e6b72f1801000000000000000000000000000080f0eaf628395cb9faaf91e33263bafcb96b61bc1100000000000000000000000000000008af5f4adfe1bffaa668748395ebc6a43c5d9c6c04000000000000000000000000000000c26b7a3067edd2a7e6376bd272c9d29bb9fb2f1b01000000000000000000000000000080f07e1e3964cba6979bbdfa589bcc65c3b21bdf3302000000000000000000000000000000e1b548fba62269fac0862b233f5cdefffcd7a78c0000000000000000000000000000004078339eff78fe9c09fdab7a6ead8c895e36adc608000000000000000000000000000000849734ab323dbeaa26fd6cfa77ab5fdc9a996804000000000000000000000000000000c27b664fe2d1d76a6d1a94bd6ee7b7d1636e951801000000000000000000000000000080f0be58f84987b23d97a646e50d2dddf269b72b4600000000000000000000000000000020bc76fb26358cd9d5aff71f37c46d886875b5ad1100000000000000000000000000000008ef62ddc45fff2d36af6acaddac8acb0f9abe6704000000000000000000000000000000c26b9bdda7f9b8b737aef9e5a563f5bfd8d0be8511000000000000000000000000000000082f676b4cebebabfed031a36de7878f74393dc90800000000000000000000000000000084979197fbfae7b18f1edab8b032e3f28906758c00000000000000000000000000000040788b0f3f5e3c60c1c0b4a3f9334fd52e9a986004000000000000000000000000000000c2eb39ef4aaba36be3d6ad3e93347cf38ebbd94600000000000000000000000000000020bcc766bc59f520396df1e1da9d6a454c5fb9c20800000000000000000000000000000084f761d4f71f3d9f91daa4ee13d7df19b82d2bc1080000000000000000000000000000008477f340eacc3b9f6d3b59b062ee7373d7c40f3602000000000000000000000000000000e1ddce7eee7ce4b64e2796f48e5ed83ee742811100000000000000000000000000000008afece4eef16d76764b8eddd4624344d4c4682300000000000000000000000000000010de914659dd13163fdbeede91d3a5d559b1854600000000000000000000000000000020bc634d7a97d54e3bb039f37adcb363b73c72c4080000000000000000000000000000008437ab64769d77878ef87dc3b177f7be5d7123cb080000000000000000000000000000008477f3daf8978e4f1dd9e9f3ceb9ab9a3f38556a04000000000000000000000000000000c29b32b2a2c55bb71edf9e31a4dfc5dfbcd5f8474600000000000000000000000000000020bcc48e23ee9c2d4e6b747bd5b25eefeffcce492300000000000000000000000000000010defcb4c2a5c97b670eb8fac6901f8f4b5d5a6004000000000000000000000000000000c2cb6e7d6e72bbf8c4e385db77f4e93c6a45a91100000000000000000000000000000008efebf4c8870f1f6935f7dd760fefb4e9516f9b11000000000000000000000000000000086fd7994dab5f7ab2eacd1d930efeabeeadcb378c000000000000000000000000000000407865c3efc4f4ffe01725875f2d58332ab6bcda0800000000000000000000000000000084f774ad619f8d4978625fcad13a335e2e1875c50800000000000000000000000000000084b73369effd9acda3f77f92b23e2f6ff9ec2223000000000000000000000000000000105ef2f75e6f59141f37e51f0b1bb6fe7bcb66bb8d0000000000000000000000000000004078d53ff860c2b5fc2f7b16e6bff1f12b5d97fdc40800000000000000000000000000000084f762fe8093bf1bb1f7ee3b4b666fbc7030b2811100000000000000000000000000000008ef95e6ff6c9a3ae37e9f8a69130abb2dea75ce0800000000000000000000000000000084b76fda8d2315459d3a7d959af165d4bc98be4600000000000000000000000000000020bc6529f70f6c3959bf4eb7595d77d63e54f2951100000000000000000000000000000008efc9f435f9b5a667f4587ead5149e9b791eb8d0000000000000000000000000000004078bb9674587ff3677b0a1adec9ed529c335008000000000000000000000000000000fc1f78a1dd7b1fb53c74f44c5cd2e9e95d77151f3102000000000000000000000000000000e1b5dd78366d4fabff9657d62b3858d66f427b2300000000000000000000000000000010de4fcbbbacee1357faefea9935f5ee7d34b9a311000000000000000000000000000000086fc4d2f8c697fe726c4cc2fab31d46f6c9cc8c98d36bc8ed0bbd6fa70cebd9212721aa3ae17f010000ffff1cce1b44", + "aeadKey": "d0819d1c2171d4eb66903bddd0cbf2b5", + "baseNonce": "4c8a961eee326035e78a6a6c", + "msgLength": 4210689, + "msgSha512": "153632511d8deba77094b35bbd8f7ab88e06d42487e135b75a986d0a3e7ced242d0f91a80b3e60facf7f544326ba6cc26b27a945d2d20fe8fc5962beea906746", + "result": "valid", + "flags": [ + "CounterRollover" + ] + }, + { + "tcId": 9, + "comment": "short message with non-empty context string", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "7465737420636f6e74657874", + "ct": "78da004f00b0ffde2ff42cb103e3c5583e1f39bfe368e9b2a83996fd28804927145e3dde6a611edf2fbb2ab7afc10f4f6e0426d2e4a9aebc7349ea5cda426488c91fd589e9d8d6da8759c7be16d0abf726266ee340e6010000ffff35052969", + "aeadKey": "6bd3bdd87990671fadc49a0f48e0ec97", + "baseNonce": "fd5612de3c15f9cc561fb025", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 10, + "comment": "short message with context containing a null byte", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "7465737400636f6e74657874", + "ct": "78da004f00b0ffbfcff9bb0c0e2f36cb63abb0f787bb62b5345f47be4a8397be381baeec749ee0a2e053584f63e29e41fc5caacc1303c4e058168625b8c5a437656312c43a99fc4dfa0470c9cbdb757a21c2929a2e99010000ffff81692929", + "aeadKey": "d3a82db08232acd646f9f87cf0da6a98", + "baseNonce": "0e35f960b4c01bb8113e988f", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 11, + "comment": "single chunk with flipped ciphertext bit", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da4ad59db868738e397362edfdec16b6e91292dbdb24959585a6a79fce3c26a55d117e20c32bdda39f5faf63e6bd7bafa516ee68b53bca115cf7389ba1f1fba7855fa64f90293dae272c5b2c1b0d080000ffff75061ff1", + "aeadKey": "ef755df4dd39fa71b434111eaa4217fe", + "baseNonce": "2557496de4ba17392b77ea70", + "result": "invalid", + "flags": [ + "ModifiedCiphertext" + ] + }, + { + "tcId": 12, + "comment": "full chunk followed by corrupted short chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0ad4ac4000000e0c1a298c522f8063358149b1a6c22f8534ca245c164161405c3d2d8860c411159b00dc630880cc164170c064110eed28571e1e01ee3caf7b59b73bdabc7ea7bfaf6357fd93fab8f97ca8da936b8587f7aa8fb5b8b71b29b9e171f65b69a16e1cdcfc2e5dbfdceefd7dafc5f000000000000000000000000000000004cdc5d97ec0d67e36c263cf9ef9ae833783f7c3eb83e1d54dbcdd1ca288f96c7010000ffff9f8e2e9e", + "aeadKey": "3bf03d29b0fe3844978ef2b9c4bcccc6", + "baseNonce": "58e021bf6ef05f002fda09e0", + "msgLength": 16384, + "msgSha512": "1244a57311742425dbdbb1eb28b67e093a6941c8bdfce678ddb639ce345bbdc8faa644f5e8a9f3e2376425b577cb2cb33f96c375be51fbf8de1ac3c6e204ac13", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext" + ] + }, + { + "tcId": 13, + "comment": "two full chunks with empty terminator, second chunk corrupted", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd0312b4401000060fba57bdb5d598c72b7589c45c9268345ca0d4a51260375a5738fc9c0a814d3b31029e657667a190c167a0b2f8b2c065e1ec3fd8cb77cdf4ff8e67776f3ee4a6b70eaa81d44b7cd22b87bf9f95c1a3ebfefad66e9573e7b71dc1a4fd696bfebc9c4d0f3fbcdd8f4e4e5efff7af8340000000000000000000000000000000094ae1a75b7d38de270b43e536d3f36fe8c00000000000000000000000000000040f9e2ac533b5b6c5e8707bdab4e6daf711a6c8e2cec3fbc7dccc5af5b95934a3f0000ffffdf443524", + "aeadKey": "d1d622479d8b4bc91d8445db7114f7c5", + "baseNonce": "673922edc817092359ff43a9", + "msgLength": 16384, + "msgSha512": "97b4433f9c590ac2bc774cf64eb69b804b0b4dd07a996ab94146928c913e50f6745c4d90ff40497f594825c6a54c08eb5b3857fc0dc5359ac99e93215ec5ef1d", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext", + "ValidFinalChunk" + ] + }, + { + "tcId": 14, + "comment": "full chunk followed by empty terminating chunk with corrupted tag", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0ad4a03010000605fc03f6c96c3601051832018442c8270e9e08272c9242816055f419ba2412c72c5a01c5804937a868dc15676e5caca180b83c1ca606d7b8c95efcbd3321c3537cf1f8ed38befa2159d25d7ddff4ef4fb7af7b7bdffbc3a08df4e57168ba3a05fec1d54b3a471b2f1b4f3feb91bcc000000000000000000000000000000005377b536bf5e56660fefc7cbed786eebeba5b7701967b71fb5a5e1cd633dff99040000fffff3732d0c", + "aeadKey": "b0b69ada051a03b6fc0ff9c3b01e611b", + "baseNonce": "ddf6504b14bf57942caaec5c", + "msgLength": 16384, + "msgSha512": "8a74ef70f9cc240673d054278564358540033ac4fef68944b5db4ca61c9b2ceee3f3ef5559833f29f14150d80adf5b49048384e08fb58c4596c9f2d0e6f2c670", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext" + ] + }, + { + "tcId": 15, + "comment": "corrupted first chunk followed by valid short chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0a14a03010000d0d36a3839c403cf6ad12828268d0a2611c3d914837a51c52822882006b96032a84d2e6912444c83b1b2b43a581a8c85c1607083ed3356de2bdfe79b332f73f1747abf96ae7fd54ef68a9dd64db2fc9d35b285b7f3fed2e3df5db49f1cfdd41747ff579d4af5227f9e1ab41f0200000000000000000000000000000060e2b6cbc3d78da795cbb3fc78eb342cc2e0fae037eecd7ec4c3dbcfddd56eb4390e0000ffff30712954", + "aeadKey": "f22b66abe3b0fcc471c8c84b6909bfc5", + "baseNonce": "9fa525d949507f2a589262ff", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "ValidFinalChunk" + ] + }, + { + "tcId": 16, + "comment": "single chunk truncated to remove authentication tag", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daba2fd3fffc99bea2e3ab336d3f3bbf1ef82c2da65db2cfd9e4e7c972aee49e995992d2379516f1059d91e09413ecb2bfe5f2be347e6dc1b37f474e3200020000ffff470d1c0e", + "aeadKey": "46db646c590bb60f0cbf23e18170823e", + "baseNonce": "b96168fc420b6769f1a30d39", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 17, + "comment": "payload shorter than one authentication tag", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da004400bbff9c0616e7f3954041a59c7c8810874905e3a503b6e8f8a27b5b9edc7d5d88d948b36e8f6f879c40f11a8a004a3957d819c93efaa5d0e06b04717bab0630eba8f87938902b010000ffff920421d4", + "aeadKey": "7404275cac809a8957c60bfc87ce1fcb", + "baseNonce": "43d0002672e1cde8c4c0e9a9", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 18, + "comment": "valid chunk followed by 20 trailing bytes", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0b12a0601000060494427196f5192f1ba305c1683f13258ce62b88c168c67905bd4a514962b8bcd6ab1dcca7292e24c67e01574994c1ee35fbe2f4cd2add9eea3dabd3c29cf16ae5f0ffbdb3a7adecedacdf9ef6462e569ee66ff7ee3e0e8ee7172af9ccac79767b2abfeb438fe1a03000000000000000000000000000000462e7e5f6d1f8ae997345cfab978ebd7d73ef3a1daf9fb5d4cbbba6982e13c8a83ff000000ffff08012a5c", + "aeadKey": "cdd585fe005ee172eb17d65081add98f", + "baseNonce": "e3ff006d8c2bbb00341d8ca7", + "msgLength": 16384, + "msgSha512": "a8890562db4b26ead7510ed3e899e9e228c46bb99ec8eaf69ffb612e56b788e6b188b4ca0583bad346260ae6e21bdee9f2c962a425da4351b8e322819293e129", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + }, + { + "tcId": 19, + "comment": "valid chunk followed by 12 trailing bytes", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0b14a02010000d08ebaa6682988a0b66869b8f19a6a6e89ba6829a83f889a5aa3a1e188d6e2688aa021152705c54de104dd9c7451f00bdc14073fc3e5bd83e3bdd6ee4ee5feb91064f94392acffa44f6fe7d3ebf7497beb34fc8cebd1d549d8fc08be2fcffe06d546a7fc3f5aebde141f5700000000000000000000000000000080a54bf60fb75fe7a5d9eff0a83f8e37bf366a519ebda4abbd8bbbdb45000000ffff4c4f26f5", + "aeadKey": "b2e3331b380e730ceeca5164dec10625", + "baseNonce": "81b6c32cc69bdcea2afb29ce", + "msgLength": 16384, + "msgSha512": "9c0ba660e827b5837140ca24c518ba0ff4872b69607c7a8ba38ad9daa7f8dfff006f8718567eb4d37cb12210f384db5025f4d94394fa5bc75d4dc7bbeb05de98", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + }, + { + "tcId": 20, + "comment": "header only, no encrypted chunks", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daf23ab0d47ce9ec4fdbf4be728b5c61ddc8f861678c207ffc461f49f184cde796bcf9cc11e3f4df79ef67b749ee7a67a456b1a6a7883a7dcafe93a207080000fffff9dc1a38", + "aeadKey": "40c10a0646f8d6151fdf2074564064be", + "baseNonce": "ce5613df452d27de312391ae", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 21, + "comment": "valid ciphertext with wrong commitment", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da004900b6ff46eb273810f299b36de74cade0cdb72deab3e003d2d6bee089e8a661c8abf11e2aac34e784962295b6904f7b35386a167599184d9444cbac00bdf8814efecd80b348b133b1b79a3a59010000ffffdca52741", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "HeaderFailure" + ] + }, + { + "tcId": 22, + "comment": "valid ciphertext decrypted with wrong key", + "key": "4f52414e4745205355424d4152494e45", + "ctx": "", + "ct": "78da004900b6ff26648a72b9bbcf5f723cd66de6263d8adfe8100b91a774f1540f14e1531dba0cc6f298752a9aec3d30828d688a992c2723a87d04438b04c300bbe88f443261c4b54f7cbed26ba04576010000ffff0340224d", + "result": "invalid", + "flags": [ + "WrongKey", + "HeaderFailure" + ] + }, + { + "tcId": 23, + "comment": "valid ciphertext encrypted with too-short key", + "key": "4f52414e4745205355424d4152494e", + "ctx": "", + "ct": "78da004900b6ffcf548a7b04373a44de87b6eec6aa900da3f87b3432f8d608cf80d9c4933abd150cf21382ecade7da2c115b6ad25bb2219cc89e64998d9d9700f0012d6a3d06d611a97a083ef074b27a010000ffff685c242f", + "result": "invalid", + "flags": [ + "InvalidKeySize", + "HeaderFailure" + ] + }, + { + "tcId": 24, + "comment": "valid ciphertext encrypted with too-long key", + "key": "4f52414e4745205355424d4152494e4520", + "ctx": "", + "ct": "78da004900b6ffca247684dc0f7776f16324aa82a1abeb3aec6a6929025a5f7f05d4e77308931799f36866c107666f68a4c75fedc4a0107a470828fe5027da00020d528031aecfba0117c1f4761d54eb010000fffffac7218f", + "result": "invalid", + "flags": [ + "InvalidKeySize", + "HeaderFailure" + ] + }, + { + "tcId": 25, + "comment": "valid ciphertext decrypted with wrong context", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "77726f6e6720636f6e74657874", + "ct": "78da004900b6ff0737fac11e5970e23526a474950ab68a5a5f232dd17a02a858917eddfbb8ae5e327dbb461f1557c156100e0d420793e55ac430527ad99c6c00d74d15c265ccb53d842c84563e9ef4f7010000ffff970820be", + "result": "invalid", + "flags": [ + "WrongContext", + "HeaderFailure" + ] + }, + { + "tcId": 26, + "comment": "valid ciphertext with corrupted salt", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da004900b6ff6da1ece7a0b576b33430b565549f35e0b9fb04a78cf1d6536b045daba6458a65d4adf229dfbd75a10ff882b74911da6a08cc616959fc0f4500e2e226218cc5e034ed0640f981729809010000ffffbaff25df", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "HeaderFailure" + ] + }, + { + "tcId": 27, + "comment": "zero-length ciphertext, too short for header", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da010000ffff00000001", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 28, + "comment": "only salt, no commitment", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da92773c58d9589270d2cc20e4ef93a59b6fef16622a4c99ba2307100000ffff8ffe0be4", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 29, + "comment": "salt and partial commitment (40 of 56 header bytes)", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78da0aacd81feccc75aa6d8bfcb67b39265d8f124f84b545cf165875a066eed16967fab55694eb315d49eb3605040000ffff951d13a3", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 30, + "comment": "too short to contain even the salt", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78dad27873b24df7fbf102896980000000ffff1eeb056d", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 31, + "comment": "full chunk without terminating empty chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0ad6a02010000e0fd94b1be95f5635c58d9e0ca18c7c1188c0b2b83b1a88826d1a6d113b3c1a83ec5058bc52c82460d36f14c76938f61f9beb778b4b91b76f6e95752b48ff3fadf29ba6fe53745f571bcda7d76c3f2ffd3ba19bd3ebc4c8352efba31f859c6b5df453ebb020000000000000000000000000000002e2e4c27cfd96df07de827ef958f6d760e0000ffff17431ffb", + "aeadKey": "b22004c43d852a4b2350413a4e48454f", + "baseNonce": "cdca58bc45a6cae4f571113a", + "msgLength": 16384, + "msgSha512": "b5aebbb4ef28f211eb0c639c38bcd3d76c69cbfd9b7f455a9a9566fc8fec0c124be8944f65b4551b58fd1f5dcbfe3bb40e764b56c16f40f5cb766febf84a3e3d", + "result": "invalid", + "flags": [ + "Truncation", + "PartialPlaintext" + ] + }, + { + "tcId": 32, + "comment": "full chunk followed by second chunk truncated mid-body", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd0af6a02710000e0e53158d818dbd2585a595f593b56365656871631f80482cd2067309ee01f10bc28584fab6f20088207c2955fb40b0a3e8620dff7085fb65afc35daddfdcbfbddf7ed24844affbe5e6bf696d528f98867ffe3b7cfedbcc86f7eafd3699cb6f2af63141e07c352f90a00000000000000000000000000000038bbddfae1e7396cb2a7c3a8784dd28e1100000000000000b83ca7000000ffff499a25a0", + "aeadKey": "fef0ec7bad5b400ab41a7089583ae184", + "baseNonce": "b4ffc36eb38e9e50f573a952", + "msgLength": 16384, + "msgSha512": "d80738f64ace4bfb341cd571d25fc124a1d49bdfc9500e418a740d601b0471c341fa8d2ee28e0fbf5a1635e542a93c004ee29a969f9782e69fc0a649e639c420", + "result": "invalid", + "flags": [ + "Truncation", + "PartialPlaintext" + ] + }, + { + "tcId": 33, + "comment": "two full chunks plus short final chunk, chunks 0 and 1 swapped", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecd03f2b05010000f02bc9a3a44c8f41a9a79e2f6023440c3230dc2065b4502636262729cabf2c16be004977a5286539dd0d0697b263904c32f03ec62dbfdf47f865bdebdf2f95aca7f36274f767e7e0aeba58bfeeea3bcd9fe71ee29b8dabfecbe3d7a429682be2c1e6ffcfda646b3d9959ed9ede5e0b00000000000000000000000000000080d2bd4d8d1d9d9d44f77bc303f3231de1af1100000000000000000000000000000028dfd2ece3cafe6ded2ffc5828da279ef2e03dada4e32d5bd5ecfc6bf37079286a040000ffff0282333c", + "aeadKey": "0dd701eae6249e80755b4883db62b69a", + "baseNonce": "8b988bb7747517e5f0ff5c71", + "result": "invalid", + "flags": [ + "ChunkReordering", + "ValidFinalChunk" + ] + }, + { + "tcId": 34, + "comment": "chunk 0 duplicated in place of chunk 1, followed by short final chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecdcb12a4571008071a74827c9491848298f20269b190f60a50c74caa8148bce7fc3e460b3d81929594c16dcbad3eddcbadbed4c7738cba97b1fe03ec0597ebf47f81ee0dbfb5ee8e559982dd295906e3f7d1e6c7e9cee1f6d3db6ce0f8fbbeda5e56aadd37fffdf09b7f57a36371d0f177f664ea68aab680200000000000000000000000000000068dce4eafdcdc3c6ef6539f87a7e2b2fe61501000000000000000000000000000080e68dfd00aaebbfd724afa3b3bb3824f1eecb280000ffffc4cf335b", + "aeadKey": "202d76effbcf7ab3400c790851286154", + "baseNonce": "27f382660455cb162d6a9347", + "msgLength": 16384, + "msgSha512": "c469a04ae3119303539d36b83c38f059a9635a78258faa88c9201b0a60339eaba97a1f3fb71c3185064e1e30915205bda6eaa281efaeb9c76b6f6e066db2d904", + "result": "invalid", + "flags": [ + "ChunkReordering", + "PartialPlaintext", + "ValidFinalChunk" + ] + }, + { + "tcId": 35, + "comment": "valid full chunk and short final chunk followed by extra encrypted chunk", + "key": "59454c4c4f57205355424d4152494e45", + "ctx": "", + "ct": "78daecc0ad8ac20000c0f1857b803b581b07f7158ebbcb2b172cfa0462340c6d82c5e2d6669c8828629aa228b3c8068261088605830c314d86c934c66c8265203e86e5ffb3df16fd97aa567132d95a7c2d25f287f9fb9fe48f52243bf12639fc4dc5e0f9fb29d444dbd7fddd57dc1c0f2ebdf64d0000000000000000000000000000000000000000000000000fd73172adf9e833344caf1179efa9b0d627b3e5d0725db5a8d6d3fd499094c276a5583ff6b9dc7d0d34f51e0000ffff3e9639bc", + "aeadKey": "8627241353bfa4b8ee7c9ec4bcbcc4e3", + "baseNonce": "b35e85bed6db452ca55c53dd", + "msgLength": 16384, + "msgSha512": "b79bc42c434f72e370a5d4c0d2dfc9390795df60f6bd1e736390590e2bb7537ff93954540c7751970fa258cd6f1108326d9ac6894278cda6f8d2403810e7ef6f", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + } + ] + } + ] +} diff --git a/testvectors_v1/c2sp_chunked_encryption_aes_256_gcm_test.json b/testvectors_v1/c2sp_chunked_encryption_aes_256_gcm_test.json new file mode 100644 index 00000000..d42ed47e --- /dev/null +++ b/testvectors_v1/c2sp_chunked_encryption_aes_256_gcm_test.json @@ -0,0 +1,548 @@ +{ + "algorithm": "Cobblestone-256", + "header": [ + "Test vectors of type ChunkedEncryption are meant for the decryption of Cobblestone-256 (c2sp.org/chunked-encryption) messages", + "See doc/c2sp_chunked_encryption.md for details on how to apply these test vectors." + ], + "notes": { + "ChunkReordering": { + "bugType": "AUTH_BYPASS", + "description": "Encrypted chunks were reordered or duplicated. The per-chunk nonce derivation must cause decryption to fail." + }, + "CounterRollover": { + "bugType": "EDGE_CASE", + "description": "The message is long enough that the chunk counter XOR'd into the nonce crosses a byte boundary. Implementations with an incorrect counter encoding may fail to decrypt this valid message." + }, + "HeaderFailure": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext must be rejected while processing the header (because of its length, the key size, or the commitment check), before any chunk is decrypted. aeadKey and baseNonce are omitted, and raw mode does not apply." + }, + "InvalidKeySize": { + "bugType": "BASIC", + "description": "The input key length doesn't match the AEAD key size, and must be rejected." + }, + "ModifiedCiphertext": { + "bugType": "AUTH_BYPASS", + "description": "Part of the ciphertext (a chunk body, an authentication tag, the salt, or the commitment) was modified. Decryption must fail." + }, + "PartialPlaintext": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext is invalid, but it starts with validly encrypted chunks: msgLength and msgSha512 describe the longest valid message prefix. Streaming implementations may produce that prefix before detecting the error, but must eventually fail and keep failing." + }, + "TrailingData": { + "bugType": "AUTH_BYPASS", + "description": "The ciphertext has extra data (garbage bytes or even a validly encrypted chunk) after the short final chunk. Decryption must fail." + }, + "Truncation": { + "bugType": "AUTH_BYPASS", + "description": "The ciphertext has an invalid (e.g. truncated) length: it may be missing part of the header, part of a chunk, an authentication tag, or the required short final chunk. Decryption must fail." + }, + "ValidFinalChunk": { + "bugType": "FUNCTIONALITY", + "description": "The ciphertext is invalid, but its final chunk is validly encrypted at the correct index: authenticating the message length by decrypting the final chunk (e.g. to seek from the end) may succeed. It must fail for all other invalid vectors." + }, + "WrongContext": { + "bugType": "MISSING_STEP", + "description": "A valid ciphertext decrypted with a different context: the commitment check must reject it before any chunk is decrypted." + }, + "WrongKey": { + "bugType": "MISSING_STEP", + "description": "A valid ciphertext decrypted with a different key: the commitment check must reject it before any chunk is decrypted." + } + }, + "numberOfTests": 35, + "schema": "c2sp_chunked_encryption_schema.json", + "testGroups": [ + { + "type": "ChunkedEncryption", + "aead": "AEAD_AES_256_GCM", + "sha": "SHA-512", + "source": { + "name": "filippo.io/cobblestone", + "version": "5203de0d5c09d83d3a4ea7a99748c8245c39fcaa" + }, + "tests": [ + { + "tcId": 1, + "comment": "empty message", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004800b7ff43a2e39431cbae0389d3fc86adf46f7c3a24de88d9311617e53f3164cc1d5dc738a66b97f0bf786565c31799c2f463d50a7e10046011dc6fc3c939e3a5db7affb6191551669554fb010000ffff4bc124df", + "aeadKey": "781b72bce3c966fffb09e5d596e1d21b029b21a9599852fb9b9f644e23b86ae8", + "baseNonce": "f206a92ac0ba380c8e9e3843", + "msgLength": 0, + "msgSha512": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", + "result": "valid", + "flags": [] + }, + { + "tcId": 2, + "comment": "short message, single chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004f00b0ffa1a1b56f6db58cd1ede0c5c9db62aef20d3f96a6c594bb9252bb38122de91236502b42a1d7fcab820ffa292940d2f86add212cfa42c38df19d3cc9139ee61a5990d3db57433514229beea49a8a72bd010000ffffdb4f2a44", + "aeadKey": "14769f63d5e1008908efe8662d188e058d05be2ef94d5b4bc626bc33be412568", + "baseNonce": "e73f670906cb3124dea731e1", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 3, + "comment": "full chunk followed by short chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0312b05010000e0ab33889449c9a0cb22b9ba89943f70a5fc02db1918582c6e757465a0db6eb11ad5a52e1383b2dca26c66a4647b75f55ebdf733def27d4f7ff71fd7e9db7137b778b1558707cdd27cf270d4177b2f7751f738d80e376f9ed7aaaf7c793dfa0d47ef2797b3e57ed6bf360100000000000000000000000000000030750bc9613ffc6cafd232cb57ebd3b320de5d29cedbf876a7da18ff7fffcc4c020000ffffea552abb", + "aeadKey": "11efba825aedcfcb8c1b1d8560ca277a5b29fe9597f9b5c82c11433108a97d47", + "baseNonce": "43efc7c07a2635f9bc0b6b6f", + "msgLength": 16385, + "msgSha512": "db9e441f318209d02c8eaedfa94be7a08d3414057835c80ecea2deb0b16438ff97ae6dac13a749efe4a24686b01dc0dfab756703e810cc164466cd5cce99b3e8", + "result": "valid", + "flags": [] + }, + { + "tcId": 4, + "comment": "two full chunks followed by empty terminating chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecd0bf2b05010000e057b7d8defc5296b788cda88ce495e10d4a51865726b2d09592e1ba18c8c5250bc748dde094410ccaea57ec2283888c57a6f767dcf27d7fc277bed777fc96e565eb3b5d1b7e1e8c5e6677ff3b0737ad93c7e946efd15d732359df1f5f196a4ffc66a7f5ab9db9783e9d7c2a1a5b35000000000000000000000000000000a0726998070f97f7edbf7acff2f6d8f58711000000000000000000000000000000a8dee7ebe6ed623093f49f45f1577938b2f053d49a03e1d4fb45dc590d9646bb010000ffff046e3552", + "aeadKey": "b705250167fb9e3cec938c76ef122c3da83180f50e3270af97a48892d8c9673d", + "baseNonce": "4f3e7949e78497fcf4641a97", + "msgLength": 32768, + "msgSha512": "ccf53be90b5c9bc1aad1fb9b37e86fd60ca86a41401051e636c41e8ddc61b574d6767d16f035f18391c21ff24d1fa5171c5a537685e7197532884845bf7e990b", + "result": "valid", + "flags": [] + }, + { + "tcId": 5, + "comment": "two full chunks followed by short chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecd0312b44010000e02b1365b8bac97048e965b9a46e910ce76222bda26e1289d47b3218947a6579623088494f4a3683d1248b4c262965b0199e6230bc4cf733def27d3fe18bde96c28fabfdc1eae2dce5571caedc0d5f17b717b5707bf3a67efad033feda6a06e76bd3239fcfc55e75f67868e2fbbff3988e9e5500000000000000000000000000000080d2650b7df5df7827cf0fb3e065ec64de0800000000000000000000000000000094afb6be75d4dfbe9f6c4dcd34929f666f6560e3a971f0b7bafbbe9cb6834e1275030000ffff850d2e54", + "aeadKey": "0a4cd317d8c837e8e6e31eb41066e3341478ed43379cd29845cbdc0be7b6aaa7", + "baseNonce": "e00e1d9d383e3d980cfa25a1", + "msgLength": 32769, + "msgSha512": "365a0363626fc42718c9fb3507b9e06a4c64971cc7d93e6c0d2058f8ab3bd38151ba6948896655fc6f2b39b27f7f5df52c67fc6d5a44f0f188f018c576646c4b", + "result": "valid", + "flags": [] + }, + { + "tcId": 6, + "comment": "full chunk followed by empty terminating chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0ad4a0301000060c560f019c49faca0ed821ea2588c62100541cc2746413841835a7c018b20076a325dd4032d8eb5856361db2d6d6c8b2b838ded3156beeff3fce3e4eb20e9fcf5aaedb07ffb589b1f657190fee7f16f763d3bdcf9ce8aabe5d74a145e5e1cdd6fad6c2c1ebead8d8b87c60c00000000000000000000000000000030759bfb7bc7ade6dcfa69ba5abf7bff79d92e3d07e585a7ddbcbb743648a29b49000000ffff4eef2f3b", + "aeadKey": "36920434f3bec8264d74ead196ac895ec88d380f6520e8f1d489ff214396df4f", + "baseNonce": "ce1b2ad38de38773fd60877e", + "msgLength": 16384, + "msgSha512": "d787e0bf39e0d2e9a707b94bc77329f665286160744507f0fac9608e33a98994b6d9dd4a43a6326287d32b2e15d76e0de6a8818689698bee2ca419bf9bbedc02", + "result": "valid", + "flags": [] + }, + { + "tcId": 7, + "comment": "256 full chunks plus short chunk, tests counter rollover past 0xFF", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecdc778308f4e3c071e2504652949164a5647697555fa33abb5424c93eea8c101939eaecaccc23b2c921fb8ccede929179f608498842649cdfc3f8fcfe78bd1ec2fb01bc1fbf70b1fc1ffdd2652e703ae19781716f7edde46096c373b27df4fcb58f467cb566e3fb45867f79e4ec2bb31a1e9952ae5fab55136b2c1a312bfe5a976ad93f4a0300000000000000000000000000000004d733e9c2c5aba5238fe6dbb8a15afc982ff32a02000000000000000000000000000000e14d7ef6c8faa66daf348a7e2ae1e42b7159b32b02000000000000000000000000000000e1b51cfb61b1475b46f73f34e8b5cdfbe39feba7080000000000000000000000000000008437bc6aa1c87dad9f9e532bbafff06aa3df68a8080000000000000000000000000000008477f2f4d06ffee8502177d4cae5bde71ee9fdad22000000000000000000000000000000105ed31e69bb2c6ed1e24ca3e64d1f6e2d54ab8122000000000000000000000000000000105e4a87ffdd2a9dfa48b67b93cfa7f6782ce6174500000000000000000000000000000020bcd72a47ed2f77ebfd27cf15cdfbd12b77963ea508000000000000000000000000000000849798e18b4d5f7f5b30cff013770a559a31a0b022000000000000000000000000000000105ec772437b5f4c48cdb2a677fda4e3f96f8d5404000000000000000000000000000000c2ab98a75fcea86349ffdc48297334f791abc31501000000000000000000000000000080f086c6bf17dfef990a69da976f96f1bddc893b1401000000000000000000000000000080f0e26b2f2891e1ed3255e3768d19ba6bd6ca6d8a000000000000000000000000000000407869a33a7dbc30eda5a983567f772d7540d7698a0000000000000000000000000000004078b10b9e3df2fedbad065dedb537cff08ef54a2802000000000000000000000000000000e1f52db56d749f07151acedab0e1a5570ba7fb521100000000000000000000000000000008efc4d6b33757b57fb37fab7ee72f3df1f8a8584500000000000000000000000000000020bca1f3dab7f835e70b19135f7d6e7dce99df755704000000000000000000000000000000c29bbcb2ef3b434f8d9e5778d2d2e9cbf3d51aa00800000000000000000000000000000084179f32f2549bd842bd0fe72d94aeeaeeba151401000000000000000000000000000080f02a4f387fe5b7bb7fe45a9c3a3a4d868835351501000000000000000000000000000080f0b6cc9a54f8ef11efef583c243221f9b5a6ab1501000000000000000000000000000080f0feee707f40daeef7aeffd623dd82c42b890b1401000000000000000000000000000080f03a141db9e583c29d86d7bc9c755bb1ab518f2902000000000000000000000000000000e18deedde69d19691f34cebaf7b3fbc5d7d78c5104000000000000000000000000000000c21b7de276e633e526d62f53fe704af91d79a62902000000000000000000000000000000e14d397330b95bed1e3de27ecaf3cdfc178a8c5304000000000000000000000000000000c2db56374bcaf1e30356ff3524cdbc932b3e8d5304000000000000000000000000000000c2abb3e966e2cef81aa57e6ddcb3ddfdee0b262802000000000000000000000000000000e19d7bbe4096b3ebffb8defbd50a2d568e1ed55411000000000000000000000000000000082f3a3ecbdd88ba75aacf6a9836cbfedd85ea2a02000000000000000000000000000000e1954cdff9d94d83a79d1b766772a9dcf3eb975704000000000000000000000000000000c2bbb3e6d6cdac7ba277c60d49e85de9ecd0484500000000000000000000000000000020bcb17dd7768e293a395feb5f1fcf76ae5395958a000000000000000000000000000000407809c9b7db167c66f0bbc5920f6f7ca648f4744500000000000000000000000000000020bc8a4bf7ef79a75ea3d4ef6313f6749ef351594500000000000000000000000000000020bcf493cba7e9b97b73a631d74f6c9dd6b2ec244500000000000000000000000000000020bcca5d0feefa347d9d27dffedfdd110f4a3fe8ae0800000000000000000000000000000084d76145affddf547d365dbeeb4def35a95fee862200000000000000000000000000000010ded21df55abe5fe96185073f65fbafe49e674e2902000000000000000000000000000000e1edfeb153448e7eeb674fedda7f5791d4a3151401000000000000000000000000000080f00eef1b33bccca76786f5dbf5d5b00da767c62a02000000000000000000000000000000e1453cf144dbcc55ca25968c2bb7e55afe9b951401000000000000000000000000000080f05ef8facff796c6a5bd7e2aa9c9c59c7b765e5104000000000000000000000000000000c27ba945a665177f7838b04fd9a20f7b5cfb6cb522000000000000000000000000000000105ebb46afc69e5b5231e3a8d6194aae495373bd22000000000000000000000000000000105e5cbd511db30cfd666ae939b1e5967d78fb6d4500000000000000000000000000000020bc823f747a3067e9f43bdf97dabbb87bd9e6298a00000000000000000000000000000040787bffbb786ce8f245eb7f899bdfecfc96664f2b02000000000000000000000000000000e165fbf7b71c9f9d3f74e2f29236e3a7a4f961bb2200000000000000000000000000000010de6fd113d70edb3da0d1c894c52fe7acbbf6194500000000000000000000000000000020bc09ad2665dfb825f6f4a355dfc8bd396a52ac2200000000000000000000000000000010ded2a7373e5ae0c897f119dedaf45ffe26adef2902000000000000000000000000000000e11d7a90e591fcd547bcfeec84d1f3b62ccb9f5e11000000000000000000000000000000082f7670d1a47e199adeceb0f74699945303da2802000000000000000000000000000000e1259c5bbe3dffd5e8bbd7fa4c8d78eaca136f2a02000000000000000000000000000000e1ed2f7523e5524cd91f87d42a926f5a52e3468a000000000000000000000000000000407813ef26fc55bcf981331797cd689e94fb832f1401000000000000000000000000000080f0723d9925ba47fbd74f3e5a78d8ba41b51be55004000000000000000000000000000000c25b72b84d896607123eddba60e1d437cfc5355304000000000000000000000000000000c23b96b97cbfc3974f37efbc68d0c64b73977ca1080000000000000000000000000000008437b748abc691afae1fd272c1823adf14c8ec0700000000000000000000000000000000ff0fb44f93a962b6e1195f7a64ca9bff9688e83b521100000000000000000000000000000008afe63b0d0ebdd469f69271137364385039a99e2200000000000000000000000000000010dee101efec2b7df2f2e86ced3eae38776dcfdb8a0000000000000000000000000000004078b9d24c3b71bbd1adcb0f0eccdcb1b752d7571401000000000000000000000000000080f0f6f7af94f8c7e417765f3bb87de1d22375ae2b02000000000000000000000000000000e10d7e372af3ccdca70efc7333ffec0c9d1a2c5704000000000000000000000000000000c24b3999abe4d8336776d72cdbf4836b4debdc5204000000000000000000000000000000c25bbef9cf8a37ee545b113fa3d5986ab74b7fae080000000000000000000000000000008457a969f29dc875a7227fae17936648ceb3db1401000000000000000000000000000080f0d6b5f8a368e781a323a386753dd022a5442f4500000000000000000000000000000020bc528bfb1dae1719bf6bd2e2d6d91efe5ebf832200000000000000000000000000000010de8888cee74abf353521ba79d6e406ad774f5604000000000000000000000000000000c2dbf6d26b392b768b38712bc7be7f57cc1abb5c1100000000000000000000000000000008efd46f07aa8c9a3db871a7e60f4af658b2ebae22000000000000000000000000000000105ebd9a7d52f3373e98e5ccfdfffaafbb3c71a722000000000000000000000000000000105edf4507daf55ed8eff97f2ec7de7df5dd2a391401000000000000000000000000000080f0e6cdec3df8f4e9b5b5cfb7bdd9edebe41ff62902000000000000000000000000000000e17d7f7bcc8eea499bc65c6b3c6d77a3dea39f5404000000000000000000000000000000c22bdba2c4ded4bf7717fa6069d1a3d74b7dfe8322000000000000000000000000000000105e4cb39c71e5abb72b976972857b714949eb1501000000000000000000000000000080f05e4e5cd8766cc292a27b5f1cf1dbb0f5998a2802000000000000000000000000000000e1b5fda6e2a231056eceed9cb76b975727bddb501100000000000000000000000000000008afc0f8345953a2a67f5bf0df4c8d2e6cf8f0494500000000000000000000000000000020bc43dfbd15b5b8c3e54c391ebf1d396e5da9eb8a0000000000000000000000000000004078fbb617abbce1bbfe671edefd61cbc745e7f45704000000000000000000000000000000c26bf9c9bc2dd74fae1a76b5fde6123766779eae0800000000000000000000000000000084d7bbc4579d8b3ff7e5cf9d3e7974fdcadde7aa2b02000000000000000000000000000000e18d5adc6d42fd0ad1dddb2e7d2fa2fadd924d1401000000000000000000000000000080f0ae773cb67ff35b2f2f9fd4fac52cff248edbaa0800000000000000000000000000000084f7f580ccc7761fba7d60e4c2c2e3eb5d991ea50800000000000000000000000000000084171f79e8eac23f9b143bf54a427c87bf92662b02000000000000000000000000000000e1e5ce512373f77f5ff93e2231ddcc82b95a5f5204000000000000000000000000000000c2bb3be9f0236d6ac47c7868d8f23cefb7c9745711000000000000000000000000000000082f7bfa2d7b079779a6dfaf1dfa0fbe56e4789c22000000000000000000000000000000105ead26754a563ed4b267c13b8dc65fea5a798e22000000000000000000000000000000105ec6a999da7dbceaf0c345152eeddf5ee2e0684500000000000000000000000000000020bcac496b92933a662cfee3e8dcdb633f3f784d1100000000000000000000000000000008efd3e4f4a70f4f4ae9fa6987538b06ad491cab080000000000000000000000000000008477f69356bd2a14e8b3227bfaedfdaa957de2574500000000000000000000000000000020bc721d1e79f5ecc29465931ba464f96cf0942f1401000000000000000000000000000080f09ab76cf4dd8e155967aecc30a3ebc8d4a8eb8a0000000000000000000000000000004078f3de5999a6c5bade7bc73e9af785a9ab97545604000000000000000000000000000000c2ab596fcfe81733bdd46ed47f5beba41bb5bead22000000000000000000000000000000105eae7d95ba6d7b39aac9a477d7e78928dabfbb22000000000000000000000000000000105efbfd6532bf7d2b624672d5bd03a735b879511100000000000000000000000000000008ef7ff333fc75a1f8cdc91d7bb49bf4e79416a51401000000000000000000000000000080f08ea53d7aa5dbdf993ad77933eacae2f68fa52a02000000000000000000000000000000e17d54a367cad339c7b79c3d614afbc9578e262902000000000000000000000000000000e135acf27ddac9b177cf6738f64472c18a895b1501000000000000000000000000000080f0ee5de8f0459eaeb5bf191a5dabdcbcdf6f145104000000000000000000000000000000c24b1ef267b59b2f272cc99d546dcf9e51bd0f2802000000000000000000000000000000e1354e8db9f64dabc76aff5ee061d297b31a9f5204000000000000000000000000000000c23b7af19f5f86be59f558973aef94effb7396c98a0000000000000000000000000000004078f1b7caee683fbef5b2a75b47dd9e3abd61354500000000000000000000000000000020bc77c75ca9906b7aa12bcbf774a9b92afdda138a0000000000000000000000000000004078755fad58336dcab10965b65e98d5ebaf93918a0000000000000000000000000000004078b50b257cbef9b1cd7bba8daf74716ede34b71401000000000000000000000000000080f0da2efaa5d8e8492bef47c65e99fc62bf1adf2b02000000000000000000000000000000e15599b06579abd5b3db6db93270fccb31b71b2a02000000000000000000000000000000e175f978d6573f6c3c1379b7e7a92ac5733528ab0800000000000000000000000000000084b76ecaeaa6455ffb6fed7bf3963d7f2e726e454500000000000000000000000000000020bca8b76a3df1edbaf9258a55df1f9379dc271b1501000000000000000000000000000080f09ee8969a92767bba1fdb4fcab5e5afd299db2802000000000000000000000000000000e16d2a74ece8be42b70f672ffe6b9d9e11e7121501000000000000000000000000000080f08aec3ed62be1d963adf38e9cff4ab91b5dce2802000000000000000000000000000000e10d6c3875dd821a892bf6cedc5df3c81735262a02000000000000000000000000000000e13d73ac70db33bfcc1fb3e0d1d4436bda947f4d11000000000000000000000000000000086fc4fbbf565ff5e0da4f69178dab7974e1e6cd8a0000000000000000000000000000004078b5ea8ffd76e78cc8f459e20ec6b62e5f3f9722000000000000000000000000000000105eea826b2586c5cf3ef14b9ab6a7bfa875ff534500000000000000000000000000000020bce4e737a54c5f9e6dc5c1272a8fbadc2c6f734500000000000000000000000000000020bc3a23b75d8c399b2fe3a0af7f39f8f7e7051e5304000000000000000000000000000000c27bbc5d748b6ecfb72cd22ea249dd2133f3e65004000000000000000000000000000000c27babfeb3a9e7b2a7e91b37ebc52ae9debe374a1100000000000000000000000000000008afda91b2d1998b4e5cb7acdc9d3e6dcf6e2fa608000000000000000000000000000000849758a45b9eb72f1caffd59bfb49fad1cfbcc164500000000000000000000000000000020bc4f0f7ef541d70a759f2fdd3ee6e9913d9b7fae080000000000000000000000000000008497e16e4cf5a76bf4b9dea6cbf14ef7ab448f5104000000000000000000000000000000c2fbebb7b377b67c32b7eacf53d75dc89eaf665a4500000000000000000000000000000020bcfa9952ca2e697ee6e4844edb734e7f6de7154500000000000000000000000000000020bcc21f7e55b5d9cca1f7ebdeecb3b7f1f28dbd1501000000000000000000000000000080f04a27b5a9d0a8ceda099fd5eb7b3e5f9592ed1401000000000000000000000000000080f0726c5fbde3eec05a294d6e779c7df7c38cb31501000000000000000000000000000080f01e24f51f7c36b258a3e6bb4bff1953e5fa264500000000000000000000000000000020bc0783e7cfb8bf35ebf735b69ef8736bd3b6ef2a02000000000000000000000000000000e10d4c5ab1a76df35e5b07edda3ba250da5e471401000000000000000000000000000080f0922f76be30e1fedbe52372a6dbf4e7f9c9751401000000000000000000000000000080f0ea6fa87fa9648d8ff23ffed22795aecf8c9fa70800000000000000000000000000000084f75fdcdca251699e4c93e3f86b1f965cb62e5a11000000000000000000000000000000086fec8a03b9d664fc2829392272deb6d5fb672902000000000000000000000000000000e1cdaa70a86a6a44bbfb69daec19fdd6e6ed571501000000000000000000000000000080f07e6e59ef74ecc6aa25eb9e19f5cfaad5bbbe5304000000000000000000000000000000c2bb9c706fc18f6576ee5f50aee2f1a1f39a0d5104000000000000000000000000000000c2db55b1cae07f0b663fb92fb95bb3b111ab9f5404000000000000000000000000000000c27b7ff7a8558386149d77fcd2c4a76abdfcc6178a000000000000000000000000000000407871c9a7bbbf913262eacd131dba26dfbe18a50800000000000000000000000000000084373457a6663b2ffe5ee6ce8c85a9135a455d5704000000000000000000000000000000c21b52b065e76eb947bdfefe865d9f8fcc34bd8b22000000000000000000000000000000105ee44f93ab2d2cd67ac2a9eb793b6ccc58709b22000000000000000000000000000000105ec56de7d264fae9c1d57ae5f21c2fdd3526421100000000000000000000000000000008ef8346832b7db9ae50b1df9f58f57dddadab462802000000000000000000000000000000e1cd685e36b574bad76a97be96ee5eb60673f32902000000000000000000000000000000e1bdf1e09d8e97b24e9bfcbfe9991e69f162e76f1401000000000000000000000000000080f02a6ebd983a61e3e5f2039e1b73bfcd07edc72902000000000000000000000000000000e1e51ffcd3f1d3a997a22f3cd624b9c5ec32451401000000000000000000000000000080f0f2671cb1a866c4d49f8b17a87576c1b3459b2b02000000000000000000000000000000e19d6a13d538eaf5cf52babfbdef5cb3eae33e5604000000000000000000000000000000c27b29bafe8d3571c73a752a7f22a9c2e3b70b2b02000000000000000000000000000000e16d2fff6ef49d639bbb1c89ddb3377948c68c8a0000000000000000000000000000004078e7df88483c36a1dcb874155ebfb5fb8379ed1401000000000000000000000000000080f0b6e47cfbd76617a3de4a3cf9f7fc2d07972f5004000000000000000000000000000000c29bdead6b83811bee77d930ad5081bbc9272f2b02000000000000000000000000000000e12dbf5f60759fd7ba95f9f872a76d5d6af47f431100000000000000000000000000000008efd77405a3eaadc970e9deda432d1e96aebb461100000000000000000000000000000008afd9e7571a9c3f34fe74fbde3149e93b3ff23f4500000000000000000000000000000020bc15bb6e7d9cb9ca6f6767de5bf442fac4c4df1501000000000000000000000000000080f04a8dfcec87d397feac366a729d2a153266afab0800000000000000000000000000000084171bb3aa659e9dc5cf16e9f96fc153311de31501000000000000000000000000000080f0561d29f4cfc098f9ed2eafff69f35feb9ecba4080000000000000000000000000000008477b0e7e55e496726742a78f599fd1533e638a408000000000000000000000000000000841733adf2f1d5ab4ba5afb1e7ca9abc779e9da80800000000000000000000000000000084d7615764aef8425feeddb471f3dd9b6b2f6d5604000000000000000000000000000000c28b3fd76ac5cdbb1dfae7cf155d7cdcad05c31401000000000000000000000000000080f05ed836a8f5e8c25596cd4a8c8b7cfd9d1be31501000000000000000000000000000080f01ab64c3ffadd94843ba7e69f2cbefefcb2c71501000000000000000000000000000080f0921b7598bb78c38cd3f5aa4de9b8f3a5a7762902000000000000000000000000000000e13d5723e1f92f1ef63cd0e742fc8f7ffffee9264500000000000000000000000000000020bcd8aa73fb56d851aef986f4c3fb54bcb4f8a622000000000000000000000000000000105efdd90dfe8d98b2ade2cb5f1c1b996fe83f731401000000000000000000000000000080f02675eb3fbd74dbd22fe4cfdaafebc0f8a4e98a000000000000000000000000000000407837bfdddcafcbead6cd8e4ffc2a5fe9d647332902000000000000000000000000000000ff0f44ee18d86fced979738ee548aabffff172820000000000000000000000000000004078097372946f7363e0c484355f9d7bf4c545631401000000000000000000000000000080f04ab79ffedee2266786251eac9638f5f54e318a00000000000000000000000000000040786fd5bf3fb0c6c433bdea2cae7ae261f6ec3f2b02000000000000000000000000000000e17dd723f248ed8d3f67acbce050c7320f0f6f5204000000000000000000000000000000c2dbb7b5c5a81a356a3ff565debe63de6b98f6474500000000000000000000000000000020bc115573ee9ef0f49373afd41f973be36f1d6e2a02000000000000000000000000000000e1ed1cb0aafa989753bf9df977c52533ab44765404000000000000000000000000000000c27bf5b992c7fe4dfaeabf71b3f38c7da4e0b8728a000000000000000000000000000000407835636fe5b97affcc2b35ff5bf2fafa4fb25d5604000000000000000000000000000000c25bd87ff8acd42b3b5eecde79f7bb873f6ad340110080ff6387debb43b00f06000b2d09074df1d2f0b22ea850467192a32ea5dba82e7a4ad568e2368d6dbad1eee25297a1626916ddc219695a25961db1b864e986922659909cae497427486db5a4b3343aba84485b19f6317efbe3793ec20300000000000000000000000000e18dcc8a79eec2b2c6cadff57cb8f7f0b4dbcf1b01000000000000000000000000000080f0b237a5ef9efbc1b6cf8abafc21293f6feb5e23000000000000000000000000000000105ede98c3cdb5358d0b3f99f1e1c4a5870ed41b01000000000000000000000000000080f0ce65de1bfb7f1ff52a3b5b30e4deaea3f2cf1901000000000000000000000000000080f04ae313fb2dcf4a98d8a9e191a6d59f4d6d3202000000000000000000000000000000e1d51e28bef6fad587527ff2e6b8fe03fbec3f6204000000000000000000000000000000c21b1a13bd6ed2b7fe5c31a45f62ef9d4d25c54600000000000000000000000000000020bc190937e7efbc3ab9607341c2f431c97b6f1801000000000000000000000000000080f06a673e1f397bc6d9ad19171aae6f4dde9e6204000000000000000000000000000000c2abbfaf6b447c6c875107aba65c1c5fb6b1c40800000000000000000000000000000084b72ab3b5b9c79d94918bdf7abbe68d84d1354600000000000000000000000000000020bc4747be53f5c08f9f9adda3dbe65b49c73bc71801000000000000000000000000000080f0a2ba5c5cf0f9d9aae469bbaeff30b27cd62d23000000000000000000000000000000105efac2bf64f74999b03c7de09ef9472b57251b01000000000000000000000000000080f0e2ebf2e7e7ecfe7765eed1a4d6a6751f7f6004000000000000000000000000000000c2dbf1d61711a5b3def9467af75f4dbb67ecc9722300000000000000000000000000000010de8b0bb2bf1aff9d6365158f9597b7cf3d9d6f04000000000000000000000000000000c21bb9bc7058d6836bba1d5b3368de1f630e141901000000000000000000000000000080f0a2e647c4953fded6be6ff391a4d523e3571901000000000000000000000000000080f0aefdb367c4dd86a15517a766ff60eef0f76a8c00000000000000000000000000000040785f3bdcb54feada27068f495d3a277ede8e6a2300000000000000000000000000000010de431b9e4b68bd367457e3d5bfe7f41dfcf92e2300000000000000000000000000000010de963fbd7faaebdeb69f4edd987020f546a70c23000000000000000000000000000000105ecfb82d3de2a68d5a7ffae0ecbabda766d51b01000000000000000000000000000080f0f62717563ff8d1f695138fbdf495d369bf9e6004000000000000000000000000000000c28baffa3839f9c5f7e6b67ff7cbb81b33765f3502000000000000000000000000000000e1fdfe44a7f12f0fb8bb7660c74517da8fb8526e04000000000000000000000000000000c27b75f8b0f4ec113bb2b75cdab4e49984ca5e4600000000000000000000000000000020bce1d96983864eeab67ae6b8c2979efec70b854600000000000000000000000000000020bcec9eadd3a22774ac59bfae43f4965ed1ff3102000000000000000000000000000000e16dbc55d6f0bd5fac48dcf6e633557b062cda6904000000000000000000000000000000c2cb6b5d1397b227714afb019ba6676ca85e6a04000000000000000000000000000000c23b316a63c5aabba9231eb8913736a5fa375b8d0000000000000000000000000000004078d7676e5f34f5be3e911dd323c6445d1a36c70800000000000000000000000000000084f77671bbdcf11f56bedab4b9a5e87843c91123000000000000000000000000000000105ee72ea9677207c7667ddaf1e41ba99b463f6904000000000000000000000000000000c26b697cf668c3d83b8fd64ecf496aad5fb6d20800000000000000000000000000000084f7cde3b322a3f60c7eea95ca2fb7cdcb896c3602000000000000000000000000000000e15d6f9c39a9a56fff6f9f79f9cca4ef2f1d7ac80800000000000000000000000000000084f7c494ac9bb5ddff96b5e3e1fe7147962c2f3602000000000000000000000000000000e1dd9378a5e8f2b67e0bf20afae6ae3c5fbad30800000000000000000000000000000084d73d7ac8bf2a9edc55b4bd24f1b179a726de3402000000000000000000000000000000e1c5c647c5ee4ffa79fd8c5f9ed871fecef99d4600000000000000000000000000000020bc9ad2cc1fb515a7d4758ee83d6071dda9fd4600000000000000000000000000000020bcdb692b324f570f199733a871c5fb2fec7ada0800000000000000000000000000000084d76d72e796a882c93777dfff5ae68a13073f3502000000000000000000000000000000e1b5e5c6d6dd6e78fd4accc90ecfae8bca1f6404000000000000000000000000000000c25bd6e3d0da79698b6a7f7bff927331a5792d4600000000000000000000000000000020bcafcfe994b2e7f14b5facfceeb9c5698f2cbe6c04000000000000000000000000000000fe075cc8eaf3ff5b6a8b32f665fcb56d61cf582100000000000000000000000000000010debab20d0b97b4fb59a78a92d257562cca4d3102000000000000000000000000000000e195ae59b261f5aa4f32da6546af9c5ed8d6ad5df3bec359eb47efde175970f9dd819d5fbbf4df000000ffffca5539e9", + "aeadKey": "ceb777780ef93b867fe7f897f27d231b1ad947df743cc145396046c1112c70dd", + "baseNonce": "5d9a49f1d4760e8febc4e5d2", + "msgLength": 4194305, + "msgSha512": "95bafd82060396802f1aa96d1f7c151c459f5467417fc22bc96350ad8960033f859758b02c870451bd46935b04fdccb521af4c11988e4e9b6a5b488b26d60b02", + "result": "valid", + "flags": [ + "CounterRollover" + ] + }, + { + "tcId": 8, + "comment": "257 full chunks plus short chunk, tests counter rollover past 0xFF", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecdc77a30874c380e18cb22923d9fb2011cade796494acac8c647b90919dbcf6c8ceccde2b110e191d7bc531423946f63cd6b14be2fd18bfe78febfa08f707b8fbc756685ef461e2ec8fde5bfcf69a63c96adc8b6c78b3c1d57dfd0f4d7e74bb5faba856ff4666ae597f4bcaff4b1491b478fa511592574c3972c9b3013d07bd020000000000000000000000000000000497294da96faa16bbf7d7947db9aa56c9bd3fb122000000000000000000000000000000105e96ff2cebb6ee58eefcdf1459df6ee88367eb1501000000000000000000000000000080f092751876bc63ce88b627e6f4c93f3266fa424500000000000000000000000000000020bc29cb07fdfedf3645de19f72c69a209079f5e5304000000000000000000000000000000c23bf45189c6698b4eb970b74fd1f3bd7ac47ca608000000000000000000000000000000847723aee7b3fbafee9b71f9d2d2df7fb871b89e22000000000000000000000000000000105ef25691771f4c48d2ebced4ba136297171ea90800000000000000000000000000000084776dd4ede5c7d7bed779dcfe23d39645eceea50800000000000000000000000000000084576f4caea3d9278edd387bc5d434939bfe3e5411000000000000000000000000000000086fd157672e66881eb13b26538dd4f5bbddbaaf080000000000000000000000000000008417fd60718a98e1a5f3a438d975c0c694e3522a02000000000000000000000000000000e1bddf6a72f1c1635fe93fb568c58be30bc57da90800000000000000000000000000000084d7bbcbaec6cbab9c381cb966eec57ba73e1ba4080000000000000000000000000000008477e19777bafcf3f4cdc8e52d9ebf5fb4c8d32c8a00000000000000000000000000000040785f678cd8fb639b3dd38e649b31e7e68ea9851501000000000000000000000000000080f016753cbdb8ee86df5bc5a6bf59bac8f673ffa7080000000000000000000000000000008437a0c885cad7c72d2d7ba06791c2f10f9f6da30800000000000000000000000000000084977ecd9b77ca77feb5feb7777bdc99f03073842200000000000000000000000000000010dee771d70edceb91a852fc7cedce74ad13bd5f11000000000000000000000000000000082f3aeb8b1a0d1e3d29faf3b185cd6b2e3f75441100000000000000000000000000000008efb766c5bfcfd4a1e1d53ce5b73c8a5ff9df7c8a00000000000000000000000000000040787fccc9b66aebfe0775de68dfb2eef412cd862a02000000000000000000000000000000e1f5c830647ffab343776d79f63051a6ac49d72902000000000000000000000000000000e1f5ec7da577afa854fb2615bcf6a2d9b424c71401000000000000000000000000000080f0c6f6bdf0ecefb31fc77fd4e7d49531fb46a45604000000000000000000000000000000c2eb9333fbd04dd5664c5d57bd40e99a6733ec5004000000000000000000000000000000c26bb6e9a714154b246b14fbdba4e10f768c59ab080000000000000000000000000000008437697399cded7a8fbabdeccefdd2170e3e99a90800000000000000000000000000000084b7326dadc797afb7dbddee49a5437f9f7f7e5311000000000000000000000000000000082f6b9e947dcfa51ff36a8e14b517ec689b7a9422000000000000000000000000000000105ee3a5378bbfd2ba52ceb52fd62e9d3e6872614500000000000000000000000000000020bcb27f0cdaffe1abe762e65519fafaba29bdf32b02000000000000000000000000000000e12d293f3276e6572fbf1cf1bc70aa825b26af5404000000000000000000000000000000c23b9e25fdae7f36f4da57e545a17b3bf36df70300000000000000000000000000000080ff0137d2d42ad8e2db1ff28e1c346f5c9a2d91571401000000000000000000000000000080f03a8f69592ed1d6760d229a6c4a7c2741ca0a8a000000000000000000000000000000407853ea8edf357075a184c7a2ae1ffef5fea0818a0000000000000000000000000000004078f7fb8e2d9d7363c2d667ced77bf395b4a9ea2802000000000000000000000000000000e115dff1fcc0eb974fcc1a5da6db8de41b92645704000000000000000000000000000000c26b972279dcc86a2746765af051a20e03dfcda308000000000000000000000000000000843727eb86253546376f3ea0e0dd2eeb86b7895204000000000000000000000000000000c2cb5a7640ffe8a8abdb27758ceeb5aa51c57d8a000000000000000000000000000000407887be9a31f4c1ed88031d66fd7bb77d9ebfd22b02000000000000000000000000000000e16dda34e4c2c41b37467c34e8cee1e9b376b45404000000000000000000000000000000c2fb73c2de5c6f3f7b7f70e2e1d74e267bbfe34b4500000000000000000000000000000020bcd6135a9e2cd7734e893f2f652f79b5ddf0771401000000000000000000000000000080f0760e8cdaf1c6cf5f447f9c76e4ea965b0fc62a02000000000000000000000000000000e155ae35afeacc633fbc1cfa72e68adde7873e5604000000000000000000000000000000c27bebf99437ab55eebbb5dfb97ed72f654f7f5411000000000000000000000000000000086fe3fcd4658a2ecd71fbea855967e267fcec3d4500000000000000000000000000000020bcaa0d4634be3cebd4ecac83ae1c3ad2db0f00000000000000000000000000000000fe174c8ccb3c7acfebff5cccb87af43b4b270e4ca90800000000000000000000000000000084f7d76f5d77afc858fdc6f15df97f5d78bdc7154500000000000000000000000000000020bc6bbd1bcdd9fca0d0c1b331c3922dcb9ef98e2200000000000000000000000000000010dec1e8e72577b5283aabfbd81737bf9f52bf8c22000000000000000000000000000000105ec2368367644df6f5b6c67f5c1cf7f462d58d8a00000000000000000000000000000040782706b6c875e74c8a2c75e3655e9d7759e34f1501000000000000000000000000000080f096676cf853f3abbf3d1bdfaf4fb7818353e55004000000000000000000000000000000c2db5e366f9ee6775a9f3b3d6ac9b6a6b38bfd571100000000000000000000000000000008af7a9d92d35e363993716fbc65a7466f2fb6551100000000000000000000000000000008efc0de3b671ff6ed1539f0e4b064a5e61ecea2080000000000000000000000000000008457fe5ea1cf0e9dfd36f3e6530b774dcfbcab8622000000000000000000000000000000105e872a53cf2cebd5a96ced46916f5c6a5af68022000000000000000000000000000000105e896ff2d55e7170c796d3a7ff7be0c6bdf8571401000000000000000000000000000080f0fe8dbfa8cfa6efe67ddba0dff1051f1d1af7952200000000000000000000000000000010de072d3667bcd8257fb7fed9ba1d8dbf35d73a4500000000000000000000000000000020bcf90dfe3975f750fec8dcf562462e2e752f9d22000000000000000000000000000000105ec201abca0ecfb4e6f8b453cd4ba7bcbfe0174500000000000000000000000000000020bcc9abde4d7ea960a6ee3ba73c99bf3861de618a0000000000000000000000000000004078314d6fe61812b9b1cde326df75fa687f854f1501000000000000000000000000000080f0a2ce76af70f040c9f285be7ebfd6ed5ead132a02000000000000000000000000000000e1bda8dda0fbd42eb7ff9a94bccac6372e25f85a11000000000000000000000000000000082f758265c953fff4f9b6a3ed76ec7dd83af5034500000000000000000000000000000020bc2917c72fc9f3225e873eab27272872e0f0404500000000000000000000000000000020bc39d5d2571af24bb2be9d3af4ee30bde6c19d8a0000000000000000000000000000004078f1f716b9b3f6ffee469ebb5ab1fb837919fc00000000000000000000000000000000e07fc0de8619ce6ca87222df8ed4c7cf7438b1b0b82200000000000000000000000000000010decc14bb264d5ab37475c712370fb6fbe065ac2200000000000000000000000000000010def10293ef57caf36eb3d6475ed9f9a4ceb4648a0000000000000000000000000000004078d1cd4676c99fe08d6f5765fd6a76feaf47d65004000000000000000000000000000000c2cbfd4ffc6ef7af34eafae9dcb7127c7123632e4500000000000000000000000000000020bca49f6c888b8e1bbc2557a2ddcb864cae7e5f1100000000000000000000000000000008afd79a05379e4d5c942336edd0ae3fe55e335a1100000000000000000000000000000008af5fb1d573367e307b6ecf881e1d7fcabbf75f4500000000000000000000000000000020bcd8d77225dc57a0e2c00f4ae54a3c7cc0e5f28a00000000000000000000000000000040786f77ecd96263c6e933334c181911fbc32b531401000000000000000000000000000080f0aa3e3e5fbc6d8a3bbdba674d9c6fd198d39d1401000000000000000000000000000080f03267a854f6e3d4777a7ef6d7ddda332b6d6ca30800000000000000000000000000000084d7fbe3c8da4d5ad728de6261f5317db6cd9bae080000000000000000000000000000008477b87deb667d06e46e5ba0d8fb2d566e5fdf4a1100000000000000000000000000000008af7bda4dcb5f9fdaa4df88e9897e28f4607e214500000000000000000000000000000020bcf4df567f98e74aa6ca47cf45dc2ff39ff5671401000000000000000000000000000080f03656bcb62bfef0bdbb0adf4a99a3f5dc8c291401000000000000000000000000000080f0ca8dba97b6d9f4cffeddfce12be9a2ee2ebfad080000000000000000000000000000008477b2e41b91cd52f759dd64ca5b67224a945aa9080000000000000000000000000000008457fdf1cdfc3f3d1a522ee2518fb5438fbcf18e2200000000000000000000000000000010debe4223b77c9123aa51c724aff71e7c245d464500000000000000000000000000000020bc6fcec4bc332cdfe6a862dd6ad7dcbaa9f7724500000000000000000000000000000020bc318f1235cc36fbdf2fdbd71dfdcf6bdf5d9aa10800000000000000000000000000000084d728eedba1e9a22ee438fcc5fb9f977a735f8c2200000000000000000000000000000010dea2679fa6189d38dbdf237b0dac74eec3f66b1401000000000000000000000000000080f0da662bb278e6b6a8b69d76e4bc37f7974ed71501000000000000000000000000000080f0f6ee19b667f7f50a338f0cfecfcd336597d65404000000000000000000000000000000c29bfe6aea79c3c7d5b9f2c68fb57fed526278414500000000000000000000000000000020bc0f6e252d9967f49035dfb5d8fc2cfded57972802000000000000000000000000000000e1655b72ee870bf95ea44a537a51b7e87d297b2802000000000000000000000000000000e1ddbb332bc1e011d9baf65894edf1fdad99de5404000000000000000000000000000000c2ab35237eb6acb70f4ebed6eed8d67df9ea555604000000000000000000000000000000c21bf1d7f59b7b06bc9ae1d8fca2c9b3fcfcc3334500000000000000000000000000000020bc5bb165bf6a72657ceaa6edee7cf8ca972b572802000000000000000000000000000000e1fd752bdef8c35b325d9ddf73cf37dd8a8de9ac0800000000000000000000000000000084976edfe121cf9ff6dc9074f6d765378ddfd05f1100000000000000000000000000000008eff34df5eece7dd9fcd6a279eb722fb8b7e7554500000000000000000000000000000020bc5ff63e8aa9b9b365bc64793f9a5df17aa2548a0000000000000000000000000000004078719fb578a5e1d675b392556cbb72e19f5beb2802000000000000000000000000000000e19d3a95f4dee84ab3532caebfff72c39797722b02000000000000000000000000000000e15da9ff7b6c744cdead7f741c31e04c9e46751401000000000000000000000000000080f0bedc1ebbf9cbedf7cf3f7bf2f7a2b2df3529a4080000000000000000000000000000008457e2ee9cbbe3cb94bd5c654144bd625f45472802000000000000000000000000000000e11d491599afefc8ef3fa9567870e4b53f23df5004000000000000000000000000000000c24bdd796ae632097f6b9e6bc2e4250732de7ba10800000000000000000000000000000084973f77c206ad8e8cc9fff6b8ddef751ff075074500000000000000000000000000000020bc472ddeca5e22c784e9f5efdcdf96b97ae53b8a0000000000000000000000000000004078cd473e5bb179fa8a7a897e9c9166cc8088678a00000000000000000000000000000040788707adec1233b652fd1dffe9b07c53a2f4c71401000000000000000000000000000080f05aa44cf9f6b106a732b4cff7cbb3364bcabd5004000000000000000000000000000000c2cb573949b5bfc69dacb627e9b70b2baf4e514c11000000000000000000000000000000086fffe214e96fc7fe386bf7d1f89bfbe77e37521100000000000000000000000000000008ef68a7976babcf6c336ad9911d455f6b946ea522000000000000000000000000000000105e81a6ede2d5cd54fdb504c39e5c5957bb65174500000000000000000000000000000020bc0373225e76d9b17364ecbe4f06b72e55b48322000000000000000000000000000000105ed762eb638a762bdea876dfa80f231f0c1faf0800000000000000000000000000000084f7fb7fda27afbced658e871b57b58e1edd7b922200000000000000000000000000000010de8b8e4333ccedd7ba56befec7d71d5d12d94411000000000000000000000000000000082f55f32cbdf3d72c7b6141bb5dcdaabdf5770b4500000000000000000000000000000020bc2479e716293fe0c0a586c77efbe3e6e664e91501000000000000000000000000000080f0fa6e6b932277ce777efbad5ebea291b3d66c5604000000000000000000000000000000c21bfb73a7552d7f3d38297ead5f27a62af9fd654500000000000000000000000000000020bc34675fd48a4dbe67d98a6999aa34885af5a722000000000000000000000000000000105ead34559f6e9fb430d5dabc778b169cf3788f22000000000000000000000000000000105e4ce9fea9a21ab52db5f5c28b95433e7f6b802200000000000000000000000000000010ded99f3b175d19f779b998c30b4f161f7b23bf22000000000000000000000000000000105ef4d3a68d8a5dbc77e8979c1b1a9fdc3de1b12200000000000000000000000000000010de87cff757ccd36e4a9bc1e9ebf75afb6df3068a0000000000000000000000000000004078f51b4eaf30a2ddb8e895bf7e5fbbe5c8b5091401000000000000000000000000000080f032cfdb56a879bfaf57ade9502841cbd951c71401000000000000000000000000000080f036562db7fdc7c959e3524ecc5a7747dce2368a0000000000000000000000000000004078077a5c88fe71f7dc92d37b559dbd6cc5ad788a00000000000000000000000000000040781dab3e3818733d49bc73cd13a57efef6b5fd8a0000000000000000000000000000004078afcd1dfc66e5c55726e66d9b274bd2ddfbaa2b02000000000000000000000000000000e13d3953b1c4b53d9d1b644997e4ad8e9b0a945104000000000000000000000000000000c23bf9cad6ae114952cefda355ee971dd7e7a8a608000000000000000000000000000000843761f0473fac6cf567e236f39a957f7ae2f3318a0000000000000000000000000000004078f3f636f97d60ef0c095e9c8dcb7a3d47c1498a0000000000000000000000000000004078df8cfbe2f0973b92d6ff3baafd7befb59d16ad08000000000000000000000000000000845775f3b8ef6bcf2db4f4c41bebe2e63d485a5911000000000000000000000000000000086fe5c07c71fbea4c2d77ba7ffb44c75a3e78a20800000000000000000000000000000084f7f1801643763f2d5d2967c2fe658eed68794c1100000000000000000000000000000008af655c8a23d30b96e832b97baab7ba551cd8401100000000000000000000000000000008efd2d0a23ddfacdba1eb9a9f7f79bdc0afbd472802000000000000000000000000000000e12d99b8b4e58c65973e7f39a356d1fcf57a6e5504000000000000000000000000000000c27b6ff7e0add1eb0f6cc9b4b7ebd10a45677ea40800000000000000000000000000000084b7a8ecd7317787254994fef3617b3b5ebbfb9a2200000000000000000000000000000010dec1bf4727a9bd2c456487c7bbaac7d67b37af22000000000000000000000000000000105ee675791f36cb5776dd8097b3e7df2e5e7da622000000000000000000000000000000105ed3d269533ef9f04ae1dfb7d6cf94e6e30fb32902000000000000000000000000000000e16d1c94e4f2db9dd7169956a55ce3b30ba21a2a02000000000000000000000000000000e1551cbf2549f681e5764e88283d7fd78aa91f2802000000000000000000000000000000e1d57cd134ee9fcebbda5fcf9cecde9ab34bbb2a02000000000000000000000000000000e16d8a372ec7fd5b9f2528dcadd48baae9768c5004000000000000000000000000000000c23bd2b4cdc27e8f721e997c7d79d94f73a669af0800000000000000000000000000000084573ddbb20bb3539fd997e1f6f18ed71627d9a30800000000000000000000000000000084973773a3e9d3aa3e2e5ce3c7f3695faf5cb09e2200000000000000000000000000000010dea08f0bf6edb36fd1dcdce7539ead16bbb79522000000000000000000000000000000105ef16ddf1d6ffad66ff1af2edf996edeb8229d1401000000000000000000000000000080f05aa7ffebd2adbdbfb63e70b6c2b805112be62b02000000000000000000000000000000e1adb934f7f5f51bfa6668d9e7c1831a7115221501000000000000000000000000000080f072d71f3fb346f3ef3ef8b1489ab4f9ce467fa2080000000000000000000000000000008497f0d19a0749cfa65c30f9d2d8dadb2b0e5ba9080000000000000000000000000000008497af4ba14f37ae48bb7edaa4a33b8b762f74541100000000000000000000000000000008ef42f68477068f7e966a795ccb01dfd55efebe2200000000000000000000000000000010de9ba71f4f4c7cf2e70e831bc43b9da9fee6028a00000000000000000000000000000040788deb9cbefb49eba5395b66c9f84eeb473fbfab0800000000000000000000000000000084d7bef1897b691b4d59742eede6c5e32a9ea9a40800000000000000000000000000000084973159aace5b4baeee1857ff50c287bb07175604000000000000000000000000000000c29bd264cdc6dbff2d32eadee6a9dd464d1cdb4e11000000000000000000000000000000086fd64f5b3a0cfd24d99f07b6ff937a55a68afb1501000000000000000000000000000080f01634fe65d9d092056bccc85badc5fee1e9a62802000000000000000000000000000000e1f5d95ebf46b39c6b9efedd70f5b5248d0a2c5504000000000000000000000000000000c2eb513e73ce02338eb679bb6ef3fb67b2242ba90800000000000000000000000000000084b7e9cea35317af27eb743a6fbcb8d85e11a31501000000000000000000000000000080f0262c1e96b95dc50753638b1778bf5b8db7162802000000000000000000000000000000e1f57a6d6597a98917ac2c93637ef28bd32e755704000000000000000000000000000000c2bbd5fd8b575347f55f70f4bdc7db2a77893f541100000000000000000000000000000008eff26729075d1a3c6fd1a19845895b3d6fd34d11000000000000000000000000000000082fdbf59c83b226f868d4fd87f5b71e1832b5b22200000000000000000000000000000010deae4f6fbfbaf1d4bbe9e7cd2b77b5f08cf3631501000000000000000000000000000080f07e6eff6faa07b5165df8f144cf17e92aff27992200000000000000000000000000000010de91ba2d3734ac937465c336a54615eb91fdac2200000000000000000000000000000010dee4061b62f2bcd9accea5db15475f6cfe729122000000000000000000000000000000105e89b76f5c5a9ae0f5268f66669efa6ee6f24f1501000000000000000000000000000080f0560ffe3e5bdb6b9bd6f7ca3b2cd79fc98f545404000000000000000000000000000000c2bb3cef6944dd8cc91bad4c74e27ce3a83f6b2a02000000000000000000000000000000ff039296fffbd0b62d2d4addfcb2ef8402852e09020000fc3f3b74ffdc837d0000789b6a50a7c8392f5f5556d1a2de6e1992782f256bd769ee3ad72f62632714978ad44b3a6a5e13ca884d877aad8c6acc4bc2da13e72dd20a6b62c4d2555ad59b3516d62e4d329da6fb333ebf3ccf9ff000000000000000000000000000e19d7be84293f2133127b61fdd7968f696d1154600000000000000000000000000000020bc8f32df199d589031a84bcee1a3c533b3871a01000000000000000000000000000080f06eb7eb5d1e1b1bd974f36cf5dc67d37b7c6c04000000000000000000000000000000c2fbd7911f8f8f6991bdeee37ebda74e1e108d3502000000000000000000000000000000e1a5f75fbd22a930f96664d1ee7b19bfb8fa821100000000000000000000000000000008afddfd0fe7dedb3b74cff0037dfedee352f2592300000000000000000000000000000010dee7898fff31bec58b4947b313d3537213ff6904000000000000000000000000000000c23bd3a677d98284b5c5233fb8f76adf23b1478c000000000000000000000000000000407803eeac4a38b538e5ccf03d39c766d6bf34c50800000000000000000000000000000084b7b17dc382b873f53debdf7b2276d99dfd1f1901000000000000000000000000000080f0da75ebd221f97c8b59b70b3ba68e1cd629ce08000000000000000000000000000000845755f7f28fe2bb0efcb6674ed2992b6d535f3202000000000000000000000000000000e10d4cae585919197bf08bb73a455ef979438511000000000000000000000000000000082ff7e4ce05e3367d5673bc5bdcb0ce8ddb4e1901000000000000000000000000000080f056cf8f4998d750767157c2bcb2ca9ee3ae1b01000000000000000000000000000080f05645cba25991bf3c74b8e99e3f4f7bf3f05923000000000000000000000000000000105e8737675fc9cb8cdcd973a9a65556ab56454600000000000000000000000000000020bc89e7f7ee8cde4a3cff65f563c5794d631a8c000000000000000000000000000000407875294bd614d495f43c35fbdd0d53a3a73b1a01000000000000000000000000000080f032ea6f4c4bdab47842cde1c2fc824fdb661a01000000000000000000000000000080f08a1b56741b73686e63faaef5772b9735bf6f04000000000000000000000000000000c2cbde5174727ff3edabf717b42e1af5ced2242300000000000000000000000000000010de821ba7db3d5af6a77945d35a2eefdcff81d54600000000000000000000000000000020bcd68306170ccdbd5f7d6ce26b454db6fd35ce0800000000000000000000000000000084f76e4eb3b8d2ecb6375227fe7ef3936da6f73202000000000000000000000000000000e1fd32e6bbb4a13d9b942ee8f1628ff71ebe7bcf0800000000000000000000000000000084b76f54c9a6a57f685eb57646566ae390fcd34600000000000000000000000000000020bc6d91bd55ffd9dab27cc3ca0dd17dd717d61b01000000000000000000000000000080f066940dea1ce9b065ff8dc2216b4aaaff9b6504000000000000000000000000000000c21b70766bc2d4a9cb665c4fde5271b4e9cd3a23000000000000000000000000000000105ee1f3d95fbfbefc72e327f30b77d7547db1de0800000000000000000000000000000084b7f9b99c9c11eb46c515ef18164d487bb49d1100000000000000000000000000000008ef78efda83e947f23a8c2c5d141d57b7e7a011000000000000000000000000000000086f65e96b2717653ef3f9ae63078efd2f33ef592300000000000000000000000000000010de8475bffe30ed85b1df649cfa495ab3aaeef94600000000000000000000000000000020bc36fd66ce897fbccfd8cbe987ae4d4a1d35c9080000000000000000000000000000008437f9f2a5c5dd77bf9d73a0d7a0bfa5aef86ea11100000000000000000000000000000008effe98253f4d2848fb6de5071786ad2dbd556c04000000000000000000000000000000c21b53bb77e36fde2a8e0c9ed5a5cffa29937e6004000000000000000000000000000000c28b2bebd875dfae4f07f57daa6bc1d30f8f1e6f04000000000000000000000000000000c24b183ca721a5b6f2fb2d07b7585e3d6077a11100000000000000000000000000000008efeda4bd2706ae5c317b60b47671d7f2f25f1901000000000000000000000000000080f0763ef8d890d24517f27a7ddd3d77f3f056594600000000000000000000000000000020bc07de9fb930f158caf5f5ab7f38adf4dc2b7d8c0000000000000000000000000000004078dfd69e6b529a3b7dfeda5bf92f2f9ab2a48911000000000000000000000000000000086f65c1f40db9231fb9d6a969d2f19a9d673f3302000000000000000000000000000000e1f58bf67fffb9abb36227674c6d1f9f5ef9bc11000000000000000000000000000000082fe667292557de78e2e8b5164bffddd8b5a28d11000000000000000000000000000000086fe6c49c8be56fe4b4bf3daf6fc9efe62c7bda0800000000000000000000000000000084979691ffc923fdbf1a5ff4c0a666f1893bc61a01000000000000000000000000000080f0beea929bbdf699e15b5b1fccfb47d688514f1a01000000000000000000000000000080f0867e397de3ab0fae5a977cbcc7d57e335e4f3302000000000000000000000000000000e1d5e4779a7cf79ba6bd8ae387c53d15bb25f37bdb7bd554dfb9b866c4dd86d2b991e51372ff1f0000ffff6ab2386f", + "aeadKey": "68ca6db61fc058b1a7503cbfa934e40081c083c7c4b70439fb41485bed34747b", + "baseNonce": "61f096bbd2d842c1ae879526", + "msgLength": 4210689, + "msgSha512": "6deb89efa0929d0cd12afc2bd38e56cb68bf10eefd4e3edfe0f36d3401e6a26bf893b2f2197634147525e4502d24fd072999516a35705ce197a5442d1fba4868", + "result": "valid", + "flags": [ + "CounterRollover" + ] + }, + { + "tcId": 9, + "comment": "short message with non-empty context string", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "7465737420636f6e74657874", + "ct": "78da004f00b0ffdbedaefc1c35dc6c0f22b743b03e488747166a51f33479e7ceb8b7e11cc0d2710f624a127501bc4aea7d0af6f83cfe359b9e69415aa537f36adf86eb35b070475baa039bb7791432adbca49578bbd3010000ffff2fed280a", + "aeadKey": "580dd69d5b20db77593dd1d6d48cfc766f87f8256039a744647da02670e32e06", + "baseNonce": "2baf384a0102fd69155740f4", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 10, + "comment": "short message with context containing a null byte", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "7465737400636f6e74657874", + "ct": "78da004f00b0ff12ede102c3ef730da4f3d4dbfaf11003683238315befe73b21ebb2246ac19f3a7d50abd2a5a365f7652bda670814dbc883ce618256d2d513bd238c2c0dded7614d52bef77bc04273656df97a294323010000ffff7d862843", + "aeadKey": "f2ca98b1ea2d5fb43efda14acece3121119c8dd6e7331864b185563fb21fd96d", + "baseNonce": "e0fe388cf585eac9fe19150f", + "msgLength": 7, + "msgSha512": "e85f32a85f1d4f7c9b2d36d20eca8435d81253e7075e9dea069eb1b6da48daf92ef1797367b520d8a46c4f72cecb85b1daff8887fcb41721d39943d1952fc180", + "result": "valid", + "flags": [] + }, + { + "tcId": 11, + "comment": "single chunk with flipped ciphertext bit", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004900b6ff0093274a932cb4340ca678d500719d80ccc21f69c49586a8cae519f1ae94a13a97038610177fe840ac755f6604849272444b0de559508a2a00538b8dd8cc3a83e14df1343fa14630a2010000ffffc0482101", + "aeadKey": "a6058f74650bab47cf3f9f3e44898c344b5e2659186f258d6483443869c14d04", + "baseNonce": "203d6516e20ef7808b1667d3", + "result": "invalid", + "flags": [ + "ModifiedCiphertext" + ] + }, + { + "tcId": 12, + "comment": "full chunk followed by corrupted short chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0ad4ac4000000e09521d80c0605a351667218c422fee03308168b0856930ac2cc62108cda0493c19fe10f82a0ac0c847b80838383712c8c0dee388e7b8c2bdf7710c79fe5f1722f3f8be66f66ba2f69fd1f1e2eadbc3f2c14d5f7f34e180d374ea65afde47e77f6faf7e8ef6b6d2f9bdb4f1f3f0200000000000000000000000000000060e29eb68b41524e6fb59be6f2f462b50e9acee86eb3baca7fd6b3f3dbd7c5b771000000ffff405c31c6", + "aeadKey": "ef0907676c8b7f6205421324e4ef72d0542e55d2665081433899fcbc5b5b6b2c", + "baseNonce": "bb374db65d72696b519bb9ed", + "msgLength": 16384, + "msgSha512": "e270350dd616dd76526056708020a47feb6e70de3dcb615b5e51c5388f428b00f9993f54d3b11bef9e911492de688a6b1cc0ce6cddbb0c9f2d6a2010ec622f16", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext" + ] + }, + { + "tcId": 13, + "comment": "two full chunks with empty terminator, second chunk corrupted", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecd03f2b05010000f057cfa6f44c647bbadeeb2d46afa4fc2b259b229314dda49405d3ada84b9d5dbe833fb9c19f5516830e9b4224e96e51b7f918b7fc7e1fe177f0d84e6ea7663f0e778edec29ffe9b66393a3eb1de93a59f61233b5bbb6ca52ff15fbb361c9ddcd7df3783ed81ce5c305d74821a00000000000000000000000000000050b97cbf6fe561a9f7777137efae5ecf5f1901000000000000000000000000000080eabd3e7fedc54f17438dd656d98d364ec72607ebc9f7f2f1dd4c73a148cf47fe030000ffff92b93237", + "aeadKey": "97859ea25a5bb746e24e49baa2ccb6d5312f49b172a912c102c034a38b401698", + "baseNonce": "3f3455b30133de987c4556a4", + "msgLength": 16384, + "msgSha512": "6c9d8f13e180781f91ae5c36a873c70bdeb10002f24931f849f2576f28e112198a4797f729aaced8d7854760ef5f11ca0d4bb7ecf076d7d395edfccd7ebee0de", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext", + "ValidFinalChunk" + ] + }, + { + "tcId": 14, + "comment": "full chunk followed by empty terminating chunk with corrupted tag", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0ad4a03010000e0ab5e3893180e5f413098b45c53f007ab0a8268b2a8075645f3e1c145157d038306834114c43b19d7c656d676305859585ad963ac7c5fd0f4a2ec307ccbc38d87ee69ebe8646d6ff1bb4ece9a3218c6d7c55db9ffbe9a5cbc44b793f6cde8f3f2ab5e38deeecc7d540100000000000000000000000000000030733be9d6fcf877fd69373e384ff3c7bfcdfba2bff4f37fb5f29c0d9ad7e56a1a0000ffff98092c93", + "aeadKey": "8375cf26b4e0154927df1c3de1ffeebf0080aeac9698001fdeb07a92fd08d33c", + "baseNonce": "acb3df0bc8feb8eea428f9ae", + "msgLength": 16384, + "msgSha512": "80968886e1af5ecec83ffeea077e7de6eb989d116c24f64f0ebe13cc46d9c268ed474093ae729398610cd65815496fa06c06617455da6f24fe515c8c7222f1fc", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "PartialPlaintext" + ] + }, + { + "tcId": 15, + "comment": "corrupted first chunk followed by valid short chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0b12a06710000f0ff204a2e3603ddc262e41d9493321819aeee09d4ddcca2bcc1a574c30de8ea3098af0ccaaadcc215311b94f40ddff03dc6b7fc7e67776b7d94befda4f1c767d6dc94ab0bbbdd57f7771ebd276d7bbf3dac0ff565b5f83f7adacb9f8babeffd901ccc56af2b0f0100000000000000000000000000000098baf8224ae6778e1eebeb8d99e397d3c3109aa5eca4dcea6f37c773bfc5723e090000ffff7bd02b04", + "aeadKey": "1ff92aa99e030766f0081a8de326df869e70a307b5a024735f6dcdb8850d38b8", + "baseNonce": "e9d53ba6008ad92564b46ce0", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "ValidFinalChunk" + ] + }, + { + "tcId": 16, + "comment": "single chunk truncated to remove authentication tag", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78dad270329c9ddec7ada418b04767c7923331ee2c87262f125d59a0c8be7373eb2fa924762df7ae29ded2bfa34de6579c357a702440af45d1be6fae3c03200000ffff94c01721", + "aeadKey": "eb4c32bea5e9e218d34695a57eeb78e5ac03dbf1872449320d077544c12e782d", + "baseNonce": "f9585d2e05186c795903e560", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 17, + "comment": "payload shorter than one authentication tag", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004400bbff679551dfcc4221c2c5f3dfcff2f94fcd7df0dc5d0dac8ceb294cda58ffffbe199532a141b16102b69550faa5e1315a3c823e58b9e3141839e1fd278b80a7dabc12eaa4ed010000ffff54b5266f", + "aeadKey": "1de62e252beaafa9e2b95a02db126670a92c8e25018489ff69ae66aeb3ccc318", + "baseNonce": "dc10079b74538a2dc5b9feb0", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 18, + "comment": "valid chunk followed by 20 trailing bytes", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0b12b4471000060bc0c86b7db142b13592d06457a0393986c945e49d9a4c46020834ca6b728e58d6f10c5abb798c4c0205ddd72755dfd5e5737ddfd19b77cdf751ec79d85a9b37a66fcf839dbbf99587d3a984fd64e8bc6df58952775b377f8b2d25abeba7f0dd1cfdd7bb27371723e375a3d8c0000000000000000000000000000000043d70f59372d8ff642f4fdff99defe7eec161b5f6f979b938f5bd3e5ecfae2523b6c0f020000ffffe358318d", + "aeadKey": "6bbf0cc5dc924ebf8c1d12fecec3024438c8295b2c49f2804954bb1846a2951a", + "baseNonce": "bce56fb13b8df85bd60d6349", + "msgLength": 16384, + "msgSha512": "12881b761101772d290fb1357458c04d886fb48824ea5ad0f5db07cdf787cfabfd0f464fc6c38abc212d696378ec7843ad3683e17d3bcbc2fae842daf2e46004", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + }, + { + "tcId": 19, + "comment": "valid chunk followed by 12 trailing bytes", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0ad4a030100006093412ce7258308228851ce9f20a226355d12049bc8e11b88c1373008f702c7852bc281cd60581d0b0b3b5606bbddcae0c26069758fb1f27dc5f65995c6df978f0f27415db63793bbadde283bcc8bf1ceebdb5ef2741dfca7657d1fbf5447c9eec1797431fb1d743fbfa20d00000000000000000000000000000060ed9af0f8f674733f7c5fe4cb7e6778f53cfd69b334fa68e67ff52a0000ffff6ee028cf", + "aeadKey": "1375f55da1c3557181569a54e16e6c598de9f9ade570a251a14e152d7ac90c20", + "baseNonce": "4cf2fc2a971b983a02a58120", + "msgLength": 16384, + "msgSha512": "f4f5ac1445502189d705c875815bf7b7fd0e93898b407c4af7901199d64b811558b0d10d273378744bfdf395209842e1fd0a53b5f3dc8d0f6571189b6a718d52", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + }, + { + "tcId": 20, + "comment": "header only, no encrypted chunks", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da003800c7ffe728f14e89526f8830991f461c0fd07601a246a0c94b753ba4fab29386d9e39e72d5e8955f709651b6dedb825c64c984364f74e1b6ac93d6010000ffff198a1ded", + "aeadKey": "fde0334cf08afa15911214f530fed1d2838c74502038f676675b46aebc604945", + "baseNonce": "b5901b8c56b30f0b715d59c7", + "result": "invalid", + "flags": [ + "Truncation" + ] + }, + { + "tcId": 21, + "comment": "valid ciphertext with wrong commitment", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004900b6ffa7bf214ab87afe86ae30940aba6d25aa92d1c26a7c4de03ece1f5f63bd31ca5d9517ce97effb9ce62c4f01433335d070ca3de6243f4cb67a00a4deb622c6b80140d1c88f54ade32fdc010000ffff59a52514", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "HeaderFailure" + ] + }, + { + "tcId": 22, + "comment": "valid ciphertext decrypted with wrong key", + "key": "4f52414e4745205355424d4152494e45204f52414e4745205355424d4152494e", + "ctx": "", + "ct": "78da004900b6ffabeb3f4f4a3ea1f1f76bc25808b37063d4cb21425ca6a8b16271ed22f6a3f51ec7e7fa4dcef196179d3c77b5b42103766ae1975bae6ae0690079aa245e53811c13d45a553b0365b499010000ffffa0d324a1", + "result": "invalid", + "flags": [ + "WrongKey", + "HeaderFailure" + ] + }, + { + "tcId": 23, + "comment": "valid ciphertext encrypted with too-short key", + "key": "4f52414e4745205355424d4152494e45204f52414e4745205355424d415249", + "ctx": "", + "ct": "78da004900b6ff6ef808c1cd9f44167ca6def93900220263151ac63993ec688bd665a34ce4ef6ddcdef700c0a0d03f2cf4e9a9223e5beb44cf2b8648a517d800395459ad30bf0be4ebdf76177cab6b63010000ffff4e6c248e", + "result": "invalid", + "flags": [ + "InvalidKeySize", + "HeaderFailure" + ] + }, + { + "tcId": 24, + "comment": "valid ciphertext encrypted with too-long key", + "key": "4f52414e4745205355424d4152494e45204f52414e4745205355424d4152494e45", + "ctx": "", + "ct": "78da004900b6ffa8216cfec9382688e31855498b1926ee6d34fa36b0923ab847f28096ca9cb85541317e5996a82aa8eb0aac8cdfdce37dbb44e2000c169b4a003a3e67f79899f915d167b39ea1d8cd1d010000ffff29f52485", + "result": "invalid", + "flags": [ + "InvalidKeySize", + "HeaderFailure" + ] + }, + { + "tcId": 25, + "comment": "valid ciphertext decrypted with wrong context", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "77726f6e6720636f6e74657874", + "ct": "78da004900b6ff36201844cafc0e596bec8782c560b7b1d065b90a94d227007f07a7185f0c1f449310232a0ff1d5667ece42aff4e7c0359df78ece43b312d50034c80236b5c7900f7eebe540d242b8eb010000ffffc64f22fe", + "result": "invalid", + "flags": [ + "WrongContext", + "HeaderFailure" + ] + }, + { + "tcId": 26, + "comment": "valid ciphertext with corrupted salt", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da004900b6ff7c510aa191fdb799b3715106fb9da30a3e314a08a12bf1eed6084369ad9560c21c856d0087e1206c5c1e9a994b3ca98542e0fe1ffef9e23c0091398606b7077f679901eea490bb8f6b010000fffff4792294", + "result": "invalid", + "flags": [ + "ModifiedCiphertext", + "HeaderFailure" + ] + }, + { + "tcId": 27, + "comment": "zero-length ciphertext, too short for header", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da010000ffff00000001", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 28, + "comment": "only salt, no commitment", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78dacaefb91479802ffcd17ddfcda766ca0536acbc22d4d02b69a70e080000ffff9d580b79", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 29, + "comment": "salt and partial commitment (40 of 56 header bytes)", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daba5fd8e42bfa7eee2a73b7044f1311beda6b4b2fb2b9e6f21f945dd469be9d83bdfd56d5ecc74dcbee6601020000ffff65f21245", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 30, + "comment": "too short to contain even the salt", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78da9a7e28ab787358f8e3d5ff00010000ffff1f700623", + "result": "invalid", + "flags": [ + "Truncation", + "HeaderFailure" + ] + }, + { + "tcId": 31, + "comment": "full chunk without terminating empty chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0a17281010000e0ed05f6005bd8edb6b6b2956db7b2b6853581843b89eaee0fff398993088222f93d8042f0272fa0090402f5578838e73194efdb546ebb0fe7f1f772300c82bfb7ed7ba691faa9dd3ff6abedf818164abf51b957ff9f4df7f364158f16e9fccbd35df6949bdc0000000000000000000000000000000057f7997c1cc2d7a8b34e76cf5fc556f3120000ffffbcaa2611", + "aeadKey": "c364f03e0d93effbbbc1fd0d01be3027ba02016d0ff9a38d67669172e5a5f761", + "baseNonce": "ea607e5143c6e1072527ef12", + "msgLength": 16384, + "msgSha512": "41195cce0a2b8de596e8126784198485d93d5654b2b2dc0921a9600309c442463d884502ac3695246feee290960bea4ef7b293b3ab2aab00944680e65e45c5b8", + "result": "invalid", + "flags": [ + "Truncation", + "PartialPlaintext" + ] + }, + { + "tcId": 32, + "comment": "full chunk followed by second chunk truncated mid-body", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecd0a16a02010000d04b63e558dcda60652c6d61707169e1d8c2eeeac195955b5d5a1af8018a205cd21f106cc72168341d560d06c16e138b41fc0c41defb84d7d44fbbf97b275d3e74af66cd344baef3f2bf5a0751f89ac569b279fb6817f562fb335ef5ffaa4911df3d1e5e0665ef2600000000000000000000000000000000ce2edc7f1ff3e751ebf3371cdedf7e454600000000000000e0f29c020000ffff1b402171", + "aeadKey": "3c76ce56098adf63b6eaa12d8e99cd1b65f376ae707cc59ec16cb6e7f38dce3c", + "baseNonce": "48fd8650eca228748a9dc6e5", + "msgLength": 16384, + "msgSha512": "c8df22e1f6c8055654ba7b3379b1e5157e0e165812e28ff88a49d7fe73f7b0238eb26d2b391f0e951570f2a1101a242589dcd279ea1fd8c26a065920b80422b6", + "result": "invalid", + "flags": [ + "Truncation", + "PartialPlaintext" + ] + }, + { + "tcId": 33, + "comment": "two full chunks plus short final chunk, chunks 0 and 1 swapped", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecd03f2b05010000f0b733ab4b6755a697e17c0352cacef292283bd3934591de88dea0a737bde53248397f4add7a9781c5ee884557eaf23f1fe396dfef23fc36d7c2fbe0f6baa8868eff5e8ee6d7df3e06cb930b717be37b38493a97fdf3a4d91b74b38760fcee77efabb7949e4463dd89a9d30600000000000000000000000000000050bb76da1af909f2e93c5c7cad5a8f9111000000000000000000000000000000a8dfe1ee41b49d75b63ecb99b3d99be668a37cbfa8c2fde795abd59da7b9b85ffc070000ffffa2eb3b6a", + "aeadKey": "62f6ac24ec654ab80fa9e8da93b9706dc06b89b2c7123a90864259777ca0e8b8", + "baseNonce": "e20f1a2fc4464ecde01251f1", + "result": "invalid", + "flags": [ + "ChunkReordering", + "ValidFinalChunk" + ] + }, + { + "tcId": 34, + "comment": "chunk 0 duplicated in place of chunk 1, followed by short final chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecdcb12a45710080f1534a741ec0a04efe3c00990c1225ca7a504a2906ab4506965327ca2486a37446456723d90d32a0cc6770e77bbbe3ad5b77b90f701fe02cbfdf237c0ff01dbe26559c3d577b5f9fe36ffb633383a993cdb5ed89bc9d5fc5e7df8b2fa1683d4e86cbdbf9bb9b8f68753ded1e87d9d02b3722000000000000000000000000000000a0710b3fe5fbce569adc4fef1e9cce5d3c2902000000000000000000000000000000cd1bf901d4d7ff47cbfd87ecf7af385baa3b2bc3000000ffffe4982ed9", + "aeadKey": "4351791a88af33c3b78ca9d5b7739a16afde17bdc88ceeb595f47ece381dcc13", + "baseNonce": "45fb7bcb774d37627bbe6e57", + "msgLength": 16384, + "msgSha512": "e2c934239538119f2e2f0828611778c115cfcebd2332d5c35c6f06641885f26c554985f653b76fcc99654c5ab225f63bf9afaec923dc32342f844908591f8511", + "result": "invalid", + "flags": [ + "ChunkReordering", + "PartialPlaintext", + "ValidFinalChunk" + ] + }, + { + "tcId": 35, + "comment": "valid full chunk and short final chunk followed by extra encrypted chunk", + "key": "59454c4c4f57205355424d4152494e452059454c4c4f57205355424d4152494e", + "ctx": "", + "ct": "78daecc0b14a02010080e10b228a1b8a86a3a0a1a5836a6aaa088a16c1d11344ee0144e516dd1474921b4451dc0e0e074f47c15b1c047510444407e11427411741bd07d0451fc3e5ff7ce65feeedcb5f09ba4fb7f6cffda3e7a56eadf4853ccf8c5b69b9faf11d9abd679f3b37e2fe6a197525eb226cc636ca3a2f000000000000000000000000000000000000000000000080b3536dedb84b4da46bdd68174b8991508b0c7b4eb76c4cbdc9bb57ed212e0cd4df8373d914b7fd8652f8fc0f9c020000ffffa0f7328c", + "aeadKey": "b94498576b1bd5bb7f80340ad7e63a838c7cb55041010d9dd023ace71bc506c4", + "baseNonce": "5b3f89be29ffa59c4b20a6c0", + "msgLength": 16384, + "msgSha512": "01e521a53fd4905219ac08b197b8bef1c0fb80e9537fea57536bc5c8c7fc0f898e329071a7e8e24290baca975dadd1c8d2ca46dbe1a2250b77cba659c6faec71", + "result": "invalid", + "flags": [ + "TrailingData", + "PartialPlaintext" + ] + } + ] + } + ] +} diff --git a/tools/vectorlint/main.go b/tools/vectorlint/main.go index 071a22a7..98812c5b 100644 --- a/tools/vectorlint/main.go +++ b/tools/vectorlint/main.go @@ -2,12 +2,15 @@ package main import ( + "bytes" + "compress/zlib" "encoding/hex" "encoding/json" "encoding/pem" "errors" "flag" "fmt" + "io" "io/fs" "log" "os" @@ -104,6 +107,10 @@ var ( Name: "HexBytes", Validate: validateHex, }, + { + Name: "CompressedHexBytes", + Validate: validateCompressedHex, + }, { Name: "BigInt", // For big integers, we can validate the format is valid hex but not much else. @@ -134,6 +141,39 @@ func validateHex(value any) error { return nil } +func validateCompressedHex(value any) error { + strVal, ok := value.(string) + if !ok { + return errors.New("invalid non-string CompressedHexBytes value") + } + + if strVal != strings.ToLower(strVal) { + return errors.New("invalid non-lowercase CompressedHexBytes value") + } + + compressed, err := hex.DecodeString(strVal) + if err != nil { + return fmt.Errorf("invalid CompressedHexBytes value: %w", err) + } + + br := bytes.NewReader(compressed) + zr, err := zlib.NewReader(br) + if err != nil { + return fmt.Errorf("invalid CompressedHexBytes value: %w", err) + } + if _, err := io.Copy(io.Discard, zr); err != nil { + return fmt.Errorf("invalid CompressedHexBytes value: %w", err) + } + if err := zr.Close(); err != nil { + return fmt.Errorf("invalid CompressedHexBytes value: %w", err) + } + if br.Len() != 0 { + return fmt.Errorf("invalid CompressedHexBytes value: %d trailing bytes after zlib stream", br.Len()) + } + + return nil +} + func validatePem(value any) error { strVal, ok := value.(string) if !ok {