diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d1f7f2..d6953e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,17 @@ Cambios notables de la librería TypeScript y de la página. El proyecto usa ver
## 0.1.0 — sin publicar
-Implementa la especificación DateKeys 0.8.2 (tag `spec-v0.8.2` de `datekeys-go`) para el perfil Quicknet, y pasa todos los vectores y fixtures compartidos de `datekeys-go` en `9ac9cd9`.
+Implementa la especificación DateKeys 0.9 (tag `spec-v0.9` de `datekeys-go`) para el perfil Quicknet, y pasa todos los vectores y fixtures compartidos de `datekeys-go` en `7e2d83c`. Hasta el 29-09-2026 implementaba la 0.8.2 (`9ac9cd9`).
+
+### Especificación 0.9: el formato 2
+
+- El prelude lee el formato de la cápsula, 1 o 2 (`Prelude.format`); otro `VERSION` es `ERR_UNSUPPORTED_VERSION` en el paso 2. `DKC_FRAMING_VERSION` desaparece: `FORMAT_1`, `FORMAT_2` e `isFormat`.
+- `CONTROL_CBOR` se lee y se escribe para un formato, `decodeControl(b, format)` y `encodeControl(c, format)`: su versión de schema es la del formato, y en el formato 2 lleva `payload_length` (8 bytes, hasta L_MAX) y `padding` (claves 6 y 7).
+- `padding.ts`: las reglas `bloque256` y `reforzado` de §29.1, exactas hasta L_MAX = 2⁵³ − 2⁴⁶, y la longitud de `PAYLOAD_AGE`.
+- `open`: exactamente 16 stanzas en `INNER_ACCESS_AGE` del formato 2 (paso 12, `ACCESS_SLOTS`), P en el paso 16, y en el 17 un texto en claro de P bytes con ceros tras el contenido, del que solo se entregan los L primeros bytes, nunca el relleno. El paso 17 se registra también cuando se supera, y el 18 da los bytes de contenido, como la referencia. `Opened` da `format`, `payloadLength` y, en el formato 2, `padding` y `paddedLength`.
+- La vista JSON de `inspect` lleva `format`, como `datekeys inspect -json`.
+- La página muestra el formato de la cápsula, avisa cuando es el 1, que no oculta el número de credenciales ni la longitud exacta del contenido, y al abrir una del formato 2 da la regla de relleno y P.
+- `testdata` sincronizado con `spec-v0.9`: doce fixtures, siete de ellos del formato 2, `padding.json`, 125 casos de mutación y 4 380 del diferencial. `ibe-vectors.json` añade los siete fixtures nuevos.
### Hecho
diff --git a/README.md b/README.md
index 0f769c2..3dee9d7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# datekeys-ts
-Implementación en TypeScript del protocolo DateKeys v0.8.2 y página de prueba en el navegador. Sustituye al prototipo, archivado en `../archive/prototype` (API Quicknet en Go, CLI tlock y cliente Svelte, commit `4d2b0a1`).
+Implementación en TypeScript del protocolo DateKeys v0.9 y página de prueba en el navegador. Sustituye al prototipo, archivado en `../archive/prototype` (API Quicknet en Go, CLI tlock y cliente Svelte, commit `4d2b0a1`).
La implementación de referencia es la librería Go `g.activething.com/go/DateKeys`, en `../datekeys-go`. Los planes y el estado del trabajo están en `../docs`, el repositorio privado de documentación del proyecto.
@@ -19,17 +19,17 @@ Hay tres números de versión, cada uno con su significado, como en la referenci
| Versión | Dónde | Cambia cuando |
|---|---|---|
-| Formato | Dentro de los objetos: la versión de framing de DKC1 y DKK1 y la de schema de la clave 1, hoy todas 1 | Cambia el formato. Un lector rechaza una versión que no conoce (§70) |
-| Especificación | `SPEC_VERSION` de `src/lib/dkc/version.ts`, hoy `0.8.2`: la del tag `spec-v0.8.2` de `datekeys-go` | Cambia el texto normativo |
+| Formato | Dentro de los objetos: el formato de la cápsula, el `VERSION` del prelude de DKC1, 1 o 2 al leer, que fija también la versión de schema de CONTROL_CBOR; y 1 en la trama DKK1 y en el schema de los demás objetos | Cambia el formato. Un lector rechaza una versión que no conoce (§22, §70) |
+| Especificación | `SPEC_VERSION` de `src/lib/dkc/version.ts`, hoy `0.9`: la del tag `spec-v0.9` de `datekeys-go` | Cambia el texto normativo |
| Librería | `VERSION` de `src/lib/dkc/version.ts`, igual al campo `version` de `package.json` | Cambia la API o el comportamiento. Versionado semántico, sin promesa de estabilidad antes de 1.0.0 |
`version.test.ts` comprueba que `VERSION` coincide con `package.json` y con su lockfile, y que `SPEC_VERSION` es la versión que nombran los vectores y fixtures compartidos; `vectors.test.ts` exige esa versión a cada fichero. El pie de la página muestra las dos.
La versión actual es `0.1.0-dev`. La fase 2 ya añade la apertura de cápsulas, en la librería y en la página; pasar a `0.1.0` queda a decisión del autor. Cubre:
-- la especificación 0.8.2, con versiones de formato 1;
+- la especificación 0.9: lee los formatos de cápsula 1 y 2 (escribir, que solo escribirá el formato 2, llega en la fase 3);
- solo el scheme de Quicknet (`bls-unchained-g1-rfc9380`): un perfil de otro scheme se inspecciona, pero su release no se verifica (decisión 3 del plan de la fase 2);
- la inspección de los pasos 1 a 8 y la apertura de los pasos 9 a 18 (`open.ts`), desde un `Uint8Array` o un `Blob` y hacia memoria o hacia un stream de salida, como el de un fichero OPFS, también desde la página `/inspect`. Escribir cápsulas llega en la fase 3;
-- todos los vectores y fixtures compartidos de `datekeys-go` en `9ac9cd9` (`spec-v0.8.2`);
+- todos los vectores y fixtures compartidos de `datekeys-go` en `7e2d83c` (`spec-v0.9`);
- navegadores con Web Crypto y Node 20 o posterior.
[CHANGELOG.md](CHANGELOG.md) recoge los cambios de cada versión.
@@ -40,7 +40,7 @@ La inspección (pasos 1 a 8) no importa ninguna dependencia. Funciona en navegad
`crypto.subtle` solo existe en contextos seguros: `https`, o `http` en `localhost`. La página del paso 5 servida por `http` desde una IP de la red local (por ejemplo `vite --host` para probar en un móvil) no lo tiene, y `inspect` rechaza entonces con un `Error` que lo dice (`SHA-256 needs Web Crypto (crypto.subtle), …`) en vez de dar un veredicto. El registro por defecto no memoriza ese fallo: la siguiente llamada lo vuelve a intentar.
-| Fichero | Contenido | Equivale en Go (`f6f2e9f`) |
+| Fichero | Contenido | Equivale en Go (`spec-v0.9`) |
|---|---|---|
| `errors.ts` | `DateKeysError` con el código normativo de §69 (`ERR_*`); mensajes con la forma `contexto: CÓDIGO` de Go | `errors.go` |
| `bytes.ts` | Hex, UTF-8 estricto, `goQuote` (el `%q` de Go, con la tabla de `strconv.IsPrint` de Go 1.26 fijada en el código) y `sha256` (Web Crypto) | `strconv`, `unicode/utf8` |
@@ -51,15 +51,16 @@ La inspección (pasos 1 a 8) no importa ninguna dependencia. Funciona en navegad
| `bls12381.ts` | Pertenencia de claves públicas BLS12-381 comprimidas (G1 y G2) al subgrupo, como `FromCompressed` de kilic | `kyber-bls12381` |
| `ibe.ts` | IBE-CCA de tlock sobre G2 para Quicknet (§63 paso 11): `decryptOnG2` y `encryptOnG2RFC9380` (Qid = H(id) en G1 con el DST de RFC 9380, sigma aleatorio, U = r·G2), con la puerta de codificación canónica de `bls12381.ts` sobre la firma y U; H2 sobre GT serializado en el orden de kilic (nunca `Fp12.toBytes` de noble), H3 y H4; `roundIdentity`; el cuerpo `U ‖ V ‖ W` de 128 bytes del stanza. Errores `IbeError` con motivo (`length`, `encoding`, `identity`, `proof`) y texto fijos, sin ningún valor del cálculo; borra sigma y los hashes derivados. Sobre `@noble/curves` 2.4.0; lleva el aviso MIT de `tlock-js`, cuya estructura sigue. Lo usa la apertura (`open.ts`) | `encrypt/ibe` de drand/kyber (`DecryptCCAonG2`), `tlock.BytesToCiphertext` y `TimeUnlock` |
| `release.ts` | Verificación local del release (§17, §51, §63 paso 10), en el orden y con los textos de `provider.Verify`:
1. el rango de la ronda (`ERR_DATEKEY_INVALID`);
2. la ronda del release antes que la firma (`ERR_ROUND_MISMATCH`);
3. la longitud de la firma;
4. la clave pinneada (`ERR_UNKNOWN_PROFILE`);
5. la firma: codificación canónica de un punto de G1 que no sea el infinito, y firma BLS válida de la ronda sobre `@noble/curves` 2.4.0, con el DST de RFC 9380 para G1 (`ERR_RELEASE_INVALID`).
Nada de noble se copia a los errores. Solo verifica el scheme de Quicknet: un perfil de otro scheme falla con `ERR_UNKNOWN_PROFILE` tras las comprobaciones de ronda, donde la referencia sí lo verificaría (decisión 3 del plan de la fase 2). También define `ReleaseSource`, con su contrato de fuentes de red y de la corrección 6, y `suppliedRelease`, el release que entrega quien llama | `provider` (`Verify`, `ReleaseSource`) |
-| `open.ts` | Los pasos 9 a 18 de §63 sobre los pasos 1 a 8 de `inspectWith`, con los checks, códigos y textos de `capsule.Open`:
- las credenciales y el release (paso 9), que cualquier fallo de la fuente convierte en `ERR_RELEASE_UNAVAILABLE` (corrección 6);
- la verificación del release (10);
- `OUTER_TIME_AGE` (11), la estructura frente a `access_policy` (12) e `INNER_ACCESS_AGE` (13);
- `CONTROL_CBOR` (14), `header_binding` (15), `I_PAYLOAD` (16), `PAYLOAD_AGE` (17) y el commit (18).
Abre los tres ficheros `age` con el `Decrypter` de `age-encryption` y con identidades propias que aplican las reglas de `agewrap`: la de tiempo, sobre `ibe.ts`; las de acceso y payload, sobre `x25519.ts`, stanza a stanza. Los fallos de `age` que no informa una identidad son `ERR_INTEGRITY` con el motivo fijo de su fase, cabecera o STREAM, sin copiar el texto de `age-encryption`.
La entrada puede ser un `Uint8Array` o un `Blob`, como un `File`. De un `Blob` solo se lee el prefijo de los pasos 1 a 8 (`prefix.ts`), el `capsule_digest` de la `.dkk` se calcula sobre su stream (`digest.ts`) y `PAYLOAD_AGE` se descifra en streaming.
El texto en claro va a memoria o a `output`, un `WritableStream`. Se escribe a medida que `age` autentica cada chunk, se cierra solo tras el paso 18 y se aborta ante cualquier fallo, en cualquier paso (§56). Un fallo del stream de salida es `ERR_INTEGRITY` con su texto, como en Go. El `WritableStream` de un fichero OPFS guarda lo escrito en un fichero de intercambio hasta el cierre: comprobado en el navegador, un fallo de STREAM deja intacto el contenido anterior | `capsule.Open`, `agewrap` (`TimeIdentity`, `AccessIdentity`, `PayloadIdentity`) |
+| `open.ts` | Los pasos 9 a 18 de §63 sobre los pasos 1 a 8 de `inspectWith`, con los checks, códigos y textos de `capsule.Open`:
- las credenciales y el release (paso 9), que cualquier fallo de la fuente convierte en `ERR_RELEASE_UNAVAILABLE` (corrección 6);
- la verificación del release (10);
- `OUTER_TIME_AGE` (11), la estructura frente a `access_policy` (12) e `INNER_ACCESS_AGE` (13);
- `CONTROL_CBOR` (14), `header_binding` (15), `I_PAYLOAD` (16), `PAYLOAD_AGE` (17) y el commit (18).
Lee los dos formatos (§22, §70). En el formato 2, `INNER_ACCESS_AGE` tiene exactamente 16 stanzas (paso 12); `CONTROL_CBOR` es de la versión de schema 2, con L y la regla de relleno (14); el paso 16 calcula P, y el 17 exige un texto en claro de exactamente P bytes con ceros tras el contenido, `ERR_INTEGRITY` en otro caso. Solo se entregan los L primeros bytes, nunca el relleno (§29.1, §56). `Opened` da el formato y, en el formato 2, L, la regla y P.
Abre los tres ficheros `age` con el `Decrypter` de `age-encryption` y con identidades propias que aplican las reglas de `agewrap`: la de tiempo, sobre `ibe.ts`; las de acceso y payload, sobre `x25519.ts`, stanza a stanza. Los fallos de `age` que no informa una identidad son `ERR_INTEGRITY` con el motivo fijo de su fase, cabecera o STREAM, sin copiar el texto de `age-encryption`.
La entrada puede ser un `Uint8Array` o un `Blob`, como un `File`. De un `Blob` solo se lee el prefijo de los pasos 1 a 8 (`prefix.ts`), el `capsule_digest` de la `.dkk` se calcula sobre su stream (`digest.ts`) y `PAYLOAD_AGE` se descifra en streaming.
El texto en claro va a memoria o a `output`, un `WritableStream`. Se escribe a medida que `age` autentica cada chunk, se cierra solo tras el paso 18 y se aborta ante cualquier fallo, en cualquier paso (§56). Un fallo del stream de salida es `ERR_INTEGRITY` con su texto, como en Go. El `WritableStream` de un fichero OPFS guarda lo escrito en un fichero de intercambio hasta el cierre: comprobado en el navegador, un fallo de STREAM deja intacto el contenido anterior | `capsule.Open`, `agewrap` (`TimeIdentity`, `AccessIdentity`, `PayloadIdentity`) |
| `tlock.ts` | `timeRecipient`, el `Recipient` de `age-encryption` para `OUTER_TIME_AGE` (§32, §35), como `agewrap.TimeRecipient`: cifra la file key con `ibe.ts` para una ronda de un perfil pinneado y escribe el stanza `tlock ` de tlock. Comprueba el perfil y luego el rango de la ronda, con los textos de `NewTimeRecipient`. `age-encryption` no tiene etiquetas, así que quien escriba `OUTER_TIME_AGE` (fase 3) lo añade como único recipient | `agewrap.TimeRecipient` |
+| `padding.ts` | El relleno del formato 2 (§29.1): los códigos 1 (`bloque256`) y 2 (`reforzado`), `paddedLength`, exacta hasta L_MAX = 2⁵³ − 2⁴⁶ (`bitlen` con `BigInt` y los redondeos con `ceil`, exactos en doubles; nunca operaciones de 32 bits, `Math.clz32` ni `Math.log2`), y la longitud de `PAYLOAD_AGE` | `capsule/padding.go` |
| `digest.ts` | SHA-256 incremental de un stream, con `@noble/hashes`, para el `capsule_digest` de un `.dkc` que no está en memoria (Web Crypto solo calcula el hash de buffers enteros) | |
| `x25519.ts` | El stanza X25519 de `age`, abierto de uno en uno como `X25519Identity.Unwrap` de `age`: argumentos, share, acuerdo de claves, longitud del cuerpo y autenticación, en ese orden, con las primitivas que usa `age-encryption` (X25519 de `@noble/curves`, HKDF-SHA-256 de `@noble/hashes` y ChaCha20-Poly1305 de `@noble/ciphers`). También lee identidades `AGE-SECRET-KEY-1…` | `filippo.io/age` (`X25519Identity`), `agewrap` |
| `bech32.ts` | Bech32 (BIP 173) tal como `internal/bech32` de `age`, que la referencia copia como `codec/bech32`; conserva su aviso MIT | `codec/bech32` |
| `datekey.ts` | `dk1_` canónico con las reglas de lectura de §19 (CR, LF y todo carácter fuera del alfabeto fallan el paso 1; números JSON por su valor decimal exacto), ronda desde una fecha con precisión de nanosegundos y cota de 9999-12-31T23:59:59Z (§15), parser RFC 3339 equivalente a `time.Parse(time.RFC3339Nano, …)` | `datekey` |
-| `header.ts`, `control.ts`, `accesskey.ts` | PUBLIC_HEADER, CONTROL_CBOR y `.dkk` (cuerpo y trama), decodificar y codificar, con las capas de §69.1 | `capsule`, `accesskey` |
-| `framing.ts` | Prelude DKC1 (16 bytes) y DKK1 (12 bytes) en el orden de §23 y §40, longitudes de 1 byte hasta los límites de §57, y troceo de secciones | `capsule/framing.go` |
-| `age.ts` | Parser estricto de la cabecera `age` v1 (§28.1) sobre los ficheros binarios, con los textos de error de `age`; reglas de stanzas; `MAX_AGE_HEADER_LEN` (2 MiB), el límite que usa la página para leer solo el prefijo de un `.dkc` grande | `agewrap`, `filippo.io/age/internal/format` |
+| `header.ts`, `control.ts`, `accesskey.ts` | PUBLIC_HEADER, CONTROL_CBOR y `.dkk` (cuerpo y trama), decodificar y codificar, con las capas de §69.1. CONTROL_CBOR se lee y se escribe para un formato: versión de schema 1 sin las claves 6 y 7, o 2 con `payload_length` (8 bytes, hasta L_MAX) y `padding` (1 o 2); 103 bytes sin extensiones sea cual sea L | `capsule`, `accesskey` |
+| `framing.ts` | Prelude DKC1 (16 bytes), con el formato de la cápsula, 1 o 2, y DKK1 (12 bytes) en el orden de §23 y §40, longitudes de 1 byte hasta los límites de §57, y troceo de secciones | `capsule/framing.go` |
+| `age.ts` | Parser estricto de la cabecera `age` v1 (§28.1) sobre los ficheros binarios, con los textos de error de `age`; reglas de stanzas, con los 16 de `INNER_ACCESS_AGE` en el formato 2 (`ACCESS_SLOTS`); `MAX_AGE_HEADER_LEN` (2 MiB), el límite que usa la página para leer solo el prefijo de un `.dkc` grande | `agewrap`, `filippo.io/age/internal/format` |
| `inspect.ts` | Pasos 1 a 8 de §63 y la vista JSON de `datekeys inspect -json` (`inspectView`, `inspectJSON`) | `capsule/inspect.go`, `internal/inspectview` |
| `prefix.ts` | Lecturas acotadas de un `Blob`: el prefijo de un `.dkc` que necesitan los pasos 1 a 8 (`readCapsule`) y, de una `.dkk`, como mucho 12 bytes + 16 MiB + 1 (`readAccessKey`), que dan el mismo resultado que el fichero entero | |
| `index.ts` | Reexporta todo salvo la fase 2 (`ibe.ts`, `release.ts`, `open.ts`, `tlock.ts`, `x25519.ts`, `bech32.ts` y `digest.ts`). La página importa `index.ts`, y reexportarlos metería noble en la primera carga de `/inspect` aunque no los use, porque noble ejecuta código al cargarse. La página carga la apertura bajo demanda (`src/lib/inspector/opener.ts`) | |
@@ -71,13 +72,15 @@ Los tests (`*.test.ts`) están junto a cada fichero.
El comportamiento se contrastó con la librería Go en `3820066` (`692cf87` solo cambia la regla de UTF-8 de `dk1_` descrita abajo) mediante un oráculo diferencial fuera del repositorio: 483 527 entradas de tres semillas. Son mutaciones de los cinco `.dkc` oficiales de todas las clases (bits, bytes, truncados, inserciones, borrados, longitudes y campos del prelude, cabeceras reescritas con cambios de CBOR, DateKeys, arrays de extensiones con y sin registro de extensiones, cabeceras `age` de SEALED_CONTROL y de PAYLOAD_AGE, argumentos del stanza tlock, rondas, secciones cambiadas de sitio y combinaciones de varios defectos); CBOR de cada esquema (PUBLIC_HEADER, CONTROL_CBOR, cuerpo y fichero `.dkk`, Provider Profile, arrays de extensiones); `walk`, `peek` y `checkSchema`; cabeceras `age`, preludes, cadenas `dk1_`, rondas y fechas. En todas coinciden el veredicto, el código y el paso, y también el texto del error, el valor decodificado y la salida entera de `datekeys inspect -json`, byte a byte. Un segundo diferencial con otro generador, de 407 196 entradas, se repitió contra `f6f2e9f` (la enmienda de canonicidad de puntos) con el mismo resultado, textos incluidos.
+Con la v0.9 se contrastaron contra `spec-v0.9` los 125 casos de `mutations.json`, en memoria y desde un `Blob` con salida, y coinciden el código, el paso y el texto del error de `capsule.Open` en todos. Los tres de extensiones conocidas con datos inválidos solo difieren en el texto que da el validador de cada harness, que no es de la librería.
+
Como la referencia desde `f6f2e9f`, los errores no copian el texto de una librería: una cabecera `age` que no se puede leer da siempre `agewrap: not an age v1 header: malformed, truncated or beyond the parser limits` (`ERR_INTEGRITY`). El motivo del parser, con las palabras de `age`, queda en `cause` del error, fuera del mensaje, y los tests lo comparan con los textos de `age` para comprobar que se rechaza por la misma razón.
Precedencia de errores (§69.1): primero la trama; después el tipo y la versión de esquema (`checkSchema`); después el perfil CBOR y el CDDL, con los límites de implementación de §74, en una sola decodificación (`unmarshal` con el decodificador del esquema, que ya comprueba tipos, tamaños, rangos, `access_policy`, `extension_version`, el máximo de 64 extensiones y su orden); y solo entonces los campos con código propio, en orden de clave: DateKey, perfil fijado y extensiones críticas en PUBLIC_HEADER; `access_type` y `access_material` en la `.dkk`; los campos y la autocomprobación de `chain_hash` en el Provider Profile. Entre pasos decide el orden de §63. Un PUBLIC_HEADER que rompe a la vez el CDDL y la DateKey da `ERR_NON_CANONICAL_CBOR`, como en la referencia de `3820066`; la de `afb44a3` leía `access_policy` y `extension_version` como `uint64` y los acotaba después de la DateKey, y la vía `wideUint` que lo imitaba ya no existe.
Enteros: el decodificador lee cada entero hasta 2⁶⁴ − 1 (un `bigint` por encima de 2⁵³ − 1) y lo compara con el máximo de su campo, con el texto de la referencia (`unsigned integer 9007199254740992 above 9007199254740991`). Ningún campo de un objeto del protocolo admite más de 2⁵³ − 1; `walk` admite cualquier `uint64`, como `codec.Walk`.
-`peek` lee la capa 2 de §69.1 como `codec.Peek`: una cabecera de mapa de longitud definida que anuncia al menos dos entradas y no más de la mitad de los bytes que la siguen, la clave 0 con un texto de hasta 64 bytes y la clave 1 con un entero de hasta 2⁵³ − 1, todo en su forma más corta. No lee nada más: una versión 2 es `ERR_UNSUPPORTED_VERSION` sea lo que sea lo que venga detrás, y cualquier otra cosa en esas posiciones, `ERR_NON_CANONICAL_CBOR`.
+`peek` lee la capa 2 de §69.1 como `codec.Peek`: una cabecera de mapa de longitud definida que anuncia al menos dos entradas y no más de la mitad de los bytes que la siguen, la clave 0 con un texto de hasta 64 bytes y la clave 1 con un entero de hasta 2⁵³ − 1, todo en su forma más corta. No lee nada más: una versión que no es la esperada es `ERR_UNSUPPORTED_VERSION` sea lo que sea lo que venga detrás (en CONTROL_CBOR, la esperada es el formato de la cápsula), y cualquier otra cosa en esas posiciones, `ERR_NON_CANONICAL_CBOR`.
UTF-8 inválido en el JSON de un `dk1_` hace fallar el paso 2 de §19 (`ERR_DATEKEY_INVALID`) en las dos implementaciones, también en un miembro que un nombre repetido reemplaza después. Hasta `692cf87` la referencia Go lo sustituía por U+FFFD (`encoding/json`) y en ese caso daba `ERR_DATEKEY_NON_CANONICAL`; el diferencial de esta implementación lo encontró y la referencia se corrigió para seguir al spec. `datekey.test.ts` y el vector *invalid UTF-8 in a member a repeated name overwrites* de `dk1.json` lo fijan.
@@ -97,7 +100,7 @@ Sitio SvelteKit estático (`@sveltejs/adapter-static`, `strict`): las dos págin
`/inspect` carga un `.dkc` con el selector de ficheros, soltándolo en cualquier parte de la página o desde la lista de fixtures oficiales, y ejecuta `inspect` (pasos 1 a 8 de §63) sin registro de extensiones, como `datekeys inspect`. Muestra:
- cada paso con su número, su nombre de la CLI, `superado` o el código normativo, y el detalle (los caracteres invisibles o de control se escriben como `\uXXXX`);
-- el veredicto, `capsule_id`, la DateKey compacta y decodificada (red y ronda), el perfil fijado, la fecha de apertura en UTC y en la hora local del navegador, `access_policy`, los campos del prelude, los argumentos del stanza `tlock` frente al perfil fijado y el número y tipo de stanzas de OUTER_TIME_AGE y PAYLOAD_AGE;
+- el veredicto, `capsule_id`, la DateKey compacta y decodificada (red y ronda), el perfil fijado, la fecha de apertura en UTC y en la hora local del navegador, `access_policy`, los campos del prelude con el formato de la cápsula (con un aviso en el veredicto si es el 1, que no oculta el número de credenciales ni la longitud exacta del contenido, §55.2), los argumentos del stanza `tlock` frente al perfil fijado y el número y tipo de stanzas de OUTER_TIME_AGE y PAYLOAD_AGE;
- las extensiones de PUBLIC_HEADER según el contrato del plan §8: id (entre comillas y escapado si tiene caracteres no imprimibles), versión, crítica o no, conocida o no, longitud y hex (plegado si pasa de 64 bytes); texto si los bytes son UTF-8 imprimible; vista CBOR con `walk` si son un ítem del perfil de §58, marcada "informativo, no validado por el protocolo"; y el aviso de que son públicas, de que nada las vincula al resto de la cápsula antes del paso 15 y de que ni entonces prueban autoría (§55.1);
- **Copiar JSON**, que copia exactamente la salida de `datekeys inspect -json` (`cliJSON`: el `json.Encoder` de Go con sangría de dos espacios, `<`, `>`, `&`, U+2028 y U+2029 escapados y salto de línea final). `file` es el nombre del fichero.
@@ -113,7 +116,7 @@ Tras los pasos 1 a 8, si la cápsula es válida y su fecha de apertura ya pasó
- **El texto en claro** de un fixture se abre en memoria y se muestra, con su SHA-256 comparado con el del registro. El de un fichero propio va a un fichero temporal del almacenamiento privado del navegador (OPFS, `tempfile.ts`), escrito con `createWritable`. El navegador guarda lo escrito en un fichero de intercambio que solo se confirma al cerrarlo, y `open` lo cierra tras el paso 18 y lo aborta ante cualquier fallo (§56). Después se ofrece para descargar, con el nombre del `.dkc` sin la extensión, como hace `age`, y cada carácter no imprimible cambiado por `_`, para que un carácter de control bidireccional no disfrace la extensión. Antes de empezar se compara el tamaño de `PAYLOAD_AGE` con la cuota libre (`navigator.storage.estimate()`).
- **El fichero temporal se borra** al pulsar "Borrar", al abrir o cargar otra cápsula y al salir de la página (`pagehide`). Si el navegador terminó antes, se borra en la siguiente visita. Cada pestaña escribe en su propio directorio, `datekeys-open/`, y tiene un Web Lock con ese nombre mientras existe. Así la limpieza de otra pestaña nunca borra un fichero en uso; sin Web Locks, solo borra lo que tiene más de un día. Si el navegador no tiene OPFS o `createWritable`, o los rechaza (una ventana privada, datos del sitio bloqueados), o la cuota no alcanza, la página abre en memoria hasta 64 MiB. Una apertura en curso se detiene si se carga otra cápsula: su salida deja de aceptar datos, `open` falla en el paso 17 y su fichero se borra. Si la página vuelve de la caché de atrás y adelante tras borrar el fichero, ya no lo ofrece.
- **La fecha** se vuelve a mirar cuando llega y cuando la pestaña vuelve a verse, así que una cápsula inspeccionada antes de su fecha se puede abrir sin cargarla otra vez. `open` comprueba de nuevo el reloj en el paso 9.
-- **El resultado** muestra cada paso de 9 a 18 como muestra los de 1 a 8, con los checks que registra la referencia (el paso 17 solo aparece si falla; el 18 lo sigue), el release verificado, las extensiones de CONTROL_CBOR y el tamaño y el SHA-256 del texto en claro. También avisa de que el texto está autenticado, pero no prueba quién lo escribió ni que sea el original si otros abrieron la cápsula antes (§55.1).
+- **El resultado** muestra cada paso de 9 a 18 como muestra los de 1 a 8, con los checks que registra la referencia (desde la v0.9, también el 17 cuando se supera), el release verificado, las extensiones de CONTROL_CBOR, el tamaño y el SHA-256 del texto en claro y, en el formato 2, la regla de relleno y P. También avisa de que el texto está autenticado, pero no prueba quién lo escribió ni que sea el original si otros abrieron la cápsula antes (§55.1).
Medido en Chromium (el navegador de la app de escritorio) sobre la compilación de producción: los pasos 9 a 18 tardan 0,34 s en `time_only`, la primera apertura de la página, y 0,11 s en `time_and_key_portable`, la siguiente, sin contar la descarga del código y en el hilo principal (la política no permite workers).
@@ -189,13 +192,14 @@ Umbrales de cobertura (`vitest.config.ts`): `cbor.ts`, `ibe.ts`, `release.ts`, `
### Vectores y fixtures
-- `testdata/fixtures/*.json`: cada `.dkc` pasa los pasos 1 a 8 con los valores registrados (prelude, PUBLIC_HEADER, DateKey, `capsule_id`, política, `unlock_at`, extensiones con sus bytes exactos, stanzas, `header_binding`, CONTROL_CBOR); cada `.dkk` se decodifica campo a campo y se reencodifica byte a byte. Los fixtures nuevos se recogen solos.
+- `testdata/fixtures/*.json`: cada `.dkc`, de los dos formatos, pasa los pasos 1 a 8 con los valores registrados (formato, prelude, PUBLIC_HEADER, DateKey, `capsule_id`, política, `unlock_at`, extensiones con sus bytes exactos, stanzas, `header_binding`, CONTROL_CBOR) y abre con `open` a su contenido; L, y en el formato 2 la regla y P, cuadran con la longitud de `PAYLOAD_AGE`, y cada credencial abre justo el stanza que el registro le asigna. Cada `.dkk` se decodifica campo a campo y se reencodifica byte a byte. Los fixtures nuevos se recogen solos.
- `testdata/fixtures/*.inspect.json`: la vista de `inspect` de cada `.dkc`, escrita con `inspectJSON` como la imprime la CLI (`file` incluido), es idéntica byte a byte al fichero, también el texto de cada paso.
- `testdata/vectors/dk1.json` (con los tres vectores de los refinamientos de §19: LF dentro del Base64, CR y LF después, y la versión `1.0000000000000001`), `quicknet_rounds.json` y `profile_quicknet.json`: se ejecutan todos.
-- `testdata/vectors/cbor.json`: cada vector genérico (`accept` y `reject`) pasa por `walk` con los `max_depth` y `max_len` del fichero; los enteros aceptados comparan su `value` (número o, por encima de 2⁵³ − 1, `bigint`), y los rechazados «above max_len» o «above max_depth» se aceptan sin ese límite. Cada vector de `schemas` pasa por el decodificador de su esquema (`decodeProfile`, `decodeHeader`, `decodeControl`, `decodeAccessKeyBody`) con el código exacto, y un objeto aceptado se reescribe a los mismos bytes.
+- `testdata/vectors/cbor.json`: cada vector genérico (`accept` y `reject`) pasa por `walk` con los `max_depth` y `max_len` del fichero; los enteros aceptados comparan su `value` (número o, por encima de 2⁵³ − 1, `bigint`), y los rechazados «above max_len» o «above max_depth» se aceptan sin ese límite. Cada vector de `schemas` pasa por el decodificador de su esquema (`decodeProfile`, `decodeHeader`, `decodeControl` con el formato del vector, 1 si no lo trae, `decodeAccessKeyBody`) con el código exacto, y un objeto aceptado se reescribe a los mismos bytes.
+- `testdata/vectors/padding.json`: P con las dos reglas y la longitud de `PAYLOAD_AGE` de cada L, incluidas las fronteras en que fallan las operaciones de 32 bits y un logaritmo en coma flotante, y las longitudes por encima de L_MAX, que se rechazan. `padding.test.ts` contrasta además `paddedLength` con el §29.1 escrito en `BigInt` sobre 20 000 longitudes de todo el rango.
- `testdata/vectors/tlock_ibe.json`: el vector de H2 del IBE de tlock (§63 paso 11). Hasta que llegue `ibe.ts` (fase 2), el test lo recalcula con `@noble/curves` 2.4.0: los puntos son canónicos para `bls12381.ts`, el pairing serializado en el orden de kilic es el GT del vector y su H2 coincide; el orden propio de noble (`Fp12.toBytes`) da otro hash.
-- `testdata/vectors/mutations.json`: se leen los 65 casos enteros (ediciones sobre un fixture o hex congelado, release, reloj, registro, extensiones, `.dkk` e identidades). Los 65 pasan por `open` con su release, su reloj, su registro, sus extensiones, su `.dkk` y sus identidades, y dan el mismo código en el mismo paso que Go. También pasan como `Blob` con un stream de salida, que termina abortado en los 65. Entre ellos están los 34 de los pasos 9 a 18, con las 10 mutaciones de la enmienda de canonicidad de puntos en los pasos 10 y 11. Ninguno de los que fallan sin red pide un release. Los 31 de los pasos 1 a 8 pasan además por `inspect`, y un test fija los dos recuentos. Las `.dkk` ofrecidas se decodifican.
-- `testdata/vectors/inspect_differential.json`: las 1 825 mutaciones dan el mismo veredicto, código y paso que Go; los `bases` se comprueban por su SHA-256.
+- `testdata/vectors/mutations.json`: se leen los 125 casos enteros (ediciones sobre un fixture o hex congelado, release, reloj, registro, extensiones, `.dkk` e identidades). Los 125 pasan por `open` con su release, su reloj, su registro, sus extensiones, su `.dkk` y sus identidades, y dan el mismo código en el mismo paso que Go. También pasan como `Blob` con un stream de salida, que termina abortado en los 125. Son las 33 mutaciones de las dos primeras listas de §64 en cada formato, las 22 de la tercera, la del formato 2, y 37 más. Entre ellos están los 81 de los pasos 9 a 18, con las 10 mutaciones de la enmienda de canonicidad de puntos en los pasos 10 y 11 de cada formato. Ninguno de los que fallan sin red pide un release. Los 44 de los pasos 1 a 8 pasan además por `inspect`, y un test fija los recuentos y el orden. Las `.dkk` ofrecidas se decodifican.
+- `testdata/vectors/inspect_differential.json`: las 4 380 mutaciones de los doce fixtures dan el mismo veredicto, código y paso que Go; los `bases` se comprueban por su SHA-256.
- `src/lib/dkc/testing/ibe-vectors.json`: los valores de referencia de `ibe.ts`. Los escribe `scripts/ibe-go-vectors.go` con kyber, tlock y `age`, las librerías de la referencia Go, y `ibe.test.ts` los comprueba todos:
- el GT de e(G1, G2) y de su cuadrado, con H2 de 16 y 32 bytes;
- H3 y H4 sobre entradas fijas, entre ellas una H3 aceptada en la segunda iteración y otra en la tercera;
@@ -210,7 +214,7 @@ Umbrales de cobertura (`vitest.config.ts`): `cbor.ts`, `ibe.ts`, `release.ts`, `
Para regenerarlo: `node scripts/tlock-ts-samples.mjs > ts-samples.json`, y desde el mismo módulo Go temporal, `go run tlock-go-vectors.go ts-samples.json > tlock-vectors.json`.
- En `ibe-vectors.json`, H2, H3 y H4 no son públicas en kyber: el script las reescribe con sus etiquetas y las comprueba en cada fixture contra la file key de tlock y contra U = r·G2. Los cifrados de kyber usan un sigma aleatorio, así que el fichero se genera una vez y se congela. Para regenerarlo, desde un módulo Go temporal que requiera la referencia (`replace g.activething.com/go/DateKeys => ../datekeys-go`, `GOFLAGS=-mod=mod`): `go run ibe-go-vectors.go ../datekeys-ts/testdata/fixtures > ibe-vectors.json`.
+ En `ibe-vectors.json`, H2, H3 y H4 no son públicas en kyber: el script las reescribe con sus etiquetas y las comprueba en cada fixture contra la file key de tlock y contra U = r·G2. Los cifrados de kyber usan un sigma aleatorio, así que el fichero se genera una vez y se congela. Para regenerarlo, desde un módulo Go temporal que requiera la referencia (`replace g.activething.com/go/DateKeys => ../datekeys-go`, `GOFLAGS=-mod=mod`, y la directiva `go` de la referencia, para que se use su toolchain): `go run ibe-go-vectors.go ../datekeys-ts/testdata/fixtures > ibe-vectors.json`. Los siete fixtures del formato 2 se añadieron el 29-09-2026 así, sobre `spec-v0.9`, tomando solo el bloque `fixtures`: los valores de los cinco anteriores salieron idénticos, y el resto del fichero no cambió.
- Todo se lee con los formatos de `testdata/README.md` (`testing/vectors.ts`): una clave desconocida o que falta, un valor de otro tipo, un código que no es de §69 o una edición fuera de su base hacen fallar el fichero con su motivo; nada se salta en silencio.
- Todo fichero de `testdata/` tiene que ejecutarlo algún test: un nombre nuevo exportado por Go (otro `vectors/*.json`, un fichero de fixture que ningún JSON nombra) hace fallar `testdata/ holds no file that no test runs` hasta que se le añade su bloque.
@@ -294,7 +298,7 @@ Comprueba que los ficheros coinciden con `SOURCE.json`, sin faltantes ni sobrant
`.gitattributes` marca `testdata/**` como binario para que git no altere ningún byte.
-Copia actual: la de `testdata/SOURCE.json` (rama `v0.8.2`).
+Copia actual: la de `testdata/SOURCE.json` (tag `spec-v0.9`, `7e2d83c`).
## Licencia
diff --git a/src/lib/components/InspectionReport.svelte b/src/lib/components/InspectionReport.svelte
index 21821b6..6c9b77a 100644
--- a/src/lib/components/InspectionReport.svelte
+++ b/src/lib/components/InspectionReport.svelte
@@ -107,6 +107,12 @@
queda vinculada al control al abrir la cápsula (paso 15), y ni siquiera entonces prueba quién la escribió ni
cuándo (§55.1).
+ {#if report.prelude?.format === 1}
+
+ Formato 1, el de la v0.8.2: hasta la fecha, esta cápsula deja ver cuántas credenciales tiene y la longitud exacta
+ de su contenido. El formato 2, el que se escribe ahora, oculta las dos cosas (§55.2).
+
+ {/if}
{:else if report.failure}
Rechazada en el paso {report.failure.step}
{report.failure.code}
@@ -231,8 +237,8 @@
{p.hex}
-
Marca y versión
- {p.magic}, versión {p.version}
+ Marca y formato
+ {p.magic}, formato {p.format}{p.format === 1 ? ', el de la v0.8.2' : ''}
FLAGS y RESERVED
@@ -413,6 +419,12 @@
.when {
border-top: 1px solid var(--rule);
}
+ .format-note {
+ padding: 0.5rem 0.75rem;
+ border-radius: var(--radius);
+ background: var(--caution-bg);
+ font-size: var(--t-small);
+ }
.state-word {
font-size: var(--t-h2);
font-weight: 700;
diff --git a/src/lib/components/OpenPanel.svelte b/src/lib/components/OpenPanel.svelte
index 39a71da..f1df57b 100644
--- a/src/lib/components/OpenPanel.svelte
+++ b/src/lib/components/OpenPanel.svelte
@@ -399,6 +399,15 @@
Tamaño
{formatByteCount(p.length)}
+ {#if r.padding}
+
+
Relleno
+
+ regla {r.padding.rule}: la cápsula sellaba {formatByteCount(r.padding.paddedLength)}, el contenido seguido de ceros,
+ que se comprobaron y no se entregan
+
+
+ {/if}
SHA-256
{p.sha256}
diff --git a/src/lib/dkc/age.test.ts b/src/lib/dkc/age.test.ts
index eaeb35c..d8d11f0 100644
--- a/src/lib/dkc/age.test.ts
+++ b/src/lib/dkc/age.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest';
-import { ageStanzas, checkAccessStanzas, checkPayloadStanzas, checkTimeStanzas, parseAgeHeader, type Stanza } from './age.ts';
+import { ACCESS_SLOTS, ageStanzas, checkAccessStanzas, checkPayloadStanzas, checkTimeStanzas, parseAgeHeader, type Stanza } from './age.ts';
import { quicknet } from './profile.ts';
import { expectCode, hx, readBytes, readJSON } from './testing/testdata.ts';
@@ -278,4 +278,24 @@ describe('stanza rules', () => {
expectCode(() => checkAccessStanzas([s('X25519', 'a'), s('scrypt', 'a')]), 'ERR_POLICY_STRUCTURE_MISMATCH', /stanza 1 has type "scrypt"/);
expectCode(() => checkAccessStanzas([s('X25519', 'a'), s('X25519', 'a')]), 'ERR_POLICY_STRUCTURE_MISMATCH', /stanza 1 repeats/);
});
+
+ it('INNER_ACCESS_AGE of format 2 holds exactly 16 stanzas, before any other rule (spec §39)', () => {
+ expect(ACCESS_SLOTS).toBe(16);
+ const n = (k: number, type = 'X25519'): ReturnType
[] => Array.from({ length: k }, (_, i) => s(type, `share${i}`));
+ checkAccessStanzas(n(16), ACCESS_SLOTS);
+ // Format 1 takes any number from one.
+ checkAccessStanzas(n(1));
+ checkAccessStanzas(n(17));
+ for (const k of [1, 15, 17]) {
+ expectCode(
+ () => checkAccessStanzas(n(k), ACCESS_SLOTS),
+ 'ERR_POLICY_STRUCTURE_MISMATCH',
+ new RegExp(`^agewrap: INNER_ACCESS_AGE has ${k} stanzas, want exactly 16: `),
+ );
+ }
+ expectCode(() => checkAccessStanzas([], ACCESS_SLOTS), 'ERR_POLICY_STRUCTURE_MISMATCH', /no stanzas/);
+ // The count comes first; with 16 stanzas the other rules still apply.
+ expectCode(() => checkAccessStanzas(n(15, 'scrypt'), ACCESS_SLOTS), 'ERR_POLICY_STRUCTURE_MISMATCH', /has 15 stanzas/);
+ expectCode(() => checkAccessStanzas([...n(15), s('X25519', 'share0')], ACCESS_SLOTS), 'ERR_POLICY_STRUCTURE_MISMATCH', /stanza 15 repeats/);
+ });
});
diff --git a/src/lib/dkc/age.ts b/src/lib/dkc/age.ts
index b07921b..51b29a3 100644
--- a/src/lib/dkc/age.ts
+++ b/src/lib/dkc/age.ts
@@ -315,11 +315,25 @@ export function checkPayloadStanzas(stanzas: readonly Stanza[]): void {
}
/**
- * INNER_ACCESS_AGE: one or more stanzas, all X25519, and no ephemeral share
- * repeated (spec §33, §36, §63 step 13).
+ * The number of stanzas of INNER_ACCESS_AGE in capsule format 2: one per
+ * credential, and a dummy in each slot left (spec §39).
*/
-export function checkAccessStanzas(stanzas: readonly Stanza[]): void {
+export const ACCESS_SLOTS = 16;
+
+/**
+ * INNER_ACCESS_AGE: stanzas of type X25519 only, one or more when `slots` is
+ * 0 (capsule format 1) and exactly `slots` otherwise, ACCESS_SLOTS in format
+ * 2, and no ephemeral share repeated (spec §33, §36, §39, §63 steps 12 and
+ * 13).
+ */
+export function checkAccessStanzas(stanzas: readonly Stanza[], slots = 0): void {
if (stanzas.length === 0) throw new DateKeysError('ERR_POLICY_STRUCTURE_MISMATCH', 'agewrap: INNER_ACCESS_AGE has no stanzas');
+ if (slots > 0 && stanzas.length !== slots) {
+ throw new DateKeysError(
+ 'ERR_POLICY_STRUCTURE_MISMATCH',
+ `agewrap: INNER_ACCESS_AGE has ${stanzas.length} stanzas, want exactly ${slots}`,
+ );
+ }
const seen = new Set();
for (const [i, s] of stanzas.entries()) {
if (s.type !== STANZA_X25519) {
diff --git a/src/lib/dkc/control.test.ts b/src/lib/dkc/control.test.ts
index de89bc4..306972e 100644
--- a/src/lib/dkc/control.test.ts
+++ b/src/lib/dkc/control.test.ts
@@ -2,57 +2,87 @@ import { afterEach, describe, expect, it, vi } from 'vitest';
import { sha256 } from './bytes.ts';
import { Decoder } from './cbor.ts';
import { type Control, decodeControl, encodeControl } from './control.ts';
+import { type Format, FORMAT_1, FORMAT_2 } from './framing.ts';
+import { BLOQUE256, MAX_PAYLOAD_LENGTH, REFORZADO } from './padding.ts';
import { arr, b, bn, ext, map, t, u } from './testing/cborhex.ts';
-import { expectCode, h, hx, readBytes, readJSON } from './testing/testdata.ts';
+import { expectCode, h, hx, listTestdata, readBytes, readJSON } from './testing/testdata.ts';
const NC = 'ERR_NON_CANONICAL_CBOR';
-const FIXTURES = ['time_only', 'empty_payload', 'time_and_key_portable', 'time_and_key_recipients', 'time_only_extensions'];
+// Every official .dkc, both formats.
+const FIXTURES = listTestdata('fixtures', '.dkc').map((f) => f.slice('fixtures/'.length, -'.dkc'.length));
interface FixtureJSON {
+ format: Format;
prelude: string;
public_header: string;
header_binding: string;
control_cbor: string;
payload_identity: string;
+ payload_length: number;
+ padding?: number;
control_extensions?: { critical: boolean; id: string; version: number; data?: string }[];
}
-function control(o: { version?: string; hb?: string; pi?: string; crit?: string; non?: string; extra?: [number, string][] } = {}): Uint8Array {
+// L in the 8 bytes of payload_length.
+const l8 = (l: number | bigint): string => b(BigInt(l).toString(16).padStart(16, '0'));
+
+// A CONTROL_CBOR of schema version 1 by default; `format2` adds keys 6 and 7
+// (L = 78000, reforzado) and makes the version 2.
+function control(
+ o: { version?: string; hb?: string; pi?: string; crit?: string; non?: string; extra?: [number, string][]; format2?: boolean } = {},
+): Uint8Array {
const entries: [number, string][] = [
[0, t('datekeys-control')],
- [1, o.version ?? u(1)],
+ [1, o.version ?? u(o.format2 ? 2 : 1)],
[2, o.hb ?? bn(32, 1)],
[3, o.pi ?? bn(32, 2)],
];
if (o.crit) entries.push([4, o.crit]);
if (o.non) entries.push([5, o.non]);
- entries.push(...(o.extra ?? []));
+ if (o.format2) entries.push([6, l8(78000)], [7, u(REFORZADO)]);
+ for (const [k, v] of o.extra ?? []) {
+ const i = entries.findIndex(([key]) => key === k);
+ if (i >= 0) entries[i] = [k, v];
+ else entries.push([k, v]);
+ }
+ entries.sort(([a], [c]) => a - c);
return h(map(...entries));
}
+// A format 2 control without key k.
+const without = (k: number): Uint8Array =>
+ h(map(...([[0, t('datekeys-control')], [1, u(2)], [2, bn(32, 1)], [3, bn(32, 2)], [6, l8(1)], [7, u(1)]] as [number, string][]).filter(([key]) => key !== k)));
describe('CONTROL_CBOR', () => {
- it('decodes the control of every fixture and re-encodes it', async () => {
+ it('decodes the control of every fixture, in its format, and re-encodes it', async () => {
+ expect(FIXTURES.length).toBeGreaterThanOrEqual(12);
for (const name of FIXTURES) {
const fx = readJSON(`fixtures/${name}.json`);
- const c = decodeControl(h(fx.control_cbor));
- expect(hx(c.headerBinding)).toBe(fx.header_binding);
- expect(hx(c.payloadIdentity)).toBe(fx.payload_identity);
+ const c = decodeControl(h(fx.control_cbor), fx.format);
+ expect(hx(c.headerBinding), name).toBe(fx.header_binding);
+ expect(hx(c.payloadIdentity), name).toBe(fx.payload_identity);
const exts = [...c.critical.map((e) => ({ ...e, critical: true })), ...c.noncritical.map((e) => ({ ...e, critical: false }))];
- expect(exts.map((e) => ({ critical: e.critical, id: e.id, version: e.version, data: e.data && hx(e.data) }))).toEqual(
+ expect(exts.map((e) => ({ critical: e.critical, id: e.id, version: e.version, data: e.data && hx(e.data) })), name).toEqual(
(fx.control_extensions ?? []).map((e) => ({ critical: e.critical, id: e.id, version: e.version, data: e.data })),
);
- expect(hx(encodeControl(c))).toBe(fx.control_cbor);
+ if (fx.format === FORMAT_2) {
+ expect([c.payloadLength, c.padding], name).toEqual([fx.payload_length, fx.padding]);
+ } else {
+ expect([c.payloadLength, c.padding, fx.padding], name).toEqual([undefined, undefined, undefined]);
+ }
+ expect(hx(encodeControl(c, fx.format)), name).toBe(fx.control_cbor);
+ // The same bytes are the control of the other format for no reader.
+ expectCode(() => decodeControl(h(fx.control_cbor), fx.format === FORMAT_1 ? FORMAT_2 : FORMAT_1), 'ERR_UNSUPPORTED_VERSION', undefined, name);
// header_binding = SHA-256(PRELUDE || PUBLIC_HEADER) of the capsule.
const dkc = readBytes(`fixtures/${name}.dkc`);
const headerLen = h(fx.public_header).length;
- expect(hx(await sha256(dkc.subarray(0, 16 + headerLen)))).toBe(fx.header_binding);
+ expect(hx(await sha256(dkc.subarray(0, 16 + headerLen))), name).toBe(fx.header_binding);
}
});
it('copies out of the input, even a Node Buffer whose slice() is a view', () => {
const fx = readJSON('fixtures/time_only_extensions.json');
const input = Buffer.from(fx.control_cbor, 'hex');
- const c = decodeControl(input);
+ const c = decodeControl(input, FORMAT_1);
expect(hx(input)).toBe(fx.control_cbor);
expect(hx(c.payloadIdentity)).toBe(fx.payload_identity);
expect(c.payloadIdentity).not.toBeInstanceOf(Buffer);
@@ -67,15 +97,53 @@ describe('CONTROL_CBOR', () => {
['payload_identity of 33 bytes', control({ pi: bn(33) }), NC, /^capsule: CONTROL_CBOR: key 3: codec: offset 59: a byte string of 33 bytes outside 32\.\.32: ERR/],
['payload_identity as text', control({ pi: t('x'.repeat(32)) }), NC, /key 3: codec: offset 57: a text string where a byte string was expected/],
['schema version 2', control({ version: u(2) }), 'ERR_UNSUPPORTED_VERSION', /^capsule: CONTROL_CBOR: codec: datekeys-control schema version 2, want 1: ERR_UNSUPPORTED_VERSION$/],
- ['unknown key 6', control({ extra: [[6, u(0)]] }), NC, /^capsule: CONTROL_CBOR: key 6 is not defined: ERR/],
+ ['key 6, defined only in schema version 2', control({ extra: [[6, l8(0)]] }), NC, /^capsule: CONTROL_CBOR: key 6 is not defined: ERR/],
+ ['key 7, defined only in schema version 2', control({ extra: [[7, u(1)]] }), NC, /^capsule: CONTROL_CBOR: key 7 is not defined: ERR/],
['missing key 3', h(map([0, t('datekeys-control')], [1, u(1)], [2, bn(32, 1)])), NC, /^capsule: CONTROL_CBOR: key 3 is missing: ERR/],
['empty critical_extensions', control({ crit: arr() }), NC, /^capsule: CONTROL_CBOR: key 4: extension: empty array; an absent array omits its key: ERR/],
['out of order', control({ crit: arr(ext('b'), ext('a')) }), NC, /^capsule: CONTROL_CBOR: key 4: extension a: array is not in canonical order: ERR/],
['empty extension_id', control({ non: arr(ext('')) }), NC, /^capsule: CONTROL_CBOR: key 5: extension: invalid extension_id "": ERR/],
['id in both arrays', control({ crit: arr(ext('a')), non: arr(ext('a')) }), NC, /^capsule: CONTROL_CBOR: extension a: both critical and noncritical: ERR/],
];
- for (const [name, bytes, code, msg] of cases) expectCode(() => decodeControl(bytes), code, msg, name);
- expect(decodeControl(control({ crit: arr(ext('z', 3, b('01'))) })).critical).toEqual([{ id: 'z', version: 3, data: h('01') }]);
+ for (const [name, bytes, code, msg] of cases) expectCode(() => decodeControl(bytes, FORMAT_1), code, msg, name);
+ expect(decodeControl(control({ crit: arr(ext('z', 3, b('01'))) }), FORMAT_1).critical).toEqual([{ id: 'z', version: 3, data: h('01') }]);
+ });
+
+ it('reads keys 6 and 7 in schema version 2 only, with the texts of the reference', () => {
+ const ok = decodeControl(control({ format2: true }), FORMAT_2);
+ expect([ok.payloadLength, ok.padding]).toEqual([78000, REFORZADO]);
+ for (const [l, want] of [
+ [l8(0), 0],
+ [l8(2 ** 32 + 1), 2 ** 32 + 1],
+ [l8(MAX_PAYLOAD_LENGTH), MAX_PAYLOAD_LENGTH],
+ ] as const) {
+ expect(decodeControl(control({ format2: true, extra: [[6, l]] }), FORMAT_2).payloadLength).toBe(want);
+ }
+ expect(decodeControl(control({ format2: true, extra: [[7, u(BLOQUE256)]] }), FORMAT_2).padding).toBe(BLOQUE256);
+ const cases: [string, Uint8Array, string, RegExp][] = [
+ ['schema version 1', control({ format2: true, version: u(1) }), 'ERR_UNSUPPORTED_VERSION', /^capsule: CONTROL_CBOR: codec: datekeys-control schema version 1, want 2: ERR_UNSUPPORTED_VERSION$/],
+ ['schema version 3', control({ format2: true, version: u(3) }), 'ERR_UNSUPPORTED_VERSION', /schema version 3, want 2/],
+ ['a valid control of format 1', control(), 'ERR_UNSUPPORTED_VERSION', /schema version 1, want 2/],
+ ['missing key 6', without(6), NC, /^capsule: CONTROL_CBOR: key 6 is missing: ERR/],
+ ['missing key 7', without(7), NC, /^capsule: CONTROL_CBOR: key 7 is missing: ERR/],
+ ['schema version 2 without keys 6 and 7', control({ version: u(2) }), NC, /key 6 is missing/],
+ ['payload_length L_MAX + 1', control({ format2: true, extra: [[6, l8(MAX_PAYLOAD_LENGTH + 1)]] }), NC, /^capsule: CONTROL_CBOR: key 6: payload_length 8936830510563329 exceeds L_MAX = 8936830510563328: ERR/],
+ ['payload_length 2^53', control({ format2: true, extra: [[6, l8(2n ** 53n)]] }), NC, /payload_length 9007199254740992 exceeds/],
+ ['payload_length 2^64 - 1', control({ format2: true, extra: [[6, l8(2n ** 64n - 1n)]] }), NC, /payload_length 18446744073709551615 exceeds/],
+ ['payload_length of 7 bytes', control({ format2: true, extra: [[6, bn(7)]] }), NC, /key 6: codec: offset \d+: a byte string of 7 bytes outside 8\.\.8/],
+ ['payload_length of 9 bytes', control({ format2: true, extra: [[6, bn(9)]] }), NC, /key 6: codec: offset \d+: a byte string of 9 bytes outside 8\.\.8/],
+ ['payload_length as an unsigned integer', control({ format2: true, extra: [[6, u(78000)]] }), NC, /key 6: codec: /],
+ ['padding 0', control({ format2: true, extra: [[7, u(0)]] }), NC, /^capsule: CONTROL_CBOR: key 7: padding code 0 is not defined: ERR/],
+ ['padding 3', control({ format2: true, extra: [[7, u(3)]] }), NC, /key 7: padding code 3 is not defined/],
+ ['padding 257', control({ format2: true, extra: [[7, u(257)]] }), NC, /key 7: padding code 257 is not defined/],
+ ['padding as a byte string', control({ format2: true, extra: [[7, b('02')]] }), NC, /key 7: codec: /],
+ ['unknown key 8', control({ format2: true, extra: [[8, u(0)]] }), NC, /^capsule: CONTROL_CBOR: key 8 is not defined: ERR/],
+ ];
+ for (const [name, bytes, code, msg] of cases) expectCode(() => decodeControl(bytes, FORMAT_2), code, msg, name);
+ // Keys 6 and 7 out of order break the ascending keys of the profile.
+ const swapped = h(map([0, t('datekeys-control')], [1, u(2)], [2, bn(32, 1)], [3, bn(32, 2)], [7, u(2)], [6, l8(1)]));
+ expectCode(() => decodeControl(swapped, FORMAT_2), NC, /keys must be strictly ascending/);
+ expect(() => decodeControl(control(), 3 as Format)).toThrow(RangeError);
});
describe('payload_identity wiping', () => {
@@ -96,17 +164,21 @@ describe('CONTROL_CBOR', () => {
const identities = (copies: Uint8Array[]): Uint8Array[] => copies.filter((c) => c.length === 32 && c.every((x) => x === 2 || x === 0));
it('wipes I_PAYLOAD when decoding fails after key 3, and on every other path', () => {
- const afterKey3 = [
- control({ crit: arr() }),
- control({ extra: [[6, u(0)]] }),
- control({ non: arr(ext('')) }),
- control({ crit: arr(ext('a')), non: arr(ext('a')) }),
- control(),
+ const afterKey3: [Uint8Array, Format][] = [
+ [control({ crit: arr() }), FORMAT_1],
+ [control({ extra: [[6, l8(0)]] }), FORMAT_1],
+ [control({ non: arr(ext('')) }), FORMAT_1],
+ [control({ crit: arr(ext('a')), non: arr(ext('a')) }), FORMAT_1],
+ [control(), FORMAT_1],
+ [control({ format2: true, extra: [[6, l8(MAX_PAYLOAD_LENGTH + 1)]] }), FORMAT_2],
+ [control({ format2: true, extra: [[7, u(3)]] }), FORMAT_2],
+ [without(7), FORMAT_2],
+ [control({ format2: true }), FORMAT_2],
];
- for (const input of afterKey3) {
+ for (const [input, format] of afterKey3) {
const copies = spyBstr();
try {
- decodeControl(input).payloadIdentity.fill(0);
+ decodeControl(input, format).payloadIdentity.fill(0);
} catch {
// The failures are tested above; only the wiping matters here.
}
@@ -117,7 +189,7 @@ describe('CONTROL_CBOR', () => {
}
// A failure before key 3 never copies I_PAYLOAD at all.
const copies = spyBstr();
- expectCode(() => decodeControl(control({ hb: bn(31) })), NC);
+ expectCode(() => decodeControl(control({ hb: bn(31) }), FORMAT_1), NC);
expect(identities(copies)).toHaveLength(0);
});
@@ -126,18 +198,38 @@ describe('CONTROL_CBOR', () => {
vi.spyOn(Decoder.prototype, 'done').mockImplementation(() => {
throw new Error('rejected');
});
- expect(() => decodeControl(control())).toThrow('rejected');
+ expect(() => decodeControl(control(), FORMAT_1)).toThrow('rejected');
const ids = identities(copies);
expect(ids).toHaveLength(1);
expect(ids[0]!.every((x) => x === 0)).toBe(true);
});
});
- it('encodes only valid controls', () => {
+ it('encodes only valid controls, of a length that does not depend on L', () => {
const c: Control = { headerBinding: new Uint8Array(32), payloadIdentity: new Uint8Array(32).fill(5), critical: [], noncritical: [] };
- expect(decodeControl(encodeControl(c)).payloadIdentity).toEqual(c.payloadIdentity);
- expectCode(() => encodeControl({ ...c, headerBinding: new Uint8Array(31) }), NC);
- expectCode(() => encodeControl({ ...c, critical: [{ id: 'a', version: 1, data: undefined }], noncritical: [{ id: 'a', version: 1, data: undefined }] }), NC);
- expectCode(() => encodeControl({ ...c, noncritical: [{ id: 'a', version: 2 ** 32, data: undefined }] }), NC);
+ expect(decodeControl(encodeControl(c, FORMAT_1), FORMAT_1).payloadIdentity).toEqual(c.payloadIdentity);
+ expectCode(() => encodeControl({ ...c, headerBinding: new Uint8Array(31) }, FORMAT_1), NC);
+ expectCode(() => encodeControl({ ...c, critical: [{ id: 'a', version: 1, data: undefined }], noncritical: [{ id: 'a', version: 1, data: undefined }] }, FORMAT_1), NC);
+ expectCode(() => encodeControl({ ...c, noncritical: [{ id: 'a', version: 2 ** 32, data: undefined }] }, FORMAT_1), NC);
+ // Format 2: keys 6 and 7, and 103 bytes without extensions whatever L and
+ // the code (spec §31, §55.2).
+ for (const l of [0, 1, 78000, 2 ** 32 + 1, MAX_PAYLOAD_LENGTH]) {
+ for (const padding of [BLOQUE256, REFORZADO] as const) {
+ const c2 = { ...c, payloadLength: l, padding };
+ const bytes = encodeControl(c2, FORMAT_2);
+ expect(bytes.length).toBe(103);
+ const back = decodeControl(bytes, FORMAT_2);
+ expect([back.payloadLength, back.padding]).toEqual([l, padding]);
+ }
+ }
+ expectCode(() => encodeControl({ ...c, payloadLength: 1 }, FORMAT_1), NC, /format 1 has no payload_length/);
+ expectCode(() => encodeControl({ ...c, padding: REFORZADO }, FORMAT_1), NC, /format 1 has no payload_length/);
+ expectCode(() => encodeControl({ ...c, payloadLength: 1 }, FORMAT_2), NC, /padding code undefined is not defined/);
+ expectCode(() => encodeControl({ ...c, payloadLength: 1, padding: 3 as typeof REFORZADO }, FORMAT_2), NC, /padding code 3/);
+ expectCode(() => encodeControl({ ...c, padding: REFORZADO }, FORMAT_2), NC, /payload_length undefined outside/);
+ expectCode(() => encodeControl({ ...c, payloadLength: MAX_PAYLOAD_LENGTH + 1, padding: REFORZADO }, FORMAT_2), NC, /outside 0\.\.L_MAX/);
+ expectCode(() => encodeControl({ ...c, payloadLength: -1, padding: REFORZADO }, FORMAT_2), NC, /outside/);
+ expectCode(() => encodeControl({ ...c, payloadLength: 1.5, padding: REFORZADO }, FORMAT_2), NC, /outside/);
+ expect(() => encodeControl(c, 3 as Format)).toThrow(RangeError);
});
});
diff --git a/src/lib/dkc/control.ts b/src/lib/dkc/control.ts
index 39c3ed8..9622ea9 100644
--- a/src/lib/dkc/control.ts
+++ b/src/lib/dkc/control.ts
@@ -1,14 +1,17 @@
// CONTROL_CBOR (spec §31, §63 step 14), as DecodeControl and EncodeControl of
-// the Go package capsule at 3820066. payloadIdentity is I_PAYLOAD, a secret.
+// the Go package capsule at spec-v0.9. payloadIdentity is I_PAYLOAD, a secret.
+// Its schema version is the format of its capsule, which is not part of
+// Control: it is given to encodeControl and decodeControl.
-import { copyBytes, utf8Length } from './bytes.ts';
-import { checkSchema, type Decoder, Encoder, unmarshal } from './cbor.ts';
+import { copyBytes, readUint32BE, utf8Length, writeUint32BE } from './bytes.ts';
+import { checkSchema, type Decoder, Encoder, MAX_SAFE_UINT, type Uint, unmarshal } from './cbor.ts';
import { DateKeysError, withContext } from './errors.ts';
import { canonicalExtensions, checkDisjoint, decodeArray, type Extension } from './extension.ts';
+import { type Format, FORMAT_1, FORMAT_2, isFormat } from './framing.ts';
+import { isPadding, MAX_PAYLOAD_LENGTH, type Padding } from './padding.ts';
import { encodeExtensionArrays, fieldOf, presence, requireKeys } from './schema.ts';
export const CONTROL_TYPE_TAG = 'datekeys-control';
-export const CONTROL_VERSION = 1;
/** CONTROL_CBOR (spec §31). */
export interface Control {
@@ -20,109 +23,213 @@ export interface Control {
readonly critical: readonly Extension[];
/** key 5. */
readonly noncritical: readonly Extension[];
+ /**
+ * key 6, L: the length of the content, at most L_MAX. Only in format 2
+ * (spec §29.1, §31); absent in format 1.
+ */
+ readonly payloadLength?: number;
+ /** key 7, the padding rule of PAYLOAD_AGE. Only in format 2; absent in format 1. */
+ readonly padding?: Padding;
}
-// CONTROL_CBOR as it is encoded: keys 2 to 5, keys 0 and 1 being the
-// constants CONTROL_TYPE_TAG and CONTROL_VERSION.
+// payload_length has a fixed size, so that the length of CONTROL_CBOR never
+// depends on L (spec §31, §55.2).
+const PAYLOAD_LENGTH_SIZE = 8;
+
+// CONTROL_CBOR as it is encoded: keys 2 to 7, keys 0 and 1 being the constant
+// CONTROL_TYPE_TAG and the format.
interface ControlWire {
+ /** key 1, the schema version. */
+ format: Format;
headerBinding: Uint8Array;
/** SECRET. */
payloadIdentity: Uint8Array;
critical: Extension[] | undefined;
noncritical: Extension[] | undefined;
+ /** key 6, format 2 only: 8 bytes, big-endian. */
+ payloadLength: Uint8Array | undefined;
+ /** key 7, format 2 only. */
+ padding: number | undefined;
+}
+
+const notDefined = (k: Uint): DateKeysError => new DateKeysError('ERR_NON_CANONICAL_CBOR', `key ${k} is not defined`);
+
+// L as read, before any conversion: at most L_MAX, and reported exactly when
+// it is not, whatever its 64 bits.
+function checkPayloadLength(b: Uint8Array): Uint8Array {
+ const l = (BigInt(readUint32BE(b, 0)) << 32n) | BigInt(readUint32BE(b, 4));
+ if (l > BigInt(MAX_PAYLOAD_LENGTH)) {
+ throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `payload_length ${l} exceeds L_MAX = ${MAX_PAYLOAD_LENGTH}`);
+ }
+ return b;
}
-// Reads CONTROL_CBOR with every CDDL rule. On failure it wipes the copy of
-// I_PAYLOAD it read.
-function decodeWire(d: Decoder): ControlWire {
- const w: ControlWire = { headerBinding: new Uint8Array(0), payloadIdentity: new Uint8Array(0), critical: undefined, noncritical: undefined };
- try {
- const pairs = d.map(6);
- const seen = new Set();
- for (let i = 0; i < pairs; i++) {
- const k = d.key();
- const field = fieldOf(k);
- switch (k) {
- case 0:
- field(() => d.text(utf8Length(CONTROL_TYPE_TAG)));
- break;
- case 1:
- field(() => d.uint(CONTROL_VERSION));
- break;
- case 2:
- w.headerBinding = field(() => d.bstr(32, 32));
- break;
- case 3:
- w.payloadIdentity = field(() => d.bstr(32, 32));
- break;
- case 4:
- w.critical = field(() => decodeArray(d));
- break;
- case 5:
- w.noncritical = field(() => decodeArray(d));
- break;
- default:
- throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `key ${k} is not defined`);
+// Reads CONTROL_CBOR with every CDDL rule of the schema version `format`: keys
+// 6 and 7 are required in version 2 and not defined in version 1. On failure
+// it wipes the copy of I_PAYLOAD it read.
+function decodeWire(format: Format): (d: Decoder) => ControlWire {
+ return (d) => {
+ const w: ControlWire = {
+ format,
+ headerBinding: new Uint8Array(0),
+ payloadIdentity: new Uint8Array(0),
+ critical: undefined,
+ noncritical: undefined,
+ payloadLength: undefined,
+ padding: undefined,
+ };
+ try {
+ const pairs = d.map(format === FORMAT_2 ? 8 : 6);
+ const seen = new Set();
+ for (let i = 0; i < pairs; i++) {
+ const k = d.key();
+ const field = fieldOf(k);
+ if ((k === 6 || k === 7) && format !== FORMAT_2) throw notDefined(k);
+ switch (k) {
+ case 0:
+ field(() => d.text(utf8Length(CONTROL_TYPE_TAG)));
+ break;
+ case 1:
+ field(() => d.uint(format));
+ break;
+ case 2:
+ w.headerBinding = field(() => d.bstr(32, 32));
+ break;
+ case 3:
+ w.payloadIdentity = field(() => d.bstr(32, 32));
+ break;
+ case 4:
+ w.critical = field(() => decodeArray(d));
+ break;
+ case 5:
+ w.noncritical = field(() => decodeArray(d));
+ break;
+ case 6:
+ w.payloadLength = field(() => checkPayloadLength(d.bstr(PAYLOAD_LENGTH_SIZE, PAYLOAD_LENGTH_SIZE)));
+ break;
+ case 7:
+ // Compared as read, so that 257 and the like never pass as a
+ // defined code.
+ w.padding = field(() => {
+ const v = d.uint(MAX_SAFE_UINT);
+ if (!isPadding(v)) throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `padding code ${v} is not defined`);
+ return v;
+ });
+ break;
+ default:
+ throw notDefined(k);
+ }
+ seen.add(Number(k));
+ }
+ requireKeys(seen, 4);
+ if (format === FORMAT_2) {
+ for (const k of [6, 7]) {
+ if (!seen.has(k)) throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `key ${k} is missing`);
+ }
}
- seen.add(Number(k));
+ d.endMap();
+ return w;
+ } catch (err) {
+ w.payloadIdentity.fill(0);
+ throw err;
}
- requireKeys(seen, 4);
- d.endMap();
- return w;
- } catch (err) {
- w.payloadIdentity.fill(0);
- throw err;
- }
+ };
}
function encodeWire(e: Encoder, w: ControlWire): void {
- e.map(4 + presence(w.critical) + presence(w.noncritical));
+ const format2 = w.format === FORMAT_2;
+ e.map(4 + presence(w.critical) + presence(w.noncritical) + (format2 ? 2 : 0));
e.uint(0);
e.text(CONTROL_TYPE_TAG);
e.uint(1);
- e.uint(CONTROL_VERSION);
+ e.uint(w.format);
e.uint(2);
e.bstr(w.headerBinding);
e.uint(3);
e.bstr(w.payloadIdentity);
encodeExtensionArrays(e, 4, w.critical, w.noncritical);
+ if (format2) {
+ e.uint(6);
+ e.bstr(w.payloadLength!);
+ e.uint(7);
+ e.uint(w.padding!);
+ }
}
/**
- * Validates and decodes CONTROL_CBOR in the layers of spec §69.1: the type
- * tag and the schema version, then canonical CBOR and the CDDL, then no
- * identifier in both extension arrays. A non-canonical encoding is rejected
- * even though CONTROL_CBOR is not hashed. Its critical extensions (layer 4)
- * are checked by the caller.
+ * Validates and decodes the CONTROL_CBOR of a capsule of format `format` in
+ * the layers of spec §69.1: the type tag and the schema version, which must
+ * be the format (another is ERR_UNSUPPORTED_VERSION whatever follows), then
+ * canonical CBOR and the CDDL of that version, then no identifier in both
+ * extension arrays. In version 2, payload_length is 8 bytes of at most L_MAX
+ * and padding is 1 or 2. A non-canonical encoding is rejected even though
+ * CONTROL_CBOR is not hashed. Its critical extensions (layer 4) are checked
+ * by the caller.
*/
-export function decodeControl(b: Uint8Array): Control {
+export function decodeControl(b: Uint8Array, format: Format): Control {
+ if (!isFormat(format)) throw new RangeError(`capsule: format ${String(format)} is not defined`);
return withContext('capsule: CONTROL_CBOR', () => {
- checkSchema(b, CONTROL_TYPE_TAG, CONTROL_VERSION);
+ checkSchema(b, CONTROL_TYPE_TAG, format);
// I_PAYLOAD is wiped on every path: by decodeWire when decoding fails, by
// unmarshal's onReject when the decoded value is rejected, and by the
// finally block below otherwise.
- const w = unmarshal(b, decodeWire, encodeWire, (v) => v.payloadIdentity.fill(0));
+ const w = unmarshal(b, decodeWire(format), encodeWire, (v) => v.payloadIdentity.fill(0));
try {
const critical = w.critical ?? [];
const noncritical = w.noncritical ?? [];
checkDisjoint(critical, noncritical);
- return { headerBinding: w.headerBinding, payloadIdentity: copyBytes(w.payloadIdentity), critical, noncritical };
+ const c: Control = { headerBinding: w.headerBinding, payloadIdentity: copyBytes(w.payloadIdentity), critical, noncritical };
+ if (format === FORMAT_1) return c;
+ // decodeWire bounds both values, so the conversions are exact.
+ const l = w.payloadLength!;
+ return { ...c, payloadLength: readUint32BE(l, 0) * 2 ** 32 + readUint32BE(l, 4), padding: w.padding as Padding };
} finally {
w.payloadIdentity.fill(0);
}
});
}
-/** The Deterministic CBOR bytes of `c`. The caller must wipe them. */
-export function encodeControl(c: Control): Uint8Array {
+/**
+ * The Deterministic CBOR bytes of `c` as the CONTROL_CBOR of a capsule of
+ * format `format`: schema version 1 without keys 6 and 7, or schema version 2
+ * with them (spec §31). The caller must wipe them: they hold I_PAYLOAD.
+ */
+export function encodeControl(c: Control, format: Format): Uint8Array {
if (c.headerBinding.length !== 32 || c.payloadIdentity.length !== 32) {
throw new DateKeysError('ERR_NON_CANONICAL_CBOR', 'capsule: header_binding and payload_identity must be 32 bytes');
}
+ let payloadLength: Uint8Array | undefined;
+ if (format === FORMAT_1) {
+ if (c.payloadLength !== undefined || c.padding !== undefined) {
+ throw new DateKeysError('ERR_NON_CANONICAL_CBOR', 'capsule: CONTROL_CBOR of format 1 has no payload_length and no padding');
+ }
+ } else if (format === FORMAT_2) {
+ if (c.padding === undefined || !isPadding(c.padding)) {
+ throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `capsule: padding code ${String(c.padding)} is not defined`);
+ }
+ const l = c.payloadLength;
+ if (l === undefined || !Number.isSafeInteger(l) || l < 0 || l > MAX_PAYLOAD_LENGTH) {
+ throw new DateKeysError('ERR_NON_CANONICAL_CBOR', `capsule: payload_length ${String(l)} outside 0..L_MAX = ${MAX_PAYLOAD_LENGTH}`);
+ }
+ payloadLength = new Uint8Array(PAYLOAD_LENGTH_SIZE);
+ writeUint32BE(payloadLength, 0, Math.floor(l / 2 ** 32));
+ writeUint32BE(payloadLength, 4, l % 2 ** 32);
+ } else {
+ throw new RangeError(`capsule: format ${String(format)} is not defined`);
+ }
const critical = canonicalExtensions(c.critical);
const noncritical = canonicalExtensions(c.noncritical);
checkDisjoint(c.critical, c.noncritical);
const e = new Encoder();
- encodeWire(e, { headerBinding: c.headerBinding, payloadIdentity: c.payloadIdentity, critical, noncritical });
+ encodeWire(e, {
+ format,
+ headerBinding: c.headerBinding,
+ payloadIdentity: c.payloadIdentity,
+ critical,
+ noncritical,
+ payloadLength,
+ padding: c.padding,
+ });
const out = e.out();
e.wipe();
return out;
diff --git a/src/lib/dkc/fixtures.test.ts b/src/lib/dkc/fixtures.test.ts
index 7fbba07..2309243 100644
--- a/src/lib/dkc/fixtures.test.ts
+++ b/src/lib/dkc/fixtures.test.ts
@@ -1,15 +1,17 @@
// The official fixtures of the Go reference (testdata/fixtures, spec §67,
-// §68): every .dkc passes steps 1 to 8 with the recorded values, and every
-// .dkk decodes to the recorded fields. New fixtures synced from Go are
-// picked up automatically.
+// §68): every .dkc passes steps 1 to 8 with the recorded values, in its
+// format, and every .dkk decodes to the recorded fields. New fixtures synced
+// from Go are picked up automatically.
import { describe, expect, it } from 'vitest';
import { decodeAccessKey, encodeAccessKey } from './accesskey.ts';
+import { ACCESS_SLOTS } from './age.ts';
import { sha256 } from './bytes.ts';
import { decodeControl } from './control.ts';
import type { Extension } from './extension.ts';
-import { headerBinding } from './framing.ts';
+import { type Format, FORMAT_1, FORMAT_2, headerBinding, parsePrelude, payloadOffset } from './framing.ts';
import { inspect, inspectView } from './inspect.ts';
+import { paddedLength, type Padding, payloadAgeLength } from './padding.ts';
import { hx, listTestdata, readBytes, readJSON } from './testing/testdata.ts';
interface FixtureExt {
@@ -20,6 +22,7 @@ interface FixtureExt {
}
interface DkcFixture {
+ format: Format;
file: string;
sha256: string;
prelude: string;
@@ -32,8 +35,17 @@ interface DkcFixture {
header_binding: string;
outer_stanzas: { type: string; args: string[] }[];
payload_stanzas: { type: string; args: string[] }[];
+ inner_stanzas?: { type: string; args: string[] }[];
+ access_key_stanza?: number;
+ identity_stanzas?: number[];
+ access_key_file?: string;
+ identities?: string[];
control_cbor: string;
payload_identity: string;
+ payload_length: number;
+ padding?: Padding;
+ padded_length?: number;
+ plaintext_file: string;
header_extensions?: FixtureExt[];
control_extensions?: FixtureExt[];
stages: { step: number; name: string; ok: boolean; error?: string }[];
@@ -62,9 +74,11 @@ function extsOf(critical: readonly Extension[], noncritical: readonly Extension[
}
describe('official fixtures', () => {
- it('has the five .dkc and three .dkk fixtures of v0.8.2 at least', () => {
- expect(dkcFixtures.length).toBeGreaterThanOrEqual(5);
- expect(dkkFixtures.length).toBeGreaterThanOrEqual(3);
+ it('has the five .dkc of format 1 and the seven of format 2, and the five .dkk, at least', () => {
+ expect(dkcFixtures.filter((f) => f.json.format === FORMAT_1).length).toBeGreaterThanOrEqual(5);
+ expect(dkcFixtures.filter((f) => f.json.format === FORMAT_2).length).toBeGreaterThanOrEqual(7);
+ expect(dkcFixtures.every((f) => f.json.format === FORMAT_1 || f.json.format === FORMAT_2)).toBe(true);
+ expect(dkkFixtures.length).toBeGreaterThanOrEqual(5);
});
});
@@ -74,6 +88,7 @@ describe.each(dkcFixtures)('$json.file', ({ json: fx }) => {
it('is the recorded file', async () => {
expect(hx(await sha256(dkc))).toBe(fx.sha256);
expect(hx(dkc.subarray(0, 16))).toBe(fx.prelude);
+ expect(dkc[4]).toBe(fx.format);
});
it('passes steps 1 to 8 with the recorded values', async () => {
@@ -81,9 +96,11 @@ describe.each(dkcFixtures)('$json.file', ({ json: fx }) => {
expect(r.error).toBeUndefined();
const stages = fx.stages.filter((s) => s.step <= 8);
expect(r.checks.map((c) => ({ step: c.step, name: c.name, ok: c.ok }))).toEqual(stages.map((s) => ({ step: s.step, name: s.name, ok: s.ok })));
+ expect(r.prelude!.format).toBe(fx.format);
const v = inspectView(r);
expect(v).toMatchObject({
valid: true,
+ format: fx.format,
capsule_id: fx.capsule_id,
datekey: fx.datekey,
access_policy: fx.access_policy,
@@ -99,10 +116,46 @@ describe.each(dkcFixtures)('$json.file', ({ json: fx }) => {
});
it('records a CONTROL_CBOR that decodes to its binding and extensions', () => {
- const c = decodeControl(Buffer.from(fx.control_cbor, 'hex'));
+ const c = decodeControl(Buffer.from(fx.control_cbor, 'hex'), fx.format);
expect(hx(c.headerBinding)).toBe(fx.header_binding);
expect(hx(c.payloadIdentity)).toBe(fx.payload_identity);
expect(extsOf(c.critical, c.noncritical)).toEqual(fx.control_extensions ?? []);
+ if (fx.format === FORMAT_2) expect([c.payloadLength, c.padding]).toEqual([fx.payload_length, fx.padding]);
+ });
+
+ // L, the rule and P (spec §29.1): the plaintext file is the content, L
+ // bytes; in format 2 PAYLOAD_AGE seals P bytes, in format 1 the L bytes
+ // themselves, so that its length gives L away.
+ it('records L, and in format 2 the rule and P, that the length of PAYLOAD_AGE follows', () => {
+ expect(readBytes(`fixtures/${fx.plaintext_file}`).length).toBe(fx.payload_length);
+ const payloadAge = dkc.length - payloadOffset(parsePrelude(dkc.subarray(0, 16)));
+ if (fx.format === FORMAT_2) {
+ expect(fx.padded_length).toBe(paddedLength(fx.payload_length, fx.padding!));
+ expect(payloadAge).toBe(payloadAgeLength(fx.padded_length!));
+ } else {
+ expect([fx.padding, fx.padded_length]).toEqual([undefined, undefined]);
+ expect(payloadAge).toBe(payloadAgeLength(fx.payload_length));
+ }
+ });
+
+ // Spec §39: in format 2, INNER_ACCESS_AGE holds 16 stanzas, one per
+ // credential in the slots the record names and a dummy in each other.
+ it('records the stanza each credential opens, in format 2', () => {
+ if (fx.access_policy !== 'time_and_key') {
+ expect([fx.inner_stanzas, fx.access_key_stanza, fx.identity_stanzas]).toEqual([undefined, undefined, undefined]);
+ return;
+ }
+ const slots = [...(fx.access_key_stanza === undefined ? [] : [fx.access_key_stanza]), ...(fx.identity_stanzas ?? [])];
+ if (fx.format === FORMAT_1) {
+ expect(slots).toEqual([]);
+ return;
+ }
+ expect(fx.inner_stanzas).toHaveLength(ACCESS_SLOTS);
+ expect(fx.inner_stanzas!.every((s) => s.type === 'X25519')).toBe(true);
+ expect(fx.identity_stanzas?.length ?? 0).toBe(fx.identities?.length ?? 0);
+ expect(fx.access_key_stanza === undefined).toBe(fx.access_key_file === undefined);
+ expect(new Set(slots).size).toBe(slots.length);
+ expect(slots.every((i) => Number.isInteger(i) && i >= 0 && i < ACCESS_SLOTS)).toBe(true);
});
});
diff --git a/src/lib/dkc/framing.test.ts b/src/lib/dkc/framing.test.ts
index 5d5df44..e1d80ee 100644
--- a/src/lib/dkc/framing.test.ts
+++ b/src/lib/dkc/framing.test.ts
@@ -11,16 +11,18 @@ import {
splitAccessKey,
splitCapsule,
} from './framing.ts';
-import { expectCode, h, hx, readBytes, readJSON } from './testing/testdata.ts';
+import { expectCode, h, hx, listTestdata, readBytes, readJSON } from './testing/testdata.ts';
-const FIXTURES = ['time_only', 'empty_payload', 'time_and_key_portable', 'time_and_key_recipients', 'time_only_extensions'];
+// Every official .dkc, both formats.
+const FIXTURES = listTestdata('fixtures', '.dkc').map((f) => f.slice('fixtures/'.length, -'.dkc'.length));
describe('DKC1 prelude', () => {
it('parses and rebuilds the prelude of every fixture', async () => {
for (const name of FIXTURES) {
- const fx = readJSON<{ prelude: string; public_header: string; header_binding: string }>(`fixtures/${name}.json`);
+ const fx = readJSON<{ format: number; prelude: string; public_header: string; header_binding: string }>(`fixtures/${name}.json`);
const dkc = readBytes(`fixtures/${name}.dkc`);
const p = parsePrelude(h(fx.prelude));
+ expect(p.format, name).toBe(fx.format);
expect(hx(preludeBytes(p))).toBe(fx.prelude);
const s = splitCapsule(dkc);
expect(s.prelude).toEqual(p);
@@ -34,7 +36,7 @@ describe('DKC1 prelude', () => {
it('checks magic, version, flags and limits in order', () => {
const ok = h('444b4331 01 00 0000 00000079 000001be');
- expect(parsePrelude(ok)).toEqual({ publicHeaderLen: 121, sealedControlLen: 446 });
+ expect(parsePrelude(ok)).toEqual({ format: 1, publicHeaderLen: 121, sealedControlLen: 446 });
const with_ = (i: number, v: number): Uint8Array => {
const c = ok.slice();
c[i] = v;
@@ -44,7 +46,13 @@ describe('DKC1 prelude', () => {
expectCode(() => parsePrelude(h('444b43')), 'ERR_INVALID_MAGIC');
expectCode(() => parsePrelude(with_(3, 0x32)), 'ERR_INVALID_MAGIC');
expectCode(() => parsePrelude(ok.subarray(0, 15)), 'ERR_INTEGRITY', /truncated prelude/);
+ // VERSION is the format: 1 and 2 are read, any other byte is unsupported
+ // (spec §22, §70).
+ expect(parsePrelude(with_(4, 2))).toEqual({ format: 2, publicHeaderLen: 121, sealedControlLen: 446 });
+ expect(hx(preludeBytes(parsePrelude(with_(4, 2))))).toBe(hx(with_(4, 2)));
expectCode(() => parsePrelude(with_(4, 0)), 'ERR_UNSUPPORTED_VERSION', /framing version 0/);
+ expectCode(() => parsePrelude(with_(4, 3)), 'ERR_UNSUPPORTED_VERSION', /^capsule: framing version 3: ERR_UNSUPPORTED_VERSION$/);
+ expectCode(() => parsePrelude(with_(4, 0xff)), 'ERR_UNSUPPORTED_VERSION', /framing version 255/);
expectCode(() => parsePrelude(with_(5, 1)), 'ERR_INVALID_FLAGS', /^capsule: flags 0x1, reserved 0x0000: /);
const maxes = (hl: number, sl: number): Uint8Array => {
const c = ok.slice();
@@ -54,6 +62,7 @@ describe('DKC1 prelude', () => {
return c;
};
expect(parsePrelude(maxes(MAX_PUBLIC_HEADER_LEN, MAX_SEALED_CONTROL_LEN))).toEqual({
+ format: 1,
publicHeaderLen: MAX_PUBLIC_HEADER_LEN,
sealedControlLen: MAX_SEALED_CONTROL_LEN,
});
@@ -61,7 +70,7 @@ describe('DKC1 prelude', () => {
expectCode(() => parsePrelude(maxes(1, MAX_SEALED_CONTROL_LEN + 1)), 'ERR_INTEGRITY', /SEALED_CONTROL_LEN 67108865 outside/);
expectCode(() => parsePrelude(maxes(0xffffffff, 1)), 'ERR_INTEGRITY', /4294967295/);
// Lower bounds (spec §22, §23, §57): no empty frame holds a valid object.
- expect(parsePrelude(maxes(1, 1))).toEqual({ publicHeaderLen: 1, sealedControlLen: 1 });
+ expect(parsePrelude(maxes(1, 1))).toEqual({ format: 1, publicHeaderLen: 1, sealedControlLen: 1 });
expectCode(() => parsePrelude(maxes(0, 1)), 'ERR_INTEGRITY', /^capsule: PUBLIC_HEADER_LEN 0 outside 1\.\.1048576: ERR_INTEGRITY$/);
expectCode(() => parsePrelude(maxes(1, 0)), 'ERR_INTEGRITY', /^capsule: SEALED_CONTROL_LEN 0 outside 1\.\.67108864: ERR_INTEGRITY$/);
expectCode(() => parsePrelude(maxes(0, 0)), 'ERR_INTEGRITY', /PUBLIC_HEADER_LEN 0/);
@@ -69,8 +78,8 @@ describe('DKC1 prelude', () => {
const zeroFlagged = maxes(0, 0);
zeroFlagged[7] = 1;
expectCode(() => parsePrelude(zeroFlagged), 'ERR_INVALID_FLAGS', /^capsule: flags 0x0, reserved 0x0001: /);
- zeroFlagged[4] = 2;
- expectCode(() => parsePrelude(zeroFlagged), 'ERR_UNSUPPORTED_VERSION', /framing version 2/);
+ zeroFlagged[4] = 3;
+ expectCode(() => parsePrelude(zeroFlagged), 'ERR_UNSUPPORTED_VERSION', /framing version 3/);
});
});
@@ -95,7 +104,7 @@ describe('splitCapsule', () => {
expect(failure(bad).step).toBe(2);
const f3 = failure(dkc.subarray(0, 100));
expect(f3.step).toBe(3);
- expect(f3.prelude).toEqual({ publicHeaderLen: 159, sealedControlLen: 482 });
+ expect(f3.prelude).toEqual({ format: 1, publicHeaderLen: 159, sealedControlLen: 482 });
expect(f3.message).toBe('capsule: truncated PUBLIC_HEADER: ERR_INTEGRITY');
expect(f3.name).toBe('FramingError');
});
diff --git a/src/lib/dkc/framing.ts b/src/lib/dkc/framing.ts
index 74edc28..3eba353 100644
--- a/src/lib/dkc/framing.ts
+++ b/src/lib/dkc/framing.ts
@@ -1,5 +1,5 @@
// DKC1 and DKK1 framing (spec §22, §23, §40, §57), as the Go packages capsule
-// (framing.go, inspect.go) and accesskey at 3820066.
+// (framing.go, inspect.go) and accesskey at spec-v0.9.
//
// A .dkc is PRELUDE || PUBLIC_HEADER || SEALED_CONTROL || PAYLOAD_AGE; the
// payload runs to EOF. A .dkk is a 12-byte prelude and BODY_CBOR.
@@ -8,7 +8,6 @@ import { readUint32BE, sha256, writeUint32BE } from './bytes.ts';
import { DateKeysError } from './errors.ts';
export const DKC_MAGIC = 'DKC1';
-export const DKC_FRAMING_VERSION = 1;
export const DKC_PRELUDE_SIZE = 16;
/** PUBLIC_HEADER limit of spec §57, 1 MiB. */
export const MAX_PUBLIC_HEADER_LEN = 1 << 20;
@@ -21,8 +20,35 @@ export const DKK_PRELUDE_SIZE = 12;
/** DKK BODY limit of spec §57, 16 MiB. */
export const MAX_DKK_BODY_LEN = 16 << 20;
-/** The decoded lengths of the 16-byte PRELUDE. */
+/**
+ * The format of spec v0.8.2: one or more stanzas in INNER_ACCESS_AGE and a
+ * payload without padding. Only a generator of test vectors may write it
+ * (spec §62.1, §70).
+ */
+export const FORMAT_1 = 1;
+/**
+ * The format of spec v0.9, the only one a writer produces: exactly 16
+ * stanzas in INNER_ACCESS_AGE and a padded payload (spec §29.1, §39).
+ */
+export const FORMAT_2 = 2;
+
+/**
+ * The format of a capsule: the VERSION byte of its PRELUDE. It also fixes the
+ * schema version of its CONTROL_CBOR, the number of stanzas of its
+ * INNER_ACCESS_AGE and whether its payload is padded (spec §22). A reader
+ * opens both.
+ */
+export type Format = typeof FORMAT_1 | typeof FORMAT_2;
+
+/** Whether `v` is a format of V1 (spec §22). */
+export function isFormat(v: number): v is Format {
+ return v === FORMAT_1 || v === FORMAT_2;
+}
+
+/** The decoded fields of the 16-byte PRELUDE. */
export interface Prelude {
+ /** VERSION, the format of the capsule. */
+ readonly format: Format;
readonly publicHeaderLen: number;
readonly sealedControlLen: number;
}
@@ -37,18 +63,19 @@ const hx2 = (v: number): string => v.toString(16).padStart(2, '0');
/**
* Validates the prelude (spec §22, §23, §63 steps 1 and 2), in the order of
- * spec §23: magic, a complete prelude, version, FLAGS == 0 and RESERVED == 0,
- * and each length from 1 up to its limit of spec §57. `b` holds the bytes
- * read, at most 16.
+ * spec §23: magic, a complete prelude, version (the format, 1 or 2), FLAGS ==
+ * 0 and RESERVED == 0, and each length from 1 up to its limit of spec §57.
+ * `b` holds the bytes read, at most 16.
*/
export function parsePrelude(b: Uint8Array): Prelude {
if (!hasMagic(b, DKC_MAGIC)) throw new DateKeysError('ERR_INVALID_MAGIC', 'capsule');
if (b.length < DKC_PRELUDE_SIZE) throw new DateKeysError('ERR_INTEGRITY', 'capsule: truncated prelude');
- if (b[4] !== DKC_FRAMING_VERSION) throw new DateKeysError('ERR_UNSUPPORTED_VERSION', `capsule: framing version ${b[4]!}`);
+ const format = b[4]!;
+ if (!isFormat(format)) throw new DateKeysError('ERR_UNSUPPORTED_VERSION', `capsule: framing version ${format}`);
if (b[5] !== 0 || b[6] !== 0 || b[7] !== 0) {
throw new DateKeysError('ERR_INVALID_FLAGS', `capsule: flags 0x${hx(b[5]!)}, reserved 0x${hx2(b[6]!)}${hx2(b[7]!)}`);
}
- const p: Prelude = { publicHeaderLen: readUint32BE(b, 8), sealedControlLen: readUint32BE(b, 12) };
+ const p: Prelude = { format, publicHeaderLen: readUint32BE(b, 8), sealedControlLen: readUint32BE(b, 12) };
if (p.publicHeaderLen === 0 || p.publicHeaderLen > MAX_PUBLIC_HEADER_LEN) {
throw new DateKeysError('ERR_INTEGRITY', `capsule: PUBLIC_HEADER_LEN ${p.publicHeaderLen} outside 1..${MAX_PUBLIC_HEADER_LEN}`);
}
@@ -61,7 +88,7 @@ export function parsePrelude(b: Uint8Array): Prelude {
/** The exact 16 prelude bytes, the ones covered by header_binding. */
export function preludeBytes(p: Prelude): Uint8Array {
const b = new Uint8Array(DKC_PRELUDE_SIZE);
- b.set([0x44, 0x4b, 0x43, 0x31, DKC_FRAMING_VERSION]);
+ b.set([0x44, 0x4b, 0x43, 0x31, p.format]);
writeUint32BE(b, 8, p.publicHeaderLen);
writeUint32BE(b, 12, p.sealedControlLen);
return b;
diff --git a/src/lib/dkc/index.ts b/src/lib/dkc/index.ts
index b02cc2c..b0dd90d 100644
--- a/src/lib/dkc/index.ts
+++ b/src/lib/dkc/index.ts
@@ -1,4 +1,4 @@
-// DateKeys v0.8.2 in TypeScript: the CBOR profile of spec §58, the schemas of
+// DateKeys v0.9 in TypeScript: the CBOR profile of spec §58, the schemas of
// the protocol objects, DKC1 and DKK1 framing, age headers, DateKeys and the
// pre-unlock inspection of spec §63 (steps 1 to 8). The Go library at
// g.activething.com/go/DateKeys is the reference; see README.md.
@@ -15,6 +15,7 @@ export * from './extension.ts';
export * from './framing.ts';
export * from './header.ts';
export * from './inspect.ts';
+export * from './padding.ts';
export * from './prefix.ts';
export * from './profile.ts';
export * from './version.ts';
diff --git a/src/lib/dkc/inspect.test.ts b/src/lib/dkc/inspect.test.ts
index 154f643..37bd18c 100644
--- a/src/lib/dkc/inspect.test.ts
+++ b/src/lib/dkc/inspect.test.ts
@@ -63,6 +63,7 @@ describe('inspect', () => {
expect(r.unusableExtensions).toEqual([]);
expect(inspectView(r, 'time_only_extensions.dkc')).toEqual({
file: 'time_only_extensions.dkc',
+ format: 1,
capsule_id: '4286085c21ca34d1a71e649326a4a0f6',
datekey: 'dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0',
profile: 'datekeys:quicknet:v1',
@@ -73,7 +74,7 @@ describe('inspect', () => {
checks: r.checks,
});
// Key order and omissions of the Go JSON encoding.
- expect(Object.keys(inspectView(r))).toEqual(['capsule_id', 'datekey', 'profile', 'round', 'unlock_at', 'access_policy', 'valid', 'checks']);
+ expect(Object.keys(inspectView(r))).toEqual(['format', 'capsule_id', 'datekey', 'profile', 'round', 'unlock_at', 'access_policy', 'valid', 'checks']);
});
it('fails the framing steps as the reference', () => {
@@ -83,7 +84,8 @@ describe('inspect', () => {
[withByte(timeOnly, 0, 0x58), 1, 'ERR_INVALID_MAGIC', /./],
[new Uint8Array([0x44, 0x4b, 0x4b, 0x31, ...timeOnly.subarray(4)]), 1, 'ERR_INVALID_MAGIC', /./],
[timeOnly.subarray(0, 10), 1, 'ERR_INTEGRITY', /^capsule: truncated prelude: ERR_INTEGRITY$/],
- [withByte(timeOnly, 4, 2), 2, 'ERR_UNSUPPORTED_VERSION', /^capsule: framing version 2: /],
+ [withByte(timeOnly, 4, 3), 2, 'ERR_UNSUPPORTED_VERSION', /^capsule: framing version 3: /],
+ [withByte(timeOnly, 4, 0), 2, 'ERR_UNSUPPORTED_VERSION', /^capsule: framing version 0: /],
[withByte(timeOnly, 5, 0x80), 2, 'ERR_INVALID_FLAGS', /^capsule: flags 0x80, reserved 0x0000: /],
[withByte(timeOnly, 7, 1), 2, 'ERR_INVALID_FLAGS', /reserved 0x0001/],
[withByte(timeOnly, 6, 0xab), 2, 'ERR_INVALID_FLAGS', /reserved 0xab00/],
diff --git a/src/lib/dkc/inspect.ts b/src/lib/dkc/inspect.ts
index cff7b13..05e17de 100644
--- a/src/lib/dkc/inspect.ts
+++ b/src/lib/dkc/inspect.ts
@@ -1,5 +1,5 @@
-// Steps 1 to 8 of spec §63, as Inspect of the Go package capsule at 3820066,
-// and the JSON view of `datekeys inspect -json`.
+// Steps 1 to 8 of spec §63, as Inspect of the Go package capsule at
+// spec-v0.9, and the JSON view of `datekeys inspect -json`.
//
// The inspection never contacts a release source and never uses a secret, so
// an invalid capsule is rejected before it can cause an observable query
@@ -11,7 +11,7 @@ import { copyBytes, goQuote, toHex } from './bytes.ts';
import { compactDateKey, formatRFC3339, type Instant, roundTime, validateDateKey } from './datekey.ts';
import { DateKeysError } from './errors.ts';
import { checkCritical, checkNoncritical, type ExtensionRegistry, type Unusable } from './extension.ts';
-import { type CapsuleSections, DKC_FRAMING_VERSION, FramingError, payloadOffset, type Prelude, splitCapsule } from './framing.ts';
+import { type CapsuleSections, FramingError, payloadOffset, type Prelude, splitCapsule } from './framing.ts';
import { decodeHeader, type Header, policyName } from './header.ts';
import { chainHashHex, defaultRegistry, type Profile, type ProfileRegistry } from './profile.ts';
@@ -211,7 +211,7 @@ export function inspectWith(dkc: Uint8Array, registry: ProfileRegistry, extensio
}
function preludeDetail(p: Prelude): string {
- return `DKC1 v${DKC_FRAMING_VERSION}, PUBLIC_HEADER_LEN=${p.publicHeaderLen}, SEALED_CONTROL_LEN=${p.sealedControlLen}`;
+ return `DKC1 v${p.format}, PUBLIC_HEADER_LEN=${p.publicHeaderLen}, SEALED_CONTROL_LEN=${p.sealedControlLen}`;
}
function infos(stanzas: readonly Stanza[]): StanzaInfo[] {
@@ -241,6 +241,8 @@ export async function inspect(dkc: Uint8Array, opts: InspectOptions = {}): Promi
/** The JSON view of `datekeys inspect -json` (Go cmd/datekeys inspectView). */
export interface InspectView {
file?: string;
+ /** The capsule format, once step 2 passed (spec §70). */
+ format?: number;
capsule_id?: string;
datekey?: string;
profile?: string;
@@ -254,12 +256,14 @@ export interface InspectView {
/**
* The CLI view of an inspection, with the same fields and omissions as the
- * Go encoding: the header fields once PUBLIC_HEADER decoded, unlock_at once
- * step 7 passed, error only on failure.
+ * Go encoding: the format once step 2 passed, the header fields once
+ * PUBLIC_HEADER decoded, unlock_at once step 7 passed, error only on
+ * failure.
*/
export function inspectView(in_: Inspection, file?: string): InspectView {
const v: InspectView = { valid: in_.error === undefined, checks: in_.checks.map((c) => ({ ...c })) };
if (file !== undefined) v.file = file;
+ if (in_.prelude !== undefined) v.format = in_.prelude.format;
if (in_.error !== undefined) v.error = in_.error.code;
const h = in_.header;
if (h !== undefined) {
@@ -275,7 +279,7 @@ export function inspectView(in_: Inspection, file?: string): InspectView {
// The key order of the Go struct, so that JSON.stringify matches the CLI.
function orderView(v: InspectView): InspectView {
- const keys: (keyof InspectView)[] = ['file', 'capsule_id', 'datekey', 'profile', 'round', 'unlock_at', 'access_policy', 'valid', 'error', 'checks'];
+ const keys: (keyof InspectView)[] = ['file', 'format', 'capsule_id', 'datekey', 'profile', 'round', 'unlock_at', 'access_policy', 'valid', 'error', 'checks'];
const o: Record = {};
for (const k of keys) if (v[k] !== undefined) o[k] = v[k];
return o as unknown as InspectView;
diff --git a/src/lib/dkc/open.test.ts b/src/lib/dkc/open.test.ts
index f4b5009..b3ef63d 100644
--- a/src/lib/dkc/open.test.ts
+++ b/src/lib/dkc/open.test.ts
@@ -1,27 +1,33 @@
// Tests of open.ts. The mutation corpus runs through open in vectors.test.ts;
-// here the official fixtures open to their plaintext, with the checks and
-// texts of the reference, and the failures the corpus does not reach.
+// here the official fixtures of both formats open to their content, with the
+// checks and texts of the reference, and the failures the corpus does not
+// reach.
import { chacha20poly1305 } from '@noble/ciphers/chacha.js';
import { hkdf } from '@noble/hashes/hkdf.js';
import { sha256 as nobleSha256 } from '@noble/hashes/sha2.js';
-import { Stanza as AgeStanza } from 'age-encryption';
+import { Decrypter, Stanza as AgeStanza } from 'age-encryption';
import { readFileSync } from 'node:fs';
import { describe, expect, it } from 'vitest';
+import { decodeAccessKey } from './accesskey.ts';
import { parseAgeHeader } from './age.ts';
import { sha256 } from './bytes.ts';
import { decodeControl } from './control.ts';
import { type Instant, parseRFC3339 } from './datekey.ts';
import { DateKeysError } from './errors.ts';
import { type ExtensionRegistry } from './extension.ts';
+import { type Format, FORMAT_2 } from './framing.ts';
import { accessIdentity, open, type OpenOptions, payloadIdentity, timeIdentity } from './open.ts';
+import { type Padding, paddingName } from './padding.ts';
import { chainHashHex, quicknet } from './profile.ts';
import { type Release, type ReleaseSource, suppliedRelease } from './release.ts';
import { frame, split } from './testing/capsule.ts';
-import { h, hx, readBytes, readJSON } from './testing/testdata.ts';
-import { parseX25519Identity } from './x25519.ts';
+import { h, hx, listTestdata, readBytes, readJSON } from './testing/testdata.ts';
+import { applyEdits, edits } from './testing/vectors.ts';
+import { parseX25519Identity, unwrapX25519 } from './x25519.ts';
interface Sidecar {
+ format: Format;
release: { round: number; signature: string };
unlock_at: string;
access_policy: 'time_only' | 'time_and_key';
@@ -29,8 +35,13 @@ interface Sidecar {
plaintext_sha256: string;
control_cbor: string;
payload_identity: string;
+ payload_length: number;
+ padding?: Padding;
+ padded_length?: number;
access_key_file?: string;
+ access_key_stanza?: number;
identities?: string[];
+ identity_stanzas?: number[];
}
interface Fixture {
@@ -54,10 +65,17 @@ function fixture(name: string): Fixture {
};
}
-const NAMES = ['empty_payload', 'time_and_key_portable', 'time_and_key_recipients', 'time_only', 'time_only_extensions'];
+// Every official .dkc, both formats.
+const NAMES = listTestdata('fixtures', '.dkc').map((p) => p.slice('fixtures/'.length, -'.dkc'.length));
const options = (f: Fixture, extra: Partial = {}): OpenOptions => ({ source: suppliedRelease(f.release), now: () => f.now, ...extra });
+// The .dkk of a time_and_key fixture, or its identities when it has none.
const credentials = (f: Fixture): Partial =>
- f.side.access_key_file === undefined ? {} : { accessKeyFile: readBytes(`fixtures/${f.side.access_key_file}`) };
+ f.side.access_key_file !== undefined
+ ? { accessKeyFile: readBytes(`fixtures/${f.side.access_key_file}`) }
+ : f.side.identities !== undefined
+ ? { identities: f.side.identities.map(parseX25519Identity) }
+ : {};
+const credentialCount = (f: Fixture): number => (f.side.access_key_file !== undefined ? 1 : (f.side.identities?.length ?? 0));
const later = (t: Instant, seconds: number): Instant => ({ seconds: t.seconds + seconds, nanos: t.nanos });
// An output that records what it receives and whether it was closed or
@@ -98,7 +116,8 @@ function reseal(sealed: Uint8Array, key: Uint8Array, plaintext: Uint8Array): Uin
}
describe('open', () => {
- it('opens every official fixture to its plaintext, with the checks of the reference', async () => {
+ it('opens every official fixture to its content, with the checks of the reference', async () => {
+ expect(NAMES.length).toBeGreaterThanOrEqual(12);
for (const name of NAMES) {
const f = fixture(name);
const r = await open(f.dkc, options(f, credentials(f)));
@@ -106,14 +125,24 @@ describe('open', () => {
expect(hx(r.plaintext!), name).toBe(hx(f.plaintext));
expect(hx(await sha256(r.plaintext!)), name).toBe(f.side.plaintext_sha256);
expect(r.release, name).toEqual(f.release);
- const control = decodeControl(h(f.side.control_cbor));
+ const format2 = f.side.format === FORMAT_2;
+ const L = f.side.payload_length;
+ expect([r.format, r.payloadLength, r.padding, r.paddedLength], name).toEqual([
+ f.side.format,
+ L,
+ format2 ? f.side.padding : undefined,
+ format2 ? f.side.padded_length : undefined,
+ ]);
+ const control = decodeControl(h(f.side.control_cbor), f.side.format);
expect([r.controlCritical, r.controlNoncritical], name).toEqual([control.critical, control.noncritical]);
expect(r.inspection.error, name).toBeUndefined();
const after = r.inspection.checks.slice(8).map((c) => [c.step, c.name, c.ok, c.detail]);
const keyed = f.side.access_policy === 'time_and_key';
const stanzas = r.inspection.checks.find((c) => c.step === 12)?.detail?.match(/(\d+) X25519 stanzas/)?.[1];
+ if (keyed && format2) expect(stanzas, name).toBe('16');
+ const P = f.side.padded_length;
expect(after, name).toEqual([
- ...(keyed ? [[9, 'access credential', true, '1 identities to try']] : []),
+ ...(keyed ? [[9, 'access credential', true, `${credentialCount(f)} identities to try`]] : []),
[9, 'release', true, `round ${f.release.round} obtained`],
[10, 'release verification', true, 'BLS signature valid under the pinned key'],
[11, 'open sealed control', true, 'one tlock stanza, header MAC valid'],
@@ -123,12 +152,65 @@ describe('open', () => {
...(keyed ? [[13, 'open access layer', true, 'identity matched exactly one stanza']] : []),
[14, 'control', true, 'canonical CONTROL_CBOR'],
[15, 'header binding', true, 'matches'],
- [16, 'payload identity', true, 'I_PAYLOAD recovered'],
- [18, 'commit', true, 'payload authenticated completely'],
+ format2
+ ? [16, 'payload identity', true, `I_PAYLOAD recovered; L = ${L}, padding ${paddingName(f.side.padding!)}, P = ${P}`]
+ : [16, 'payload identity', true, 'I_PAYLOAD recovered'],
+ format2
+ ? [17, 'open payload', true, `payload authenticated; ${P} bytes of plaintext, zero after byte ${L}`]
+ : [17, 'open payload', true, 'payload authenticated'],
+ [18, 'commit', true, `${L} bytes of content`],
]);
}
});
+ // Spec §39, §67: in format 2 each credential opens exactly the stanza of
+ // INNER_ACCESS_AGE that the record names, and the others are dummies that
+ // none opens.
+ it('opens in format 2 the recorded stanza with each credential, and no dummy', async () => {
+ let checked = 0;
+ for (const name of NAMES) {
+ const f = fixture(name);
+ if (f.side.format !== FORMAT_2 || f.side.access_policy !== 'time_and_key') continue;
+ const d = new Decrypter();
+ d.addIdentity(timeIdentity(quicknet(), f.release.round, f.release));
+ const inner = await d.decrypt(split(f.dkc).sealed);
+ const stanzas = parseAgeHeader(inner).stanzas;
+ expect(stanzas, name).toHaveLength(16);
+ const credentials: [Uint8Array, number][] = (f.side.identities ?? []).map((s, i) => [parseX25519Identity(s), f.side.identity_stanzas![i]!]);
+ if (f.side.access_key_file !== undefined) {
+ const k = decodeAccessKey(readBytes(`fixtures/${f.side.access_key_file}`));
+ credentials.push([k.material, f.side.access_key_stanza!]);
+ }
+ const opened = new Set();
+ for (const [id, slot] of credentials) {
+ const hits = stanzas.flatMap((s, i) => (unwrapX25519(id, s.args, s.body) === null ? [] : [i]));
+ expect(hits, name).toEqual([slot]);
+ opened.add(slot);
+ }
+ expect(opened.size, name).toBe(credentials.length);
+ checked++;
+ }
+ expect(checked).toBeGreaterThanOrEqual(3);
+ });
+
+ it('opens time_and_key of format 2 with each credential alone, and with all of them', async () => {
+ const f = fixture('format2_time_and_key_recipients');
+ const ids = f.side.identities!.map(parseX25519Identity);
+ expect(ids).toHaveLength(3);
+ const dkk = readBytes(`fixtures/${f.side.access_key_file!}`);
+ for (const [label, extra] of [
+ ...ids.map((id, i) => [`identity ${i}`, { identities: [id] }] as const),
+ ['the .dkk, still encoded', { accessKeyFile: dkk }],
+ ['all of them', { identities: ids, accessKeyFile: dkk }],
+ ] as const) {
+ const r = await open(f.dkc, options(f, extra));
+ expect(r.error, label).toBeUndefined();
+ expect(r.plaintext, label).toEqual(f.plaintext);
+ }
+ const r = await open(f.dkc, options(f, { identities: ids, accessKeyFile: dkk }));
+ expect(r.inspection.checks.find((c) => c.name === 'access credential')?.detail).toBe('4 identities to try');
+ });
+
it('opens time_and_key with each credential alone, and with all of them', async () => {
const f = fixture('time_and_key_recipients');
const ids = f.side.identities!.map(parseX25519Identity);
@@ -148,6 +230,42 @@ describe('open', () => {
expect(r.inspection.checks.find((c) => c.name === 'access credential')?.detail).toBe('3 identities to try');
});
+ // Spec §29.1, §56, §63 step 17: the cases of the third list of §64 that
+ // change the plaintext of PAYLOAD_AGE or what the control says of it, from
+ // the corpus, with the texts of the reference (capsule.Open gives the same).
+ // Into an output, at most the content reaches it, never the padding, and
+ // the output ends aborted.
+ it('checks the padding of format 2 at step 17, in memory and into an output', async () => {
+ const corpus = readJSON<{ cases: { name: string; dkc: { base: string; edits: unknown }; release: { round: number; signature: string }; now: string }[] }>(
+ 'vectors/mutations.json',
+ ).cases;
+ const cases: [string, number, string][] = [
+ ['last padding byte not zero', 34, 'byte 255 of the plaintext is padding and is not zero'],
+ ['payload plaintext of P - 1 bytes', 34, 'the plaintext is 255 bytes, shorter than P = 256'],
+ ['payload plaintext of P + 256 bytes', 34, 'the plaintext is longer than P = 256'],
+ ['payload plaintext without padding, of L bytes', 34, 'the plaintext is 34 bytes, shorter than P = 256'],
+ ['padding code 2 changed to 1, with L = 78000', 78000, 'the plaintext is longer than P = 78080'],
+ ['payload_length L - 1, the last byte of the content not zero', 77999, 'byte 77999 of the plaintext is padding and is not zero'],
+ ];
+ for (const [name, l, text] of cases) {
+ const c = corpus.find((x) => x.name === name)!;
+ const dkc = applyEdits(readBytes(`fixtures/${c.dkc.base}`), edits(c.dkc.edits, name));
+ const o: OpenOptions = { source: suppliedRelease({ round: c.release.round, signature: h(c.release.signature) }), now: () => parseRFC3339(c.now) };
+ const r = await open(dkc, o);
+ expect([r.error?.message, r.inspection.checks.at(-1)?.step, r.plaintext, r.payloadLength], name).toEqual([
+ `capsule: PAYLOAD_AGE: ${text}: ERR_INTEGRITY`,
+ 17,
+ undefined,
+ undefined,
+ ]);
+ const sink = memorySink();
+ const s = await open(new Blob([dkc as Uint8Array]), { ...o, output: sink.stream });
+ expect([s.error?.message, sink.state.closed], name).toEqual([r.error?.message, false]);
+ expect(sink.state.aborted, name).toBe(s.error);
+ expect(sink.bytes().length, name).toBeLessThanOrEqual(l);
+ }
+ });
+
it('reports the noncritical extensions of the .dkk and of CONTROL_CBOR that the registry rejects, without failing', async () => {
const f = fixture('time_and_key_portable');
const accessKeyFile = readBytes('fixtures/time_and_key_portable_extension.dkk');
@@ -393,6 +511,11 @@ describe('the identities of open', () => {
}
return 'no error';
};
+ // Format 2: exactly 16 stanzas, checked before anything else.
+ const zero = new AgeStanza(['X25519', 'A'.repeat(43)], new Uint8Array(32));
+ expect(failure(() => accessIdentity([id], 16).unwrapFileKey(Array.from({ length: 15 }, () => zero)))).toBe(
+ 'agewrap: INNER_ACCESS_AGE has 15 stanzas, want exactly 16: ERR_POLICY_STRUCTURE_MISMATCH',
+ );
const malformed = new AgeStanza(['X25519', 'AAAA'], new Uint8Array(32));
expect(failure(() => accessIdentity([id]).unwrapFileKey([malformed]))).toBe(
'agewrap: malformed X25519 stanza in INNER_ACCESS_AGE (one argument, a 32-byte ephemeral share not of low order, and a 32-byte body): ERR_INTEGRITY',
diff --git a/src/lib/dkc/open.ts b/src/lib/dkc/open.ts
index 2ad10a7..cb5b0fd 100644
--- a/src/lib/dkc/open.ts
+++ b/src/lib/dkc/open.ts
@@ -16,23 +16,31 @@
// The .dkc is a Uint8Array or a Blob, such as a File: of a Blob only the
// prefix that steps 1 to 8 need is read (prefix.ts), the .dkk capsule_digest
// is computed over its stream, and PAYLOAD_AGE is streamed from it. The
-// plaintext goes to memory, returned only once age has authenticated all of
-// it, or to an output stream that is closed only then and aborted on any
-// failure, so that nothing written is ever published (step 18, spec §56).
+// content goes to memory, returned only once age has authenticated all of
+// PAYLOAD_AGE and step 17 has checked it, or to an output stream that is
+// closed only then and aborted on any failure, so that nothing written is
+// ever published (step 18, spec §56).
+//
+// Both capsule formats are read (spec §22, §70). Format 2 changes steps 12 to
+// 17: INNER_ACCESS_AGE holds exactly 16 stanzas, CONTROL_CBOR has schema
+// version 2 with L and the padding rule, and the plaintext of PAYLOAD_AGE is
+// the content followed by zeros up to P = rule(L), of which only the first L
+// bytes are delivered.
import { Decrypter, type Identity, type Stanza as AgeStanza } from 'age-encryption';
import { type AccessKey, checkAccessKeyMaterial, decodeAccessKey, wipeAccessKey } from './accesskey.ts';
-import { ageStanzas, checkAccessStanzas, checkPayloadStanzas, checkTimeStanzas, type Stanza } from './age.ts';
+import { ACCESS_SLOTS, ageStanzas, checkAccessStanzas, checkPayloadStanzas, checkTimeStanzas, type Stanza } from './age.ts';
import { equalBytes, sha256, toHex } from './bytes.ts';
import { type Control, decodeControl } from './control.ts';
import { formatRFC3339, type Instant } from './datekey.ts';
import { sha256Stream } from './digest.ts';
import { DateKeysError } from './errors.ts';
import { checkCritical, checkNoncritical, type Extension, type ExtensionRegistry, type Unusable } from './extension.ts';
-import { DKC_PRELUDE_SIZE, headerBinding, splitCapsule } from './framing.ts';
+import { DKC_PRELUDE_SIZE, type Format, FORMAT_2, headerBinding, splitCapsule } from './framing.ts';
import { type Header, TIME_AND_KEY, TIME_ONLY } from './header.ts';
import { ciphertextFromBody, decryptOnG2, IbeError, TLOCK_BODY_LEN } from './ibe.ts';
import { type CheckResult, type Inspection, inspectWith } from './inspect.ts';
+import { paddedLength, type Padding, paddingName } from './padding.ts';
import { readCapsule } from './prefix.ts';
import { defaultRegistry, type Profile, type ProfileRegistry } from './profile.ts';
import { type Release, type ReleaseSource, verifyRelease } from './release.ts';
@@ -85,8 +93,23 @@ export interface Opened {
readonly inspection: Inspection;
/** The failure at any step, or undefined when the capsule opened. */
readonly error?: DateKeysError;
- /** The plaintext, only when the capsule opened without an output stream. */
+ /**
+ * The format of the capsule, once step 2 passed (spec §22). A caller should
+ * show it: format 1 does not hide the number of credentials or the exact
+ * length of the content (spec §55.2, §70).
+ */
+ readonly format?: Format;
+ /** The content, only when the capsule opened without an output stream. */
readonly plaintext?: Uint8Array;
+ /** L, the number of bytes of content delivered, once the capsule opened. */
+ readonly payloadLength?: number;
+ /**
+ * In format 2, the padding rule sealed in the control and P = rule(L), the
+ * length of the plaintext of PAYLOAD_AGE, whose padding is checked and
+ * never delivered (spec §29.1), from step 16; absent in format 1.
+ */
+ readonly padding?: Padding;
+ readonly paddedLength?: number;
/** The release, once verified at step 10. */
readonly release?: Release;
/** The extensions of CONTROL_CBOR, visible once it is opened. */
@@ -164,6 +187,7 @@ async function openCapsule(
unusableControlExtensions: [],
unusableAccessKeyExtensions: [],
};
+ if (inspection.prelude !== undefined) out.format = inspection.prelude.format;
if (inspection.error !== undefined) {
out.error = inspection.error;
return out;
@@ -179,6 +203,7 @@ async function openCapsule(
};
const h = inspection.header!;
const p = inspection.profile!;
+ const format = inspection.prelude!.format;
const sections = splitCapsule(bytes);
const wipe: Uint8Array[] = [];
let decoded: AccessKey | undefined;
@@ -260,7 +285,8 @@ async function openCapsule(
wipe.push(inner);
pass(11, 'open sealed control', 'one tlock stanza, header MAC valid');
- // Step 12: the structure must match access_policy (spec §36), and step 13
+ // Step 12: the structure must match access_policy (spec §36), and in
+ // format 2 INNER_ACCESS_AGE holds exactly 16 stanzas (spec §39); step 13
// opens INNER_ACCESS_AGE with the caller's identities.
let controlBytes = inner;
if (h.policy === TIME_ONLY) {
@@ -279,14 +305,15 @@ async function openCapsule(
new DateKeysError('ERR_POLICY_STRUCTURE_MISMATCH', 'capsule: time_and_key capsule does not seal an age file'),
);
}
+ const slots = accessSlots(format);
try {
- checkAccessStanzas(stanzas);
+ checkAccessStanzas(stanzas, slots);
} catch (err) {
return fail(12, 'policy structure', err);
}
pass(12, 'policy structure', `time_and_key: INNER_ACCESS_AGE with ${stanzas.length} X25519 stanzas`);
try {
- controlBytes = await decryptAll(inner, accessIdentity(ids), 'age');
+ controlBytes = await decryptAll(inner, accessIdentity(ids, slots), 'age');
} catch (err) {
return fail(13, 'open access layer', err);
}
@@ -294,10 +321,11 @@ async function openCapsule(
pass(13, 'open access layer', 'identity matched exactly one stanza');
}
- // Step 14: the canonical CONTROL_CBOR and its critical extensions.
+ // Step 14: the canonical CONTROL_CBOR, whose schema version is the format
+ // of the capsule, and its critical extensions.
let control: Control;
try {
- control = decodeControl(controlBytes);
+ control = decodeControl(controlBytes, format);
} catch (err) {
return fail(14, 'control', err);
}
@@ -323,28 +351,61 @@ async function openCapsule(
}
pass(15, 'header binding', 'matches');
- // Steps 16 and 17: I_PAYLOAD, then PAYLOAD_AGE with it, streamed from
- // the Blob or from memory, to the output or to memory.
- pass(16, 'payload identity', 'I_PAYLOAD recovered');
+ // Step 16: I_PAYLOAD and, in format 2, L and the padding rule, which step
+ // 14 validated, so that P = rule(L) cannot fail. L and P are not frame
+ // lengths: nothing is allocated according to them (spec §57).
+ let padded: Padded | undefined;
+ if (format === FORMAT_2) {
+ padded = { l: control.payloadLength!, p: paddedLength(control.payloadLength!, control.padding!) };
+ out.padding = control.padding!;
+ out.paddedLength = padded.p;
+ pass(16, 'payload identity', `I_PAYLOAD recovered; L = ${padded.l}, padding ${paddingName(control.padding!)}, P = ${padded.p}`);
+ } else {
+ pass(16, 'payload identity', 'I_PAYLOAD recovered');
+ }
+
+ // Step 17: PAYLOAD_AGE with I_PAYLOAD, streamed from the Blob or from
+ // memory, to the output or to memory. In format 2 the plaintext is
+ // exactly P bytes and its bytes L to P-1 are zero; only the first L are
+ // delivered, and the padding is read and checked, never delivered.
const offset = inspection.payloadOffset!;
- const [payload, payloadLength] =
+ const [payload, ciphertextLength] =
dkc instanceof Uint8Array ? [streamOf(sections.payload), sections.payload.length] : [dkc.slice(offset).stream(), dkc.size - offset];
let plaintext: Uint8Array | undefined;
+ let n: number;
try {
const plain = await decrypt(payload, payloadIdentity(control.payloadIdentity), 'PAYLOAD_AGE');
if (opts.output === undefined) {
- plaintext = await readAll(plain, payloadLength, 'PAYLOAD_AGE');
+ // The content is never longer than PAYLOAD_AGE.
+ const buf = new Uint8Array(padded === undefined ? ciphertextLength : Math.min(padded.l, ciphertextLength));
+ try {
+ n = await readContent(plain, padded, 'PAYLOAD_AGE', (c, at) => {
+ buf.set(c, at);
+ c.fill(0);
+ });
+ } catch (err) {
+ buf.fill(0);
+ throw err;
+ }
+ plaintext = buf.subarray(0, n);
} else {
const w = opts.output.getWriter();
onWriter(w);
- await writeAll(plain, w, 'PAYLOAD_AGE');
+ n = await readContent(plain, padded, 'PAYLOAD_AGE', (c) => write(w, c, 'PAYLOAD_AGE'));
+ try {
+ await w.close();
+ } catch (err) {
+ throw writing('PAYLOAD_AGE', err);
+ }
}
} catch (err) {
return fail(17, 'open payload', err);
}
+ pass(17, 'open payload', padded === undefined ? 'payload authenticated' : `payload authenticated; ${padded.p} bytes of plaintext, zero after byte ${n}`);
- // Step 18: age completed without error.
- pass(18, 'commit', 'payload authenticated completely');
+ // Step 18: every check of step 17 passed.
+ pass(18, 'commit', `${n} bytes of content`);
+ out.payloadLength = n;
if (plaintext !== undefined) out.plaintext = plaintext;
return out;
} finally {
@@ -437,11 +498,35 @@ async function readAll(plain: ReadableStream, max: number, what: str
return out.subarray(0, n);
}
-// Writes a plaintext to the output and closes it once age has authenticated
-// the last chunk. A failure of the output keeps its text, as Go keeps the
-// error of the writer of the plaintext.
-async function writeAll(plain: ReadableStream, w: WritableStreamDefaultWriter, what: string): Promise {
+/** L and P of the PAYLOAD_AGE of a format 2 capsule. */
+interface Padded {
+ readonly l: number;
+ readonly p: number;
+}
+
+// The number of stanzas INNER_ACCESS_AGE must hold in a capsule of format f,
+// 0 meaning one or more (spec §33, §39).
+function accessSlots(f: Format): number {
+ return f === FORMAT_2 ? ACCESS_SLOTS : 0;
+}
+
+// Reads the plaintext of PAYLOAD_AGE as age authenticates each chunk and
+// delivers its content, at the offset of each piece: all of it in format 1
+// (`padded` undefined); in format 2 its first L bytes, the rest being read
+// and checked as the padding, exactly P - L zero bytes, and never delivered
+// (spec §29.1, §63 step 17), as Go's checkPadding. It fails as soon as the
+// plaintext goes past P or a byte of the padding is not zero, and at the end
+// of the STREAM when the plaintext is shorter than P: every failure is
+// ERR_INTEGRITY whatever the moment it is found (spec §69.1). A failure of
+// `deliver` keeps its own error. Returns the number of bytes delivered.
+async function readContent(
+ plain: ReadableStream,
+ padded: Padded | undefined,
+ what: string,
+ deliver: (piece: Uint8Array, at: number) => void | Promise,
+): Promise {
const reader = plain.getReader();
+ let at = 0;
for (;;) {
let r: ReadableStreamReadResult;
try {
@@ -450,15 +535,32 @@ async function writeAll(plain: ReadableStream, w: WritableStreamDefa
throw classify(what, STREAM_FAILURE, err);
}
if (r.done) break;
+ const chunk = r.value;
+ const content = padded === undefined ? chunk.length : Math.max(0, Math.min(chunk.length, padded.l - at));
try {
- await w.write(r.value);
+ if (content > 0) await deliver(content === chunk.length ? chunk : chunk.subarray(0, content), at);
+ for (let i = content; i < chunk.length; i++) {
+ if (at + i >= padded!.p) throw new DateKeysError('ERR_INTEGRITY', `capsule: ${what}: the plaintext is longer than P = ${padded!.p}`);
+ if (chunk[i] !== 0) {
+ throw new DateKeysError('ERR_INTEGRITY', `capsule: ${what}: byte ${at + i} of the plaintext is padding and is not zero`);
+ }
+ }
} catch (err) {
- await reader.cancel(err);
- throw writing(what, err);
+ await reader.cancel(err).catch(() => undefined);
+ throw err;
}
+ at += chunk.length;
}
+ if (padded === undefined) return at;
+ if (at < padded.p) throw new DateKeysError('ERR_INTEGRITY', `capsule: ${what}: the plaintext is ${at} bytes, shorter than P = ${padded.p}`);
+ return padded.l;
+}
+
+// Writes a piece of content to the output. A failure of the output keeps its
+// text, as Go keeps the error of the writer of the plaintext.
+async function write(w: WritableStreamDefaultWriter, piece: Uint8Array, what: string): Promise {
try {
- await w.close();
+ await w.write(piece);
} catch (err) {
throw writing(what, err);
}
@@ -513,16 +615,19 @@ export function timeIdentity(p: Profile, round: number, release: Release): Ident
/**
* The identity that opens INNER_ACCESS_AGE (spec §33, §36, §38, §63 step
- * 13), as Go's agewrap.AccessIdentity: every identity against every stanza,
- * so that the result does not depend on their order; a malformed stanza,
- * then an identity that opens more than one stanza, then no identity that
- * opens any. Exported for tests; index.ts does not re-export it.
+ * 13), as Go's agewrap.AccessIdentity: the stanza set with the rule of the
+ * capsule format, one or more stanzas when `slots` is 0 (format 1) and
+ * exactly `slots` otherwise (16 in format 2); then every identity against
+ * every stanza, so that the result does not depend on their order; a
+ * malformed stanza, then an identity that opens more than one stanza, then no
+ * identity that opens any. Exported for tests; index.ts does not re-export
+ * it.
*/
-export function accessIdentity(ids: readonly Uint8Array[]): Identity {
+export function accessIdentity(ids: readonly Uint8Array[], slots = 0): Identity {
return {
unwrapFileKey(raw: AgeStanza[]): Uint8Array {
const stanzas = stanzasOf(raw);
- checkAccessStanzas(stanzas);
+ checkAccessStanzas(stanzas, slots);
let fileKey: Uint8Array | undefined;
for (const id of ids) {
let matches = 0;
diff --git a/src/lib/dkc/padding.test.ts b/src/lib/dkc/padding.test.ts
new file mode 100644
index 0000000..cc0b745
--- /dev/null
+++ b/src/lib/dkc/padding.test.ts
@@ -0,0 +1,103 @@
+// Tests of padding.ts. The vectors of the reference (testdata/vectors/
+// padding.json) run in vectors.test.ts; here the arithmetic is checked
+// against a restatement of spec §29.1 in BigInt over the whole range, and at
+// the lengths where 32-bit operations or a floating-point logarithm fail.
+
+import { describe, expect, it } from 'vitest';
+import {
+ bitLength,
+ BLOQUE256,
+ isPadding,
+ MAX_PAYLOAD_LENGTH,
+ paddedLength,
+ type Padding,
+ paddingName,
+ padmeParameters,
+ payloadAgeLength,
+ REFORZADO,
+} from './padding.ts';
+
+// Spec §29.1 in BigInt: bloque256 = 256·ceil(L/256), at least 256; reforzado
+// = max(bloque256, Padmé), Padmé keeping the S + 1 most significant bits of
+// L, E = bitlen(L) - 1 and S = bitlen(E).
+function reference(l: bigint, p: Padding): bigint {
+ if (l <= 256n) return 256n;
+ const block = ((l + 255n) / 256n) * 256n;
+ if (p === BLOQUE256) return block;
+ const e = BigInt(l.toString(2).length - 1);
+ const s = BigInt(e.toString(2).length);
+ const unit = 1n << (e - s);
+ const padme = ((l + unit - 1n) / unit) * unit;
+ return padme > block ? padme : block;
+}
+
+// A deterministic generator of lengths spread over every bit length.
+function* lengths(count: number): Generator {
+ let x = 0x9e3779b97f4a7c15n;
+ for (let i = 0; i < count; i++) {
+ x ^= x << 13n;
+ x ^= x >> 7n;
+ x ^= x << 17n;
+ x &= 2n ** 64n - 1n;
+ const bits = BigInt(1 + (i % 53));
+ const l = (x & ((1n << bits) - 1n)) % BigInt(MAX_PAYLOAD_LENGTH + 1);
+ yield Number(l);
+ }
+}
+
+describe('padding', () => {
+ it('names the codes of spec §29.1, and no code for no padding', () => {
+ expect([BLOQUE256, REFORZADO]).toEqual([1, 2]);
+ expect([isPadding(0), isPadding(1), isPadding(2), isPadding(3)]).toEqual([false, true, true, false]);
+ expect([paddingName(BLOQUE256), paddingName(REFORZADO)]).toEqual(['bloque256', 'reforzado']);
+ expect(MAX_PAYLOAD_LENGTH).toBe(8936830510563328);
+ });
+
+ it('counts bits exactly, where a floating-point logarithm does not', () => {
+ expect([0, 1, 2, 255, 256, 2 ** 32 - 1, 2 ** 32, 2 ** 53 - 1].map(bitLength)).toEqual([0, 1, 2, 8, 9, 32, 33, 53]);
+ // Spec §29.1: Math.log2(2^49 - 1) is 49 in IEEE 754; E is 48.
+ expect(Math.floor(Math.log2(2 ** 49 - 1))).toBe(49);
+ expect(padmeParameters(2 ** 49 - 1)).toEqual({ e: 48, s: 6, lastBits: 42 });
+ expect(padmeParameters(78000)).toEqual({ e: 16, s: 5, lastBits: 11 });
+ });
+
+ it('gives P of both rules at the boundaries of spec §29.1', () => {
+ const rows: [number, number, number][] = [
+ [0, 256, 256],
+ [256, 256, 256],
+ [257, 512, 512],
+ [8193, 8448, 8704],
+ [78000, 78080, 79872],
+ // The first L where signed 32-bit operators, then >>> 0, give a wrong P.
+ [2113929217, 2113929472, 2147483648],
+ [4227858433, 4227858688, 4294967296],
+ [4294967297, 4294967552, 4362076160],
+ [MAX_PAYLOAD_LENGTH, MAX_PAYLOAD_LENGTH, MAX_PAYLOAD_LENGTH],
+ ];
+ for (const [l, b, r] of rows) expect([paddedLength(l, BLOQUE256), paddedLength(l, REFORZADO)], String(l)).toEqual([b, r]);
+ });
+
+ it('agrees with the BigInt statement of spec §29.1 over the whole range', () => {
+ let n = 0;
+ for (const l of lengths(20000)) {
+ for (const p of [BLOQUE256, REFORZADO] as const) {
+ const want = reference(BigInt(l), p);
+ expect(BigInt(paddedLength(l, p)), `L = ${l}, code ${p}`).toBe(want);
+ expect(want <= BigInt(Number.MAX_SAFE_INTEGER)).toBe(true);
+ }
+ n++;
+ }
+ expect(n).toBe(20000);
+ });
+
+ it('rejects an L outside 0..L_MAX and an undefined code', () => {
+ for (const l of [-1, 1.5, Number.NaN, Number.POSITIVE_INFINITY, MAX_PAYLOAD_LENGTH + 1, 2 ** 53]) {
+ expect(() => paddedLength(l, REFORZADO), String(l)).toThrow(RangeError);
+ }
+ for (const p of [0, 3, 257]) expect(() => paddedLength(1, p as Padding), String(p)).toThrow(/code \d+ is not defined/);
+ });
+
+ it('gives the length of PAYLOAD_AGE: the header of one X25519 stanza, the nonce, and a tag per 64 KiB chunk', () => {
+ expect([0, 256, 65536, 65537, 79872].map(payloadAgeLength)).toEqual([200, 456, 65736, 65753, 80088]);
+ });
+});
diff --git a/src/lib/dkc/padding.ts b/src/lib/dkc/padding.ts
new file mode 100644
index 0000000..6f9672e
--- /dev/null
+++ b/src/lib/dkc/padding.ts
@@ -0,0 +1,82 @@
+// The padding of the payload of a format 2 capsule (spec §29.1), as
+// capsule/padding.go of the Go reference at spec-v0.9: the plaintext of
+// PAYLOAD_AGE is the content, L bytes, followed by zeros up to P = rule(L).
+//
+// The arithmetic is exact over the whole range, up to L_MAX = 2^53 - 2^46:
+// bitlen with BigInt, and the roundings in the form with ceil, which is exact
+// in doubles because it divides and multiplies by powers of two. Never a
+// floating-point logarithm, nor the 32-bit operators of JavaScript or
+// Math.clz32, which spec §29.1 forbids: they give a wrong P from L =
+// 2 113 929 217 on.
+
+/** Pads the content to the next multiple of 256 bytes, and to at least 256. */
+export const BLOQUE256 = 1;
+/**
+ * Pads to the larger of bloque256 and Padmé. It is the rule a writer uses by
+ * default, as spec §29.1 asks of the official SDK.
+ */
+export const REFORZADO = 2;
+
+/**
+ * The padding rule of a format 2 capsule, sealed in key 7 of CONTROL_CBOR
+ * (spec §29.1, §31). No code stands for no padding.
+ */
+export type Padding = typeof BLOQUE256 | typeof REFORZADO;
+
+/**
+ * L_MAX = 2^53 - 2^46, the largest content length a format 2 capsule can
+ * seal: the largest L for which both rules give a P of at most 2^53 - 1
+ * (spec §29.1).
+ */
+export const MAX_PAYLOAD_LENGTH = 2 ** 53 - 2 ** 46;
+
+/** Whether `v` is a padding code of spec §29.1. */
+export function isPadding(v: number): v is Padding {
+ return v === BLOQUE256 || v === REFORZADO;
+}
+
+/** The name of a padding code, as the Go reference writes it: bloque256 or reforzado. */
+export function paddingName(p: Padding): string {
+ return p === BLOQUE256 ? 'bloque256' : 'reforzado';
+}
+
+/** The number of bits of a non-negative safe integer: bitlen(0) = 0. */
+export function bitLength(n: number): number {
+ return n === 0 ? 0 : BigInt(n).toString(2).length;
+}
+
+/** The intermediate values of Padmé for L > 256 (spec §29.1): E, S and lastBits = E - S. */
+export function padmeParameters(l: number): { e: number; s: number; lastBits: number } {
+ const e = bitLength(l) - 1;
+ const s = bitLength(e);
+ return { e, s, lastBits: e - s };
+}
+
+/**
+ * P = rule(L), the exact length of the plaintext of PAYLOAD_AGE in a format 2
+ * capsule whose content is `l` bytes long (spec §29.1). `l` is a safe integer
+ * from 0 to L_MAX; anything else throws, as an unknown rule does.
+ */
+export function paddedLength(l: number, p: Padding): number {
+ if (!isPadding(p)) throw new RangeError(`padding: code ${String(p)} is not defined`);
+ if (!Number.isSafeInteger(l) || l < 0 || l > MAX_PAYLOAD_LENGTH) {
+ throw new RangeError(`padding: content of ${l} bytes, outside 0..L_MAX = ${MAX_PAYLOAD_LENGTH}`);
+ }
+ if (l <= 256) return 256;
+ const block = Math.ceil(l / 256) * 256;
+ if (p === BLOQUE256) return block;
+ // Padmé keeps the S + 1 most significant bits of L and rounds up the
+ // others, the lastBits = E - S lowest ones.
+ const unit = 2 ** padmeParameters(l).lastBits;
+ return Math.max(block, Math.ceil(l / unit) * unit);
+}
+
+/**
+ * The length of a PAYLOAD_AGE whose plaintext is `n` bytes long: the 184
+ * bytes of an age header with one X25519 stanza and the nonce, the
+ * plaintext, and the 16-byte tag of each 64 KiB STREAM chunk, at least one
+ * (spec §62.1, informative note).
+ */
+export function payloadAgeLength(n: number): number {
+ return 184 + n + 16 * Math.max(1, Math.ceil(n / 65536));
+}
diff --git a/src/lib/dkc/prefix.test.ts b/src/lib/dkc/prefix.test.ts
index cd68d33..9b450cc 100644
--- a/src/lib/dkc/prefix.test.ts
+++ b/src/lib/dkc/prefix.test.ts
@@ -52,7 +52,7 @@ function preludeWith(f: { version?: number; flags?: number; reserved?: number; p
const rejected: [string, Uint8Array][] = [
['no DKC1 magic', new Uint8Array(16).fill(0xff)],
['the magic of a .dkk', readBytes('fixtures/time_and_key_portable.dkk').subarray(0, 16)],
- ['framing version 2', preludeWith({ version: 2, ph: 10, sc: 10 })],
+ ['framing version 3', preludeWith({ version: 3, ph: 10, sc: 10 })],
['FLAGS set', preludeWith({ flags: 1, ph: 10, sc: 10 })],
['RESERVED set', preludeWith({ reserved: 1, ph: 10, sc: 10 })],
['PUBLIC_HEADER_LEN 0', preludeWith({ ph: 0, sc: 10 })],
diff --git a/src/lib/dkc/release.test.ts b/src/lib/dkc/release.test.ts
index 633d775..88ee50b 100644
--- a/src/lib/dkc/release.test.ts
+++ b/src/lib/dkc/release.test.ts
@@ -129,17 +129,17 @@ describe('verifyRelease', () => {
it('gives the code of every release of the mutation corpus that fails at step 10', async () => {
const at10 = corpus.filter((c) => c.step === 10);
- expect(at10.map((c) => c.name).sort()).toEqual(
- [
- 'DateKey A + release of round B',
- 'release of another round',
- 'release signature is the point at infinity',
- 'release signature negated',
- 'release signature re-encoded with x + p',
- 'release signature with the infinity flag and a payload',
- 'negated release signature and U re-encoded with c0 + p',
- ].sort(),
- );
+ // The same seven in each format; format 2 names them "format 2: …".
+ const names = [
+ 'DateKey A + release of round B',
+ 'release of another round',
+ 'release signature is the point at infinity',
+ 'release signature negated',
+ 'release signature re-encoded with x + p',
+ 'release signature with the infinity flag and a payload',
+ 'negated release signature and U re-encoded with c0 + p',
+ ];
+ expect(at10.map((c) => c.name).sort()).toEqual([...names, ...names.map((n) => `format 2: ${n}`)].sort());
for (const c of at10) {
const dkc = applyEdits(c.dkc.base === undefined ? new Uint8Array(0) : readBytes(`fixtures/${c.dkc.base}`), edits(c.dkc.edits, c.name));
const inspection = await inspect(dkc);
diff --git a/src/lib/dkc/testing/ibe-vectors.json b/src/lib/dkc/testing/ibe-vectors.json
index 22633d5..22ecfa3 100644
--- a/src/lib/dkc/testing/ibe-vectors.json
+++ b/src/lib/dkc/testing/ibe-vectors.json
@@ -104,6 +104,76 @@
"r": "015c0a49507b1208268feac750c97a12b3d08bdd59e367f86b7579c9f07046e4",
"file_key": "6cce480b39dcea2918359a8e77cdedae"
},
+ {
+ "name": "format2_empty_payload",
+ "round": 1001,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41",
+ "body": "a6e32c1195ab7f032d10aa8003237d4cb1f99f8988cb4812a96a20a24418bcef9d2905924f0cbf9f1375f89c894a283018426d9464787b8cbdd9520a5aaa47a52adb641dbefbc002e25079edeb4b6cb29cb1b00dc5a3f8f2a7b3faffd54629093e36bde7ac65a31321b87345a23e4de345f05f11884107e1e34b38b3debc7642",
+ "gt": "17000fd35b5cb0c86615b7ebf241c4851922926c545d05236b62a5671cce1d465eb349615af697027a6f06a03932b18610863d02d3713e1ddee780fed14e3c3bf0a8038a9d317d978397d1832d200c7b6f2163d43514f33649c3bafb2fee96f816c218cdf4d3e4dff7bafe69e14d52f7203a0e33ce7a244610391cf7e2cd7b61cdd31bec18db802d4a64d1e63537d5160080f8ef2d7685fbdeef524b5090797c71d36cf1b957b4100e247220355cf02c29fe72dde7513b03f9e81c492ebb449e0c4ff2999bc497127489a88f4c6d4efc9ccfe9a0e5af8fa661141e790dac3871ed8eeb2e7b39876ef2cfed1b9467ce090bd6b1398e7017ed11bbf6b753f908c6ca180c329c74588449455f7fad031d16bc6ab7dcae2696c00cd53a014285c01103519952cb2ad6c03a7b90743add9a951cd7b084ac4fe35dfc28f640ad4d3247bfce348c422d21568f051988490c41dd186696ed8b3822708365243e465c077cde2ee605a375d0e224a779b501b6f57ca3b7e9c041e9e907ef37d571f95b524a17696f82622c929f5f6006d64527d598c6ee10182da10f7ee703f3c9498201cf4210f88b9a5ea81ef103107341a7d0660e1f905f5cb3c207e54d3229d49cfde6e256841740a1a0c6c4b5194583dca97027a46fab676a93c1f1bacb9db07f2606196989c2a13ba0f1ea075df3442ce7c7cbcbc0912e511db52a613354b43caa541a61d17da21eba0eacd082c0f557f6820a0a2bee30d95ae8c2b978f33400490c5cf0fc2bcb33f4eac02d4c02521e5c1970875f04ca27d9c0b71e164c0de6c14c",
+ "sigma": "48c4539dcf320c99a9eaefa599fa299c",
+ "r": "157d03c20721d75e44491d2a92320921b8acce96027f07255d8ab6f6c7293af6",
+ "file_key": "16eb141aa186309a59a7167804b3959e"
+ },
+ {
+ "name": "format2_time_and_key_portable",
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39",
+ "body": "a764423117ba28fc0911bc64203cddc7b7886b13a60055b93d7be6a7091008b275071938ee4be5c97a9a774f5dbc15ad172692911d40e04c04a747184632ee7005f5a4a1e807d0509850cb6a76d643418b25bdac9f47e52a6bad596032a54cc1e862296fd5759f1d8e19f8511a440392b9fc5f078ad0124889a169f7e2b39111",
+ "gt": "1121cdd18516ea0c21760134f421519fd745ab71d248f8dd7e18c4d13e3d771e5d3be29d89ef0f3ba6305e9bbab7fd7d0d10cbf6b36b9bfb6de0ac385b5f8a301cd378123ce6c91e324c628a0acf4d94454966f414e42266486a4d5543e99a44133a16ac44a019e2ec2c22e3f6a0ca13712e0fc58733c0f5f85d5ffc630df56cbff249a466ee4751261d09040e0867eb10e013a7f065f656421a8b7a752975ce6884280633e106fb174a686ccbe3904efe5918a186d406e92a19e37f49b823c612ef48a7734b9825bcb18b25d544d497906c663a61a039524892d3a0f16254dd554f52edbc39d6ca0fcac632bdac313713362396fc2dcc5e9dedb54f92347b8e5afb7f89b5da9b44744344b331375e683136c2dcfd08c8d1c9e36c740d7ff7c3006deeffc4f5cfdfe7b9b30338512de6e5a8435a21866b3341e06267d35ebe29193beac4b55e0b225317b941a71cfd0105b730f6e0bf70b649da20cf67108eb7e856c38624265ffcf81e320f48c416db2807e3ac57613d93cd5c63fcd35940b10266c883ab19b16905cbb842118df0e60f354084df472dbd5d6a60584dcef71413d132b372a4ce294cfac4b4423aee5907eb9cecb64080f369a449657b714275ca18f07dd6cad0d54a9b9c2ec46013c8e20d86a4a763275fe4dacc9a9bcc044a08c8e1804dbf12baabcee64b4b10e7983cd09c0f609c08116fcee1711fafada680ddc1a25d7d206fd4931b26a27f8c9b0e26b223a41571ae6ff87182297cd66fccc8d85845e91602a9fb84fef9f34dfe557e2d632b91cb3bcb0b79d55490e275",
+ "sigma": "199acb924ff1436081af3f30f5f3e3bf",
+ "r": "04e47385f151fb4e74f61945c255b43af52b641a68462c06f7efc3750050a0db",
+ "file_key": "0f9deda78937a5a73867c2e06cb9a891"
+ },
+ {
+ "name": "format2_time_and_key_recipients",
+ "round": 1001,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41",
+ "body": "90e5582236742b544e198a48f1ffd9b265e26988c4f981e8c5e547c0bc7b56c337840607a0d3e7351eb0b51fb4a5ad2101c89ec76b19bd97f4b36f95e263994ddc07835765d9e2ae863048aa4a524361823486d4334edfb7184aab24282a45283df86f773c6a6a9c87cfab26a48193114cde9c6e364bd7f0464e0ddbf5f275a3",
+ "gt": "0e379baf784d9bd8a0ac29b841f151e12c251afa04cef84985c39900c93212480ca4f71d6c3cd0be66279bd9bfbc344d19674d96bef892b1740177021cc5b3f1fd5e88ce501b361b4324f3a222e1b9db030e47018ae3ca87dac873f1a9d3364a19fc6b70b70eadb077d93be390016bed0f728a9e20c6f0facb74ae7a496e4de79bb256a3ebc7603de33e132e1c905c731841df4e9534d0ad3b18ff6351e562e800e3e00e6b45ef49ff5373bc99c89f376ad63367467f500f87ae56f0d1befeea0b0246eb18ea49609214a2e3c846db46bd05c6f0963bee80ea38a16d287c2269b8ca116b24ff96ba50b68ba916a5f61e132d5d603e979a813555de420ddd731f8f82bc27b093bdf7bb9b63c633c5bf17201a5d5a4f30c0632ec23d18701d1bbb00bb37d76ee5b29e29be293543941543691deba8a713c17547237f2fb8b237c743c5fb051f234d598f44d7d505ab66b015f62703bc208c0984fb1657fb94f36eaacd252054ea83fede2213bbf4e2fd2938bfec1270ada779e156d3393edc542b1028b99dbf40ea00f0ce75e0f3fd555c69f68fe1cc5d44b349309a10686f70eec5bffda9c22c8dfe83062d00ce9239370a7cb7d76f39cf0c64788e626c399f64c01cd1f05a04d2c9fe62c122b54d8ba00535ba357afbae92fe30171b5d66bf491427a34dab1e04101da47aa6e0371b309db519789c53869701b317ae757b49e5f367c7f687ab6e112251733a787e147d0527dc99c12504f6400d44c16f3e6529ee1299e078bc246fe9d0779e1a96881d7ea921bdb480bae996fb6694487ebbb3",
+ "sigma": "a4a691a1cb4d3298871a4ef464f22721",
+ "r": "3d57cfabbd284d111f3f06903ee6c5f8b91a1f3b16f562b0d776d77284e0ffbd",
+ "file_key": "fb54571041b259f50385431259a8fbca"
+ },
+ {
+ "name": "format2_time_and_key_sixteen",
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e",
+ "body": "a71f93e59d6fda067a4b63dc6b5acc48138b4ae6b5904775b3adddcd8f96f73bdf1e8fc6a4fa9c2ccfe5d00f19028f310a6ea606974c19948d96c237f1d05f350a078d28121d75f81d9244d075fe5a0426c3ab9d0e7645ecf464d3b790824999e6cbfdd948a44a9287f11da779a1e8f19d32d27aa4c821072ae8f7cac0e2dc88",
+ "gt": "0b63b57a2d1ffda34327d54cbc1679fd1ed72390d277654961c9b51dca205ceccd36cb39ba919a788913f8a7707ec2fe0b915cf7400b5be6f2e12403faa50928a21da0d924c984214e58ca2538a18372b7dd0ff0202f019b684ad1f6ad162b96074b1217493e1b3bd85375fea9583b189cf032d0829bc522711651d705f69999e42e682b05b2342500e3116086b394f4072c46316413602cff5fcd422ebb55eaa5734d7863932e4b013c3a83e3b46a05cf4fe9226e908753e84749094bed32c7071167225edf00641284910398d3a3d01c520829c1cc920e839061efe61e2f6b7f6a77d36118558169da6a581421069a1101c8ff9415033506ed03bceb55352cbb67ade147391c563aad0ef4286baf58c7f5c017311a7a2880f33fb23c491da40a5eac0e93923d979c142c8457abe1ce73cfc8fe826cd34b19d96da81f9af7d5614823c4b101a1560324fa77d161779c0f7f7369717e8a317a2685128dcd0a1426e82a216af4299a37b86033c7b502b29320304c6d75a76aafd3e576cd6b89820857a6cbe7ef69909f5ca93626a5b1954f5c62590eaa4e5b38385c2c264f594d02b4ee577b71edf07d959f5a48e425440ec466c018dfa6ef434a062270342df0de16d3c52de7fc0666ebb7227983fddf1d6011ed484b8bc72ca62956c05059151527218b7dc21b6e03a176af56ebff24d68fcbb4b54a88831046d7905d40a17d35af263e3bb11bc3f629d949d67b804d0cb1639f28822e21f1169a11af5e75a9110b4d3a425427f3e7006d2325f08daf3d34c31b0284ba6e60271f7de9812492",
+ "sigma": "d50d85dd51c16d94abc37b1f64cd26c5",
+ "r": "43588e7e0923356307ad06e5cd147115a64f0d839d5088724f67d2ac187933d2",
+ "file_key": "192130bc5124b98ce01e1ae0bac64d2e"
+ },
+ {
+ "name": "format2_time_only",
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39",
+ "body": "a41ba7a5a55999d4c8840035a484e9176cab4572e06a6631af9d4577333ff54426c2fd253e86ce6a80cff77c705878ed00fa03f9b6e4089536d8d69f33d5bace38e927a2eaf16b01e84f2bdc4966c0508aef4598c97ba7bfc068d1cf8a6f0d789ba3b7ff0ca0a7da88642228486bb42c1cd6ec2660f44f4cd551f6fe126ab06a",
+ "gt": "0358a381df0523eb2b1a63c563d8ca2eb3965fc6f20494796cea42b29b59b1c7fabf8b5452f862dabd55ea4452a7e0be039129ced37ecd2608b7d18dfab95279c316b6391ac80e25523cc63bf891075bd56999a11bb93e89eda3cb5dab0f3cb5021404265841476939b7d49beadd7b281d3e980b6f3095833dd3fd07191eefb5f73a3adfd31729354ac586ae5589ea2916a56a5bd00ded2a18f9f0c8389c542fc27e26eb822cf947dbe9c843347c3339946f06b203434619cdf6d1f92a49e85b09c9b62b6c8164f833609d55b25bd839416e61c855e87e93502bf2bddb922248e2785ee428021b879033341a555cef251708526cba2e55e5fccd262a7fa813de4095bb64423856e6e801f364fbec60d320ac238fbbc203001c8ecffe8bd4781219c0a28e987ff6a2f29ece48649f5808fce5a8bde146d34facc02341bf7f90aa136e13557f3c9d68446c1af19c04922b175c130cc7d5bfd75643f7769773f3a6ee77fbcfe3c628e044959d2ec3d7b6efdb56e79e5e46e893b8c564739e01bcea088152951d15095a77d1019e3a383dee8efe374749d785b3a2cfda926e1e0623d2cd0df4f71d9817b150ef2b29238ba513bd82bd09b30356b536eb6e53a5b20e09a98cfd67c23377d18b42a73dba21eca2395ca310c6e86a5cacac785402bf731909b61919832607bf5dc439785def4163ba95a3d1aff874510665bd5f21def8db13a3ce7dd90970265da194e58fed770d3d41db2ed49b8c4fb9519fe75e6504f5eb36d96e61bc921a710ae7fc026b6f293871da663f89039508cd37eb63e63f",
+ "sigma": "52f4c46330634adbb6ddb51a864be723",
+ "r": "18a93bf2a22c12f20b82dc48566db62ee760cca3cc215212306daa87b0b1e85f",
+ "file_key": "c09fa00480a7a742d20a6ab8bb74d99b"
+ },
+ {
+ "name": "format2_time_only_bloque256",
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39",
+ "body": "b3d271f2f0b554becba63162b4081c8f68d23bf7092ef06b6d355fd8dff5bcc55b36f80391286eb7cd3b13f658120d7b0c8b7d3c7ae90b2d16bde731520383157378bf4400863498c8fb02ab04a842353f65551896e6659b1bc2483c67a6886f3f15b788f1fe776265fdd683528f356e8bb0aabc6fd527049ca60a17ebd31fa6",
+ "gt": "0dfee74aa9e540c57f81e6af154538e1a15e7dec1f05b22d516a498141e6bbf64f07cf856319348c1321cfc046753a5f0ef56d9ea512cd4476584e908e86aec7b148ad861b86c5c8a8aabdd2e1501ecc07afdf52accd60564e40af0388f4604f040ea220cf8a7f4ade72ff4c63b743d511110cf8325eddb0608a85c714051e2891eff5d13bd0cab56ef61ef2a6bb1755046188e58543c3741044eb8a9cf14a82d2f73b7919cf7443ec4b8478ec68066bd3bea3d7ea1fde80998a77029e3b0a41035c5ea4d4e6b3fce0db59e42fe57fb41406ad97fb063412001f1647c88599263be841ddcd47a0a8bce44a7f552bc76915a1a088796885bef44faf88cb069265debcd11236d572f614ab0a768a034d0f07f089c7b56631bcd16d6ee771a7c75b14e394f8e0ec83361f0db83d58a47a7f7409825d0a1b71127df2ac0072f164298b75d196f8378e588e4273a7b3e9ebe313603ac3a641edcbfaa92ae162d9fb6bf7e6d6e03202913d46f62b1a491fc5974bcdffcadd33163bec488300f1def3821878c30a5d355a4ba7181fb0c76d302392937f946921a98a5cf2f822bf5fb144b54f7fd8e053648264b587a6e26591d7161eaab73e00230919cdf402ecc46fc3e1f6ba7ceacdbbd4c099947bbc332aa47002e4be0093d523b7e9bbdfe593fe361601304ecb88d73e11aa700a69c9615caf5d72b3b6982ef55627ed6d5927f6ced2563cbb9254b94a049d125a09da6f65149ddccb92fca9522c36aaf1c763493630f9524f124e1d4a76864b97a686e261507d5379211a8a14603ba4d03b0ac70f",
+ "sigma": "190ca3978873ff48829690bbb6b21112",
+ "r": "65529c8a4b77835b0771e72149feefbdaaef3f30537122136d119f97f68f972d",
+ "file_key": "732a6e8af8fccf4c00c1110e2ef513a8"
+ },
+ {
+ "name": "format2_time_only_extensions",
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e",
+ "body": "93ed2308ff61b4e937d67fd887eaef6958339e31c34242aeb95205c829bf42ee308b21edd1a65f68c350ac865d6f7a3c13944cf2723451062a5e95a81ccc060c1da2e78156a293ccba833310856f362c5e303350cb8917b15110e3e9e9e19aeef70d17d4c3e5ead72524b17fc3debd7311753b63783f093edac7b68c45d6961d",
+ "gt": "05e4ced151188636235a40f784321a733be8655469a91111c4546b0061b95150ce35e471fdf1bb346ad1d0493e3d28c406eca2b00148565ab236ea3554614c22d7c741cfed9ff0fd5129771146faba564b403966bc30671e07f6b132464e156210cd85548efa27c6980801e77fb46124aa272ff3ec2e6a677e8264d92c93a2c2eaf17cd6694f01cfe4e848e4b071611605363b185a54207e7689b7ebd07b674296508eb07bec2aa581e39bcea7b697bd301c046a9858746854c972598ccfe2330345881beef347de38af2e9164e41e70345b4b779a66c3b434c507e3de384a3da18597e8135df0542ba77945455b851413ea964f4952911b096bf6cc4815a32ce8f96fafe42cd51b5dd02cf320cf1119a959c402756f44d009011b4b4c0975e809f1accb9220b7c97ce485168fc3827895883d2d188c92d0b24616a00062fd8c3383801f9620e0f8f653e1578b37daf50e68e91b7c1b31ce737632cd1ca73aa2a9b66e439fbffa1cff7ac55f23a5d78bf27cb9c8da03e79012d63713e8a16b5f10635d625cd4e46ebf271040d1044d8f67fd6d545219c85219fbd810ff215ccacb76afeb93c0da91d48538db8a197fd30ef6eb83f93851e869a63b54d21b2bdb4113eddfd99ff4118701ae02d495ace15c5ec15fd9eefd51fb3812fcb2f04c4d09c5e14c67464feac123bc0c74435933b21acea8fae0f7c763bdc5cbc6867f8d2d2afafaafa81dacf71e1ae12f747ea500d1f1e3637a46ea25b4c3926d87637b7bf0726e1d5009f8646a7e867327674f53058ebb1334d3fa4ebb6c8ae94f9f3d",
+ "sigma": "665b32ed017c84faf21ed0f30eb75875",
+ "r": "18b536fc5a38d45e95e4536ef58c802d68bed50fc4e9ac373989708ea6062ab3",
+ "file_key": "31287dcf0f97929d1cf86f80f30d1bda"
+ },
{
"name": "time_and_key_portable",
"round": 1000,
diff --git a/src/lib/dkc/vectors.test.ts b/src/lib/dkc/vectors.test.ts
index bfe59b1..694db69 100644
--- a/src/lib/dkc/vectors.test.ts
+++ b/src/lib/dkc/vectors.test.ts
@@ -5,12 +5,13 @@
// - vectors/dk1.json, quicknet_rounds.json, profile_quicknet.json;
// - vectors/cbor.json: every generic vector through walk with the file's
// max_depth and max_len, and every schema vector through the decoder of
-// its schema, with the exact result;
+// its schema, CONTROL_CBOR in the format of the vector, with the exact
+// result;
+// - vectors/padding.json: P with both rules and the length of PAYLOAD_AGE
+// for every L, and the lengths above L_MAX rejected;
// - vectors/mutations.json: every case whose step is 1 to 8 through
-// inspect, with its registry and extensions, and the same code and step;
-// the cases of steps 9 to 18 need the release, the credentials and the
-// decryption of phase 2 (open), and are skipped one by one with that
-// reason;
+// inspect, with its registry and extensions, and every case through open,
+// from memory and from a Blob, with the same code and step;
// - vectors/inspect_differential.json: every mutation with the Go verdict,
// code and step;
// - fixtures/*.inspect.json: byte for byte the output of
@@ -27,6 +28,8 @@ import { checkCompressedPoint } from './bls12381.ts';
import { concatBytes, equalBytes, sha256, toHex } from './bytes.ts';
import { type Item, MAX_SAFE_UINT, walk } from './cbor.ts';
import { decodeControl, encodeControl } from './control.ts';
+import { type Format, FORMAT_1, isFormat } from './framing.ts';
+import { BLOQUE256, MAX_PAYLOAD_LENGTH, padmeParameters, paddedLength, payloadAgeLength, REFORZADO } from './padding.ts';
import { canonicalJSON, compactDateKey, formatRFC3339Nano, type Instant, parseDateKey, parseRFC3339, resolveDateKey, unlockAt } from './datekey.ts';
import { DateKeysError, errorCode } from './errors.ts';
import type { Extension, ExtensionRegistry } from './extension.ts';
@@ -273,11 +276,14 @@ interface SchemaVector {
name: string;
input: Uint8Array;
result: string;
+ /** The capsule format a control_cbor vector is decoded for; 1 when the file has none. */
+ format: Format;
}
-// The decoder of each schema. It returns a writer of the decoded object,
-// which must reproduce an accepted encoding byte for byte.
-const SCHEMAS: ReadonlyMap Promise<() => Uint8Array>> = new Map([
+// The decoder of each schema, for the capsule format of the vector. It
+// returns a writer of the decoded object, which must reproduce an accepted
+// encoding byte for byte.
+const SCHEMAS: ReadonlyMap Promise<() => Uint8Array>> = new Map([
[
'provider_profile',
async (b: Uint8Array) => {
@@ -294,9 +300,9 @@ const SCHEMAS: ReadonlyMap Promise<() => Uint8Array>>
],
[
'control_cbor',
- async (b: Uint8Array) => {
- const c = decodeControl(b);
- return () => encodeControl(c);
+ async (b: Uint8Array, format: Format) => {
+ const c = decodeControl(b, format);
+ return () => encodeControl(c, format);
},
],
[
@@ -360,14 +366,23 @@ describe('vectors/cbor.json', () => {
const schemas: SchemaVector[] = array(o.schemas, 'schemas').map((v, i) => {
const at = `schemas[${i}]`;
const c = object(v, at);
- keys(c, at, ['block', 'schema', 'name', 'hex', 'result']);
+ keys(c, at, ['block', 'schema', 'name', 'hex', 'result'], ['format']);
const s: SchemaVector = {
block: str(c.block, at),
schema: str(c.schema, at),
name: str(c.name, at),
input: hexBytes(c.hex, at),
result: result(c.result, at),
+ format: FORMAT_1,
};
+ // README: format is the capsule format of a control_cbor vector, 1
+ // when absent; no other schema has one.
+ if (Object.hasOwn(c, 'format')) {
+ const f = int(c.format, `${at}.format`);
+ if (s.schema !== 'control_cbor') throw new FormatError(at, `format in a vector of schema "${s.schema}"`);
+ if (!isFormat(f) || f === FORMAT_1) throw new FormatError(at, `format ${f}: only 2 is written, 1 being the default`);
+ s.format = f;
+ }
if (!SCHEMAS.has(s.schema)) throw new FormatError(at, `unknown schema "${s.schema}"`);
if (BLOCKS.get(s.block) !== s.schema) throw new FormatError(at, `block "${s.block}" is not a block of schema "${s.schema}"`);
return s;
@@ -376,10 +391,14 @@ describe('vectors/cbor.json', () => {
});
if (f === undefined) return;
- it('has every block of README "Schema vectors" with at least five vectors', () => {
+ it('has every block of README "Schema vectors" with at least five vectors, and CONTROL_CBOR in both formats', () => {
for (const block of BLOCKS.keys()) {
expect(f.schemas.filter((s) => s.block === block).length, block).toBeGreaterThanOrEqual(5);
}
+ const controls = f.schemas.filter((s) => s.schema === 'control_cbor');
+ expect(controls.filter((s) => s.format === 2).length).toBeGreaterThanOrEqual(5);
+ // README: the names of the format 2 vectors start with "format 2: ".
+ expect(controls.every((s) => (s.format === 2) === s.name.startsWith('format 2: '))).toBe(true);
expect(f.accept.length).toBeGreaterThan(0);
expect(f.reject.length).toBeGreaterThan(0);
});
@@ -405,7 +424,7 @@ describe('vectors/cbor.json', () => {
let write: (() => Uint8Array) | undefined;
expect(
await resultOf(async () => {
- write = await SCHEMAS.get(v.schema)!(v.input);
+ write = await SCHEMAS.get(v.schema)!(v.input, v.format);
}),
).toBe(v.result);
// An accepted object is written back to the same bytes.
@@ -516,16 +535,19 @@ describe('vectors/mutations.json', () => {
const inspected = f.filter((c) => c.step <= LAST_INSPECT_STEP);
const opened = f.filter((c) => c.step > LAST_INSPECT_STEP);
- it('has the cases README counts: 65, the 33 of §64 first, 31 in steps 1 to 8 (13 of them from §64), 34 after step 8', () => {
- // 3820066 had 55 cases (23 from §64); the v0.8.2 amendment on canonical
- // point encoding (f6f2e9f) added ten §64 cases at steps 10 and 11.
- expect(f).toHaveLength(65);
- expect(f.slice(0, 33).every((c) => c.spec)).toBe(true);
- expect(f.slice(33).some((c) => c.spec)).toBe(false);
- expect(inspected.length).toBe(31);
- expect(inspected.filter((c) => c.spec).length).toBe(13);
- // The cases that are skipped below, and only those.
- expect(opened.length).toBe(34);
+ it('has the cases README counts: 125, 88 of §64 in their runs, 44 in steps 1 to 8 (26 of them from §64), 81 after step 8', () => {
+ // v0.8.2 had 65 cases, which stay first; v0.9 runs the 33 mutations of
+ // the first two lists of §64 on the format 2 fixtures, adds the 22 of its
+ // third list and 5 companions with a .dkk.
+ expect(f).toHaveLength(125);
+ const run = (from: number, to: number, spec: boolean): boolean => f.slice(from, to).every((c) => c.spec === spec);
+ expect([run(0, 33, true), run(33, 65, false), run(65, 120, true), run(120, 125, false)]).toEqual([true, true, true, true]);
+ expect(f.filter((c) => c.spec).length).toBe(88);
+ // README: the same 33 on the format 2 fixtures are named "format 2: …".
+ expect(f.slice(65, 98).map((c) => c.name)).toEqual(f.slice(0, 33).map((c) => `format 2: ${c.name}`));
+ expect(inspected.length).toBe(44);
+ expect(inspected.filter((c) => c.spec).length).toBe(26);
+ expect(opened.length).toBe(81);
expect(inspected.length + opened.length).toBe(f.length);
expect(new Set(f.map((c) => c.name)).size, 'unique names').toBe(f.length);
});
@@ -698,6 +720,85 @@ describe('fixtures/*.inspect.json', () => {
});
});
+// ---------------------------------------------------------------------------
+// vectors/padding.json
+//
+// The padding of the payload of a format 2 capsule (spec §29.1): for each L,
+// P with code 1 (bloque256) and code 2 (reforzado), and the length of
+// PAYLOAD_AGE for each; e, s and last_bits, informative, for L > 256 only;
+// and lengths above L_MAX, which no rule accepts.
+
+interface PaddingVector {
+ l: number;
+ bloque256: number;
+ reforzado: number;
+ payloadAgeBloque256: number;
+ payloadAgeReforzado: number;
+ padme?: { e: number; s: number; lastBits: number };
+}
+
+describe('vectors/padding.json', () => {
+ const f = load('vectors/padding.json', (json) => {
+ const o = object(json, 'padding.json');
+ keys(o, 'padding.json', ['spec', 'description', 'l_max', 'vectors', 'rejected']);
+ checkSpec(o, 'padding.json');
+ const lMax = int(o.l_max, 'l_max');
+ const vectors = array(o.vectors, 'vectors').map((v, i): PaddingVector => {
+ const at = `vectors[${i}]`;
+ const c = object(v, at);
+ const l = int(c.l, `${at}.l`);
+ // README: e, s and last_bits only for L > 256.
+ const padme = l > 256 ? ['e', 's', 'last_bits'] : [];
+ keys(c, at, ['l', 'bloque256', 'reforzado', 'payload_age_bloque256', 'payload_age_reforzado', ...padme]);
+ const p: PaddingVector = {
+ l,
+ bloque256: int(c.bloque256, `${at}.bloque256`),
+ reforzado: int(c.reforzado, `${at}.reforzado`),
+ payloadAgeBloque256: int(c.payload_age_bloque256, `${at}.payload_age_bloque256`),
+ payloadAgeReforzado: int(c.payload_age_reforzado, `${at}.payload_age_reforzado`),
+ };
+ if (l > 256) p.padme = { e: int(c.e, `${at}.e`), s: int(c.s, `${at}.s`), lastBits: int(c.last_bits, `${at}.last_bits`) };
+ return p;
+ });
+ // README: every number is below 2^53, so a JSON number holds it exactly;
+ // the rejected lengths may reach 2^53 itself.
+ const rejected = array(o.rejected, 'rejected').map((v, i) => {
+ const at = `rejected[${i}]`;
+ if (typeof v !== 'number' || !Number.isInteger(v) || v < 0 || v > 2 ** 53) throw new FormatError(at, 'not a length up to 2^53');
+ return v;
+ });
+ return { lMax, vectors, rejected };
+ });
+ if (f === undefined) return;
+
+ it('names L_MAX = 2^53 - 2^46 and covers the boundaries of spec §29.1', () => {
+ expect(f.lMax).toBe(MAX_PAYLOAD_LENGTH);
+ const ls = f.vectors.map((v) => v.l);
+ // The boundaries where 32-bit arithmetic breaks, and where a
+ // floating-point logarithm gives E one too large (spec §29.1).
+ for (const l of [0, 256, 257, 2113929216, 2113929217, 4227858432, 4227858433, 2 ** 32 - 1, 2 ** 32 + 1, 2 ** 49 - 1, MAX_PAYLOAD_LENGTH]) {
+ expect(ls, String(l)).toContain(l);
+ }
+ expect(f.rejected).toContain(MAX_PAYLOAD_LENGTH + 1);
+ });
+
+ it.each(f.vectors.map((v) => [v.l, v] as const))('L = %i', (_l, v) => {
+ expect(paddedLength(v.l, BLOQUE256)).toBe(v.bloque256);
+ expect(paddedLength(v.l, REFORZADO)).toBe(v.reforzado);
+ expect(payloadAgeLength(v.bloque256)).toBe(v.payloadAgeBloque256);
+ expect(payloadAgeLength(v.reforzado)).toBe(v.payloadAgeReforzado);
+ if (v.padme !== undefined) expect(padmeParameters(v.l)).toEqual(v.padme);
+ // Both are the exact values, below 2^53 and multiples of 256.
+ for (const p of [v.bloque256, v.reforzado]) {
+ expect(Number.isSafeInteger(p) && p % 256 === 0 && p >= v.l && p >= 256).toBe(true);
+ }
+ });
+
+ it.each(f.rejected.map((l) => [l] as const))('rejects L = %i', (l) => {
+ for (const p of [BLOQUE256, REFORZADO] as const) expect(() => paddedLength(l, p)).toThrow(RangeError);
+ });
+});
+
// ---------------------------------------------------------------------------
// vectors/tlock_ibe.json
//
@@ -792,6 +893,7 @@ const VECTOR_FILES = [
'vectors/dk1.json',
'vectors/inspect_differential.json',
'vectors/mutations.json',
+ 'vectors/padding.json',
'vectors/profile_quicknet.json',
'vectors/quicknet_rounds.json',
'vectors/tlock_ibe.json',
@@ -851,7 +953,7 @@ describe('testdata/', () => {
expect(() => keys({ b: 2 }, 'x', ['a'], ['b'])).toThrow(/missing "a"/);
expect(() => code('ERR_NOPE', 'x')).toThrow(/not a normative code/);
expect(() => step(19, 'x')).toThrow(/outside 1..18/);
- expect(() => checkSpec({ spec: '0.8.1' }, 'x')).toThrow(/want 0.8.2/);
+ expect(() => checkSpec({ spec: '0.8.2' }, 'x')).toThrow(/want 0\.9/);
expect(hasTestdata('README.md')).toBe(true);
expect(errorCode(new Error('x'))).toBe('');
});
diff --git a/src/lib/dkc/version.ts b/src/lib/dkc/version.ts
index 3b67325..6f7a0d9 100644
--- a/src/lib/dkc/version.ts
+++ b/src/lib/dkc/version.ts
@@ -1,7 +1,7 @@
// The versions of this library. There are three, each with its own meaning
-// (README, "Versiones"): the format versions inside the objects (framing and
-// schema, 1 today; spec §70), the version of the specification it
-// implements, and its own version.
+// (README, "Versiones"): the format versions inside the objects (the capsule
+// format, 1 or 2, and 1 for the other framings and schemas; spec §22, §70),
+// the version of the specification it implements, and its own version.
/**
* The version of this library, as in package.json: 0.1.0 once phase 2 adds
@@ -11,7 +11,7 @@ export const VERSION = '0.1.0-dev';
/**
* The version of the DateKeys Protocol Specification that this library
- * implements: the tag spec-v0.8.2 of the Go reference, whose shared vectors
+ * implements: the tag spec-v0.9 of the Go reference, whose shared vectors
* and fixtures (testdata/) all name it.
*/
-export const SPEC_VERSION = '0.8.2';
+export const SPEC_VERSION = '0.9';
diff --git a/src/lib/inspector/format.test.ts b/src/lib/inspector/format.test.ts
index 9db2d80..c3647c1 100644
--- a/src/lib/inspector/format.test.ts
+++ b/src/lib/inspector/format.test.ts
@@ -41,10 +41,11 @@ describe('steps and codes', () => {
expect(stepGloss(9)).toBe('');
});
- it('explains every check of the opening, the failure of step 17 included', () => {
+ it('explains every check of the opening, step 17 included', () => {
const names = new Set([...OPEN_STEPS_TIME_ONLY, ...OPEN_STEPS_TIME_AND_KEY].map(([, name]) => name));
- expect(names.size).toBe(10);
- const glosses = [...names, 'open payload'].map(openStepGloss);
+ expect(names.size).toBe(11);
+ expect(names.has('open payload')).toBe(true);
+ const glosses = [...names].map(openStepGloss);
for (const g of glosses) expect(g).toMatch(/^\p{Lu}.*\.$/u);
expect(new Set(glosses).size).toBe(11);
expect(openStepGloss('tlock stanza')).toBe('');
diff --git a/src/lib/inspector/format.ts b/src/lib/inspector/format.ts
index eceabba..ee4cadc 100644
--- a/src/lib/inspector/format.ts
+++ b/src/lib/inspector/format.ts
@@ -37,7 +37,7 @@ export function stepGloss(step: number): string {
case 1:
return 'El fichero empieza por la marca DKC1 y trae un prelude completo.';
case 2:
- return 'Versión de trama 1, FLAGS y RESERVED a cero, y cada longitud entre 1 byte y su límite de §57 (1 MiB y 64 MiB).';
+ return 'La versión, que es el formato de la cápsula, vale 1 o 2; FLAGS y RESERVED, cero, y cada longitud está entre 1 byte y su límite de §57 (1 MiB y 64 MiB).';
case 3:
return 'Se leen los bytes exactos de PUBLIC_HEADER.';
case 4:
@@ -58,8 +58,7 @@ export function stepGloss(step: number): string {
/**
* The checks of steps 9 to 18 that the opening records when it succeeds, by
* policy, as the reference records them (the `stages` of the fixture
- * records): step 17 has no check of its own, and its failure is the only
- * one recorded under 17; step 18, the commit, follows it.
+ * records), in both capsule formats.
*/
export const OPEN_STEPS_TIME_ONLY: readonly (readonly [number, string])[] = [
[9, 'release'],
@@ -69,6 +68,7 @@ export const OPEN_STEPS_TIME_ONLY: readonly (readonly [number, string])[] = [
[14, 'control'],
[15, 'header binding'],
[16, 'payload identity'],
+ [17, 'open payload'],
[18, 'commit'],
];
export const OPEN_STEPS_TIME_AND_KEY: readonly (readonly [number, string])[] = [
@@ -81,6 +81,7 @@ export const OPEN_STEPS_TIME_AND_KEY: readonly (readonly [number, string])[] = [
[14, 'control'],
[15, 'header binding'],
[16, 'payload identity'],
+ [17, 'open payload'],
[18, 'commit'],
];
@@ -96,19 +97,19 @@ export function openStepGloss(name: string): string {
case 'open sealed control':
return 'Se abre OUTER_TIME_AGE con la firma verificada: exactamente un stanza tlock con la ronda y la cadena del perfil, su cuerpo IBE de 128 bytes y el MAC de la cabecera age.';
case 'policy structure':
- return 'Lo sellado coincide con access_policy: CONTROL_CBOR directamente en time_only; en time_and_key, INNER_ACCESS_AGE con solo stanzas X25519 (§36).';
+ return 'Lo sellado coincide con access_policy: CONTROL_CBOR directamente en time_only; en time_and_key, INNER_ACCESS_AGE con solo stanzas X25519, exactamente 16 en el formato 2 (§36, §39).';
case 'open access layer':
- return 'Se abre INNER_ACCESS_AGE: cada credencial se prueba contra cada stanza X25519, y ninguna puede abrir más de uno.';
+ return 'Se abre INNER_ACCESS_AGE: cada credencial se prueba contra cada stanza X25519, y ninguna puede abrir más de uno. En el formato 2, los stanzas que no abre ninguna credencial son señuelos.';
case 'control':
- return 'CONTROL_CBOR está en su forma canónica y no trae extensiones críticas desconocidas.';
+ return 'CONTROL_CBOR está en su forma canónica, con la versión de esquema del formato de la cápsula, y no trae extensiones críticas desconocidas. En el formato 2 lleva además la longitud del contenido y la regla de relleno (§31).';
case 'header binding':
return 'El header_binding de CONTROL_CBOR coincide con los bytes exactos de PRELUDE y PUBLIC_HEADER (§26): coherencia interna, no autoría.';
case 'payload identity':
- return 'Se recupera I_PAYLOAD, la identidad X25519 que abre PAYLOAD_AGE.';
+ return 'Se recupera I_PAYLOAD, la identidad X25519 que abre PAYLOAD_AGE; en el formato 2, también la longitud del contenido (L), la regla de relleno y la longitud con relleno (P) que de ellas resulta (§29.1).';
case 'open payload':
- return 'Se abre PAYLOAD_AGE con I_PAYLOAD: exactamente un stanza X25519 para R_PAYLOAD, el MAC de la cabecera y cada fragmento STREAM, sin truncar ni datos al final.';
+ return 'Se abre PAYLOAD_AGE con I_PAYLOAD: exactamente un stanza X25519 para R_PAYLOAD, el MAC de la cabecera y cada fragmento STREAM, sin truncar ni datos al final. En el formato 2, el texto en claro mide exactamente P bytes y todo lo que sigue al contenido son ceros; solo se entrega el contenido, nunca el relleno.';
case 'commit':
- return 'Pasos 17 y 18: PAYLOAD_AGE se abre con I_PAYLOAD y age autentica cada fragmento; el texto en claro se entrega solo cuando lo ha autenticado entero (§56).';
+ return 'Todas las comprobaciones del paso 17 se superaron: el contenido se entrega solo entonces, cuando age lo ha autenticado entero (§56).';
default:
return '';
}
diff --git a/src/lib/inspector/opener.test.ts b/src/lib/inspector/opener.test.ts
index 7f44872..1bb6fd2 100644
--- a/src/lib/inspector/opener.test.ts
+++ b/src/lib/inspector/opener.test.ts
@@ -50,11 +50,17 @@ const capsules = listTestdata('fixtures', '.dkc').map((p) => p.slice('fixtures/'
describe('openCapsule', () => {
it('opens every official fixture into memory, with the SHA-256 of its record', async () => {
- expect(capsules.length).toBeGreaterThanOrEqual(5);
+ expect(capsules.length).toBeGreaterThanOrEqual(12);
for (const name of capsules) {
const f = fixture(name);
+ // A time_and_key fixture opens with its .dkk, or with its identities
+ // when it has none (format2_time_and_key_sixteen).
const credentials: Partial =
- f.record.access_policy === 'time_and_key' ? { accessKey: blob(readBytes(`fixtures/${f.record.access_key_file!}`)) } : {};
+ f.record.access_policy !== 'time_and_key'
+ ? {}
+ : f.record.access_key_file !== undefined
+ ? { accessKey: blob(readBytes(`fixtures/${f.record.access_key_file}`)) }
+ : { identities: f.record.identities!.join('\n') };
const r = await openCapsule({ ...f.request, ...credentials });
if (!r.ok) throw new Error(r.problem);
expect(r.opened.error, name).toBeUndefined();
diff --git a/src/lib/inspector/opening.test.ts b/src/lib/inspector/opening.test.ts
index 74ec947..9417c4b 100644
--- a/src/lib/inspector/opening.test.ts
+++ b/src/lib/inspector/opening.test.ts
@@ -9,6 +9,8 @@ import { buildOpenReport, plaintextFileName } from './opening.ts';
interface Record {
release: { round: number; signature: string };
stages: { step: number; name: string; ok: boolean }[];
+ padding?: number;
+ padded_length?: number;
}
const later: () => Instant = () => ({ seconds: 2_000_000_000, nanos: 0 });
@@ -24,7 +26,15 @@ const rows = (r: ReturnType): [number, string, string, s
describe('buildOpenReport', () => {
it('lists the checks of steps 9 to 18 as the reference records them', async () => {
- for (const name of ['time_only', 'time_only_extensions', 'empty_payload']) {
+ for (const name of [
+ 'time_only',
+ 'time_only_extensions',
+ 'empty_payload',
+ 'format2_time_only',
+ 'format2_time_only_bloque256',
+ 'format2_time_only_extensions',
+ 'format2_empty_payload',
+ ]) {
const f = fixture(name);
const r = buildOpenReport(await open(f.dkc, f.options), { length: 1, sha256: 'ab' });
expect(r.opened, name).toBe(true);
@@ -36,17 +46,23 @@ describe('buildOpenReport', () => {
for (const s of r.steps) expect(s.gloss).toBe(openStepGloss(s.name));
expect(r.release).toEqual({ round: f.record.release.round, signature: f.record.release.signature });
expect(r.plaintext).toEqual({ length: 1, sha256: 'ab' });
+ // Format 2 only: the rule and P of the record.
+ expect(r.padding, name).toEqual(
+ f.record.padding === undefined ? undefined : { rule: f.record.padding === 1 ? 'bloque256' : 'reforzado', paddedLength: f.record.padded_length },
+ );
}
});
it('lists the checks of a time_and_key capsule, credentials first', async () => {
- const f = fixture('time_and_key_portable');
- const opened = await open(f.dkc, { ...f.options, accessKeyFile: readBytes('fixtures/time_and_key_portable.dkk') });
- const r = buildOpenReport(opened);
- expect(r.opened).toBe(true);
- expect(r.steps.map((s) => [s.step, s.name])).toEqual(OPEN_STEPS_TIME_AND_KEY);
- expect(r.steps.map((s) => [s.step, s.name])).toEqual(f.record.stages.filter((s) => s.step >= 9).map((s) => [s.step, s.name]));
- expect(r.plaintext).toBeUndefined();
+ for (const name of ['time_and_key_portable', 'format2_time_and_key_portable']) {
+ const f = fixture(name);
+ const opened = await open(f.dkc, { ...f.options, accessKeyFile: readBytes(`fixtures/${name}.dkk`) });
+ const r = buildOpenReport(opened);
+ expect(r.opened, name).toBe(true);
+ expect(r.steps.map((s) => [s.step, s.name]), name).toEqual(OPEN_STEPS_TIME_AND_KEY);
+ expect(r.steps.map((s) => [s.step, s.name]), name).toEqual(f.record.stages.filter((s) => s.step >= 9).map((s) => [s.step, s.name]));
+ expect(r.plaintext).toBeUndefined();
+ }
});
it('shows the extensions of CONTROL_CBOR once it is decoded', async () => {
@@ -102,6 +118,16 @@ describe('buildOpenReport', () => {
expect(r.steps).toHaveLength(OPEN_STEPS_TIME_ONLY.length);
});
+ it('gives the padding only of a format 2 capsule that opened', async () => {
+ const f = fixture('format2_time_only');
+ const dkc = f.dkc.slice();
+ dkc[dkc.length - 1]! ^= 1;
+ const r = buildOpenReport(await open(dkc, f.options));
+ expect(r.failure).toMatchObject({ step: 17, code: 'ERR_INTEGRITY' });
+ expect(r.padding).toBeUndefined();
+ expect(buildOpenReport(await open(f.dkc, f.options)).padding).toEqual({ rule: 'reforzado', paddedLength: 79872 });
+ });
+
it('follows a failure of step 17 with step 18', async () => {
const f = fixture('time_only');
// The last byte of the last STREAM chunk: authentication fails at step 17.
diff --git a/src/lib/inspector/opening.ts b/src/lib/inspector/opening.ts
index e098e5c..12196be 100644
--- a/src/lib/inspector/opening.ts
+++ b/src/lib/inspector/opening.ts
@@ -4,7 +4,7 @@
// only, so this module stays out of the chunk that carries noble.
import type { Opened } from '../dkc/open.ts';
-import { type ErrorCode, TIME_AND_KEY, toHex } from '../dkc/index.ts';
+import { type ErrorCode, paddingName, TIME_AND_KEY, toHex } from '../dkc/index.ts';
import { OPEN_STEPS_TIME_AND_KEY, OPEN_STEPS_TIME_ONLY, openStepGloss, safeFileName } from './format.ts';
import { type ExtensionRow, extensionRow, type StepRow } from './report.ts';
@@ -33,6 +33,12 @@ export interface OpenReport {
/** The extensions of CONTROL_CBOR, once it is decoded (step 14). */
readonly controlExtensions?: readonly ExtensionRow[];
readonly plaintext?: PlaintextFacts;
+ /**
+ * In format 2, once the capsule opened: the padding rule and P, the length
+ * of the plaintext sealed in PAYLOAD_AGE, the content followed by zeros
+ * that step 17 checked and never delivered (spec §29.1).
+ */
+ readonly padding?: { readonly rule: string; readonly paddedLength: number };
}
export function buildOpenReport(o: Opened, plaintext?: PlaintextFacts): OpenReport {
@@ -53,6 +59,8 @@ export function buildOpenReport(o: Opened, plaintext?: PlaintextFacts): OpenRepo
];
}
if (plaintext !== undefined && out.opened) out.plaintext = plaintext;
+ // open sets the rule and P together, at step 16 of a format 2 capsule.
+ if (out.opened && o.padding !== undefined) out.padding = { rule: paddingName(o.padding), paddedLength: o.paddedLength! };
return out;
}
@@ -82,11 +90,9 @@ function openSteps(o: Opened, checks: readonly Check[]): StepRow[] {
);
const expected = o.inspection.header?.policy === TIME_AND_KEY ? OPEN_STEPS_TIME_AND_KEY : OPEN_STEPS_TIME_ONLY;
const last = checks.at(-1)!;
+ // Every check that open records is in the list, step 17 included since
+ // v0.9: the ones after the last recorded did not run.
const at = expected.findIndex(([step, name]) => step === last.step && name === last.name);
- // A check that is not in the list, the failure of step 17, is followed by
- // the steps after its number.
- for (const [i, [step, name]] of expected.entries()) {
- if (at >= 0 ? i > at : step > last.step) rows.push({ step, name, gloss: openStepGloss(name), state: 'not-run' });
- }
+ for (const [step, name] of expected.slice(at + 1)) rows.push({ step, name, gloss: openStepGloss(name), state: 'not-run' });
return rows;
}
diff --git a/src/lib/inspector/report.test.ts b/src/lib/inspector/report.test.ts
index f6dbc15..a6f97a0 100644
--- a/src/lib/inspector/report.test.ts
+++ b/src/lib/inspector/report.test.ts
@@ -30,6 +30,7 @@ function header(o: { crit?: string; non?: string; dk?: string }): Uint8Array {
}
interface FixtureRecord {
+ format: number;
capsule_id: string;
datekey: string;
access_policy: string;
@@ -55,7 +56,7 @@ describe('buildReport', () => {
expect(r.unlock?.rfc3339).toBe(want.unlock_at);
expect(r.unlock?.epochMs).toBe(Date.parse(want.unlock_at));
expect(r.prelude?.hex).toBe(want.prelude);
- expect(r.prelude).toMatchObject({ magic: 'DKC1', version: 1, flags: '0x00', reserved: '0x0000' });
+ expect(r.prelude).toMatchObject({ magic: 'DKC1', format: want.format, flags: '0x00', reserved: '0x0000' });
expect(r.prelude!.payloadOffset + r.prelude!.payloadLength!).toBe(dkc.length);
expect(r.outerStanzas).toEqual(want.outer_stanzas);
expect(r.payloadStanzas).toEqual(want.payload_stanzas);
diff --git a/src/lib/inspector/report.ts b/src/lib/inspector/report.ts
index 06ebf3c..2dc699a 100644
--- a/src/lib/inspector/report.ts
+++ b/src/lib/inspector/report.ts
@@ -10,6 +10,7 @@ import {
type ErrorCode,
type Extension,
type ExtensionRegistry,
+ type Format,
formatRFC3339,
type Inspection,
inspectView,
@@ -95,7 +96,11 @@ export interface PreludeFacts {
/** The 16 prelude bytes in hexadecimal. */
readonly hex: string;
readonly magic: string;
- readonly version: number;
+ /**
+ * VERSION, the capsule format (spec §22): format 1 does not hide the
+ * number of credentials nor the exact length of the content (§55.2, §70).
+ */
+ readonly format: Format;
readonly flags: string;
readonly reserved: string;
readonly publicHeaderLen: number;
@@ -169,7 +174,7 @@ export function buildReport(input: ReportInput): Report {
const p: { -readonly [K in keyof PreludeFacts]: PreludeFacts[K] } = {
hex: toHex(bytes.subarray(0, DKC_PRELUDE_SIZE)),
magic: 'DKC1',
- version: bytes[4]!,
+ format: r.prelude.format,
flags: hex8(bytes[5]!),
reserved: `0x${toHex(bytes.subarray(6, 8))}`,
publicHeaderLen: r.prelude.publicHeaderLen,
diff --git a/testdata/README.md b/testdata/README.md
index e361aaa..64eb25b 100644
--- a/testdata/README.md
+++ b/testdata/README.md
@@ -1,7 +1,7 @@
# DateKeys test data
Official vectors, fixtures and corpora of the DateKeys Protocol Specification
-v0.8.2, generated by the reference implementation. Another implementation
+v0.9, generated by the reference implementation. Another implementation
consumes them as they are: this file documents every format, so that no Go code
has to be read. The rules that decide each verdict are in the specification;
this file points to them, and states only what belongs to the files
@@ -12,9 +12,12 @@ go run ./internal/testkit/genfixtures -out testdata
```
regenerates everything except the `.dkc` and `.dkk` fixtures, which are
-generated once and frozen (spec §67). The local gate (`scripts/check.sh`) and CI
-run it and fail if any committed file changes: every file below is exactly what
-the implementation computes today.
+generated once and frozen (spec §67). The records of each fixture
+(`.json`, `.dkk.json`, `.inspect.json`) are recomputed from
+its frozen bytes, so the format 1 fixtures of v0.8.2 carry `"spec": "0.9"` and
+the fields added since. The local gate (`scripts/check.sh`) and CI run it and
+fail if any committed file changes: every file below is exactly what the
+implementation computes today.
Conventions for every file:
@@ -25,25 +28,45 @@ Conventions for every file:
pre-unlock checks (`datekeys inspect`, `capsule.Inspect`): no network, no
secret.
- The `spec` field names the version of the specification.
+- `format` is a capsule format, the `VERSION` of the PRELUDE (spec §22): 1 or
+ 2. A writer produces format 2 only; format 1, that of v0.8.2, is still read
+ (spec §70).
| File | Content | Spec |
|---|---|---|
| `vectors/profile_quicknet.json` | Quicknet Provider Profile: its canonical CBOR and `profile_hash` | §11, §12 |
| `vectors/quicknet_rounds.json` | date → round resolution | §15, §16, §65 |
| `vectors/dk1.json` | canonical `dk1_` strings, and rejected encodings with their code | §18, §19, §66 |
-| `vectors/cbor.json` | the CBOR profile, and one block of vectors per schema | §58, CDDL |
+| `vectors/cbor.json` | the CBOR profile, and one block of vectors per schema, CONTROL_CBOR in both formats | §58, CDDL |
| `vectors/tlock_ibe.json` | H2 of the tlock IBE: the serialization of an element of GT | §63 step 11 |
-| `vectors/mutations.json` | the mutation corpus: 33 mutations of §64 and further cases | §63, §64 |
-| `vectors/inspect_differential.json` | 1825 mutations of the fixtures with the verdict of steps 1 to 8 | §63 |
+| `vectors/padding.json` | the padding of format 2: P for each content length L, and the length of PAYLOAD_AGE | §29.1 |
+| `vectors/mutations.json` | the mutation corpus: the 88 mutations of §64 and further cases | §63, §64 |
+| `vectors/inspect_differential.json` | 4380 mutations of the fixtures with the verdict of steps 1 to 8 | §63 |
| `fixtures/.dkc`, `.json` | official capsules and every intermediate value | §67 |
| `fixtures/.dkk`, `.dkk.json` | official access keys | §68 |
-| `fixtures/.plaintext` | the plaintext of each capsule | §67 |
+| `fixtures/.plaintext` | the content of each capsule, what the reader delivers: in format 2, without its padding | §67 |
| `fixtures/.inspect.json` | the exact output of `datekeys inspect -json` for each `.dkc` | §63 |
-The five official capsules are `time_only`, `time_only_extensions`,
-`time_and_key_portable`, `time_and_key_recipients` and `empty_payload`. The
-release that opens each one, a published Quicknet signature, is in its
-`.json`, so they all decrypt offline.
+There are twelve official capsules. Five are in format 1, the fixtures of
+v0.8.2, kept for compatibility: `time_only`, `time_only_extensions`,
+`time_and_key_portable`, `time_and_key_recipients` and `empty_payload`. Seven
+are in format 2:
+
+| Fixture | Policy | Credentials | L | Padding code | P |
+|---|---|---|---|---|---|
+| `format2_time_only` | `time_only` | — | 78000 | 2, reforzado | 79872 |
+| `format2_time_only_bloque256` | `time_only` | — | 78000, the same content | 1, bloque256 | 78080 |
+| `format2_empty_payload` | `time_only` | — | 0 | 2 | 256 |
+| `format2_time_only_extensions` | `time_only` | — | 34 | 2 | 256 |
+| `format2_time_and_key_portable` | `time_and_key` | a portable `.dkk`; 15 dummies | 46 | 2 | 256 |
+| `format2_time_and_key_recipients` | `time_and_key` | a portable `.dkk` and three X25519 identities; 12 dummies | 41 | 2 | 256 |
+| `format2_time_and_key_sixteen` | `time_and_key` | sixteen X25519 identities; no dummy | 41 | 2 | 256 |
+
+The first two have a P above 64 KiB, so their PAYLOAD_AGE has two STREAM
+chunks. `format2_time_only_extensions` carries a noncritical PUBLIC_HEADER
+extension and a noncritical CONTROL_CBOR extension. The release that opens each
+capsule, a published Quicknet signature, is in its `.json`, so they all
+decrypt offline.
## Edited files
@@ -51,7 +74,7 @@ release that opens each one, a published Quicknet signature, is in its
edits of a base file, not as its full bytes:
```json
-{ "base": "time_only.dkc", "edits": [[4, 1, "02"]] }
+{ "base": "time_only.dkc", "edits": [[4, 1, "03"]] }
```
- `base` is a file of `testdata/fixtures`. In `mutations.json` it may be absent:
@@ -69,7 +92,7 @@ edits of a base file, not as its full bytes:
```json
{
- "spec": "0.8.2",
+ "spec": "0.9",
"walk": { "max_depth": 3, "max_len": 64 },
"accept": [ { "name": "uint 2^53 eight bytes", "hex": "1b0020000000000000", "value": "9007199254740992" } ],
"reject": [ { "name": "tag", "hex": "c101", "error": "ERR_NON_CANONICAL_CBOR" } ],
@@ -116,7 +139,12 @@ Each vector is one encoded object:
no extension is known: a header naming an unpinned profile is valid here
(`ERR_UNKNOWN_PROFILE` comes from the registry at step 4), and critical
extensions are not checked here.
- - `control_cbor`: CONTROL_CBOR (§31).
+ - `control_cbor`: CONTROL_CBOR (§31), decoded for the capsule format given
+ by `format`, 1 when the field is absent: the schema version must equal it
+ (another is `ERR_UNSUPPORTED_VERSION`, layer 2), and keys 6,
+ `payload_length`, and 7, `padding`, are required in format 2 and not
+ defined in format 1. The names of the format 2 vectors start with
+ "format 2: ".
- `dkk_body`: BODY_CBOR of a `.dkk` (§41), without the 12-byte DKK1
prelude.
- `block` names the schema the vector exercises: the same as `schema`, or
@@ -140,6 +168,15 @@ other type (text, `null`, integer, map, array, tag, indefinite length), 64 and
U+10000 in UTF-8 byte order (valid) and in UTF-16 order (invalid), and
`extension_version` 2^32 − 1 (valid), 2^32 and 2^53 (invalid).
+The `control_cbor` block has, besides, a key 6 in format 1, where it is not
+defined, and in format 2: the minimal control of 103 bytes (L = 0),
+`payload_length` 78000, 2^32 + 1 and L_MAX = 2^53 − 2^46 (valid), L_MAX + 1,
+2^53 and 2^64 − 1 (invalid), a `payload_length` of 7 or 9 bytes, as an
+unsigned integer or with a length not in its shortest form, `padding` 1
+(valid), 0, 3, 257 and as a byte string, a missing key 6 or 7, keys 6 and 7
+out of order, an unknown key 8, and schema versions 1 and 3
+(`ERR_UNSUPPORTED_VERSION`).
+
#### Implementation limits
The vectors apply the implementation limits of the reference that spec §74
@@ -160,7 +197,7 @@ the flow.
```json
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "…",
"vectors": [
{ "name": "H2(e(G1, G2)), the generators of G1 and G2", "g1": "97f1…", "g2": "93e0…", "gt": "0f41…", "h2": "cb87319f24560b5231579a09ad79f12e" }
@@ -185,6 +222,41 @@ serialization at once. The same 576 bytes with the twelve coordinates of Fp in
reverse order, c0 first at every level as `Fp12.toBytes` of `@noble/curves`
writes them, give `0118eea9d5971745f71e3c94926f1717` and another FK_TIME.
+## `vectors/padding.json`
+
+The padding of the payload of a format 2 capsule, spec §29.1: for each content
+length L, the length P of the plaintext of PAYLOAD_AGE with each code, and the
+length of PAYLOAD_AGE.
+
+```json
+{
+ "spec": "0.9",
+ "l_max": 8936830510563328,
+ "vectors": [
+ { "l": 78000, "bloque256": 78080, "reforzado": 79872, "payload_age_bloque256": 78296, "payload_age_reforzado": 80088, "e": 16, "s": 5, "last_bits": 11 }
+ ],
+ "rejected": [8936830510563329, 9007199254740992]
+}
+```
+
+- `l`: L, the length of the content.
+- `bloque256`: P with code 1, 256 · ⌈L / 256⌉, at least 256. `reforzado`: P
+ with code 2, the larger of that and Padmé.
+- `payload_age_bloque256`, `payload_age_reforzado`: the length of PAYLOAD_AGE
+ for each P, 184 + P + 16 · max(1, ⌈P / 65536⌉): an age header of one X25519
+ stanza (168 bytes), the 16-byte nonce, and the P bytes in STREAM chunks of
+ 64 KiB with a 16-byte tag each.
+- `e`, `s`, `last_bits`: the intermediate values of Padmé, E = bitlen(L) − 1,
+ S = bitlen(E) and E − S; only for L > 256, and informative.
+- `l_max`: L_MAX = 2^53 − 2^46, the largest L.
+- `rejected`: lengths above L_MAX, which a writer rejects and which, as key 6
+ of a control, are `ERR_NON_CANONICAL_CBOR`.
+
+Every number is below 2^53, so a JSON number holds it exactly. The lengths
+include both sides of the boundaries where 32-bit arithmetic breaks
+(2^31 − 2^25, 2^32 − 2^26, 2^32) and 2^49 − 1, the first L for which a
+floating-point logarithm gives an E one too large (P does not change).
+
## `vectors/mutations.json`
The mutation corpus of spec §64, as frozen data. Each case is a `.dkc`, what
@@ -195,7 +267,7 @@ reading flow (`capsule.Open`, §63) must fail.
{
"name": "version changed",
"spec": true,
- "dkc": { "base": "time_only.dkc", "edits": [[4, 1, "02"]] },
+ "dkc": { "base": "time_only.dkc", "edits": [[4, 1, "03"]] },
"release": { "round": 1000, "signature": "b446…" },
"now": "2023-08-23T15:59:24Z",
"registry": "default",
@@ -207,8 +279,12 @@ reading flow (`capsule.Open`, §63) must fail.
```
- `name`: unique, stable.
-- `spec`: true for the 33 mutations listed in spec §64 (the first 33 cases),
- false for the further cases of the reference.
+- `spec`: true for the 88 mutations listed in spec §64, false for the further
+ cases of the reference. The cases come in this order: the 33 mutations of
+ the first two lists of §64 on the format 1 fixtures (cases 1 to 33), 32
+ further cases (34 to 65), the same 33 mutations on the format 2 fixtures,
+ named "format 2: …" (66 to 98), the 22 of the third list (99 to 120), and 5
+ further cases (121 to 125).
- `dkc`: the capsule, as edits of a fixture (see above). The reader gets it as a
seekable file, so that the `capsule_digest` of an offered `.dkk` is checked
before any release request (spec §63 step 9.a).
@@ -248,7 +324,7 @@ reading flow (`capsule.Open`, §63) must fail.
Every case reproduces offline: the recorded release stands in for the network.
A reader that implements only steps 1 to 8 can replay every case whose `step` is
-at most 8: 31 cases, 13 of them from §64. Steps 1 to 8 are summarised in "The
+at most 8: 44 cases, 26 of them from §64. Steps 1 to 8 are summarised in "The
checks of steps 1 to 8" below.
### Credentials and the release: step 9
@@ -273,8 +349,8 @@ file (steps 11, 13 and 17), are those of spec §63 as well. In this corpus:
### Point encodings: steps 10 and 11
-Ten cases of §64 test the canonical point encoding of spec §12.2 and the tlock
-stanza body `U || V || W` of spec §63 step 11:
+Ten cases of §64, in each format, test the canonical point encoding of spec
+§12.2 and the tlock stanza body `U || V || W` of spec §63 step 11:
- five edit the tlock stanza body of `time_only.dkc`: U with c0 + p, U the
point at infinity (the byte 0xc0, then zeros), U with the infinity flag
@@ -292,6 +368,34 @@ stanza body `U || V || W` of spec §63 step 11:
- the last one serves the negated signature with U with c0 + p: step 10
comes first.
+In format 2 the same ten edit `format2_time_only.dkc` and its release, and the
+x + p case has a frozen format 2 capsule for round 1004.
+
+### Format 2: the third list of §64
+
+The 22 cases of the third list of §64 test what format 2 adds:
+
+- the format against the rest of the capsule, with the other `VERSION`, a
+ public byte (§22, §76): a format 1 `time_and_key` capsule of one stanza
+ relabeled format 2 fails at step 12, and the other three relabelings at step
+ 14, where the schema version of the control is not the format;
+- the 16 stanzas of INNER_ACCESS_AGE: 15, 17, two for one recipient, and an
+ identity that opens none of them, at steps 12 and 13;
+- keys 6 and 7 of CONTROL_CBOR, at step 14;
+- the plaintext of PAYLOAD_AGE, at step 17: a padding byte that is not zero,
+ a plaintext of P − 1 or P + 256 bytes or without its padding, and a control
+ that declares another code or another L.
+
+Each derives from a fixture without randomness. What it changes is sealed again
+with the file keys that the release and the credentials of the fixture open,
+FK_TIME and FK_ACCESS, or that its I_PAYLOAD unwraps, FK_PAYLOAD, and with the
+nonces of the fixture; a stanza it adds takes its ephemeral scalar from a fixed
+seed. So each case is a `base` with edits, and regenerates byte for byte. A
+case that changes a `time_and_key` capsule offers the identity of its `.dkk`,
+because the `.dkk` itself would fail at step 9.a: its `capsule_digest` no
+longer matches. The last five cases of the corpus offer the `.dkk` and show
+that.
+
## The checks of steps 1 to 8
`mutations.json` and `inspect_differential.json` follow the rules of the
@@ -302,7 +406,7 @@ ends the flow, and within one object the first failing layer decides the code
| Step | Rules | Spec |
|---|---|---|
-| 1, 2 | magic, truncated prelude, framing version, FLAGS and RESERVED, `PUBLIC_HEADER_LEN` in 1 to 1048576 and `SEALED_CONTROL_LEN` in 1 to 67108864 | §22, §23 |
+| 1, 2 | magic, truncated prelude, `VERSION` 1 or 2 (the format), FLAGS and RESERVED, `PUBLIC_HEADER_LEN` in 1 to 1048576 and `SEALED_CONTROL_LEN` in 1 to 67108864 | §22, §23 |
| 3 | the PUBLIC_HEADER bytes are present | §23 |
| 4 | PUBLIC_HEADER: layers 2 to 4, the `public_header` decoder of the schema vectors, then the pinned profile of the DateKey and the critical extensions; with no extension known, every `critical_extensions` array fails | §63, §69.1 |
| 5 | the SEALED_CONTROL bytes are present, then its age header, parsed within `SEALED_CONTROL_LEN` bytes: malformed is `ERR_INTEGRITY`, one tlock stanza is required | §28.1 |
@@ -316,12 +420,14 @@ implementation limits. No case of these corpora depends on them.
## `vectors/inspect_differential.json`
-A differential corpus of the pre-unlock checks: 1825 deterministic mutations of
-the five official `.dkc` fixtures, with the verdict of steps 1 to 8 of §63 as
-the reference computes it (`capsule.Inspect` with the `default` registry, no
-extension known, no network, no secret), by the rules that "The checks of
-steps 1 to 8" above points to. The file repeats the format below in its
-`format` field.
+A differential corpus of the pre-unlock checks: 4380 deterministic mutations of
+the twelve official `.dkc` fixtures, 365 of each, with the verdict of steps 1
+to 8 of §63 as the reference computes it (`capsule.Inspect` with the `default`
+registry, no extension known, no network, no secret), by the rules that "The
+checks of steps 1 to 8" above points to. The first 1825, those of the five
+format 1 fixtures, are the corpus of v0.8.2 unchanged; the seven format 2
+fixtures follow. The `format` field of the file describes the layout below in
+words; it is not a capsule format.
```json
{
@@ -364,6 +470,7 @@ the `default` registry.
| Field | Content |
|---|---|
| `file` | the `-in` argument, `.dkc` |
+| `format` | the capsule format, once step 2 has passed |
| `capsule_id` | hex, once step 4 has decoded the header |
| `datekey`, `profile`, `round` | the canonical `dk1_` string, its profile and round |
| `unlock_at` | the round time of the DateKey, RFC 3339 in UTC, once step 7 passes |
@@ -384,11 +491,17 @@ at least `step`, `name`, `ok` and `error`, and every other field.
- `vectors/dk1.json`: valid `vectors` with `network`, `round`,
`canonical_json`, `base64url` and `dk1`; invalid ones with `input` and the
`error` code (`accepted` would mean the input decodes).
-- `fixtures/.json`: for each `.dkc`, its SHA-256, the release that opens
- it, the hex of the prelude, PUBLIC_HEADER and CONTROL_CBOR, the DateKey,
- `capsule_id`, `header_binding`, `payload_identity` (I_PAYLOAD, a test
- secret), the visible stanzas of each age file, the identities or `.dkk` that
- open it, the exact extension data, and the result of every step of §63.
+- `fixtures/.json`: for each `.dkc`, its `format`, its SHA-256, the
+ release that opens it, the hex of the prelude, PUBLIC_HEADER and
+ CONTROL_CBOR, the DateKey, `capsule_id`, `header_binding`,
+ `payload_identity` (I_PAYLOAD, a test secret), the visible stanzas of each
+ age file, the identities or `.dkk` that open it, `payload_length` (L), the
+ exact extension data, and the result of every step of §63. In format 2 it
+ adds `padding` (the code) and `padded_length` (P) and, for `time_and_key`,
+ `access_key_stanza` and `identity_stanzas`: the index, from 0, in
+ `inner_stanzas` of the stanza that the `.dkk` and each identity of
+ `identities`, in order, open. The other stanzas are dummies; the official
+ vectors are the only place where that is recorded (spec §39).
- `fixtures/.dkk.json`: for each `.dkk`, its SHA-256, `credential_id`,
`capsule_id`, `access_type`, `access_material` (a test secret),
`capsule_digest`, extensions and the capsule it opens.
diff --git a/testdata/SOURCE.json b/testdata/SOURCE.json
index 226da50..f500c09 100644
--- a/testdata/SOURCE.json
+++ b/testdata/SOURCE.json
@@ -1,40 +1,73 @@
{
"module": "g.activething.com/go/DateKeys",
- "commit": "9ac9cd952f048a8c034d59a52b3c7baeffea6ade",
+ "commit": "7e2d83c0d119c4a8934e609abb3f5818431cc4ad",
"files": {
- "README.md": "23d7cd2914c2f2d30aad49ce09119a7dd65383bc0011d494dbad8cfe724f68c5",
+ "README.md": "73da918772b5bbad1931c541edf44d852c09c13a98925bfc4766d9f663cce27b",
"fixtures/empty_payload.dkc": "871e9bf05b52bbae17f3adfbbf97b46e7f0e53aa8f57bcaa506e43f36f53a9d4",
- "fixtures/empty_payload.inspect.json": "dd2b21faefdfe3aa59b5eeef9130a6896070ae30a2b16933f3aefd146828207e",
- "fixtures/empty_payload.json": "490a6e7f7acc882bcb956b297ad8c817d7b21da29e8d4c4a2cd31c852707eee0",
+ "fixtures/empty_payload.inspect.json": "373e5d012b023ad58bbb54cbdffe0bed9e50c637438a4083ddb74d5414c59f59",
+ "fixtures/empty_payload.json": "c60edf441302c4aa92389fe4cc8c1c220eacedad7df8d7a0092192b551a0a7e3",
"fixtures/empty_payload.plaintext": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "fixtures/format2_empty_payload.dkc": "7aea2b5aa48b1a46053716f733d50fab9cd0b80b1be67631bcc06c5bb765dc21",
+ "fixtures/format2_empty_payload.inspect.json": "d0bb7356d3970986e6b197640f0b3b38abe9fabf1740b745171b358aa28903ff",
+ "fixtures/format2_empty_payload.json": "06d956558f3cbd76163ba3e5222409de313911385a6892390ea51fc391412849",
+ "fixtures/format2_empty_payload.plaintext": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "fixtures/format2_time_and_key_portable.dkc": "600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "fixtures/format2_time_and_key_portable.dkk": "095b7bc516a22bf0c2366f0af3cd48bfe857a2354d6e2a9b285278b95e450fe0",
+ "fixtures/format2_time_and_key_portable.dkk.json": "49cab26b567a5b4dfc92c7e1e521c1d0da9435b67129886ece1a6cd39aa3bbff",
+ "fixtures/format2_time_and_key_portable.inspect.json": "522c9a98e5911c86f5f24f278971cf7c7588f6c88aaede3dd1129ee4e042868a",
+ "fixtures/format2_time_and_key_portable.json": "2c662bcb923fd3d4c6dc2b4a99e01ed9fa29d0089c80f71de994a76452f55046",
+ "fixtures/format2_time_and_key_portable.plaintext": "937492203d207d6fe36161b8696bf1f05b8b4cc56d855c44853f4b76aad3a05b",
+ "fixtures/format2_time_and_key_recipients.dkc": "1a44fd8708c92e2e0a10cfcb1d864a71331ea9af25d97e1a42e969dc898959e3",
+ "fixtures/format2_time_and_key_recipients.dkk": "2ad99b1556086ec311d7f0b3bd3aaba05e75f45c4fa22490b0d5e8bb0b1a222e",
+ "fixtures/format2_time_and_key_recipients.dkk.json": "94dc5662bc517994326c7d7c6f2599be53bf9705ce6de12c0c3354797be8b544",
+ "fixtures/format2_time_and_key_recipients.inspect.json": "d975a9eddd45f5d59618ea2455d574d807e57daf08585e840d07986f261bf099",
+ "fixtures/format2_time_and_key_recipients.json": "b2c995a19cd0c7e76baccfe8abdffda1ae7da0235845818266914d71976a7b8f",
+ "fixtures/format2_time_and_key_recipients.plaintext": "0e9fd50e98a85953aa9cf07a11ee3c62bb3d7622f344f1c6ce744d1ed111659f",
+ "fixtures/format2_time_and_key_sixteen.dkc": "7aaac5c18f216bf53df326ecc817179640a53408cf25dfd50488910a762dc381",
+ "fixtures/format2_time_and_key_sixteen.inspect.json": "492cd0b0dca0030df9332b098d22b4f6aa4adfb57d5540de5325e3e6d5aa3667",
+ "fixtures/format2_time_and_key_sixteen.json": "d7cec9027f5a7485234a332e739a10b4243074ddc55b5350d76735d7b1e4732a",
+ "fixtures/format2_time_and_key_sixteen.plaintext": "e5abfb7b5fdbf297277b6cc4729c15d85435e890b653c2e2342b7031ecd9eab9",
+ "fixtures/format2_time_only.dkc": "f5a40ac6b8a08a0c12db6114c2bca23522d6a77b512b509a217fb15f367813c4",
+ "fixtures/format2_time_only.inspect.json": "40a8683f5204c7b6369558e4775ae6bb6fed978097e9e660de64c06c167b043e",
+ "fixtures/format2_time_only.json": "ad7560d87cb200460fa3ca25b4b6b875e9a019841b5c2ef9e9639fcff2e93fcd",
+ "fixtures/format2_time_only.plaintext": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
+ "fixtures/format2_time_only_bloque256.dkc": "aae769c30d04920801d8b293d30864fbe223c9c9353ec2b4907a1ee1996e39f9",
+ "fixtures/format2_time_only_bloque256.inspect.json": "767766414ad547f0ba95b40059e14b62c81b5489a2afcbc683bf227334d61be7",
+ "fixtures/format2_time_only_bloque256.json": "1dd19a7d471d9a1a8124c05b6356d5eba3d97fb3f3848721468670ce07df2b8e",
+ "fixtures/format2_time_only_bloque256.plaintext": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
+ "fixtures/format2_time_only_extensions.dkc": "fb406100d5703a2e888983b3175ed34a09a34469cc722256e5cf535dd728fbe9",
+ "fixtures/format2_time_only_extensions.inspect.json": "1595d793c1d35bfdaa36576b75f53d734a9e07c2a8a12036295dbaee7f5a7f5a",
+ "fixtures/format2_time_only_extensions.json": "c39009b4a45700145a6402941651bed430374009e9779f4f274d81e8357032bc",
+ "fixtures/format2_time_only_extensions.plaintext": "1129768e195e2f1e50b7a6f926b6eebef120212c29b5642c8a662c503b2a9131",
"fixtures/time_and_key_portable.dkc": "2e97878078bae6358037a9c264f379a3cbe839f767d69836b0343f35657b2972",
"fixtures/time_and_key_portable.dkk": "e528fa2c832c91119f0684bb9d6fb3c4c2d0d55183482890e7c4fe92f668426a",
- "fixtures/time_and_key_portable.dkk.json": "24eab4758e4abdb09e2316e0330ac16872dd021612eb32c40fac607f80f10a18",
- "fixtures/time_and_key_portable.inspect.json": "a80724f68facb94be3d64ec2587dd547be38b9e492e9c30149b1c6cf2753ba01",
- "fixtures/time_and_key_portable.json": "258fb17f95a0dbf074d017bffac6415b2982dffc7895a3b31a1ccd9132d6a5fc",
+ "fixtures/time_and_key_portable.dkk.json": "f6bcec4ba51dac7cfee8b4056ded18b215f2d71745f5baca63988e2d76759cea",
+ "fixtures/time_and_key_portable.inspect.json": "238c1f8ca6a6bf69f20bf26f5676e89a0b07e83b4362628560fc2f7522a202c9",
+ "fixtures/time_and_key_portable.json": "03a3aca45511907939b52abbf7565385a5351eac6e5185f518b6413e6459b765",
"fixtures/time_and_key_portable.plaintext": "937492203d207d6fe36161b8696bf1f05b8b4cc56d855c44853f4b76aad3a05b",
"fixtures/time_and_key_portable_extension.dkk": "0bf463a7c65627b7dda2234d728df89ec5b835816a2a37b91497d8fecc5ea548",
- "fixtures/time_and_key_portable_extension.dkk.json": "2d5d61beb89e3de76fae3400f38eff74f251e6c569c2f11daf2950a74bea8fb3",
+ "fixtures/time_and_key_portable_extension.dkk.json": "8bc9cc6abf4e03f74bcf90f0065a77fd2ec1885aa73366a7b21ac9b8b7accc15",
"fixtures/time_and_key_recipients.dkc": "69ac110380f5d768b5b6afaa157a50ed17d8ceccfbd4604ffa5b6da38539b635",
"fixtures/time_and_key_recipients.dkk": "19f6c47150c3194712d454f43c7392b7344e6b4e7b074d83e9ca5f563a8e072f",
- "fixtures/time_and_key_recipients.dkk.json": "d5a0c241a1fbef52bcb848b2531bda4020d9a7882bfc4f49755c61ae97a4d6bc",
- "fixtures/time_and_key_recipients.inspect.json": "12c7f2200474c383ad93de7b2835dc60b4d7486926ce02955ac3ae97fc23952d",
- "fixtures/time_and_key_recipients.json": "ebc77cd00ff52e08743976558605159cc0cc3747399c3ce05dc46f7cafb35b2d",
+ "fixtures/time_and_key_recipients.dkk.json": "b6093c44cf7a696f24d9681c9a3cde7f4f65f9fb558a7ab3ac70c001fb671b5c",
+ "fixtures/time_and_key_recipients.inspect.json": "4b32c63d18febe0772837fbcd75a0c971e31378bf799201b720a9d32bdcd8c2b",
+ "fixtures/time_and_key_recipients.json": "ed6e8f4ffce5b2e56f5118275f2dc2c9ad00b05d6af779863f3503f295fffbf8",
"fixtures/time_and_key_recipients.plaintext": "0e9fd50e98a85953aa9cf07a11ee3c62bb3d7622f344f1c6ce744d1ed111659f",
"fixtures/time_only.dkc": "99e915810d595f1092700b728f5e5081d78efe83f5343e76325b1bcc2c33ccf2",
- "fixtures/time_only.inspect.json": "67a95a7ff711ec830fcd53b9328d5cd7c70bb34a205bc72ae99610c22ed8a6f4",
- "fixtures/time_only.json": "9ea5576bfa237066b92ad07e5f1c26d6d782e975edd071a8728b21bc7998afaa",
+ "fixtures/time_only.inspect.json": "a4d45f945d6ba6616c01e120ac1133785e5279fea7dcab706b5feee287be8884",
+ "fixtures/time_only.json": "9ec7341c52a297b92b95198f3c64930fbab26b9867da40b50d0ebba9a824d8b4",
"fixtures/time_only.plaintext": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
"fixtures/time_only_extensions.dkc": "0446c9b73e267adcb24e5cc89afba2544a386ec9a050016e06517a4a57aa2085",
- "fixtures/time_only_extensions.inspect.json": "168d61d22e41e55a94d5f057afd2c4dd2ceef2a5bd4c5abaedea76c6faa29ab9",
- "fixtures/time_only_extensions.json": "117636691ab04d0a6274d09de7c7763fe99595a46dae9c42d066f118f816e85b",
+ "fixtures/time_only_extensions.inspect.json": "6f957b028da8a4a495b5e951ced0b91e0678128dac4e962b02d024b9439a0ba1",
+ "fixtures/time_only_extensions.json": "5fcd7c5363c4dd0b0f6e5dc79d35ba65acb8d0993f1c5ee4a66a83e6ef8eb8df",
"fixtures/time_only_extensions.plaintext": "1129768e195e2f1e50b7a6f926b6eebef120212c29b5642c8a662c503b2a9131",
- "vectors/cbor.json": "444fe6104476fbcda91e1873c12752186dbf7e55ad0769e1eb0678ed9673c9d6",
- "vectors/dk1.json": "3a345330fed244662b0a335f0a6d5581c200ceeb09bfb74c4d1c342daea72864",
- "vectors/inspect_differential.json": "fe207b67d307e3ae7a78295b7a882d98669adbf498b725443ab4757eb9da03f7",
- "vectors/mutations.json": "c4599d1ecc4ea5dcc64e3d963db0714b28661db8daf8277346dc8238218e7c33",
- "vectors/profile_quicknet.json": "4f9de60475d0807aa580f59cf3e6df38cba2a55a62f590aefa2a55753ddb0055",
- "vectors/quicknet_rounds.json": "22c764aac454ce320daf7e65b9494ff2d207cac974c68d07e84f4ec18c3ed920",
- "vectors/tlock_ibe.json": "fc9ef1a5817928ffa2b4e81592077d9385b19d7622e4cf7ed9100f3f6727f7d3"
+ "vectors/cbor.json": "1a31607ec896d9a6f91b6e1e1a526c806c208b475d77dfd99264fd7bdb1e6274",
+ "vectors/dk1.json": "6d0daf69a68f8d8a2cf84ba117865099d9b9a875ebb400de1b7ae00d42fea1e3",
+ "vectors/inspect_differential.json": "4afa024b35b9fa0b50b6fa015767092ddb47a70427b920c94a0d3ea82fc35483",
+ "vectors/mutations.json": "f6de056348648209ed548774fdae6aee67d57c615850bc6178db7b0e9e380d1a",
+ "vectors/padding.json": "15a12a93938d914b44f0d48a4db51f639b70a690a3032352532eea56129aba2f",
+ "vectors/profile_quicknet.json": "94b0bcf2ed158bc0d1bea254b124d55c57347773a97a2a506fe980c36a5b44c5",
+ "vectors/quicknet_rounds.json": "8822a40283d0cc081d5f10834655e554be92f85cf618bd392b36eeba245000a6",
+ "vectors/tlock_ibe.json": "fe091d8ff68a720976005891073354dc0ec045257f6a782cdc06e58340c69fd3"
}
}
diff --git a/testdata/fixtures/empty_payload.inspect.json b/testdata/fixtures/empty_payload.inspect.json
index 546e878..35430a9 100644
--- a/testdata/fixtures/empty_payload.inspect.json
+++ b/testdata/fixtures/empty_payload.inspect.json
@@ -1,5 +1,6 @@
{
"file": "empty_payload.dkc",
+ "format": 1,
"capsule_id": "ab10174561a9a19a6d9dc9ab1ef59c66",
"datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
"profile": "datekeys:quicknet:v1",
diff --git a/testdata/fixtures/empty_payload.json b/testdata/fixtures/empty_payload.json
index fc0daf1..58d642a 100644
--- a/testdata/fixtures/empty_payload.json
+++ b/testdata/fixtures/empty_payload.json
@@ -1,6 +1,7 @@
{
"description": "time_only capsule with an empty payload",
- "spec": "0.8.2",
+ "spec": "0.9",
+ "format": 1,
"file": "empty_payload.dkc",
"sha256": "871e9bf05b52bbae17f3adfbbf97b46e7f0e53aa8f57bcaa506e43f36f53a9d4",
"release": {
@@ -34,6 +35,7 @@
],
"control_cbor": "a40070646174656b6579732d636f6e74726f6c010102582033186a4f03d79eb8e28dbb82d2538ada45b68cd4f2ed6d17fa87b211e54f4d58035820cd5ca142d51386860bf4ae4ae16740d498ef70ff534084acf5f4005b74f278c3",
"payload_identity": "cd5ca142d51386860bf4ae4ae16740d498ef70ff534084acf5f4005b74f278c3",
+ "payload_length": 0,
"plaintext_file": "empty_payload.plaintext",
"plaintext_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"stages": [
@@ -112,6 +114,11 @@
"name": "payload identity",
"ok": true
},
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
{
"step": 18,
"name": "commit",
diff --git a/testdata/fixtures/format2_empty_payload.dkc b/testdata/fixtures/format2_empty_payload.dkc
new file mode 100644
index 0000000..22eca83
Binary files /dev/null and b/testdata/fixtures/format2_empty_payload.dkc differ
diff --git a/testdata/fixtures/format2_empty_payload.inspect.json b/testdata/fixtures/format2_empty_payload.inspect.json
new file mode 100644
index 0000000..2a1924a
--- /dev/null
+++ b/testdata/fixtures/format2_empty_payload.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_empty_payload.dkc",
+ "format": 2,
+ "capsule_id": "1a6c88f0fa7408f649cf64b929cb9289",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 1001,
+ "unlock_at": "2023-08-23T15:59:27Z",
+ "access_policy": "time_only",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=458"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=1a6c88f0fa7408f649cf64b929cb9289 datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0 policy=time_only profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 1001, unlock at 2023-08-23T15:59:27Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 1001, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_empty_payload.json b/testdata/fixtures/format2_empty_payload.json
new file mode 100644
index 0000000..00542b4
--- /dev/null
+++ b/testdata/fixtures/format2_empty_payload.json
@@ -0,0 +1,130 @@
+{
+ "description": "format 2 time_only capsule with an empty content: L = 0, P = 256",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_empty_payload.dkc",
+ "sha256": "7aea2b5aa48b1a46053716f733d50fab9cd0b80b1be67631bcc06c5bb765dc21",
+ "release": {
+ "round": 1001,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
+ },
+ "prelude": "444b43310200000000000079000001ca",
+ "public_header": "a5006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
+ "capsule_id": "1a6c88f0fa7408f649cf64b929cb9289",
+ "access_policy": "time_only",
+ "structure": "time_only",
+ "unlock_at": "2023-08-23T15:59:27Z",
+ "header_binding": "ed6829f4e14eb6fd5545e0dfda3157d990b0834d389e4f24c1cf4ccf8d92770a",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "1001",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "r+hN8l7f+wQNS3mitbKOLzfTUb9bOwPt1jtq1jTWURU"
+ ]
+ }
+ ],
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c0102025820ed6829f4e14eb6fd5545e0dfda3157d990b0834d389e4f24c1cf4ccf8d92770a035820f912fef00856ede6bfe4931376ae8108ebfcb3fd7c9b0e0c2cd15d8be3b2dfaf064800000000000000000702",
+ "payload_identity": "f912fef00856ede6bfe4931376ae8108ebfcb3fd7c9b0e0c2cd15d8be3b2dfaf",
+ "payload_length": 0,
+ "padding": 2,
+ "padded_length": 256,
+ "plaintext_file": "format2_empty_payload.plaintext",
+ "plaintext_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_empty_payload.plaintext b/testdata/fixtures/format2_empty_payload.plaintext
new file mode 100644
index 0000000..e69de29
diff --git a/testdata/fixtures/format2_time_and_key_portable.dkc b/testdata/fixtures/format2_time_and_key_portable.dkc
new file mode 100644
index 0000000..ffa0ec0
Binary files /dev/null and b/testdata/fixtures/format2_time_and_key_portable.dkc differ
diff --git a/testdata/fixtures/format2_time_and_key_portable.dkk b/testdata/fixtures/format2_time_and_key_portable.dkk
new file mode 100644
index 0000000..36fae08
Binary files /dev/null and b/testdata/fixtures/format2_time_and_key_portable.dkk differ
diff --git a/testdata/fixtures/format2_time_and_key_portable.dkk.json b/testdata/fixtures/format2_time_and_key_portable.dkk.json
new file mode 100644
index 0000000..ef27ab7
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_portable.dkk.json
@@ -0,0 +1,13 @@
+{
+ "description": "portable X25519 .dkk of format2_time_and_key_portable.dkc",
+ "spec": "0.9",
+ "file": "format2_time_and_key_portable.dkk",
+ "sha256": "095b7bc516a22bf0c2366f0af3cd48bfe857a2354d6e2a9b285278b95e450fe0",
+ "credential_id": "e3c7be83cbf1fbd6b115c96411b3bd01",
+ "capsule_id": "fe68d3b3bb59db0c14b7ef57d8d6cb5e",
+ "access_type": "x25519",
+ "access_material": "9c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c3657801",
+ "capsule_digest": "600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "capsule": "format2_time_and_key_portable.dkc",
+ "expected_result": "opens INNER_ACCESS_AGE of format2_time_and_key_portable.dkc and yields its CONTROL_CBOR"
+}
diff --git a/testdata/fixtures/format2_time_and_key_portable.inspect.json b/testdata/fixtures/format2_time_and_key_portable.inspect.json
new file mode 100644
index 0000000..5f69002
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_portable.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_and_key_portable.dkc",
+ "format": 2,
+ "capsule_id": "fe68d3b3bb59db0c14b7ef57d8d6cb5e",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 1000,
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "access_policy": "time_and_key",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=2128"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=fe68d3b3bb59db0c14b7ef57d8d6cb5e datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0 policy=time_and_key profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 1000, unlock at 2023-08-23T15:59:24Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 1000, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_portable.json b/testdata/fixtures/format2_time_and_key_portable.json
new file mode 100644
index 0000000..2e3a854
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_portable.json
@@ -0,0 +1,240 @@
+{
+ "description": "format 2 time_and_key capsule with one credential, a portable .dkk, and 15 dummies",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_and_key_portable.dkc",
+ "sha256": "600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "prelude": "444b4331020000000000007900000850",
+ "public_header": "a5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "capsule_id": "fe68d3b3bb59db0c14b7ef57d8d6cb5e",
+ "access_policy": "time_and_key",
+ "structure": "time_and_key",
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "header_binding": "3e26d39a327a9d7b7f504d6e4fb71489174cffb6360361bdf3349887eba25904",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "1000",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "2NH8a3B/E8/cPxEYgn+CRPBiH+z6m1HKB0jkRWSJ1Qc"
+ ]
+ }
+ ],
+ "inner_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "wRmoMP+CJd5BvvnN4a2lt7/2gmBKuP0zTr7iqgvKrgU"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "fC08W8XHFkY8sALRSwrtNKTZgoyu/Ihd5qvMqigN0zQ"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "0m6ifXeeqvE/1K1uPOB9/AUEPNIa34XflP31Xqka2xU"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "g9vklWW8U/9qDzqjAQkCD+V0I9/720qNY9yK5D5WxWs"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "/tIQhVe8anax7JHuagh62Wfawg+BsLZnxqmtGkheBwE"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "xj7y430oYgx7OnsvXHWy0rJu4oP6vfD54kkR3lIrHlU"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "FoqdLPxJTGAf9mOT+HdL8gfBEg6Ee8xz1dLpkUbkbVk"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "koX3OlqeI0uFN0u1j51BHvAN2I5CEUybrGYMNWgrnRs"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "tNw8p1B63MFB/1B6n6ZHZNJ4CdiL0ika9v2if6pKK14"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "qvmW6xqVKj6Gy5e/QZ4RaenODdEMbbzHSSdaP89SUh8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "wWNLyBB+2MClKPSzoFYU/NZiSvdB9A3wXzsLDzZNKx0"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "7573XbZ5NBZwQLsW3pLSRcQvGfKdDRBHvd72/M2/EFw"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "22fFGDrjPc/setFqsKRhV85dVH7IE4LAgsCLpjfX2n8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "FS2E7/ln2nH6ziTfLpqNRa2gcNqvW+EeJVsYj7Xce3I"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "PxMGnaQLVqaSOG5f5OJNNusxdzV1i0yiJjj/sibmZk8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "iMjJeP2N3aR2sZxLXH5x1nNGxDaSMVsnraQrf6rgW1o"
+ ]
+ }
+ ],
+ "access_key_stanza": 3,
+ "access_key_file": "format2_time_and_key_portable.dkk",
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c01020258203e26d39a327a9d7b7f504d6e4fb71489174cffb6360361bdf3349887eba259040358207c14feee8d88bb9c7c3fa7d22e1e8ba13887a6111718d2ca13da7c5e944421bf0648000000000000002e0702",
+ "payload_identity": "7c14feee8d88bb9c7c3fa7d22e1e8ba13887a6111718d2ca13da7c5e944421bf",
+ "payload_length": 46,
+ "padding": 2,
+ "padded_length": 256,
+ "plaintext_file": "format2_time_and_key_portable.plaintext",
+ "plaintext_sha256": "937492203d207d6fe36161b8696bf1f05b8b4cc56d855c44853f4b76aad3a05b",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "access credential",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 13,
+ "name": "open access layer",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_portable.plaintext b/testdata/fixtures/format2_time_and_key_portable.plaintext
new file mode 100644
index 0000000..6d69ec8
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_portable.plaintext
@@ -0,0 +1 @@
+DateKeys fixture opened with a portable .dkk.
diff --git a/testdata/fixtures/format2_time_and_key_recipients.dkc b/testdata/fixtures/format2_time_and_key_recipients.dkc
new file mode 100644
index 0000000..c567a91
Binary files /dev/null and b/testdata/fixtures/format2_time_and_key_recipients.dkc differ
diff --git a/testdata/fixtures/format2_time_and_key_recipients.dkk b/testdata/fixtures/format2_time_and_key_recipients.dkk
new file mode 100644
index 0000000..f42b4d5
Binary files /dev/null and b/testdata/fixtures/format2_time_and_key_recipients.dkk differ
diff --git a/testdata/fixtures/format2_time_and_key_recipients.dkk.json b/testdata/fixtures/format2_time_and_key_recipients.dkk.json
new file mode 100644
index 0000000..7c18f05
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_recipients.dkk.json
@@ -0,0 +1,13 @@
+{
+ "description": "portable X25519 .dkk of format2_time_and_key_recipients.dkc",
+ "spec": "0.9",
+ "file": "format2_time_and_key_recipients.dkk",
+ "sha256": "2ad99b1556086ec311d7f0b3bd3aaba05e75f45c4fa22490b0d5e8bb0b1a222e",
+ "credential_id": "93cedf68421710e83908ec683b104436",
+ "capsule_id": "ca3e8bfcae3ee19717fe3129ec9830b6",
+ "access_type": "x25519",
+ "access_material": "272884826b037b4bc98cfe4d57838807b6da906ff8704e810f975111dd3cbfda",
+ "capsule_digest": "1a44fd8708c92e2e0a10cfcb1d864a71331ea9af25d97e1a42e969dc898959e3",
+ "capsule": "format2_time_and_key_recipients.dkc",
+ "expected_result": "opens INNER_ACCESS_AGE of format2_time_and_key_recipients.dkc and yields its CONTROL_CBOR"
+}
diff --git a/testdata/fixtures/format2_time_and_key_recipients.inspect.json b/testdata/fixtures/format2_time_and_key_recipients.inspect.json
new file mode 100644
index 0000000..ebbaa71
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_recipients.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_and_key_recipients.dkc",
+ "format": 2,
+ "capsule_id": "ca3e8bfcae3ee19717fe3129ec9830b6",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 1001,
+ "unlock_at": "2023-08-23T15:59:27Z",
+ "access_policy": "time_and_key",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=2128"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=ca3e8bfcae3ee19717fe3129ec9830b6 datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0 policy=time_and_key profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 1001, unlock at 2023-08-23T15:59:27Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 1001, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_recipients.json b/testdata/fixtures/format2_time_and_key_recipients.json
new file mode 100644
index 0000000..a68df1b
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_recipients.json
@@ -0,0 +1,250 @@
+{
+ "description": "format 2 time_and_key capsule for three known X25519 recipients and a portable .dkk, and 12 dummies",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_and_key_recipients.dkc",
+ "sha256": "1a44fd8708c92e2e0a10cfcb1d864a71331ea9af25d97e1a42e969dc898959e3",
+ "release": {
+ "round": 1001,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
+ },
+ "prelude": "444b4331020000000000007900000850",
+ "public_header": "a5006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
+ "capsule_id": "ca3e8bfcae3ee19717fe3129ec9830b6",
+ "access_policy": "time_and_key",
+ "structure": "time_and_key",
+ "unlock_at": "2023-08-23T15:59:27Z",
+ "header_binding": "d58f5020ab127df352927bba6186ec6708edb3e26234803ac76f082c2d10751f",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "1001",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "zwimuIAtSKu5jEPDc8Ze3RU9ekOQ2BXoQhBYnfs+hgc"
+ ]
+ }
+ ],
+ "inner_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "rTpC8mQa3vIxdOHxJLfKIAFg+doIrbpwKT4s/2xoJ14"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "Y5VKnOKgh+/3eHCKX0mzTMMAkiM0jy6BQuOkZV3MwXA"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "UuqI7BCvGSBTc1jcOC9+cyuAD1dS+kIZfOMtiTK6UyM"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "EdcAEuz4sXrj2PgkVmYMhUeJA4ug4lj5FZ3h5kpwjk8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "HtdphHaSk8HVcc5+eQHL1FtCgRZawHWJSBcKI4LSTRc"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "ptIvd9fZTT+7i2CtqZyGVpnX8JT/WfrTutG/HwQzHSE"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "6n1HeyrMMoMlcv7CmRJ+3tTi0snVz2eKGgAej9epLD8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "7Z6bPBYl7Vp77EyDvcGtKenS2E4oYxMym3UzrVx1XEI"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "79VpVzXH3cG90UXPBTRgdEFgBF2vr66Oirm1GhmncwQ"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "gnUtu2RlmZCJDiBXybyUAdRR279VaRJ2KOw3qurphF8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "FZfOfhUP4mAurdR80ZIbHzLsFvA4yf1oRfC/uGBXyGQ"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "O6nde4hw5/KEd/7YvpLQIHS50q/aaipCF6UgH3mtWjA"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "9NNLG5SyyVBqw6Xx0LVlnJwYB3xff8iwhMAqY0g8YGE"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "AWV9QKUm9eV9XbDc+mESUu38STDBGKo4D0extcQweik"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "nmr1ixKyrZnu0RS2BG+LrBCEsrnTra1ORrMVnK/ooV8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "7674vCSB9Xm9FZzQAK0YndMuEaq/dIrWFMalCLMQ6hw"
+ ]
+ }
+ ],
+ "access_key_stanza": 4,
+ "identity_stanzas": [
+ 11,
+ 12,
+ 9
+ ],
+ "access_key_file": "format2_time_and_key_recipients.dkk",
+ "identities": [
+ "AGE-SECRET-KEY-1DRV36ZLYW0GCZCJTMK0S025K3PLEQR7QAY574K4PGH5VFTZKKZMS3J3LNL",
+ "AGE-SECRET-KEY-1E92XVRNNUHQ9GD7D34P2XAD97MZGNE4DR990GJFGDYEX8WDE8E4ST8HHK2",
+ "AGE-SECRET-KEY-1C2K7R20E0GKLGJM60JFL63ZUL4G9HNSA7CYU3WLPZMKLYEKFFJRSSP7UTJ"
+ ],
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c0102025820d58f5020ab127df352927bba6186ec6708edb3e26234803ac76f082c2d10751f0358206cff50465e2f76ee0452d5f4ba9f942d54edbf8a6c42fb70f85cc75bc52d8e54064800000000000000290702",
+ "payload_identity": "6cff50465e2f76ee0452d5f4ba9f942d54edbf8a6c42fb70f85cc75bc52d8e54",
+ "payload_length": 41,
+ "padding": 2,
+ "padded_length": 256,
+ "plaintext_file": "format2_time_and_key_recipients.plaintext",
+ "plaintext_sha256": "0e9fd50e98a85953aa9cf07a11ee3c62bb3d7622f344f1c6ce744d1ed111659f",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "access credential",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 13,
+ "name": "open access layer",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_recipients.plaintext b/testdata/fixtures/format2_time_and_key_recipients.plaintext
new file mode 100644
index 0000000..21f440d
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_recipients.plaintext
@@ -0,0 +1 @@
+DateKeys fixture for several recipients.
diff --git a/testdata/fixtures/format2_time_and_key_sixteen.dkc b/testdata/fixtures/format2_time_and_key_sixteen.dkc
new file mode 100644
index 0000000..47facda
Binary files /dev/null and b/testdata/fixtures/format2_time_and_key_sixteen.dkc differ
diff --git a/testdata/fixtures/format2_time_and_key_sixteen.inspect.json b/testdata/fixtures/format2_time_and_key_sixteen.inspect.json
new file mode 100644
index 0000000..b19b9a9
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_sixteen.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_and_key_sixteen.dkc",
+ "format": 2,
+ "capsule_id": "0e53b85a2f9201e2b3368ae122540da7",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 2000,
+ "unlock_at": "2023-08-23T16:49:24Z",
+ "access_policy": "time_and_key",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=2128"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=0e53b85a2f9201e2b3368ae122540da7 datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0 policy=time_and_key profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 2000, unlock at 2023-08-23T16:49:24Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 2000, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_sixteen.json b/testdata/fixtures/format2_time_and_key_sixteen.json
new file mode 100644
index 0000000..e527407
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_sixteen.json
@@ -0,0 +1,274 @@
+{
+ "description": "format 2 time_and_key capsule for sixteen known X25519 recipients, without dummies",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_and_key_sixteen.dkc",
+ "sha256": "7aaac5c18f216bf53df326ecc817179640a53408cf25dfd50488910a762dc381",
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "prelude": "444b4331020000000000007900000850",
+ "public_header": "a5006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0",
+ "capsule_id": "0e53b85a2f9201e2b3368ae122540da7",
+ "access_policy": "time_and_key",
+ "structure": "time_and_key",
+ "unlock_at": "2023-08-23T16:49:24Z",
+ "header_binding": "2af8b1b2850f2085448fe79c48394a78a70e8f9bbab6ff1a100d127dce42569d",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "2000",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "GYC0vEroQ0SEpuw1YD7s7CZ/VUVjJM7/eYHUiVrriDA"
+ ]
+ }
+ ],
+ "inner_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "AsTmuIXIaAtsVBtx9dHgNw3vvnOp17XOCXiEqhVWpkc"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "heEJQmVJrOF8PXY2YqDKYMeHWT984qU0Cp7zUgWXn2Q"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "Th/8wAreGUduIowTX1peuW742OOnMYJN7CPfhE7JRWM"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "WqgsEJt1Xp+917C0lxIk7RqQ15hKqRcdJIzPJYe+VD0"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "cVfrUH86CtMX5bE5W0MC4O+Hll2izf3xbW9uAEz6kyA"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "wYq7RavJd5OurTRmJo4WFc0PWFSJzYUL5IuOkvGvcgg"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "AGgRH5Wt1TUa56i2kZPnC8BWjqUwF2AUGVQLjGoP8UI"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "6QH4BvZMr2Yj4YkltJPDK98pVruudRPTjwIvJsjXemI"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "xhwZ/Q0oCUDeOzw0qavGa2Lizc+ddBaDl82kjz0BBU8"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "aroWsrX4In35rmixu/AoeLv/7+1LpBYata/55hCkyCE"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "IYP047ouVYUwYLsS9VoB7i1pezD9yVU9nxlVct2wVQ0"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "TFy3J6NMXoi83o+28OkagQaqnGTkJsTtTryaZZRHiGk"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "X3qbXXTYgnIfydQXV9hQvDA2qecpTpH2ujwVEzmVpEY"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "DlRE4NA+zt/dlJtkCUdPC58+wGynSkqOVUPbXKEYYQ4"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "TIibCVrxyEfR8dzQmN4AnpG7NgBqAj/FtitSZ865yHo"
+ ]
+ },
+ {
+ "type": "X25519",
+ "args": [
+ "VR0fW67398y8LUcHw2O5l3xu0s90e4SEKdd4rBUBmEU"
+ ]
+ }
+ ],
+ "identity_stanzas": [
+ 11,
+ 3,
+ 13,
+ 9,
+ 6,
+ 5,
+ 2,
+ 1,
+ 14,
+ 7,
+ 12,
+ 10,
+ 0,
+ 8,
+ 15,
+ 4
+ ],
+ "identities": [
+ "AGE-SECRET-KEY-1PXL3AC9TN7LJJCLQ53TGU6VYU02AY709VFYYZCEYFGNXMHT7SUMQP0M2DT",
+ "AGE-SECRET-KEY-1ATGRTUEY80VSHV6YR6P3U3D4Z4VHC8K7UCTPEY9TRALTW3RJ6VHQQPKQYN",
+ "AGE-SECRET-KEY-13WEPF99TP58KQAD3PJVMTKAW2H7L5TK2C0200QGK0ESH5GZD7ZKQFE3ER5",
+ "AGE-SECRET-KEY-19TSHS4VD8VJ29ETFNJYKCHGQYU2K0NC9HAT6Z4ZWZ7NNJAUHXLDSQG6CZF",
+ "AGE-SECRET-KEY-1M0AXFJZZRLWNQ32M7WXE7Q4PCT2XX9LZPTKPS7UGMC2M2QFAVNCSPQWVN4",
+ "AGE-SECRET-KEY-1DX3M9XMVLD8YW77F8HP57985HCSLCS4TZ4ZER8P560NNJADKM5FQ58PGEM",
+ "AGE-SECRET-KEY-1MUR3WWVK2SE0DDTU45PEEM2C0GMRQNE4KY28DVHF40ZNLWVTW6AQ99C5A9",
+ "AGE-SECRET-KEY-1NNMJK68RC2TTXXMWN38CTZV53PUT6WCPKW8SAQYFL3H827S7DPTQW7WGSU",
+ "AGE-SECRET-KEY-1AM8FLQKNRVKMY57GN7X0NVUUC3XUQ6HJ46WGMTWYMEAKDP8545QSM6MXZ4",
+ "AGE-SECRET-KEY-1E36KU0LDG3ZPDWT2RTUUUXX6WW4A3EQJSTTXYAPPCR5KM7030GASR7LGLP",
+ "AGE-SECRET-KEY-1N6DRGLY8C6RVK38VUAFX42X0URCWDHDPK4N88LC62GURP80QRLVQ0LU4ZA",
+ "AGE-SECRET-KEY-1ESAC0TZKVMNCKW4XVRRUMN757NNKSW2W5CPLA5FEAQZUEPCZGLZS7ZT8G9",
+ "AGE-SECRET-KEY-129ZJMZTRDZVFSTYLPECMCDS5QR6Q2C7FKW2A2S2L96NJ6G4WVSVSFAQ2NY",
+ "AGE-SECRET-KEY-1Z9TQWH8VG4QSLM8PUU0KDQHAWKDMDVF0X35LXKRYXGWZAF5ZYL3SZX9CML",
+ "AGE-SECRET-KEY-10AEA26HQPN53KHFGXGJCHAAZDTJU6PF4HJUGZ58P07MZTM3TTN5SMD27MM",
+ "AGE-SECRET-KEY-153U4SENXWJEY7WMXR75HUUSV6HU0CJPAXPU7S8X8S20G5KT86FWQHVG43Q"
+ ],
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c01020258202af8b1b2850f2085448fe79c48394a78a70e8f9bbab6ff1a100d127dce42569d035820f8d40151d6d05c4ad0afed2e4a0df44c4b93eadcefdaa4ae7e85b493b0a569cc064800000000000000290702",
+ "payload_identity": "f8d40151d6d05c4ad0afed2e4a0df44c4b93eadcefdaa4ae7e85b493b0a569cc",
+ "payload_length": 41,
+ "padding": 2,
+ "padded_length": 256,
+ "plaintext_file": "format2_time_and_key_sixteen.plaintext",
+ "plaintext_sha256": "e5abfb7b5fdbf297277b6cc4729c15d85435e890b653c2e2342b7031ecd9eab9",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "access credential",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 13,
+ "name": "open access layer",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_and_key_sixteen.plaintext b/testdata/fixtures/format2_time_and_key_sixteen.plaintext
new file mode 100644
index 0000000..6da1717
--- /dev/null
+++ b/testdata/fixtures/format2_time_and_key_sixteen.plaintext
@@ -0,0 +1 @@
+DateKeys fixture for sixteen recipients.
diff --git a/testdata/fixtures/format2_time_only.dkc b/testdata/fixtures/format2_time_only.dkc
new file mode 100644
index 0000000..4690bc4
Binary files /dev/null and b/testdata/fixtures/format2_time_only.dkc differ
diff --git a/testdata/fixtures/format2_time_only.inspect.json b/testdata/fixtures/format2_time_only.inspect.json
new file mode 100644
index 0000000..cc09295
--- /dev/null
+++ b/testdata/fixtures/format2_time_only.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_only.dkc",
+ "format": 2,
+ "capsule_id": "c8cfc53d45c879da916edddf71f3bddd",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 1000,
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "access_policy": "time_only",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=458"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=c8cfc53d45c879da916edddf71f3bddd datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0 policy=time_only profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 1000, unlock at 2023-08-23T15:59:24Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 1000, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only.json b/testdata/fixtures/format2_time_only.json
new file mode 100644
index 0000000..0362945
--- /dev/null
+++ b/testdata/fixtures/format2_time_only.json
@@ -0,0 +1,130 @@
+{
+ "description": "format 2 time_only capsule, padding code 2 (reforzado): L = 78000, P = 79872, two STREAM chunks",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_only.dkc",
+ "sha256": "f5a40ac6b8a08a0c12db6114c2bca23522d6a77b512b509a217fb15f367813c4",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "prelude": "444b43310200000000000079000001ca",
+ "public_header": "a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "capsule_id": "c8cfc53d45c879da916edddf71f3bddd",
+ "access_policy": "time_only",
+ "structure": "time_only",
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "header_binding": "f916dc2cadb85b0426cc7caafdd01ebab7b27911ba1b4ed13fa48e74cdd452a1",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "1000",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "Sk/EUvzR0FX1g4rLX4zLC00L9S9eCdz8nZ2IaHEaOWE"
+ ]
+ }
+ ],
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c0102025820f916dc2cadb85b0426cc7caafdd01ebab7b27911ba1b4ed13fa48e74cdd452a103582069dab305617ad46e0f518af78153efddeaf61bc59336f209068c8e692119b94d064800000000000130b00702",
+ "payload_identity": "69dab305617ad46e0f518af78153efddeaf61bc59336f209068c8e692119b94d",
+ "payload_length": 78000,
+ "padding": 2,
+ "padded_length": 79872,
+ "plaintext_file": "format2_time_only.plaintext",
+ "plaintext_sha256": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only.plaintext b/testdata/fixtures/format2_time_only.plaintext
new file mode 100644
index 0000000..6b8a44f
--- /dev/null
+++ b/testdata/fixtures/format2_time_only.plaintext
@@ -0,0 +1,1000 @@
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
diff --git a/testdata/fixtures/format2_time_only_bloque256.dkc b/testdata/fixtures/format2_time_only_bloque256.dkc
new file mode 100644
index 0000000..7e8c9d8
Binary files /dev/null and b/testdata/fixtures/format2_time_only_bloque256.dkc differ
diff --git a/testdata/fixtures/format2_time_only_bloque256.inspect.json b/testdata/fixtures/format2_time_only_bloque256.inspect.json
new file mode 100644
index 0000000..acc2605
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_bloque256.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_only_bloque256.dkc",
+ "format": 2,
+ "capsule_id": "10157a2ba032f78e23d8035e368345c8",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 1000,
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "access_policy": "time_only",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=121, SEALED_CONTROL_LEN=458"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "121 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=10157a2ba032f78e23d8035e368345c8 datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0 policy=time_only profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 1000, unlock at 2023-08-23T15:59:24Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 1000, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only_bloque256.json b/testdata/fixtures/format2_time_only_bloque256.json
new file mode 100644
index 0000000..a833982
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_bloque256.json
@@ -0,0 +1,130 @@
+{
+ "description": "format 2 time_only capsule with the content of format2_time_only and padding code 1 (bloque256): L = 78000, P = 78080",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_only_bloque256.dkc",
+ "sha256": "aae769c30d04920801d8b293d30864fbe223c9c9353ec2b4907a1ee1996e39f9",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "prelude": "444b43310200000000000079000001ca",
+ "public_header": "a5006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
+ "capsule_id": "10157a2ba032f78e23d8035e368345c8",
+ "access_policy": "time_only",
+ "structure": "time_only",
+ "unlock_at": "2023-08-23T15:59:24Z",
+ "header_binding": "85b1f94357df0448246f91ec0d8c1026eb1bab870236b1069e9592c16aecd5ff",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "1000",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "UeiA4/yMJ8MOxH1VN59GTQUjYD+X8X4ppoODsu/0fi0"
+ ]
+ }
+ ],
+ "control_cbor": "a60070646174656b6579732d636f6e74726f6c010202582085b1f94357df0448246f91ec0d8c1026eb1bab870236b1069e9592c16aecd5ff035820aa6d542f56c5026c229f3742ea84a9a5fbc5641951c61bf4383b9b25ce6b368a064800000000000130b00701",
+ "payload_identity": "aa6d542f56c5026c229f3742ea84a9a5fbc5641951c61bf4383b9b25ce6b368a",
+ "payload_length": 78000,
+ "padding": 1,
+ "padded_length": 78080,
+ "plaintext_file": "format2_time_only_bloque256.plaintext",
+ "plaintext_sha256": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only_bloque256.plaintext b/testdata/fixtures/format2_time_only_bloque256.plaintext
new file mode 100644
index 0000000..6b8a44f
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_bloque256.plaintext
@@ -0,0 +1,1000 @@
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
+DateKeys fixture: this plaintext spans more than one 64 KiB age STREAM chunk.
diff --git a/testdata/fixtures/format2_time_only_extensions.dkc b/testdata/fixtures/format2_time_only_extensions.dkc
new file mode 100644
index 0000000..cd2a878
Binary files /dev/null and b/testdata/fixtures/format2_time_only_extensions.dkc differ
diff --git a/testdata/fixtures/format2_time_only_extensions.inspect.json b/testdata/fixtures/format2_time_only_extensions.inspect.json
new file mode 100644
index 0000000..032b901
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_extensions.inspect.json
@@ -0,0 +1,61 @@
+{
+ "file": "format2_time_only_extensions.dkc",
+ "format": 2,
+ "capsule_id": "3ab2c06d482609a9c7ae92f672599883",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0",
+ "profile": "datekeys:quicknet:v1",
+ "round": 2000,
+ "unlock_at": "2023-08-23T16:49:24Z",
+ "access_policy": "time_only",
+ "valid": true,
+ "checks": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true,
+ "detail": "magic DKC1"
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true,
+ "detail": "DKC1 v2, PUBLIC_HEADER_LEN=159, SEALED_CONTROL_LEN=494"
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true,
+ "detail": "159 bytes"
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true,
+ "detail": "capsule_id=3ab2c06d482609a9c7ae92f672599883 datekey=dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0 policy=time_only profile=datekeys:quicknet:v1"
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true,
+ "detail": "one tlock stanza"
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true,
+ "detail": "one X25519 stanza"
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true,
+ "detail": "round 2000, unlock at 2023-08-23T16:49:24Z"
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true,
+ "detail": "round 2000, chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only_extensions.json b/testdata/fixtures/format2_time_only_extensions.json
new file mode 100644
index 0000000..ff86da8
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_extensions.json
@@ -0,0 +1,146 @@
+{
+ "description": "format 2 time_only capsule with a noncritical PUBLIC_HEADER extension and a noncritical CONTROL_CBOR extension",
+ "spec": "0.9",
+ "format": 2,
+ "file": "format2_time_only_extensions.dkc",
+ "sha256": "fb406100d5703a2e888983b3175ed34a09a34469cc722256e5cf535dd728fbe9",
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "prelude": "444b4331020000000000009f000001ee",
+ "public_header": "a6006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c",
+ "datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0",
+ "capsule_id": "3ab2c06d482609a9c7ae92f672599883",
+ "access_policy": "time_only",
+ "structure": "time_only",
+ "unlock_at": "2023-08-23T16:49:24Z",
+ "header_binding": "92c5e87f3a1012e617bd28e4962ad159b9bf85d1a1937a59cb6d8e79e459bd64",
+ "outer_stanzas": [
+ {
+ "type": "tlock",
+ "args": [
+ "2000",
+ "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
+ ]
+ }
+ ],
+ "payload_stanzas": [
+ {
+ "type": "X25519",
+ "args": [
+ "e/RmpYH4zJrsLekrD6m4qihOuh+V8MvSq32jfykT1T8"
+ ]
+ }
+ ],
+ "control_cbor": "a70070646174656b6579732d636f6e74726f6c010202582092c5e87f3a1012e617bd28e4962ad159b9bf85d1a1937a59cb6d8e79e459bd64035820d9e066526400e9f580b79411524c5f3ac77ce1d9ba13e0ae4ec7e7fbed6619ff0581a300706f72672e6578616d706c652e6e6f74650102024ba2000701667365616c6564064800000000000000220702",
+ "payload_identity": "d9e066526400e9f580b79411524c5f3ac77ce1d9ba13e0ae4ec7e7fbed6619ff",
+ "payload_length": 34,
+ "padding": 2,
+ "padded_length": 256,
+ "plaintext_file": "format2_time_only_extensions.plaintext",
+ "plaintext_sha256": "1129768e195e2f1e50b7a6f926b6eebef120212c29b5642c8a662c503b2a9131",
+ "header_extensions": [
+ {
+ "critical": false,
+ "id": "org.example.label",
+ "version": 1,
+ "data": "7075626c6963206c6162656c"
+ }
+ ],
+ "control_extensions": [
+ {
+ "critical": false,
+ "id": "org.example.note",
+ "version": 2,
+ "data": "a2000701667365616c6564"
+ }
+ ],
+ "stages": [
+ {
+ "step": 1,
+ "name": "parse DKC1",
+ "ok": true
+ },
+ {
+ "step": 2,
+ "name": "prelude",
+ "ok": true
+ },
+ {
+ "step": 3,
+ "name": "public header",
+ "ok": true
+ },
+ {
+ "step": 4,
+ "name": "header validation",
+ "ok": true
+ },
+ {
+ "step": 5,
+ "name": "sealed control structure",
+ "ok": true
+ },
+ {
+ "step": 6,
+ "name": "payload structure",
+ "ok": true
+ },
+ {
+ "step": 7,
+ "name": "condition",
+ "ok": true
+ },
+ {
+ "step": 8,
+ "name": "tlock stanza",
+ "ok": true
+ },
+ {
+ "step": 9,
+ "name": "release",
+ "ok": true
+ },
+ {
+ "step": 10,
+ "name": "release verification",
+ "ok": true
+ },
+ {
+ "step": 11,
+ "name": "open sealed control",
+ "ok": true
+ },
+ {
+ "step": 12,
+ "name": "policy structure",
+ "ok": true
+ },
+ {
+ "step": 14,
+ "name": "control",
+ "ok": true
+ },
+ {
+ "step": 15,
+ "name": "header binding",
+ "ok": true
+ },
+ {
+ "step": 16,
+ "name": "payload identity",
+ "ok": true
+ },
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
+ {
+ "step": 18,
+ "name": "commit",
+ "ok": true
+ }
+ ]
+}
diff --git a/testdata/fixtures/format2_time_only_extensions.plaintext b/testdata/fixtures/format2_time_only_extensions.plaintext
new file mode 100644
index 0000000..9bab1c0
--- /dev/null
+++ b/testdata/fixtures/format2_time_only_extensions.plaintext
@@ -0,0 +1 @@
+DateKeys fixture with extensions.
diff --git a/testdata/fixtures/time_and_key_portable.dkk.json b/testdata/fixtures/time_and_key_portable.dkk.json
index f822efa..1b04553 100644
--- a/testdata/fixtures/time_and_key_portable.dkk.json
+++ b/testdata/fixtures/time_and_key_portable.dkk.json
@@ -1,6 +1,6 @@
{
"description": "portable X25519 .dkk of time_and_key_portable.dkc",
- "spec": "0.8.2",
+ "spec": "0.9",
"file": "time_and_key_portable.dkk",
"sha256": "e528fa2c832c91119f0684bb9d6fb3c4c2d0d55183482890e7c4fe92f668426a",
"credential_id": "3955e944a3c60cfa1fd6485e9693c77d",
diff --git a/testdata/fixtures/time_and_key_portable.inspect.json b/testdata/fixtures/time_and_key_portable.inspect.json
index df7e14d..d928202 100644
--- a/testdata/fixtures/time_and_key_portable.inspect.json
+++ b/testdata/fixtures/time_and_key_portable.inspect.json
@@ -1,5 +1,6 @@
{
"file": "time_and_key_portable.dkc",
+ "format": 1,
"capsule_id": "448e134a13457c319cab7fceaf7ffa1f",
"datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
"profile": "datekeys:quicknet:v1",
diff --git a/testdata/fixtures/time_and_key_portable.json b/testdata/fixtures/time_and_key_portable.json
index e197650..398d045 100644
--- a/testdata/fixtures/time_and_key_portable.json
+++ b/testdata/fixtures/time_and_key_portable.json
@@ -1,6 +1,7 @@
{
"description": "time_and_key capsule whose only recipient is a portable .dkk",
- "spec": "0.8.2",
+ "spec": "0.9",
+ "format": 1,
"file": "time_and_key_portable.dkc",
"sha256": "2e97878078bae6358037a9c264f379a3cbe839f767d69836b0343f35657b2972",
"release": {
@@ -43,6 +44,7 @@
"access_key_file": "time_and_key_portable.dkk",
"control_cbor": "a40070646174656b6579732d636f6e74726f6c0101025820841fe789895abdd0ffecb0eb7562f4c4b4dfd0d1f8ec6fd251adbe1a89d5ab5f0358202536e99b16373ca8d118695c600fd652541367b0198dbfaba9362a98f9fa70cb",
"payload_identity": "2536e99b16373ca8d118695c600fd652541367b0198dbfaba9362a98f9fa70cb",
+ "payload_length": 46,
"plaintext_file": "time_and_key_portable.plaintext",
"plaintext_sha256": "937492203d207d6fe36161b8696bf1f05b8b4cc56d855c44853f4b76aad3a05b",
"stages": [
@@ -131,6 +133,11 @@
"name": "payload identity",
"ok": true
},
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
{
"step": 18,
"name": "commit",
diff --git a/testdata/fixtures/time_and_key_portable_extension.dkk.json b/testdata/fixtures/time_and_key_portable_extension.dkk.json
index bdf1571..8abce2e 100644
--- a/testdata/fixtures/time_and_key_portable_extension.dkk.json
+++ b/testdata/fixtures/time_and_key_portable_extension.dkk.json
@@ -1,6 +1,6 @@
{
"description": "portable X25519 .dkk of time_and_key_portable.dkc with a noncritical extension: the credential of time_and_key_portable.dkk re-issued with org.example.delivery",
- "spec": "0.8.2",
+ "spec": "0.9",
"file": "time_and_key_portable_extension.dkk",
"sha256": "0bf463a7c65627b7dda2234d728df89ec5b835816a2a37b91497d8fecc5ea548",
"credential_id": "3955e944a3c60cfa1fd6485e9693c77d",
diff --git a/testdata/fixtures/time_and_key_recipients.dkk.json b/testdata/fixtures/time_and_key_recipients.dkk.json
index 740694a..49dfa34 100644
--- a/testdata/fixtures/time_and_key_recipients.dkk.json
+++ b/testdata/fixtures/time_and_key_recipients.dkk.json
@@ -1,6 +1,6 @@
{
"description": "portable X25519 .dkk of time_and_key_recipients.dkc",
- "spec": "0.8.2",
+ "spec": "0.9",
"file": "time_and_key_recipients.dkk",
"sha256": "19f6c47150c3194712d454f43c7392b7344e6b4e7b074d83e9ca5f563a8e072f",
"credential_id": "b89292aedf6d05d584cec9a871ce8735",
diff --git a/testdata/fixtures/time_and_key_recipients.inspect.json b/testdata/fixtures/time_and_key_recipients.inspect.json
index 839d778..7a54a38 100644
--- a/testdata/fixtures/time_and_key_recipients.inspect.json
+++ b/testdata/fixtures/time_and_key_recipients.inspect.json
@@ -1,5 +1,6 @@
{
"file": "time_and_key_recipients.dkc",
+ "format": 1,
"capsule_id": "c75dfc8e9c576d1369910664df93693a",
"datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0",
"profile": "datekeys:quicknet:v1",
diff --git a/testdata/fixtures/time_and_key_recipients.json b/testdata/fixtures/time_and_key_recipients.json
index c0bebd2..a20b83d 100644
--- a/testdata/fixtures/time_and_key_recipients.json
+++ b/testdata/fixtures/time_and_key_recipients.json
@@ -1,6 +1,7 @@
{
"description": "time_and_key capsule for two known X25519 recipients and a portable .dkk",
- "spec": "0.8.2",
+ "spec": "0.9",
+ "format": 1,
"file": "time_and_key_recipients.dkc",
"sha256": "69ac110380f5d768b5b6afaa157a50ed17d8ceccfbd4604ffa5b6da38539b635",
"release": {
@@ -59,6 +60,7 @@
],
"control_cbor": "a40070646174656b6579732d636f6e74726f6c01010258205d789b4bde52beecbad4b80e9b0a8fec8b59b6a84263af6d022cd1eccfded0e20358205d3f4172eca48e5d5b2570208cfe3298c4735f1d77ceaed958bcccb8eec18a12",
"payload_identity": "5d3f4172eca48e5d5b2570208cfe3298c4735f1d77ceaed958bcccb8eec18a12",
+ "payload_length": 41,
"plaintext_file": "time_and_key_recipients.plaintext",
"plaintext_sha256": "0e9fd50e98a85953aa9cf07a11ee3c62bb3d7622f344f1c6ce744d1ed111659f",
"stages": [
@@ -147,6 +149,11 @@
"name": "payload identity",
"ok": true
},
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
{
"step": 18,
"name": "commit",
diff --git a/testdata/fixtures/time_only.inspect.json b/testdata/fixtures/time_only.inspect.json
index 3e70a03..1142700 100644
--- a/testdata/fixtures/time_only.inspect.json
+++ b/testdata/fixtures/time_only.inspect.json
@@ -1,5 +1,6 @@
{
"file": "time_only.dkc",
+ "format": 1,
"capsule_id": "ad4d676812b134ff8a3de263f77018b4",
"datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMH0",
"profile": "datekeys:quicknet:v1",
diff --git a/testdata/fixtures/time_only.json b/testdata/fixtures/time_only.json
index 7ad219a..0e546c1 100644
--- a/testdata/fixtures/time_only.json
+++ b/testdata/fixtures/time_only.json
@@ -1,6 +1,7 @@
{
"description": "time_only capsule, two STREAM chunks, no extensions",
- "spec": "0.8.2",
+ "spec": "0.9",
+ "format": 1,
"file": "time_only.dkc",
"sha256": "99e915810d595f1092700b728f5e5081d78efe83f5343e76325b1bcc2c33ccf2",
"release": {
@@ -34,6 +35,7 @@
],
"control_cbor": "a40070646174656b6579732d636f6e74726f6c01010258208e1d05df55bc626a579759d54d436b512b7bfc71039d3c12c1875a5b475f2417035820e63d28ff1a6d1975263db49ff80c3bf949737d20aeedcc9539e648ffd330082b",
"payload_identity": "e63d28ff1a6d1975263db49ff80c3bf949737d20aeedcc9539e648ffd330082b",
+ "payload_length": 78000,
"plaintext_file": "time_only.plaintext",
"plaintext_sha256": "53b8ee821fb7b678e89d4f93da1812339f6cc1ab83aac6ed1432db99df784be5",
"stages": [
@@ -112,6 +114,11 @@
"name": "payload identity",
"ok": true
},
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
{
"step": 18,
"name": "commit",
diff --git a/testdata/fixtures/time_only_extensions.inspect.json b/testdata/fixtures/time_only_extensions.inspect.json
index 249fb2f..390d082 100644
--- a/testdata/fixtures/time_only_extensions.inspect.json
+++ b/testdata/fixtures/time_only_extensions.inspect.json
@@ -1,5 +1,6 @@
{
"file": "time_only_extensions.dkc",
+ "format": 1,
"capsule_id": "4286085c21ca34d1a71e649326a4a0f6",
"datekey": "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MjAwMH0",
"profile": "datekeys:quicknet:v1",
diff --git a/testdata/fixtures/time_only_extensions.json b/testdata/fixtures/time_only_extensions.json
index a234e2f..55d5cfe 100644
--- a/testdata/fixtures/time_only_extensions.json
+++ b/testdata/fixtures/time_only_extensions.json
@@ -1,6 +1,7 @@
{
"description": "time_only capsule with a noncritical PUBLIC_HEADER extension and a noncritical CONTROL_CBOR extension",
- "spec": "0.8.2",
+ "spec": "0.9",
+ "format": 1,
"file": "time_only_extensions.dkc",
"sha256": "0446c9b73e267adcb24e5cc89afba2544a386ec9a050016e06517a4a57aa2085",
"release": {
@@ -34,6 +35,7 @@
],
"control_cbor": "a50070646174656b6579732d636f6e74726f6c0101025820cf647fac3ba7849b217d9bb358d66cb5b6f6722e2e383a32057fc725ba02807003582094edebc71acf1c5743d80ec5d14922253a1325edda65d56d7e33642edb92ab6d0581a300706f72672e6578616d706c652e6e6f74650102024ba2000701667365616c6564",
"payload_identity": "94edebc71acf1c5743d80ec5d14922253a1325edda65d56d7e33642edb92ab6d",
+ "payload_length": 34,
"plaintext_file": "time_only_extensions.plaintext",
"plaintext_sha256": "1129768e195e2f1e50b7a6f926b6eebef120212c29b5642c8a662c503b2a9131",
"header_extensions": [
@@ -128,6 +130,11 @@
"name": "payload identity",
"ok": true
},
+ {
+ "step": 17,
+ "name": "open payload",
+ "ok": true
+ },
{
"step": 18,
"name": "commit",
diff --git a/testdata/vectors/cbor.json b/testdata/vectors/cbor.json
index b92de98..4bd3fd8 100644
--- a/testdata/vectors/cbor.json
+++ b/testdata/vectors/cbor.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "CBOR profile of spec §58 and the schemas of spec/datekeys.cddl, generated by the reference implementation. accept and reject are walked as one data item of the profile with the limits of walk; schemas are decoded with the decoder of their schema. See testdata/README.md.",
"walk": {
"max_depth": 3,
@@ -966,10 +966,17 @@
{
"block": "control_cbor",
"schema": "control_cbor",
- "name": "unknown key 6",
+ "name": "key 6, defined only in schema version 2",
"hex": "a50070646174656b6579732d636f6e74726f6c0101025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220600",
"result": "ERR_NON_CANONICAL_CBOR"
},
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "name": "keys 6 and 7 of schema version 2",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010102582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
{
"block": "control_cbor",
"schema": "control_cbor",
@@ -1019,6 +1026,13 @@
"hex": "a40070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222",
"result": "ERR_UNSUPPORTED_VERSION"
},
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "name": "schema version 2 with keys 6 and 7",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000702",
+ "result": "ERR_UNSUPPORTED_VERSION"
+ },
{
"block": "control_cbor",
"schema": "control_cbor",
@@ -1033,6 +1047,206 @@
"hex": "a50070646174656b6579732d636f6e74726f6c0101025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220580",
"result": "ERR_NON_CANONICAL_CBOR"
},
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: minimal control, 103 bytes, L = 0",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000702",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: both extension arrays",
+ "hex": "a80070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220481a2006d6f72672e6578616d706c652e6101010581a3006d6f72672e6578616d706c652e620101024178064800000000000000000702",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length 78000",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000130b00702",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length 2^32+1, 48 0000000100000001",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000001000000010702",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length L_MAX = 2^53-2^46",
+ "hex": "a60070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220648001fc000000000000702",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: padding 1, bloque256",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000701",
+ "result": "ok"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length L_MAX + 1",
+ "hex": "a60070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220648001fc000000000010702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length 2^53",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800200000000000000702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length 2^64-1",
+ "hex": "a60070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220648ffffffffffffffff0702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length of 7 bytes",
+ "hex": "a60070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220647000000000130b00702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length of 9 bytes",
+ "hex": "a60070646174656b6579732d636f6e74726f6c01020258201111111111111111111111111111111111111111111111111111111111111111035820222222222222222222222222222222222222222222222222222222222222222206490000000000000130b00702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length as an unsigned integer",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222061a000130b00702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: payload_length with a length not in its shortest form",
+ "hex": "a60070646174656b6579732d636f6e74726f6c01020258201111111111111111111111111111111111111111111111111111111111111111035820222222222222222222222222222222222222222222222222222222222222222206580800000000000130b00702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: padding 0",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000700",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: padding 3",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000703",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: padding 257",
+ "hex": "a60070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220648000000000000000007190101",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: padding as a byte string",
+ "hex": "a60070646174656b6579732d636f6e74726f6c01020258201111111111111111111111111111111111111111111111111111111111111111035820222222222222222222222222222222222222222222222222222222222222222206480000000000000000074102",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: missing key 6, payload_length",
+ "hex": "a50070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220702",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: missing key 7, padding",
+ "hex": "a50070646174656b6579732d636f6e74726f6c01020258201111111111111111111111111111111111111111111111111111111111111111035820222222222222222222222222222222222222222222222222222222222222222206480000000000000000",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: keys 6 and 7 out of order",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222070206480000000000000000",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: unknown key 8",
+ "hex": "a70070646174656b6579732d636f6e74726f6c0102025820111111111111111111111111111111111111111111111111111111111111111103582022222222222222222222222222222222222222222222222222222222222222220648000000000000000007020800",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: schema version 2 without keys 6 and 7",
+ "hex": "a40070646174656b6579732d636f6e74726f6c010202582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222",
+ "result": "ERR_NON_CANONICAL_CBOR"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: schema version 1, a valid format 1 control",
+ "hex": "a40070646174656b6579732d636f6e74726f6c010102582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222",
+ "result": "ERR_UNSUPPORTED_VERSION"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: schema version 1 with keys 6 and 7",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010102582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000702",
+ "result": "ERR_UNSUPPORTED_VERSION"
+ },
+ {
+ "block": "control_cbor",
+ "schema": "control_cbor",
+ "format": 2,
+ "name": "format 2: schema version 3",
+ "hex": "a60070646174656b6579732d636f6e74726f6c010302582011111111111111111111111111111111111111111111111111111111111111110358202222222222222222222222222222222222222222222222222222222222222222064800000000000000000702",
+ "result": "ERR_UNSUPPORTED_VERSION"
+ },
{
"block": "dkk_body",
"schema": "dkk_body",
diff --git a/testdata/vectors/dk1.json b/testdata/vectors/dk1.json
index 8489097..f19ac20 100644
--- a/testdata/vectors/dk1.json
+++ b/testdata/vectors/dk1.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "Canonical dk1_ strings and rejected encodings (spec §18, §19, §66), generated by the reference implementation.",
"vectors": [
{
diff --git a/testdata/vectors/inspect_differential.json b/testdata/vectors/inspect_differential.json
index 02d4413..d470cfe 100644
--- a/testdata/vectors/inspect_differential.json
+++ b/testdata/vectors/inspect_differential.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "Differential corpus of the pre-unlock checks (spec §63 steps 1 to 8): deterministic mutations of the official .dkc fixtures with the verdict of the reference implementation. See testdata/README.md.",
"format": "Each mutation is bases[base].file (in testdata/fixtures) with its edits applied. An edit is [at, delete, insert]: the delete bytes at offset at of the base are replaced by the bytes of the hex string insert. The edits of one mutation refer to offsets of the unmodified base, are sorted by offset and do not overlap. result is the verdict of steps 1 to 8 of spec §63 (capsule.Inspect, the Quicknet profile pinned, no extension known, no network, no secret): ok, or the normative error code, with step the step that failed. kind names the generator of the mutation and is informative.",
"seed": 20260925,
@@ -23,6 +23,34 @@
{
"file": "empty_payload.dkc",
"sha256": "871e9bf05b52bbae17f3adfbbf97b46e7f0e53aa8f57bcaa506e43f36f53a9d4"
+ },
+ {
+ "file": "format2_time_only.dkc",
+ "sha256": "f5a40ac6b8a08a0c12db6114c2bca23522d6a77b512b509a217fb15f367813c4"
+ },
+ {
+ "file": "format2_time_only_bloque256.dkc",
+ "sha256": "aae769c30d04920801d8b293d30864fbe223c9c9353ec2b4907a1ee1996e39f9"
+ },
+ {
+ "file": "format2_empty_payload.dkc",
+ "sha256": "7aea2b5aa48b1a46053716f733d50fab9cd0b80b1be67631bcc06c5bb765dc21"
+ },
+ {
+ "file": "format2_time_only_extensions.dkc",
+ "sha256": "fb406100d5703a2e888983b3175ed34a09a34469cc722256e5cf535dd728fbe9"
+ },
+ {
+ "file": "format2_time_and_key_portable.dkc",
+ "sha256": "600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43"
+ },
+ {
+ "file": "format2_time_and_key_recipients.dkc",
+ "sha256": "1a44fd8708c92e2e0a10cfcb1d864a71331ea9af25d97e1a42e969dc898959e3"
+ },
+ {
+ "file": "format2_time_and_key_sixteen.dkc",
+ "sha256": "7aaac5c18f216bf53df326ecc817179640a53408cf25dfd50488910a762dc381"
}
],
"mutations": [
@@ -1850,6 +1878,2561 @@
{"base":4,"kind":"age","edits":[[15,1,"bf"],[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
{"base":4,"kind":"age","edits":[[658,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
{"base":4,"kind":"age","edits":[[704,0,"3e20583235353139206b542f78415348374e534f55766c6b39586649416833374a7a5371366b5778504b566b537a666c79676a590a30757574746f7236346f656253535a64584a394d7656374a334a3645516c6369745154473130776b7167630a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
- {"base":4,"kind":"age","edits":[[605,0,"0a"]],"result":"ERR_INTEGRITY","step":6}
+ {"base":4,"kind":"age","edits":[[605,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[553,1,"9a"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[487,1,"9a"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[479,1,"ab"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[17,1,"04"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[658,1,"b8"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[45,1,"73"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[299,1,"40"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"flip","edits":[[86,1,"4f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[90,1,"66"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[394,1,"5e"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"flip","edits":[[8,1,"10"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"flip","edits":[[427,1,"59"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[4,1,"0a"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":5,"kind":"flip","edits":[[118,1,"48"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[1,1,"cb"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":5,"kind":"flip","edits":[[148,1,"79"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"flip","edits":[[648,1,"20"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[86,1,"7f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[94,1,"76"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[643,1,"5a"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[624,1,"39"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":5,"kind":"flip","edits":[[23,1,"4b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[271,1,"15"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"flip","edits":[[6,1,"80"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":5,"kind":"flip","edits":[[89,1,"45"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[91,1,"34"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":5,"kind":"flip","edits":[[326,1,"74"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[669,1,"c5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[662,1,"4b"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[162,1,"7c"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"flip","edits":[[479,1,"89"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[610,1,"6e"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[323,1,"6a"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[10,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[695,1,"4a"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[344,1,"66"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[15,1,"c2"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[762,1,"1a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[28,1,"30"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[10,1,"10"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[20,1,"65"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[19,1,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[11,1,"7b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[60,1,"58"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[123,1,"74"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[674,1,"40"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[72944,1,"ba"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[3,1,"33"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":5,"kind":"flip","edits":[[616,1,"4a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[1,1,"43"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":5,"kind":"flip","edits":[[758,1,"54"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[216,1,"26"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":5,"kind":"flip","edits":[[27,1,"e1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"flip","edits":[[439,1,"62"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[243,1,"65"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[558,1,"9c"]],"result":"ok"},
+ {"base":5,"kind":"flip","edits":[[599,1,"e5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"flip","edits":[[8,1,"08"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"flip","edits":[[52,1,"65"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"flip","edits":[[48,1,"df"]],"result":"ok"},
+ {"base":5,"kind":"byte","edits":[[11,1,"1b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[48,1,"a0"]],"result":"ok"},
+ {"base":5,"kind":"byte","edits":[[190,1,"40"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":5,"kind":"byte","edits":[[78,1,"a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[43,1,"40"]],"result":"ok"},
+ {"base":5,"kind":"byte","edits":[[12,1,"f3"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"byte","edits":[[93,1,"2d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"byte","edits":[[660,1,"00"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[37957,1,"7f"]],"result":"ok"},
+ {"base":5,"kind":"byte","edits":[[101,1,"a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[330,1,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"byte","edits":[[410,1,"40"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"byte","edits":[[667,1,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[12,1,"60"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"byte","edits":[[718,1,"1b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[288,1,"1b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"byte","edits":[[134,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[27,1,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[676,1,"1b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[648,1,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[690,1,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[84,1,"1b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"byte","edits":[[199,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"byte","edits":[[85,1,"60"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"byte","edits":[[37,1,"1b"]],"result":"ok"},
+ {"base":5,"kind":"byte","edits":[[666,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[22,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"byte","edits":[[741,1,"a0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"byte","edits":[[449,1,"a0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"byte","edits":[[212,1,"80"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[804,79879,""]],"result":"ok"},
+ {"base":5,"kind":"truncate","edits":[[612,80071,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"truncate","edits":[[148,80535,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[489,80194,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[22,80661,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":5,"kind":"truncate","edits":[[596,80087,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"truncate","edits":[[280,80403,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[101,80582,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":5,"kind":"truncate","edits":[[734,79949,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"truncate","edits":[[127,80556,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":5,"kind":"truncate","edits":[[656,80027,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"truncate","edits":[[460,80223,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[252,80431,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[593,80090,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[240,80443,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[521,80162,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[323,80360,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[66,80617,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":5,"kind":"truncate","edits":[[271,80412,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[76,80607,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":5,"kind":"truncate","edits":[[451,80232,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[755,79928,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"truncate","edits":[[373,80310,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[594,80089,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"truncate","edits":[[486,80197,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[7,0,"78"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":5,"kind":"insert","edits":[[734,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"insert","edits":[[730,0,"93"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"insert","edits":[[693,0,"e54145"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"insert","edits":[[251,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[89,0,"3b31"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[11,0,"e063f8ce"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"insert","edits":[[23,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[346,0,"72"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[232,0,"080cfebd"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[633,0,"7065ef1d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"insert","edits":[[427,0,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[681,0,"90cbd0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"insert","edits":[[104,0,"e0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[83,0,"b731f0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[141,0,"8057a412"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[123,0,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[313,0,"3a06fe"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[110,0,"64939d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[160,0,"2819e0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[9,0,"0a"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"insert","edits":[[50,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[114,0,"a76ed0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[284,0,"5c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[338,0,"0079"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[73,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[9,0,"0f"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"insert","edits":[[138,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"insert","edits":[[49,0,"7fa479"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"insert","edits":[[68,0,"409c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[0,1,""]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":5,"kind":"delete","edits":[[326,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"delete","edits":[[38,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[233,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[71259,1,""]],"result":"ok"},
+ {"base":5,"kind":"delete","edits":[[437,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"delete","edits":[[73054,4,""]],"result":"ok"},
+ {"base":5,"kind":"delete","edits":[[113,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[708,3,""]],"result":"ok"},
+ {"base":5,"kind":"delete","edits":[[442,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"delete","edits":[[759,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[532,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[223,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[42,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[11,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"delete","edits":[[77,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[82,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[206,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[673,3,""]],"result":"ok"},
+ {"base":5,"kind":"delete","edits":[[663,2,""]],"result":"ok"},
+ {"base":5,"kind":"delete","edits":[[681,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[72,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[619,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[623,3,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":5,"kind":"delete","edits":[[124,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[686,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[212,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[129,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"delete","edits":[[730,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"delete","edits":[[10,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[11,1,"7c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[15,1,"94"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"length","edits":[[10,6,"01ca00000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[9,3,"100001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,1,"a5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[12,1,"40"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[8,8,"38feda5400000203"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[15,1,"cb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"length","edits":[[11,1,"62"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[11,5,"7a0000019e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[8,8,"769c0c5b00100001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,1,"76"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[8,4,"073703ca"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,5,"7c000001c9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[12,4,"08d03339"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,1,"78"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[15,1,"d6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"length","edits":[[12,4,"7257751b"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,5,"7a000001c9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"length","edits":[[14,1,"11"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"length","edits":[[8,8,"bcda686904000001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[8,8,"04000001000001a8"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[8,4,"04000001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[8,4,"a2cc5132"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"length","edits":[[11,2,"1040"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":5,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[136,1,"1818"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"90"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a20070efbbbf6f72672e6578616d706c652e610101"]],"result":"ok"},
+ {"base":5,"kind":"header","edits":[[11,1,"81"],[136,1,"1b001fffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[16,1,"b805"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[30,1,"02"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a3006d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7d"],[136,0,"1a000100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[30,1,"6131"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[10,2,"0590"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400059841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8c"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000582a20064f09080800101a20063efbda10101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"9f"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000682a2006d6f72672e6578616d706c652e610101a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":5,"kind":"header","edits":[[31,106,"0400037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300250c8cfc53d45c879da916edddf71f3bddd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544a39"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":5,"kind":"header","edits":[[11,1,"85"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"cf"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"9f"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000682a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[136,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"6a"],[32,17,"410b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[136,1,"18ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"70"],[18,11,"c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[10,2,"057c"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400059840a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101"]],"result":"ERR_EXTENSION_CRITICAL_UNKNOWN","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"83"],[16,120,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400081b00200000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"23"],[16,119,"a4006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7d"],[16,120,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040006f93c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"26"],[50,85,"6178"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7b"],[136,1,"190101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"6b"],[32,17,"f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"67"],[16,33,"a4006a646174656b65796361700101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040018185f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"77"],[16,15,"a4006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7f"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"78"],[136,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441776651"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040006a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7b"],[30,1,"190100"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"78"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[30,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"90"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a20070efbbbf6f72672e6578616d706c652e610101"]],"result":"ERR_EXTENSION_CRITICAL_UNKNOWN","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040005f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7c"],[16,120,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004001818"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[16,121,"a4006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8a"],[32,17,"582079787dce6bd558b7dac317ba9b90d17829841527724bb214401e97d67bdd92c4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8d"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_EXTENSION_CRITICAL_UNKNOWN","step":4},
+ {"base":5,"kind":"header","edits":[[136,1,"17"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"6f"],[18,11,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"78"],[32,17,"4fd0d006052eb56cfac7511d75fb7aee"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000250c8cfc53d45c879da916edddf71f3bddd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[136,1,"01"]],"result":"ok"},
+ {"base":5,"kind":"header","edits":[[11,1,"78"],[32,17,"4f53873159f12ce2b91cff138048d80d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7e"],[51,84,"58646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364e6a59344f4451794d544a39"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"header","edits":[[16,121,"a7006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[136,0,"1901"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[137,0,"a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"header","edits":[[10,2,"0148"],[50,85,"790121646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[19,10,"444154454b4559434150"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"6a"],[32,17,"41b1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8a"],[32,17,"5820f4ee43d634a78797694e877ae06b11dc142a007139a9c29b32e89d05e082a840"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400066178"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[10,2,"0590"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400069841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"69"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8a"],[32,17,"5820e765f670b6c416d2c98f53354bf8c6b4de5a595c3fbc96d81fab4ed812cafcfc"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040019ffff20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"0153"],[50,85,"79012c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544639"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"75"],[51,81,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[94,1,"2e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"49"],[51,84,"23646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f546b356651"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"datekey","edits":[[133,1,"58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"0152"],[50,85,"79012b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[114,1,"2d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"0185"],[50,85,"79015e646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"0173"],[50,85,"79014c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"55"],[51,84,"2f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5334776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"37"],[50,85,"72646b315f65794a325a584a7a61573975496a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[94,1,"41"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"0170"],[50,85,"790149646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"45"],[51,84,"1f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"019c"],[50,85,"790175646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[10,2,"014e"],[50,85,"790127646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"datekey","edits":[[11,1,"89"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[158,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[237,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[615,1,"32"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[716,0,"3e2058323535313920536b2f4555767a52304658316734724c58347a4c4330304c3953396543647a386e5a3249614845614f57450a2b726c4233464c4f6e542b3530396f58764b3449305a4a554b457a65684c4257382b4347577063716d71630a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":5,"kind":"age","edits":[[449,1,"41"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[15,1,"c8"],[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[162,5,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"db"],[413,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[367,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[614,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[670,0,"206578747261"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[14,2,"00cd"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"d0"],[237,0,"206578747261"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[626,44,""]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[175,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[367,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"c8"],[168,4,"2d31"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[237,0,"41"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[628,39,"4b2f4555565a52304658314734524c58345a4c4330304c3953394543445a384e5a324941484541"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[14,2,"025b"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[620,6,"746c6f636b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":5,"kind":"age","edits":[[14,2,"02c7"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[614,1,"56"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[162,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"89"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[714,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[157,1,"32"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cf"],[237,0,"2041414141"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[618,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[172,65,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[697,1,"41"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[168,4,"393939"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[411,0,"41"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[617,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"b5"],[137,21,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[715,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[411,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[616,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[762,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"c6"],[163,4,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[459,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[14,2,"021a"],[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[670,0,"2031303030"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[302,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[168,0,"30"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[336,1,"2f"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[688,1,"2b"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[670,0,"41"]],"result":"ok"},
+ {"base":5,"kind":"age","edits":[[694,1,"2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[158,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[172,0,"30"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":5,"kind":"age","edits":[[620,1,"78"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":5,"kind":"age","edits":[[714,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":5,"kind":"age","edits":[[15,1,"cb"],[411,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"flip","edits":[[47,1,"44"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[738,1,"6b"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[501,1,"38"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[547,1,"e9"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[8,1,"10"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"flip","edits":[[198,1,"31"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[755,1,"4e"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[200,1,"3c"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[738,1,"3b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[74047,1,"6c"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[124,1,"5b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[139,1,"75"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"flip","edits":[[10,1,"08"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"flip","edits":[[7,1,"04"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":6,"kind":"flip","edits":[[145,1,"71"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"flip","edits":[[734,1,"47"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[132,1,"cd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"flip","edits":[[375,1,"2a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"flip","edits":[[453,1,"74"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[63,1,"78"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[584,1,"fd"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[350,1,"79"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[647,1,"44"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[53,1,"69"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[524,1,"e9"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[747,1,"5a"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[423,1,"78"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[202,1,"35"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[203,1,"69"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[51548,1,"e1"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[4495,1,"6e"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[15,1,"c2"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[54,1,"11"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[762,1,"1a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[112,1,"66"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[265,1,"6a"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[398,1,"73"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[94,1,"75"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[429,1,"75"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[669,1,"b0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[374,1,"40"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"flip","edits":[[124,1,"1a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[5,1,"40"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":6,"kind":"flip","edits":[[35,1,"72"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[195,1,"3b"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[120,1,"63"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[6565,1,"9d"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[14,1,"05"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[409,1,"37"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[99,1,"37"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[9266,1,"21"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[67026,1,"6d"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[68,1,"4b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[200,1,"36"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"flip","edits":[[85,1,"4a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[100,1,"73"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"flip","edits":[[696,1,"cb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"flip","edits":[[9,1,"08"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":6,"kind":"flip","edits":[[687,1,"77"]],"result":"ok"},
+ {"base":6,"kind":"flip","edits":[[115,1,"6d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"byte","edits":[[4,1,"1b"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":6,"kind":"byte","edits":[[1,1,"80"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":6,"kind":"byte","edits":[[625,1,"a0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[420,1,"1b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"byte","edits":[[29,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"byte","edits":[[9,1,"60"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"byte","edits":[[3,1,"7a"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":6,"kind":"byte","edits":[[274,1,"40"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"byte","edits":[[552,1,"2d"]],"result":"ok"},
+ {"base":6,"kind":"byte","edits":[[38,1,"80"]],"result":"ok"},
+ {"base":6,"kind":"byte","edits":[[48,1,"20"]],"result":"ok"},
+ {"base":6,"kind":"byte","edits":[[733,1,"1b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[638,1,"00"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[15,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"byte","edits":[[121,1,"2d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"byte","edits":[[616,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[1,1,"1b"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":6,"kind":"byte","edits":[[5,1,"f6"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":6,"kind":"byte","edits":[[12,1,"80"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"byte","edits":[[38,1,"7f"]],"result":"ok"},
+ {"base":6,"kind":"byte","edits":[[608,1,"e5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[71,1,"0a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"byte","edits":[[690,1,"60"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[751,1,"40"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[151,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"byte","edits":[[732,1,"1e"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[362,1,"80"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"byte","edits":[[37,1,"0a"]],"result":"ok"},
+ {"base":6,"kind":"byte","edits":[[698,1,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"byte","edits":[[399,1,"ae"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[649,78242,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[72,78819,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":6,"kind":"truncate","edits":[[399,78492,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[375,78516,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[781,78110,""]],"result":"ok"},
+ {"base":6,"kind":"truncate","edits":[[541,78350,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[568,78323,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[355,78536,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[253,78638,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[181,78710,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[173,78718,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[130,78761,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":6,"kind":"truncate","edits":[[663,78228,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[734,78157,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[455,78436,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[702,78189,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[685,78206,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[121,78770,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":6,"kind":"truncate","edits":[[468,78423,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[739,78152,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"truncate","edits":[[232,78659,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[363,78528,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[499,78392,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"truncate","edits":[[35,78856,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":6,"kind":"truncate","edits":[[611,78280,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"insert","edits":[[138,0,"e8"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[14,0,"a36c11"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[21,0,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[444,0,"b36466b0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[53,0,"01d7c8"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[50,0,"51"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[59,0,"895e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[260,0,"3c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[382,0,"98a6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[724,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"insert","edits":[[120,0,"0a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[632,0,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"insert","edits":[[648,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"insert","edits":[[636,0,"2f"]],"result":"ok"},
+ {"base":6,"kind":"insert","edits":[[258,0,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[11,0,"20"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"insert","edits":[[43,0,"9594"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[12,0,"35a0df69"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"insert","edits":[[256,0,"da"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[55,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[90,0,"ba"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[15,0,"0d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[87,0,"a57c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[112,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[406,0,"bd30e6b1"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[71,0,"e4676abd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[77,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"insert","edits":[[359,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"insert","edits":[[744,0,"a638"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"insert","edits":[[544,0,"ff"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[731,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[368,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[418,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[128,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[257,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[434,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[141,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[52,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[96,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[168,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[403,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[10,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"delete","edits":[[748,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[473,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[9,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"delete","edits":[[68,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[601,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[14,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[19,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[281,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[43,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[285,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[66,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[458,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[65,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"delete","edits":[[32815,4,""]],"result":"ok"},
+ {"base":6,"kind":"delete","edits":[[421,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"delete","edits":[[1,4,""]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":6,"kind":"delete","edits":[[208,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"delete","edits":[[10,4,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[11,5,"630000019c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[8,8,"04000001000001cb"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[15,1,"cb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[10,6,"01ca00000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[8,8,"668457f400000001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[11,5,"7a000001c9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[9,7,"100001000001c9"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[15,1,"d1"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[11,2,"7802"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[11,1,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[13,3,"010000"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[13,1,"04"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"length","edits":[[8,8,"04000000f7f7d32d"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[11,3,"4c0001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[8,4,"ffffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[12,4,"32c4bbba"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[15,1,"98"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[11,4,"a6000009"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[9,3,"010000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[8,8,"04000001000001d2"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[12,4,"26afd998"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"length","edits":[[11,5,"88000001c9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"length","edits":[[15,1,"f2"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[14,2,"0201"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"length","edits":[[8,4,"b36e65db"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":6,"kind":"header","edits":[[11,1,"71"],[18,11,"f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"6f"],[18,11,"a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[136,1,"1b001fffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"85"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"69"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[51,81,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[16,1,"b805"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[136,1,"18ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"6a"],[32,17,"4152"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8c"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000582a20064f09080800101a20063efbda10101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[32,17,"4f5ba97f29fa50e4211f33e56e986342"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"23"],[16,119,"a4006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[30,1,"1b001fffffffffffff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"27"],[50,85,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000581a3006d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"67"],[16,33,"a4006a646174656b65796361700101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[16,121,"bf006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7e"],[16,120,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040018fff93c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"90"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a20070efbbbf6f72672e6578616d706c652e610101"]],"result":"ok"},
+ {"base":6,"kind":"header","edits":[[11,1,"6d"],[16,13,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a3006d6f72672e6578616d706c652e61010102f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[136,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[10,2,"0183"],[50,85,"79015c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400025010157a2ba032f78e23d8035e368345c8"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8a"],[32,17,"582021e2a74a5d91c2de38deb674e19671fd4a9675850570f8db086b1eb7dd325371"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[10,2,"0590"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400059841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7e"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040018ff5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[32,17,"4f3ff281f8638d3e91823f5279ca226e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[32,17,"4f8153707fb14a3d159c92e573cda01d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040019fffff6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7f"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[16,33,"a4006a646174656b65796361700101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[19,10,"444154454b4559434150"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[30,1,"c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[16,119,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[136,1,"1801"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[136,1,"190101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"9f"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000582a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[136,0,"1b00000001000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[136,1,"1818"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[29,20,"025010157a2ba032f78e23d8035e368345c80101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"b1"],[18,11,"78416161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"27"],[50,85,"f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[136,0,"1901"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[32,17,"4feedd9df297975561c5ace946b981fd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[32,17,"51cd3326bc5a76ba7f43cdde6938b083b006"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004001b000000010000000080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[30,1,"18ff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":6,"kind":"header","edits":[[30,1,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[136,1,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7e"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040018185f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"78"],[32,17,"4fe25a8fbb47340d5afd7f8c19fa55e4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8a"],[32,17,"58201d2f27dd50eddcfe868ea14497a6e1f72d4d7fdd1729c20de6d565579504e4b8"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"81"],[136,0,"1b00000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[10,2,"0193"],[50,85,"79016c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[136,0,"1900"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"69"],[32,17,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[30,1,"02"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7b"],[30,1,"190100"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"6a"],[32,17,"419c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"71"],[18,11,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b65796361700101025010157a2ba032f78e23d8035e368345c8037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400175f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936496a45774d4441696651"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"75"],[51,83,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"datekey","edits":[[11,1,"4e"],[51,83,"28646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[10,2,"01a2"],[50,85,"79017b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":6,"kind":"datekey","edits":[[10,2,"0156"],[50,85,"79012f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":6,"kind":"datekey","edits":[[102,1,"5a"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"61"],[51,84,"3b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a5851"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[10,2,"019b"],[50,85,"790174646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[103,1,"2e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[102,1,"39"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"2e"],[50,85,"69646b315f65794a325a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f546b356651"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"datekey","edits":[[77,1,"41"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544a39"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":6,"kind":"datekey","edits":[[57,1,"2e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[10,2,"0196"],[50,85,"79016f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[11,1,"7e"],[51,84,"58646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364e6a59344f4451794d544a39"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"datekey","edits":[[11,1,"4f"],[51,84,"29646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[96,1,"2f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":6,"kind":"datekey","edits":[[133,1,"58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[15,1,"c8"],[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[618,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[175,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[617,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[626,44,""]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[367,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[615,1,"32"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[172,0,"61"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[713,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[717,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[735,1,"2b"]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[614,1,"56"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[14,2,"02c7"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a73394a7838764331564c374c706a4669744167636a326a534f2f634a4c76427262545666324e2f31764d56624e7667446b53687574383037452f5a59456731370a4449743950487270437930577665637855674f4446584e3476305141686a5359795073437177536f516a552f5a5655596c755a6c6d7876435344786e706f68760a507857336950482b64324a6c2f646144556f3831626f757771727876315363456e4b594b462b76544836590a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"89"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[762,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"da"],[169,3,"38343436373434303733373039353531363136"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[459,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[620,6,"746c6f636b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"c7"],[168,3,""]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[614,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[410,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"c9"],[301,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"b5"],[137,21,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[162,5,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[168,0,"30"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[620,6,"746c6f636b32"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[14,2,"00cd"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[670,0,"2041414141"]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[414,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[616,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[167,0,"32"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"c9"],[366,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[595,21,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[459,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[172,0,"30"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[670,0,"41"]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[401,1,"2f"]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[620,6,"736372797074"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[716,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":6,"kind":"age","edits":[[716,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[686,1,"3d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"c9"],[410,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[162,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":6,"kind":"age","edits":[[714,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[237,0,"41"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[411,0,"41"]],"result":"ok"},
+ {"base":6,"kind":"age","edits":[[15,1,"c9"],[236,1,""]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[716,0,"3e205832353531392055656941342f794d4a384d4f784831564e3539475451556a59442b5838583470706f4f4473752f306669300a42535a6d5564694d615a354b514c67487674703453536d532b4b6670593630356c617a4d424834706e76450a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[671,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[620,1,"78"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[158,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[15,1,"cf"],[237,0,"2031303030"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":6,"kind":"age","edits":[[15,1,"cb"],[367,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[715,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":6,"kind":"age","edits":[[15,1,"9e"],[415,44,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":6,"kind":"age","edits":[[683,1,"41"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[378,1,"4f"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[73,1,"47"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[981,1,"41"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[440,1,"7a"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[0,1,"46"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":7,"kind":"flip","edits":[[694,1,"70"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[6,1,"20"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":7,"kind":"flip","edits":[[267,1,"34"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[905,1,"32"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[194,1,"10"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[283,1,"11"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[155,1,"27"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[657,1,"52"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[104,1,"5d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[28,1,"78"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"flip","edits":[[752,1,"73"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[729,1,"61"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[12,1,"04"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"flip","edits":[[9,1,"08"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":7,"kind":"flip","edits":[[34,1,"7c"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[83,1,"7a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[99,1,"37"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[534,1,"8c"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[94,1,"7c"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[353,1,"d0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[309,1,"d2"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[749,1,"e8"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"flip","edits":[[728,1,"73"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[964,1,"7f"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[104,1,"51"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[301,1,"73"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[117,1,"47"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[753,1,"77"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[718,1,"24"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"flip","edits":[[427,1,"60"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[433,1,"fa"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[134,1,"70"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[714,1,"1a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"flip","edits":[[73,1,"63"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"flip","edits":[[341,1,"76"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[14,1,"09"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[134,1,"32"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":7,"kind":"flip","edits":[[12,1,"10"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"flip","edits":[[13,1,"08"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[690,1,"49"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[1038,1,"ab"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[49,1,"23"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"flip","edits":[[3,1,"71"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":7,"kind":"flip","edits":[[18,1,"62"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"flip","edits":[[619,1,"24"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"flip","edits":[[30,1,"09"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":7,"kind":"flip","edits":[[43,1,"60"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[732,1,"46"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[167,1,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"flip","edits":[[691,1,"51"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[211,1,"73"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":7,"kind":"flip","edits":[[706,1,"5b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"flip","edits":[[627,1,"7a"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[534,1,"98"]],"result":"ok"},
+ {"base":7,"kind":"flip","edits":[[557,1,"86"]],"result":"ok"},
+ {"base":7,"kind":"byte","edits":[[56,1,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[238,1,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"byte","edits":[[91,1,"40"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[114,1,"00"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[84,1,"40"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[1,1,"80"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":7,"kind":"byte","edits":[[76,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[588,1,"60"]],"result":"ok"},
+ {"base":7,"kind":"byte","edits":[[64,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[851,1,"2d"]],"result":"ok"},
+ {"base":7,"kind":"byte","edits":[[6,1,"0a"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":7,"kind":"byte","edits":[[86,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[53,1,"60"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[706,1,"a0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"byte","edits":[[273,1,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"byte","edits":[[72,1,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[28,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[9,1,"f6"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"byte","edits":[[715,1,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"byte","edits":[[61,1,"1b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[24,1,"1b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"byte","edits":[[13,1,"40"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"byte","edits":[[715,1,"7f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"byte","edits":[[516,1,"1b"]],"result":"ok"},
+ {"base":7,"kind":"byte","edits":[[130,1,"0a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"byte","edits":[[3,1,"80"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":7,"kind":"byte","edits":[[217,1,"2d"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":7,"kind":"byte","edits":[[615,1,"a0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"byte","edits":[[37,1,"40"]],"result":"ok"},
+ {"base":7,"kind":"byte","edits":[[11,1,"00"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"truncate","edits":[[760,291,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[487,564,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[697,354,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[796,255,""]],"result":"ok"},
+ {"base":7,"kind":"truncate","edits":[[607,444,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[568,483,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[751,300,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[231,820,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[187,864,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[709,342,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[236,815,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[346,705,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[806,245,""]],"result":"ok"},
+ {"base":7,"kind":"truncate","edits":[[441,610,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[606,445,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[307,744,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[592,459,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[653,398,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[564,487,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[414,637,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[632,419,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"truncate","edits":[[195,856,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[314,737,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[183,868,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"truncate","edits":[[613,438,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[11,0,"20"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"insert","edits":[[50,0,"77f1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[697,0,"ff"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[105,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[456,0,"b255"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"insert","edits":[[115,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[13,0,"af"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[752,0,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[650,0,"3c"]],"result":"ok"},
+ {"base":7,"kind":"insert","edits":[[135,0,"f9e63f30"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[15,0,"b61214db"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[56,0,"1108"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[204,0,"74885cdf"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"insert","edits":[[536,0,"d016"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[856,0,"00"]],"result":"ok"},
+ {"base":7,"kind":"insert","edits":[[119,0,"e06415"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[722,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[590,0,"7d36a5b5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[121,0,"f4f3"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[703,0,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[55,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[229,0,"1f66ce12"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"insert","edits":[[100,0,"6bebc2"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[670,0,"00"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[29,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"insert","edits":[[417,0,"05f62079"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"insert","edits":[[435,0,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"insert","edits":[[741,0,"d974"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[668,0,"fbe168"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"insert","edits":[[939,0,"42e30d"]],"result":"ok"},
+ {"base":7,"kind":"delete","edits":[[37,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[76,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[7,1,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":7,"kind":"delete","edits":[[546,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"delete","edits":[[685,3,""]],"result":"ok"},
+ {"base":7,"kind":"delete","edits":[[116,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[12,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[133,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[290,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"delete","edits":[[691,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"delete","edits":[[95,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[104,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[5,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"delete","edits":[[605,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"delete","edits":[[55,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[126,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[85,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[275,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"delete","edits":[[12,4,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"delete","edits":[[129,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[43,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[242,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"delete","edits":[[596,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"delete","edits":[[24,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[13,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[971,1,""]],"result":"ok"},
+ {"base":7,"kind":"delete","edits":[[71,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[57,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"delete","edits":[[623,3,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":7,"kind":"delete","edits":[[287,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"length","edits":[[11,1,"7a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[10,6,"01ca00000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,5,"ff000001c9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,1,"4f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[12,4,"3628d88c"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"length","edits":[[13,3,"100000"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"length","edits":[[15,1,"c9"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"length","edits":[[11,1,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,5,"78000001cb"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,5,"78000001c6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[15,1,"cb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"length","edits":[[8,6,"377651f80002"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"length","edits":[[13,3,"100001"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"length","edits":[[12,4,"04000000"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"length","edits":[[11,5,"7a00000001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[10,2,"ffff"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":7,"kind":"length","edits":[[11,1,"ad"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,1,"42"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[8,8,"0400000100000100"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"length","edits":[[11,1,"82"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[15,1,"d8"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"length","edits":[[11,5,"986b82523a"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"length","edits":[[8,4,"df3b3d8c"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":7,"kind":"length","edits":[[11,1,"7f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"length","edits":[[11,5,"64000001cb"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7f"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441786651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":7,"kind":"header","edits":[[10,2,"0199"],[50,85,"790172646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"84"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040018ff1b00200000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040008f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[136,0,"1901"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000580"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6f"],[18,11,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7c"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040008c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6d"],[16,13,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"4e"],[51,83,"28646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6a"],[32,17,"4115"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"2d"],[50,85,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"81"],[136,0,"1b00200000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000682a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"8c"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000582a20064f09080800101a20063efbda10101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"25"],[50,85,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004001b0000000100000000a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"8a"],[32,17,"58202f4d9e0f8434c84a3a6e0854d95bb90e971d12ff0aef700845fdfd51632cd9ee"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"81"],[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6a"],[32,17,"4130"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7c"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040017c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7d"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040008f93c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"23"],[16,119,"a4006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400181820"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[136,0,"1900"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"69"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6f"],[18,11,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[19,10,"444154454b4559434150"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"25"],[50,85,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[29,106,"037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583002501a6c88f0fa7408f649cf64b929cb92890101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7d"],[136,0,"1a000100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[16,119,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000681a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"71"],[51,64,"4b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a484a68626d513663585670593274755a5851"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[10,2,"0590"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400069841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[136,0,"1a000100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7c"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004001818"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"a1"],[16,121,"a7006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"90"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000681a3006d6f72672e6578616d706c652e610101024174"]],"result":"ok"},
+ {"base":7,"kind":"header","edits":[[32,17,"51637f91c7970191905d768ab12e5f1214b6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"25"],[50,85,"f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[10,2,"057c"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400069840a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101"]],"result":"ok"},
+ {"base":7,"kind":"header","edits":[[11,1,"83"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004001b0000000100000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[136,0,"f93c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"82"],[18,11,"73646174656b6579732d6163636573732d6b6579"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"69"],[32,17,"f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004001818f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6f"],[18,11,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"95"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000581a2006d6f72672e6578616d706c652e61011b00000001000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6a"],[32,17,"41ce"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[136,1,"190101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"81"],[30,1,"1b001fffffffffffff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6a"],[32,17,"4118"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"6a"],[32,17,"415f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040008a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[30,1,"18ff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"90"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000681a20070efbbbf6f72672e6578616d706c652e610101"]],"result":"ok"},
+ {"base":7,"kind":"header","edits":[[11,1,"78"],[136,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[137,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364c544639"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7a"],[32,17,"519c1f2b118324abb9356b71153eaee9c2fb"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004000101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"7d"],[16,120,"a6006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040007f93c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b6579636170010102501a6c88f0fa7408f649cf64b929cb9289037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[11,1,"8a"],[32,17,"5820ab53dac70e24946a266fc64cf0992fb4dcdbf34053042099e20d0601fdfbe003"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"header","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":7,"kind":"datekey","edits":[[132,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544a39"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":7,"kind":"datekey","edits":[[10,2,"0181"],[50,85,"79015a646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":7,"kind":"datekey","edits":[[133,1,"6e"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":7,"kind":"datekey","edits":[[67,1,"2d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"61"],[51,84,"3b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a5851"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"75"],[51,81,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":7,"kind":"datekey","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d365a585a74626d56304f6e597849697769636d3931626d51694f6a45774d444639"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"68"],[51,84,"42646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c43"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"60"],[51,84,"3a646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a58"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"75"],[51,83,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d48"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[100,1,"2e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[95,1,"41"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544639"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":7,"kind":"datekey","edits":[[79,1,"2b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[113,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"2c"],[50,85,"67646b315f65794a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[125,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[10,2,"0160"],[50,85,"790139646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"73"],[51,84,"4d646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[11,1,"4f"],[51,84,"29646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[10,2,"01a5"],[50,85,"79017e646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"datekey","edits":[[10,2,"016d"],[50,85,"790146646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[14,2,"00cd"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[618,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[671,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[670,0,"206578747261"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[664,1,"66"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[716,0,"3e2058323535313920722b684e386c37662b77514e53336d6974624b4f4c7a6654556239624f775074316a7471316a54575552550a74724b706449784d7863355642796774634a4b697136417459644d33494d624c42503459674265667a6b380a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":7,"kind":"age","edits":[[14,2,"02c7"],[413,0,"3e20746c6f636b203130303120353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a70754d73455a577266774d74454b714141794e39544c48356e346d497930675371576f676f6b5159764f2b644b5157535477792f6e784e312b4a794a536967770a47454a746c475234653479393256494b57717048705372625a42322b2b384143346c42353765744c624c4b637362414e786150343871657a2b762f5652696b4a0a506a61393536786c6f784d6875484e466f6a354e3430587758784749515166683430733473393638646b490a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[615,1,"32"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[716,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[620,6,"746c6f636b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":7,"kind":"age","edits":[[172,0,"61"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[302,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[411,0,"41"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[175,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[167,0,"32"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[714,0,"41"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[717,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[303,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[162,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[614,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"c9"],[366,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cf"],[237,0,"2041414141"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":7,"kind":"age","edits":[[15,1,"9e"],[415,44,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[14,2,"021a"],[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[413,0,"3e20746c6f636b203130303120353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a70754d73455a577266774d74454b714141794e39544c48356e346d497930675371576f676f6b5159764f2b644b5157535477792f6e784e312b4a794a536967770a47454a746c475234653479393256494b57717048705372625a42322b2b384143346c42353765744c624c4b637362414e786150343871657a2b762f5652696b4a0a506a61393536786c6f784d6875484e466f6a354e3430587758784749515166683430733473393638646b490a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[669,1,""]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[15,1,"c8"],[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[714,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[156,1,"56"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[14,2,"022c"],[413,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[670,0,"41"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[626,44,""]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[158,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[455,1,"2f"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[382,1,"5f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"db"],[413,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[159,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[716,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[698,1,"5f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[716,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[459,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[627,38,"522b484e384c37462b57514e53334d4954424b4f4c5a4654554239424f575054314a5451314a"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[15,1,"89"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[158,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[236,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[595,21,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[367,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":7,"kind":"age","edits":[[620,6,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":7,"kind":"age","edits":[[616,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[15,1,"cf"],[237,0,"2031303030"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":7,"kind":"age","edits":[[695,1,"2f"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[15,1,"cb"],[162,5,"736372797074"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":7,"kind":"age","edits":[[424,1,"41"]],"result":"ok"},
+ {"base":7,"kind":"age","edits":[[762,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[617,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":7,"kind":"age","edits":[[668,1,"41"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[149,1,"2d"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[164,1,"74"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[672,1,"25"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[287,1,"32"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[770,1,"da"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[542,1,"ba"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[671,1,"61"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[757,1,"43"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[12,1,"02"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[276,1,"63"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[250,1,"37"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"flip","edits":[[441,1,"72"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[49,1,"43"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"flip","edits":[[34,1,"ba"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[3,1,"35"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[123,1,"77"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"flip","edits":[[757,1,"4a"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[379,1,"46"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[135,1,"06"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"flip","edits":[[468,1,"70"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[226,1,"34"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"flip","edits":[[3,1,"33"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[485,1,"67"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[1,1,"cb"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[184,1,"74"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[175,1,"69"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[345,1,"78"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[2,1,"c3"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[113,1,"4a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"flip","edits":[[526,1,"6d"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[737,1,"6e"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[262,1,"63"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"flip","edits":[[830,1,"7c"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[37,1,"c8"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[172,1,"63"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[334,1,"5b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[93,1,"47"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":8,"kind":"flip","edits":[[997,1,"ec"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[939,1,"cc"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[3,1,"11"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[861,1,"02"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[7,1,"08"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":8,"kind":"flip","edits":[[230,1,"b7"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[341,1,"4d"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[216,1,"22"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"flip","edits":[[785,1,"41"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[0,1,"c4"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[926,1,"b7"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[166,1,"6e"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[762,1,"0b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[121,1,"37"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"flip","edits":[[198,1,"2e"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"flip","edits":[[61,1,"78"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"flip","edits":[[777,1,"e8"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"flip","edits":[[6,1,"40"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":8,"kind":"flip","edits":[[889,1,"a6"]],"result":"ok"},
+ {"base":8,"kind":"flip","edits":[[22,1,"67"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"flip","edits":[[3,1,"30"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"flip","edits":[[123,1,"55"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"flip","edits":[[6,1,"01"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":8,"kind":"byte","edits":[[886,1,"80"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[221,1,"2d"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"byte","edits":[[487,1,"2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[265,1,"80"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[708,1,"20"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[1,1,"0a"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"byte","edits":[[768,1,"60"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"byte","edits":[[397,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[217,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[489,1,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[6,1,"f6"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":8,"kind":"byte","edits":[[74,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"byte","edits":[[354,1,"60"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[393,1,"a0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[731,1,"18"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"byte","edits":[[420,1,"2f"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[816,1,"40"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"byte","edits":[[1045,1,"80"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[677,1,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"byte","edits":[[969,1,"00"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[47,1,"1b"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[422,1,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[18,1,"0a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"byte","edits":[[45,1,"80"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[754,1,"9d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"byte","edits":[[453,1,"2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[229,1,"7f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[197,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"byte","edits":[[1001,1,"80"]],"result":"ok"},
+ {"base":8,"kind":"byte","edits":[[0,1,"18"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"truncate","edits":[[725,400,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[751,374,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[568,557,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[395,730,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[409,716,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[810,315,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[822,303,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[723,402,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[504,621,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[643,482,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[112,1013,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":8,"kind":"truncate","edits":[[172,953,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":8,"kind":"truncate","edits":[[712,413,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[874,251,""]],"result":"ok"},
+ {"base":8,"kind":"truncate","edits":[[345,780,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[684,441,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"truncate","edits":[[872,253,""]],"result":"ok"},
+ {"base":8,"kind":"truncate","edits":[[573,552,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[508,617,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[449,676,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[197,928,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[422,703,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"truncate","edits":[[837,288,""]],"result":"ok"},
+ {"base":8,"kind":"truncate","edits":[[878,247,""]],"result":"ok"},
+ {"base":8,"kind":"truncate","edits":[[739,386,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[11,0,"ff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"insert","edits":[[119,0,"eff0a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[822,0,"d4a2efef"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[124,0,"cf51e326"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[36,0,"ff4a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[1093,0,"ed67c40a"]],"result":"ok"},
+ {"base":8,"kind":"insert","edits":[[675,0,"8b2e406f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[702,0,"637b4b"]],"result":"ok"},
+ {"base":8,"kind":"insert","edits":[[343,0,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[152,0,"f6f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[1032,0,"c3"]],"result":"ok"},
+ {"base":8,"kind":"insert","edits":[[129,0,"dbef"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[1105,0,"256c"]],"result":"ok"},
+ {"base":8,"kind":"insert","edits":[[759,0,"b5ed16e8"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[276,0,"32bbcdcb"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[9,0,"305d8c67"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"insert","edits":[[2,0,"7e7f"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":8,"kind":"insert","edits":[[150,0,"0d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[819,0,"ce68f8b5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[445,0,"d8e653"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[317,0,"4fc114"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[170,0,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[14,0,"2222"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[8,0,"0931"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"insert","edits":[[101,0,"b29e18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"insert","edits":[[336,0,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[391,0,"a8dd7e"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[186,0,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"insert","edits":[[734,0,"bb40e0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"insert","edits":[[453,0,"8465bba9"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"delete","edits":[[6,3,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"delete","edits":[[299,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"delete","edits":[[59,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[550,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[795,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[981,2,""]],"result":"ok"},
+ {"base":8,"kind":"delete","edits":[[1106,3,""]],"result":"ok"},
+ {"base":8,"kind":"delete","edits":[[374,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"delete","edits":[[56,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[5,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"delete","edits":[[833,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[14,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[4,1,""]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":8,"kind":"delete","edits":[[401,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"delete","edits":[[776,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[1097,1,""]],"result":"ok"},
+ {"base":8,"kind":"delete","edits":[[20,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[467,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"delete","edits":[[768,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[11,3,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"delete","edits":[[10,4,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"delete","edits":[[696,3,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":8,"kind":"delete","edits":[[432,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[809,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[710,4,""]],"result":"ok"},
+ {"base":8,"kind":"delete","edits":[[14,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[745,4,""]],"result":"ok"},
+ {"base":8,"kind":"delete","edits":[[46,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"delete","edits":[[562,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"delete","edits":[[818,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[11,1,"00"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[8,4,"f2f35fb8"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[15,1,"b2"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[11,5,"9e000001ef"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[10,6,"01ee0000009f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[14,2,"0228"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[14,2,"0201"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[8,4,"ffffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[11,5,"a0000001e5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[8,4,"f85f9170"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[15,1,"f5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[9,7,"10000100000200"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[11,5,"1000000206"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[15,1,"ef"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"length","edits":[[11,5,"d3000001ed"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[11,1,"a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[12,1,"04"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[11,1,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[12,4,"ffffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[11,1,"d2"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"length","edits":[[11,5,"9ee180f035"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[15,1,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"length","edits":[[12,4,"f647f380"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[8,8,"04000001000001ef"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":8,"kind":"length","edits":[[11,1,"9e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[10,2,"057c"],[138,37,"9840a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101"]],"result":"ok"},
+ {"base":8,"kind":"header","edits":[[11,1,"ab"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"6f"],[51,84,"23646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"93"],[16,13,"a5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,119,"a5006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,159,"bf006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656cff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"f5"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[19,10,"444154454b4559434150"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c0101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c0740"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a8"],[18,11,"73646174656b6579732d6163636573732d6b6579"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"7c"],[138,37,"c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[136,1,"17"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[17,120,"0400010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"b5"],[16,121,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000581a3006d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a2"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f794d4441776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"9e"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5334776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":8,"kind":"header","edits":[[10,2,"05b6"],[16,121,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300400059841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a7"],[136,1,"1b001fffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,159,"a5006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300400"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"8c"],[138,37,"82a20064f09080800101a20063efbda10101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a4"],[51,84,"58646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364e6a59344f4451794d544a39"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"header","edits":[[17,158,"0681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300400006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a7"],[30,1,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[10,2,"013e"],[175,0,"a6006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[32,17,"5129f911fe920262a1d29460e335dae64f4d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"9d"],[16,15,"a5006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[31,144,"0681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830040002503ab2c06d482609a9c7ae92f672599883"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[32,17,"51051df537a408189a53172fb800da8f6ab5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"8b"],[139,36,"a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[136,1,"190101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"4d"],[50,85,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"49"],[16,119,"a5006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a2"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c074100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[175,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c0840"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"9e"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"8f"],[141,34,"6d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a9"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c171b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"bb"],[16,120,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000581a2006d6f72672e6578616d706c652e61011b00000001000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[30,1,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"af"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d58"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":8,"kind":"header","edits":[[11,1,"a7"],[136,0,"1b00200000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[136,1,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a7"],[136,0,"1b00000001000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[136,1,"1801"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[51,84,"58646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364e6a59344f4451794d544a39"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"64"],[51,84,"18646b315f65794a325a584a7a61573975496a6f784c434a75"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a4"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c1818f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"8f"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[124,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a2"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c176178"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"9e"],[174,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"9e"],[32,17,"4f60f966f2048a7bf727297a6a696308"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"c5"],[16,121,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[50,85,"64646b315f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a3"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c17f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[16,1,"b806"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[16,121,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000580"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a2"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c18ff00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a5"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"95"],[18,11,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"90"],[32,17,"412e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"93"],[141,34,"6d6f72672e6578616d706c652e610101026474657874"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[136,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a7"],[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[50,85,"790141646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a0"],[16,1,"b806"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a9"],[16,159,"a7006a646174656b6579636170010102503ab2c06d482609a9c7ae92f672599883037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004000681a300716f72672e6578616d706c652e6c6162656c0101024c7075626c6963206c6162656c1b000000010000000020"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"95"],[18,11,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[11,1,"a1"],[136,0,"1901"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"header","edits":[[138,37,"82a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e610101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"4f"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"a8"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544a39"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":8,"kind":"datekey","edits":[[11,1,"a2"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936496a45774d4441696651"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"af"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"9c"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d365a585a74626d56304f6e597849697769636d3931626d51694f6a49774d444239"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"a0"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":8,"kind":"datekey","edits":[[63,1,"30"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"9b"],[51,83,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"datekey","edits":[[11,1,"97"],[51,64,"4b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a484a68626d513663585670593274755a5851"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":8,"kind":"datekey","edits":[[127,1,"2d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[133,1,"58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"datekey","edits":[[11,1,"99"],[51,84,"4d646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"68"],[51,84,"1c646b315f65794a325a584a7a61573975496a6f784c434a755a585233"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[99,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[10,2,"017a"],[50,85,"79012d646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[129,5,"546b354f58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"datekey","edits":[[101,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"86"],[51,84,"3a646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a58"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[110,1,"39"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"5e"],[50,85,"73646b315f65794a325a584a7a61573975496a6f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"9c"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364c544639"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[11,1,"50"],[50,85,"65646b315f65"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[92,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"datekey","edits":[[129,1,"2f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":8,"kind":"age","edits":[[15,1,"ad"],[210,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[196,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[792,44,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[691,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[14,2,"0250"],[451,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[451,0,"3e20746c6f636b203230303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b2b306a43503968744f6b33316e2f59682b72766156677a6e6a4844516b4b757556494679436d2f517534776979487430615a66614d4e5172495a6462336f380a4535524d386e4930555159715870576f484d774744423269353446576f70504d756f4d7a454956764e6978654d444e5179346b5873564551342b6e70345a72750a39773058314d506c3674636c4a4c462f77393639637846314f324e3450776b2b327365326a4558576c68300a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[276,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[744,0,"2031303030"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[836,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[788,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[450,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[405,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[14,2,"00f1"],[198,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[790,0,"3e2058323535313920652f526d705948347a4a72734c656b7244366d347169684f75682b56384d76537133326a66796b543154380a4a61344471316869722f73634243634c642b687a74444835435a4d307246523668637630445751385165300a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":8,"kind":"age","edits":[[701,39,"452f524d505948345a4a52534c454b5244364d345149484f55482b56384d56535133324a46594b"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[14,2,"02eb"],[451,0,"3e20746c6f636b203230303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b2b306a43503968744f6b33316e2f59682b72766156677a6e6a4844516b4b757556494679436d2f517534776979487430615a66614d4e5172495a6462336f380a4535524d386e4930555159715870576f484d774744423269353446576f70504d756f4d7a454956764e6978654d444e5179346b5873564551342b6e70345a72750a39773058314d506c3674636c4a4c462f77393639637846314f324e3450776b2b327365326a4558576c68300a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"f4"],[275,0,"206578747261"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[692,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[210,0,"30"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[488,1,"41"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[206,4,"393939"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"ed"],[274,1,""]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[705,1,"2b"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[789,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[200,5,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":8,"kind":"age","edits":[[765,1,"3d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[743,1,""]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[276,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[745,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"ec"],[206,4,"2d31"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[14,2,"027f"],[451,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":8,"kind":"age","edits":[[257,1,"61"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[15,1,"ec"],[194,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[744,0,"2041414141"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[196,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"c2"],[453,44,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[744,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[449,0,"41"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[15,1,"ed"],[448,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[788,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[694,6,"746c6f636b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":8,"kind":"age","edits":[[281,1,"5f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"ff"],[451,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"ed"],[452,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[405,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[694,1,"78"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":8,"kind":"age","edits":[[836,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[717,1,"2b"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[690,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[15,1,"eb"],[206,3,""]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[210,0,"61"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[200,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":8,"kind":"age","edits":[[776,1,"3d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[14,2,"023e"],[451,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[275,0,"41"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":8,"kind":"age","edits":[[15,1,"ef"],[197,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":8,"kind":"age","edits":[[669,21,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[731,1,"30"]],"result":"ok"},
+ {"base":8,"kind":"age","edits":[[688,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":8,"kind":"age","edits":[[213,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"flip","edits":[[404,1,"38"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[311,1,"14"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[275,1,"73"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[301,1,"7c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[6,1,"04"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"flip","edits":[[30,1,"03"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"flip","edits":[[258,1,"7c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[423,1,"b3"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[2372,1,"ab"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[28,1,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"flip","edits":[[2409,1,"37"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[181,1,"32"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"flip","edits":[[395,1,"6b"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[102,1,"16"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[31,1,"06"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"flip","edits":[[101,1,"48"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":9,"kind":"flip","edits":[[2334,1,"53"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[13,1,"80"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[368,1,"76"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[779,1,"ff"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[79,1,"31"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[116,1,"4d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[2285,1,"11"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[2530,1,"7e"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[2457,1,"ad"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[76,1,"1a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[95,1,"4c"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[83,1,"f2"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"flip","edits":[[35,1,"d7"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[1752,1,"a1"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[1320,1,"f7"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[15,1,"70"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[864,1,"d3"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[2283,1,"3f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[49,1,"13"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"flip","edits":[[12,1,"20"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"flip","edits":[[1,1,"0b"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"flip","edits":[[8,1,"40"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"flip","edits":[[2412,1,"c3"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[110,1,"71"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[185,1,"6b"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"flip","edits":[[391,1,"b8"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[161,1,"30"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[2417,1,"6a"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[15,1,"54"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[5,1,"40"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"flip","edits":[[301,1,"f4"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[125,1,"4b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[89,1,"43"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"flip","edits":[[2398,1,"79"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[311,1,"3c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[107,1,"71"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":9,"kind":"flip","edits":[[236,1,"33"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"flip","edits":[[7,1,"40"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"flip","edits":[[253,1,"69"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[278,1,"c3"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[830,1,"46"]],"result":"ok"},
+ {"base":9,"kind":"flip","edits":[[302,1,"0e"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"flip","edits":[[15,1,"d0"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"flip","edits":[[4,1,"12"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":9,"kind":"byte","edits":[[15,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[63,1,"7f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[2339,1,"ff"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[2359,1,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[1686,1,"1b"]],"result":"ok"},
+ {"base":9,"kind":"byte","edits":[[113,1,"40"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[128,1,"00"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[2342,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[294,1,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"byte","edits":[[2522,1,"40"]],"result":"ok"},
+ {"base":9,"kind":"byte","edits":[[127,1,"b7"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[70,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[250,1,"80"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"byte","edits":[[124,1,"0a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[24,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[78,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[2548,1,"60"]],"result":"ok"},
+ {"base":9,"kind":"byte","edits":[[1,1,"80"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"byte","edits":[[2324,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[89,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[135,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[4,1,"80"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":9,"kind":"byte","edits":[[17,1,"a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[78,1,"0a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"byte","edits":[[407,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"byte","edits":[[5,1,"a0"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"byte","edits":[[20,1,"2d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"byte","edits":[[2362,1,"18"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"byte","edits":[[364,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"byte","edits":[[77,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"truncate","edits":[[189,2532,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[2184,537,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[2285,436,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"truncate","edits":[[2370,351,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"truncate","edits":[[1344,1377,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1656,1065,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1497,1224,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[820,1901,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[275,2446,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[969,1752,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1310,1411,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[677,2044,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[561,2160,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[254,2467,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1971,750,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1583,1138,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[28,2693,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":9,"kind":"truncate","edits":[[1721,1000,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1425,1296,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[1709,1012,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[436,2285,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[2218,503,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[554,2167,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"truncate","edits":[[2445,276,""]],"result":"ok"},
+ {"base":9,"kind":"truncate","edits":[[2017,704,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[3,0,"2c"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"insert","edits":[[252,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[114,0,"35a7f7"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"insert","edits":[[214,0,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[2266,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[11,0,"259b3502"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"insert","edits":[[2368,0,"93d9a9f3"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[41,0,"6f94ec2e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"insert","edits":[[2419,0,"7a8d23"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[327,0,"ef88"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[2514,0,"ff"]],"result":"ok"},
+ {"base":9,"kind":"insert","edits":[[66,0,"0e59a3bb"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"insert","edits":[[925,0,"e3f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[282,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[2281,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[7,0,"9ad7"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"insert","edits":[[228,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[71,0,"70171a32"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"insert","edits":[[3,0,"fedc9e"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"insert","edits":[[248,0,"6229f1"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[187,0,"e5bd09a5"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"insert","edits":[[128,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"insert","edits":[[2410,0,"ff"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[3,0,"f969d3"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"insert","edits":[[2265,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[2383,0,"14"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[5,0,"20"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":9,"kind":"insert","edits":[[2394,0,"d465c076"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"insert","edits":[[3,0,"706d"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"insert","edits":[[9,0,"ff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"delete","edits":[[46,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[140,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[384,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[2719,2,""]],"result":"ok"},
+ {"base":9,"kind":"delete","edits":[[2350,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"delete","edits":[[55,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[2303,2,""]],"result":"ok"},
+ {"base":9,"kind":"delete","edits":[[289,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[75,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[2305,3,""]],"result":"ok"},
+ {"base":9,"kind":"delete","edits":[[21,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[442,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[2,1,""]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":9,"kind":"delete","edits":[[325,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[200,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"delete","edits":[[42,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[2341,1,""]],"result":"ok"},
+ {"base":9,"kind":"delete","edits":[[11,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"delete","edits":[[189,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"delete","edits":[[257,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[134,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[137,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[434,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"delete","edits":[[727,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"delete","edits":[[2422,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"delete","edits":[[54,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[106,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[27,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[28,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"delete","edits":[[1411,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"length","edits":[[10,6,"085000000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[10,6,"087904000001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[11,5,"7a00100000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[11,5,"7000100000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[8,8,"ffffffff00000000"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[11,5,"9f0000086e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[12,1,"04"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[14,2,"0010"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"length","edits":[[8,8,"ebb6539d00000849"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[8,8,"be36512900000851"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[15,1,"51"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"length","edits":[[11,5,"7800100001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[8,4,"0ff45597"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[11,3,"7a0001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[11,1,"ad"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[9,7,"08007900000839"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":9,"kind":"length","edits":[[15,1,"4f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"length","edits":[[12,1,"80"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[12,4,"04000000"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"length","edits":[[11,1,"78"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[12,4,"04000001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"length","edits":[[11,4,"7a000009"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[11,5,"7a00000867"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[11,1,"7a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"length","edits":[[8,1,"10"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":9,"kind":"header","edits":[[11,1,"95"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010681a3006d6f72672e6578616d706c652e61010102465dbe20925311"]],"result":"ok"},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[16,1,"b805"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[30,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[136,1,"f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[29,106,"037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300250fe68d3b3bb59db0c14b7ef57d8d6cb5e0101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[10,2,"019f"],[50,85,"790178646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[16,120,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[32,17,"51013f5e677e8f37d5e3fce3918dc9bc53b9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[119,1,"39"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a3006d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[30,1,"190100"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[137,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040119fffff6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040107c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a3006d6f72672e6578616d706c652e6101010300"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"78"],[136,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[30,1,"18ff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[137,0,"a5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"header","edits":[[30,1,"02"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"70"],[18,11,"4100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"23"],[16,119,"a4006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010681a3006d6f72672e6578616d706c652e6101010300"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7f"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[136,1,"03"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[30,1,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"77"],[16,15,"a4006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"71"],[51,64,"4b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a484a68626d513663585670593274755a5851"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":9,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004011818f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"6b"],[32,17,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[16,1,"b805"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"77"],[18,11,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"6d"],[16,13,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"a1"],[16,120,"a7006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":9,"kind":"header","edits":[[136,1,"1b001fffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8c"],[16,120,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010582a20064f09080800101a20063efbda101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[136,1,"18ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"82"],[18,11,"73646174656b6579732d6163636573732d6b6579"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[30,1,"4100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":9,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[136,1,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[30,1,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8a"],[32,17,"5820c221ceea124f1cd93ffa7427673259c37c8ecc1a3e0a44b63c50fb7d83780d2e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"93"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010681a3006d6f72672e6578616d706c652e6101010244762fecf2"]],"result":"ok"},
+ {"base":9,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401085f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040118ffa0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[10,2,"016b"],[50,85,"790144646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401074100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010680"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8d"],[16,120,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010681a2006d6f72672e6578616d706c652e6101"]],"result":"ok"},
+ {"base":9,"kind":"header","edits":[[11,1,"85"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004011b0000000100000000f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004011b0000000100000000f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"78"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401171b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010250fe68d3b3bb59db0c14b7ef57d8d6cb5e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[16,119,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"8a"],[32,17,"58207d2fc6911a322315a8d4890061c0ec45c3e9dd317fb2d10df1b60fc10e7800c2"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"78"],[32,17,"4f05565e20c95b5ea91951420e8a9763"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"6f"],[18,11,"f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7e"],[16,121,"a6006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830040118185f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"7b"],[136,1,"190100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"b1"],[18,11,"78416161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"header","edits":[[11,1,"70"],[18,11,"6178"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"5d"],[51,84,"37646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"75"],[51,81,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[10,2,"016d"],[50,85,"790146646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"6c"],[51,84,"46646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a796233"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[10,2,"01a3"],[50,85,"79017c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d4830414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"89"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[10,2,"0189"],[50,85,"790162646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936496a45774d4441696651"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[10,2,"0163"],[50,85,"79013c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d365a585a74626d56304f6e597849697769636d3931626d51694f6a45774d444239"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":9,"kind":"datekey","edits":[[133,1,"58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":9,"kind":"datekey","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364c544639"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[119,1,"3d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[10,2,"01a2"],[50,85,"79017b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[60,1,"2f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[60,1,"7a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[78,1,"39"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"42"],[51,84,"1c646b315f65794a325a584a7a61573975496a6f784c434a755a585233"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[11,1,"82"],[51,84,"5c646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f444d354d444d784e6a55344d544639"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":9,"kind":"datekey","edits":[[11,1,"32"],[50,85,"6d646b315f65794a325a584a7a61"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"datekey","edits":[[110,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":9,"kind":"age","edits":[[2286,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[14,2,"0753"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2386,0,"3e2058323535313920324e48386133422f45382f6350784559676e2b4352504269482b7a366d31484b42306a6b5257534a3151630a54554f71535662753263616e7a78436e35636f724b69397937307a3062774a2b37554168363949546650510a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[411,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"0f"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[15,1,"55"],[237,0,"2031303030"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[180,1,"30"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[15,1,"61"],[413,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"4c"],[163,4,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[157,1,"32"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[302,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2386,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[158,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2288,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2340,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"4f"],[414,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2340,0,"41"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[2340,0,"2041414141"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[15,1,"4f"],[366,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"4e"],[168,4,"2d31"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[459,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[14,2,"094d"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a703252434d5265364b50774a4562786b49447a647837654961784f6d414657355058766d70776b51434c4a3142786b34376b766c7958716164303964764257740a467961536b5231413445774570306359526a4c7563415831704b486f423942516d46444c616e62575130474c4a6232736e30666c4b6d75745757417970557a420a36474970623956316e78324f47666852476b51446b726e385877654b30424a4969614670392b4b7a6b52450a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[2386,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2386,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[158,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2339,1,""]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[156,1,"56"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[238,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"4e"],[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"55"],[237,0,"2041414141"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[354,1,"2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"56"],[237,0,"206578747261"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2355,1,"2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2287,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[273,1,"5f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2383,1,"2f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2296,44,""]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[231,1,"61"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[2383,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[167,0,"32"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"e1"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[2384,0,"41"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[2432,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2301,39,"4133422f45382f4350584559474e2b4352504249482b5a364d31484b42304a4b5257534a315143"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[158,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[171,1,"31"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":9,"kind":"age","edits":[[301,1,"2f"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2386,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":9,"kind":"age","edits":[[2410,1,"42"]],"result":"ok"},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[367,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[2432,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":9,"kind":"age","edits":[[2290,6,"74"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":9,"kind":"age","edits":[[15,1,"b2"],[413,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":9,"kind":"age","edits":[[162,5,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":9,"kind":"age","edits":[[15,1,"51"],[162,5,"736372797074"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"flip","edits":[[94,1,"64"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":10,"kind":"flip","edits":[[2345,1,"34"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2386,1,"2c"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"flip","edits":[[2646,1,"49"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[39,1,"61"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[13,1,"10"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[2420,1,"68"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2326,1,"40"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[495,1,"f3"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[419,1,"42"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2339,1,"67"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[10,1,"40"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"flip","edits":[[99,1,"26"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[2308,1,"b5"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"flip","edits":[[145,1,"7b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[46,1,"99"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[0,1,"4c"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"flip","edits":[[9,1,"02"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"flip","edits":[[151,1,"0e"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[4,1,"06"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":10,"kind":"flip","edits":[[2333,1,"66"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[32,1,"52"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"flip","edits":[[106,1,"70"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":10,"kind":"flip","edits":[[80,1,"60"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[97,1,"50"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[2317,1,"73"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[52,1,"60"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[79,1,"32"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[0,1,"c4"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"flip","edits":[[406,1,"5c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[70,1,"6d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[5,1,"08"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":10,"kind":"flip","edits":[[89,1,"c7"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"flip","edits":[[3,1,"33"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"flip","edits":[[2290,1,"5c"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":10,"kind":"flip","edits":[[247,1,"35"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2419,1,"67"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[10,1,"20"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"flip","edits":[[1400,1,"f0"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[102,1,"52"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":10,"kind":"flip","edits":[[257,1,"52"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[30,1,"09"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"flip","edits":[[326,1,"c8"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[272,1,"54"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2409,1,"43"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[97,1,"59"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[343,1,"41"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2553,1,"3b"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[131,1,"76"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"flip","edits":[[2271,1,"73"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"flip","edits":[[2377,1,"42"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[2291,1,"12"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"flip","edits":[[2490,1,"65"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[245,1,"34"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[27,1,"60"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"flip","edits":[[7,1,"80"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":10,"kind":"flip","edits":[[412,1,"6d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[457,1,"72"]],"result":"ok"},
+ {"base":10,"kind":"flip","edits":[[424,1,"fa"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"flip","edits":[[2373,1,"6e"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[272,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[2467,1,"f6"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[2568,1,"a0"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[2499,1,"40"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[2360,1,"1b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[347,1,"53"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[19,1,"2d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"byte","edits":[[41,1,"18"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[8,1,"80"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"byte","edits":[[2632,1,"60"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[2340,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[2362,1,"40"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[13,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[210,1,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[2271,1,"7f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[84,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"byte","edits":[[250,1,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[102,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"byte","edits":[[2399,1,"ff"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[2327,1,"20"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[2427,1,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[411,1,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[253,1,"60"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[37,1,"18"]],"result":"ok"},
+ {"base":10,"kind":"byte","edits":[[3,1,"c1"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"byte","edits":[[8,1,"40"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"byte","edits":[[293,1,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"byte","edits":[[2429,1,"2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[2271,1,"60"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"byte","edits":[[63,1,"60"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"truncate","edits":[[1523,1198,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[2463,258,""]],"result":"ok"},
+ {"base":10,"kind":"truncate","edits":[[2020,701,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[969,1752,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1952,769,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[384,2337,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1903,818,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[435,2286,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[528,2193,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1712,1009,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1164,1557,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[588,2133,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[166,2555,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[985,1736,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1664,1057,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[154,2567,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[1145,1576,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[2406,315,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"truncate","edits":[[1517,1204,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[2137,584,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[485,2236,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[2166,555,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[2227,494,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[824,1897,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"truncate","edits":[[289,2432,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[2698,0,"0a"]],"result":"ok"},
+ {"base":10,"kind":"insert","edits":[[113,0,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[133,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[290,0,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[26,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[39,0,"0d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[964,0,"285cc3"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[232,0,"c37a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[2285,0,"434ea4fb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[93,0,"f0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[83,0,"dee356"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[33,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[2,0,"e1"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"insert","edits":[[134,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[4,0,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":10,"kind":"insert","edits":[[2,0,"37"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"insert","edits":[[2325,0,"a21359bb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[2389,0,"d9"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[425,0,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[683,0,"30"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[2598,0,"bbbb"]],"result":"ok"},
+ {"base":10,"kind":"insert","edits":[[2312,0,"822d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[2420,0,"48"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[79,0,"c36c6b56"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"insert","edits":[[262,0,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[1429,0,"c009"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"insert","edits":[[12,0,"af1ed6"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"insert","edits":[[3,0,"b5f1"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"insert","edits":[[287,0,"2c07f3"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"insert","edits":[[2312,0,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[42,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[4,3,""]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":10,"kind":"delete","edits":[[2315,1,""]],"result":"ok"},
+ {"base":10,"kind":"delete","edits":[[4,1,""]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":10,"kind":"delete","edits":[[95,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[2105,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[373,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"delete","edits":[[96,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[2272,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[55,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[450,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"delete","edits":[[68,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[221,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[2693,4,""]],"result":"ok"},
+ {"base":10,"kind":"delete","edits":[[9,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"delete","edits":[[2343,4,""]],"result":"ok"},
+ {"base":10,"kind":"delete","edits":[[5,4,""]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":10,"kind":"delete","edits":[[258,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"delete","edits":[[2350,4,""]],"result":"ok"},
+ {"base":10,"kind":"delete","edits":[[13,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[10,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"delete","edits":[[134,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[40,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[2,4,""]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":10,"kind":"delete","edits":[[1315,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[142,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"delete","edits":[[108,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[87,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"delete","edits":[[867,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"delete","edits":[[2361,4,""]],"result":"ok"},
+ {"base":10,"kind":"length","edits":[[11,1,"78"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[10,6,"085000000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[8,4,"0ccc2bdd"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[9,3,"010000"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"length","edits":[[10,2,"ffff"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"length","edits":[[11,1,"7a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[11,1,"72"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[11,5,"ff43dd9b56"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[14,1,"09"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"length","edits":[[11,1,"5a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[15,1,"7a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"length","edits":[[15,1,"4f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"length","edits":[[14,1,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"length","edits":[[9,3,"100000"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"length","edits":[[11,5,"7300100001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[11,5,"a80000085c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[11,5,"ff00000832"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[11,5,"3effffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[12,4,"04000000"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"length","edits":[[9,3,"100001"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[9,7,"1000000000087c"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":10,"kind":"length","edits":[[11,5,"91ffffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[9,1,"40"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":10,"kind":"length","edits":[[11,1,"88"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"length","edits":[[14,1,"0c"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"header","edits":[[11,1,"66"],[51,84,"40646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a4569"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"header","edits":[[16,1,"b805"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[136,1,"17"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7b"],[30,1,"190100"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6a"],[32,17,"4106"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"25"],[50,85,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"25"],[50,85,"01"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[10,2,"0590"],[16,120,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401059841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e30363401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[30,1,"02"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"26"],[50,85,"6178"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"cf"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8a"],[32,17,"58203f983aaf3626052aff3a5ffb1899af0e74cb2b725e6b124620008403aad31962"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[30,1,"6131"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6d"],[16,13,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040107f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"77"],[16,15,"a4006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7b"],[16,119,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010681a3006d6f72672e6578616d706c652e6101010240"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010681a1006d6f72672e6578616d706c652e61"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6f"],[18,11,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7b"],[136,1,"190000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8c"],[16,120,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010682a20063efbda10101a20064f090808001"]],"result":"ok"},
+ {"base":10,"kind":"header","edits":[[11,1,"78"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[17,14,"0101006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"71"],[18,11,"f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[49,88,"0401037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[136,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[30,1,"1b001fffffffffffff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"b1"],[18,11,"78416161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[129,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"9f"],[16,120,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010682a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8b"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010250ca3e8bfcae3ee19717fe3129ec9830b6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401076178"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[136,1,"1b0000000100000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040118185f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"8a"],[32,17,"58209f51ad4d4e3cc99ad2e64b313d16f6bc7addd3f4023d7a10224bd05856537f8f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6a"],[32,17,"41b9"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"a1"],[16,120,"a7006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"23"],[16,119,"a4006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004011b0000000100000000f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"67"],[16,33,"a4006a646174656b65796361700101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6a"],[32,17,"4159"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[136,1,"1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010580"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[136,1,"1800"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"69"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7d"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004011818c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"70"],[18,11,"c100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"95"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010581a2006d6f72672e6578616d706c652e61011b0000000100000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"9f"],[16,120,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010582a2006d6f72672e6578616d706c652e610101a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[32,17,"51523c0ec257e61539d9fcace3b3d69d37f1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004010600"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[30,1,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"71"],[18,11,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"85"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040119ffff1b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[10,2,"057c"],[16,120,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401059840a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e30363301"]],"result":"ERR_EXTENSION_CRITICAL_UNKNOWN","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401084100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583004011b0000000100000000f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441786651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[136,1,"1b0000000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[30,1,"18ff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b657963617001010250ca3e8bfcae3ee19717fe3129ec9830b6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d5830040118ff00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"6d"],[51,84,"47646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"7a"],[137,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":10,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"71"],[51,64,"4b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a484a68626d513663585670593274755a5851"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5334776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":10,"kind":"datekey","edits":[[65,1,"5a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[130,1,"7a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"4a"],[51,84,"24646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f69"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[94,1,"20"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936496a45774d4441696651"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"89"],[51,81,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b35"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":10,"kind":"datekey","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"89"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[10,2,"017e"],[50,85,"790157646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"63"],[51,84,"3d646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a58513664"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[110,1,"3d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[106,1,"41"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[133,1,"6e"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":10,"kind":"datekey","edits":[[80,1,"2b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[89,1,"2b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[125,1,"2e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[10,2,"0178"],[50,85,"790151646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"50"],[51,84,"2a646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[11,1,"31"],[50,85,"6c646b315f65794a325a584a7a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[121,1,"3d"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"datekey","edits":[[10,2,"01a4"],[50,85,"79017d646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d583041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":10,"kind":"age","edits":[[2385,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[14,2,"0753"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2384,0,"41"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[2421,1,"41"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[459,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"61"],[413,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2386,0,"3e20583235353139207a77696d75494174534b75356a45504463385a6533525539656b4f513242586f516842596e66732b6867630a7632664b3057473273315a684c4d30543738747131797838684f716d6c6564674e5175524a6957544767590a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":10,"kind":"age","edits":[[2341,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[237,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"4f"],[168,4,"393939"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":10,"kind":"age","edits":[[453,1,"41"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[2290,1,"78"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":10,"kind":"age","edits":[[14,2,"094d"],[413,0,"3e20746c6f636b203130303120353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b4f5659496a5a304b31524f4759704938662f5a736d586961596a452b59486f78655648774c783756734d33684159486f4e506e4e52367774522b30706130680a416369657832735a765a663073322b56346d4f5a546477486731646c32654b75686a4249716b7053513247434e4962554d3037667478684b7179516f4b6b556f0a50666876647a7871617079487a36736d7049475445557a656e47343253396677526b344e322f587964614d0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[162,5,"736372797074"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[411,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[162,5,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"4f"],[366,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"b2"],[413,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[369,1,"2f"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[303,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2290,6,"544c4f434b"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":10,"kind":"age","edits":[[162,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":10,"kind":"age","edits":[[2288,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[2319,1,"41"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[2286,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[2340,0,"0d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[367,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2284,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[2340,0,"206578747261"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[400,1,"3d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2386,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2379,1,"2f"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[2356,1,"3d"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"3b"],[137,21,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2297,43,"5a57494d55494154534b55354a45504443385a4533525539454b4f513242584f514842594e46532b484743"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[15,1,"a0"],[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2287,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[175,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2432,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[2387,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[15,1,"0f"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":10,"kind":"age","edits":[[157,1,"32"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[302,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2265,21,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[172,65,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[367,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2296,44,""]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[2306,1,"30"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[158,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"4f"],[414,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[2284,1,"56"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":10,"kind":"age","edits":[[2344,1,"2b"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[427,1,"41"]],"result":"ok"},
+ {"base":10,"kind":"age","edits":[[156,1,"56"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":10,"kind":"age","edits":[[15,1,"51"],[302,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[120,1,"42"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[2307,1,"13"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"flip","edits":[[61,1,"78"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[38,1,"82"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[329,1,"66"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[2,1,"c3"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":11,"kind":"flip","edits":[[30,1,"41"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[136,1,"09"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[75,1,"35"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[6,1,"10"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":11,"kind":"flip","edits":[[23,1,"7b"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[418,1,"51"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[14,1,"88"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[124,1,"5b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[143,1,"43"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[32,1,"d0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[2719,1,"8e"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[436,1,"6a"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[137,1,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[102,1,"54"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[2399,1,"07"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"flip","edits":[[2322,1,"5d"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[2550,1,"95"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[85,1,"6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[225,1,"3b"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":11,"kind":"flip","edits":[[22,1,"6d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[1417,1,"7d"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[36,1,"5e"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[425,1,"6b"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[4,1,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":11,"kind":"flip","edits":[[2356,1,"01"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"flip","edits":[[75,1,"77"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[5,1,"01"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":11,"kind":"flip","edits":[[66,1,"38"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[47,1,"4d"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[304,1,"7d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[6,1,"40"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":11,"kind":"flip","edits":[[2319,1,"7a"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[87,1,"68"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[2172,1,"d7"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[2388,1,"28"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"flip","edits":[[390,1,"38"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[2341,1,"46"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[42,1,"26"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[14,1,"48"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[89,1,"43"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[116,1,"44"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[2417,1,"7a"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[179,1,"65"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":11,"kind":"flip","edits":[[30,1,"09"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"flip","edits":[[130,1,"49"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":11,"kind":"flip","edits":[[100,1,"73"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"flip","edits":[[2359,1,"73"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[302,1,"1a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[318,1,"37"]],"result":"ok"},
+ {"base":11,"kind":"flip","edits":[[2419,1,"eb"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"flip","edits":[[50,1,"79"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"flip","edits":[[381,1,"d2"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[283,1,"7f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"flip","edits":[[2293,1,"15"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[242,1,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[0,1,"f6"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":11,"kind":"byte","edits":[[44,1,"18"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[2375,1,"00"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[285,1,"1b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[2303,1,"18"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[2012,1,"a0"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[12,1,"a0"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"byte","edits":[[99,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"byte","edits":[[47,1,"2d"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[6,1,"7f"]],"result":"ERR_INVALID_FLAGS","step":2},
+ {"base":11,"kind":"byte","edits":[[13,1,"7f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[2315,1,"f6"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[332,1,"a0"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[71,1,"18"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"byte","edits":[[2277,1,"7f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[24,1,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"byte","edits":[[136,1,"00"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[281,1,"ff"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[35,1,"80"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[196,1,"00"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[192,1,"1b"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"byte","edits":[[2378,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"byte","edits":[[1,1,"a0"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":11,"kind":"byte","edits":[[1,1,"7f"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":11,"kind":"byte","edits":[[2311,1,"2d"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[44,1,"1b"]],"result":"ok"},
+ {"base":11,"kind":"byte","edits":[[100,1,"7f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"byte","edits":[[60,1,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"byte","edits":[[2309,1,"80"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"truncate","edits":[[2145,576,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1937,784,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1308,1413,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1300,1421,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1978,743,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1256,1465,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1932,789,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1108,1613,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1549,1172,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[2260,461,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[2297,424,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"truncate","edits":[[2254,467,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[2251,470,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[78,2643,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":11,"kind":"truncate","edits":[[1250,1471,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[809,1912,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[899,1822,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[695,2026,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1224,1497,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1633,1088,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[185,2536,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1904,817,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[114,2607,""]],"result":"ERR_INTEGRITY","step":3},
+ {"base":11,"kind":"truncate","edits":[[217,2504,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"truncate","edits":[[1839,882,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[100,0,"4e"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[14,0,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[416,0,"4b2a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[11,0,"20"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"insert","edits":[[208,0,"c9c1"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[227,0,"ce8d276f"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[2348,0,"a8ce14"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[55,0,"ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[347,0,"f625cede"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[2330,0,"b6d900db"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[2145,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[2362,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[55,0,"be"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[74,0,"1b22"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[145,0,"55"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[2341,0,"34"]],"result":"ok"},
+ {"base":11,"kind":"insert","edits":[[10,0,"20"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"insert","edits":[[37,0,"aa0f59ec"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[2302,0,"408b"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[2315,0,"2d0ea1dc"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"insert","edits":[[15,0,"3c11e467"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[232,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[14,0,"0d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[270,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[176,0,"323a1a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[51,0,"94"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[0,0,"dfcbf8"]],"result":"ERR_INVALID_MAGIC","step":1},
+ {"base":11,"kind":"insert","edits":[[316,0,"f6"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"insert","edits":[[69,0,"77"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"insert","edits":[[94,0,"5b7b3c8c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[5,2,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"delete","edits":[[92,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[102,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[289,4,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"delete","edits":[[9,3,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"delete","edits":[[230,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[15,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[2412,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[321,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"delete","edits":[[81,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[56,1,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[444,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"delete","edits":[[4,3,""]],"result":"ERR_UNSUPPORTED_VERSION","step":2},
+ {"base":11,"kind":"delete","edits":[[55,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[69,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[133,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[47,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[419,3,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"delete","edits":[[2710,3,""]],"result":"ok"},
+ {"base":11,"kind":"delete","edits":[[18,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[259,1,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"delete","edits":[[2660,3,""]],"result":"ok"},
+ {"base":11,"kind":"delete","edits":[[2277,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[10,4,""]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"delete","edits":[[1775,3,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[79,2,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[2425,4,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[194,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"delete","edits":[[17,4,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"delete","edits":[[15,3,""]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[15,1,"4f"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"length","edits":[[9,1,"10"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[11,5,"6e0000084f"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[12,4,"d9180266"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[11,5,"7a00000884"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[10,6,"085000000079"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[12,4,"9d2463eb"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[11,1,"45"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[11,5,"010000086a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[8,8,"082cf6ca00000849"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[12,4,"04000000"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"length","edits":[[8,4,"47612075"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[13,3,"100001"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"length","edits":[[9,7,"1000000000084f"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":11,"kind":"length","edits":[[10,6,"047950de0eb9"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[9,7,"01000000000840"]],"result":"ERR_INTEGRITY","step":3},
+ {"base":11,"kind":"length","edits":[[8,8,"0400000000000851"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[8,4,"88b3025c"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[14,2,"0000"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[12,4,"ffffffff"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[14,1,"18"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"length","edits":[[10,1,"08"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"length","edits":[[8,8,"0400007900000814"]],"result":"ERR_INTEGRITY","step":2},
+ {"base":11,"kind":"length","edits":[[15,1,"51"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"length","edits":[[11,1,"7a"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[17,32,"02500e53b85a2f9201e2b3368ae122540da70101006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"54"],[51,84,"2e646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c6558"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"82"],[18,11,"73646174656b6579732d6163636573732d6b6579"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[30,1,"00"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[30,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7f"],[18,11,"70646174656b6579732d636f6e74726f6c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[31,106,"0401037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483002500e53b85a2f9201e2b3368ae122540da7"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[29,106,"037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483002500e53b85a2f9201e2b3368ae122540da70101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"81"],[30,1,"1b001fffffffffffff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010681a3006d6f72672e6578616d706c652e61010102a0"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"81"],[30,1,"1bffffffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[136,1,"5f40ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[32,1,"5810"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"77"],[16,121,"a4006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"a1"],[16,120,"a7006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010581a2006d6f72672e6578616d706c652e6101010681a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"69"],[32,17,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"6a"],[32,17,"4113"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[136,1,"1818"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"6a"],[32,17,"4177"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[16,121,"bf006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401061b0020000000000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"8f"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010681a3006d6f72672e6578616d706c652e6101010300"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"77"],[16,15,"a4006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[19,10,"444154454b4559434150"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[16,0,"81"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"81"],[30,1,"1b0000000100000000"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"78"],[18,11,"69646174656b65796361"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[18,11,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"25"],[50,85,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[136,0,"18"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"25"],[50,85,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48303d"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":11,"kind":"header","edits":[[136,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"69"],[32,17,"f5"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"8a"],[32,17,"5820bdcb6a5e471e64a8d4448b3122a05d603192bce201caf4d250ec77382771b60c"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[136,1,"18ff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010720"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"6d"],[16,13,"a4"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[51,84,"54646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48303d"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[137,0,"00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[136,1,"f6"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[32,17,"51b6ca6775901ddc84856b1da81e024e67e3"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[30,1,"18ff"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"8c"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010682a20063efbda10101a20064f090808001"]],"result":"ok"},
+ {"base":11,"kind":"header","edits":[[18,11,"78416161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[114,1,"49"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":11,"kind":"header","edits":[[29,107,"040102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483001"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"95"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010681a2006d6f72672e6578616d706c652e61011b0000000100000000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[16,119,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[10,2,"0590"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401059841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e30363401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004011740"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[136,1,"190000"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[30,1,"02"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"9f"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010582a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"9f"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004010682a2006d6f72672e6578616d706c652e620101a2006d6f72672e6578616d706c652e6101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"69"],[32,17,"40"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[18,11,"6b646174656b657963617078"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"85"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"78"],[32,17,"4f1ec6c35c495ad2608d905e473aeb46"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[16,15,"a4006a646174656b6579636170"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"83"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483004011b000000010000000040"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"78"],[32,17,"4f3213bc08fc674ce0673b141e2c02cd"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7c"],[16,121,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401074100"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[30,1,"20"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"89"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d6e"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[32,17,"516c9220635121309935c41d812f4ea21ae8"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830040101"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"81"],[136,1,"1b001fffffffffffff"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7b"],[30,1,"190100"]],"result":"ERR_UNSUPPORTED_VERSION","step":4},
+ {"base":11,"kind":"header","edits":[[136,1,"80"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"f2"],[137,0,"a5006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"b1"],[18,11,"78416161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[32,17,"4168"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[10,2,"0590"],[16,120,"a6006a646174656b6579636170010102500e53b85a2f9201e2b3368ae122540da7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48300401069841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e30363401"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"27"],[50,85,"f93c00"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[11,1,"7a"],[16,0,"c1"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[136,1,"02"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"header","edits":[[49,88,"0401037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d4830"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"29"],[50,85,"64646b315f"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[52,2,"444b"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364c544639"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"4f"],[51,84,"29646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[10,2,"016c"],[50,85,"790145646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"89"],[51,83,"63646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364f5441774e7a45354f5449314e4463304d446b354d58"]],"result":"ERR_DATEKEY_INVALID","step":7},
+ {"base":11,"kind":"datekey","edits":[[100,1,"30"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"6c"],[51,84,"46646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a796233"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f794d4441776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":11,"kind":"datekey","edits":[[129,5,"546b354f58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":11,"kind":"datekey","edits":[[10,2,"0178"],[50,85,"790151646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"4b"],[51,84,"25646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[111,1,"61"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"7e"],[51,84,"58646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364e6a59344f4451794d544a39"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":11,"kind":"datekey","edits":[[11,1,"76"],[51,84,"50646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d365a585a74626d56304f6e597849697769636d3931626d51694f6a49774d444239"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"75"],[51,83,"4f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":11,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d57557a6651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"27"],[50,85,"62c080"]],"result":"ERR_NON_CANONICAL_CBOR","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"78"],[51,84,"52646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5334776651"]],"result":"ERR_DATEKEY_NON_CANONICAL","step":4},
+ {"base":11,"kind":"datekey","edits":[[10,2,"0196"],[50,85,"79016f646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d48304141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"7c"],[51,84,"56646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a434936496a45774d4441696651"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[11,1,"71"],[51,64,"4b646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a484a68626d513663585670593274755a5851"]],"result":"ERR_UNKNOWN_PROFILE","step":4},
+ {"base":11,"kind":"datekey","edits":[[10,2,"0189"],[50,85,"790162646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d6a41774d483041414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"datekey","edits":[[133,1,"58"]],"result":"ERR_ROUND_MISMATCH","step":8},
+ {"base":11,"kind":"datekey","edits":[[112,1,"30"]],"result":"ERR_DATEKEY_INVALID","step":4},
+ {"base":11,"kind":"age","edits":[[2386,0,"3e2058323535313920475943307645726f51305345707577315944377337435a2f5655566a4a4d372f65594855695672726944410a44524f675152674d636d4e74577367416143774a5230555737337437444b707a44516e625a6b6c673149770a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":11,"kind":"age","edits":[[14,2,"0753"],[160,253,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[415,44,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"b2"],[413,0,"3e2058323535313920414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a424242424242424242424242424242424242424242424242424242424242424242424242424242424242420a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[411,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[411,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2290,6,"746c6f636b32"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[237,0,"41"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":11,"kind":"age","edits":[[2384,0,"41"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[2284,1,"56"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[433,1,"2f"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[412,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[237,0,"41"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"3b"],[137,21,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[459,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2340,0,"206578747261"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[162,5,"583235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[159,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2413,1,"2b"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[2288,98,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[162,5,"783235353139"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":11,"kind":"age","edits":[[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[175,59,"4442394241373045304343304636454146373830334444303734343741314635343737373335464433463636313739324241393436303043383445"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":11,"kind":"age","edits":[[15,1,"4e"],[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2387,1,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[2290,6,"74"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":11,"kind":"age","edits":[[157,1,"32"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[238,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"e1"],[413,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":11,"kind":"age","edits":[[173,1,"30"]],"result":"ERR_PROFILE_MISMATCH","step":8},
+ {"base":11,"kind":"age","edits":[[14,2,"094d"],[413,0,"3e20746c6f636b203230303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a70782b54355a317632675a36533250636131724d53424f4c537561316b456431733633647a592b57397a7666486f2f47705071634c4d2f6c3041385a416f38780a436d366d4270644d475a534e6c734933386442664e516f486a53675348585834485a4a453048582b5767516d77367564446e5a463750526b30376551676b6d5a0a357376393255696b53704b483852326e6561486f385a3079306e716b794345484b756a33797344693349670a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"0f"],[172,65,""]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":11,"kind":"age","edits":[[330,1,"2b"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[2404,1,"42"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[168,4,"393939"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[2340,0,"2031303030"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[302,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2386,0,"3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[367,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2339,1,""]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[156,2,""]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[451,1,"41"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[237,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[302,0,"0d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[411,0,"41"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[2296,44,""]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[158,0,"20"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[15,1,"a0"],[413,0,"3e20736372797074206332467364484e686248527a595778306332467364412031380a434343434343434343434343434343434343434343434343434343434343434343434343434343434343430a2d"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2432,0,"20"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"61"],[413,0,"3e206772656173652d78202140230a0a2d"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":5},
+ {"base":11,"kind":"age","edits":[[159,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2284,2,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[2301,37,"5645524f51305345505557315944375337435a2f5655564a4a4d372f455948554956525249"]],"result":"ok"},
+ {"base":11,"kind":"age","edits":[[15,1,"51"],[367,0,"41"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[368,0,"0a"]],"result":"ERR_INTEGRITY","step":5},
+ {"base":11,"kind":"age","edits":[[2341,0,"0a"]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[15,1,"55"],[237,0,"2041414141"]],"result":"ERR_POLICY_STRUCTURE_MISMATCH","step":8},
+ {"base":11,"kind":"age","edits":[[2388,44,""]],"result":"ERR_INTEGRITY","step":6},
+ {"base":11,"kind":"age","edits":[[160,253,""]],"result":"ERR_INTEGRITY","step":5}
]
}
diff --git a/testdata/vectors/mutations.json b/testdata/vectors/mutations.json
index 0b7fd84..e0c0354 100644
--- a/testdata/vectors/mutations.json
+++ b/testdata/vectors/mutations.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "Mutation corpus of spec §64 and further cases of capsule.TestMutationCorpus, generated by the reference implementation: each case is a .dkc and what the reader is given, with the normative error and the step of spec §63 at which capsule.Open fails. See testdata/README.md.",
"cases": [
{
@@ -84,7 +84,7 @@
"dkc": {
"base": "time_only.dkc",
"edits": [
- [4, 1, "02"]
+ [4, 1, "03"]
]
},
"release": {
@@ -1297,6 +1297,1216 @@
"frozen": true,
"error": "ERR_POLICY_STRUCTURE_MISMATCH",
"step": 13
+ },
+ {
+ "name": "format 2: PUBLIC_HEADER_A + SEALED_CONTROL_B",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b656b454639304a4f4d42577a482f5a423659377833734e507a67657239652f6372326e39664e4435484e78413737335244696b313248386435684f494275710a4258524f494c544d6c68717268533569337735635672572f657877684233786151467a3238497a4c4f45525a78753733626a764f395136546439474c4a6a46590a7236765253534c4d515a73754355436f4673386d6d54497068742b76484f6f6f59456f2f6c593261702b4d0a2d2d2d20366775632b59383659546c332f565a456a49784d563734626e6a5162432b68555a335a683149397a4f63590aba78f76d8c46510923279837319ca4da795ff50969ba6c42c3d2b1016f73d19eeb18072dacdd1a82e51ef3826da652e7d4fe10f67b49c972076a54b99b2c3f71d24f1058b9e0e850191ec8aabe3b859bb91c7cec684587ee8489aaae5f1541209077e02915c7b612afc609708ed16bfa1b44e429d8bf587e7979b3b484cd9bdaa7fa8e70d732f86167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139205455765a74436b5343347579546c68554e3957547037616b4547435771434a38525666324d764663466e380a4a6e426c4e57366b4c563366453775535333617347446a6e6a34384c374763484d494c4d466e30335774590a2d2d2d204d58484371435442755151662b63657a4b7656427247334f652f776d7557464543457641525a33666965730a469b5531efc2e60ba2e9ca5b79f6707a8fc21a8e7b4b30d35dafe591620f97738f65ee136cb794ea861fee4e355663dc7aba867a1d589de1c70ce01130c3913a21d8e0fded6031c39c18bee50a398822f7c158ba056d9cdc9ec3aabdf3dfde811650f700360b5ad90bad271b17501d661d0d1799b9bc2140312ede8fee194b1c6b516cde97587011cc69ac19b9ad9d1f16113d4930fcda1299b783ee0d15c9ca538be7f8ecc43c296d13fef4d4740ac34c631837580ef8871a92163574509e248d7919cebac2502899ab4098a046a7664984f962580d5953572e129874f28f1ed6f8bf44f46fb06cca5e995acf6fef20c706e5042e36a23d7c2a301ee1b5eb0fbae0a33c74b6120d08704fd856db0816041674f2ffeac3dec052dad43be2949d"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": true,
+ "error": "ERR_HEADER_BINDING",
+ "step": 15
+ },
+ {
+ "name": "format 2: SEALED_CONTROL_A + PAYLOAD_AGE_B",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a02b958b75c5d115516b01bab5a296cd7c83b956144f17be87fe38c445d05bd3cfd637cf8922286c13a9d2112e1451adaaefc9b21a1c52ffc45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e9502f9c6b6c48c20547580f4f33940820c195ae5a1947cae2559d516167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139205455765a74436b5343347579546c68554e3957547037616b4547435771434a38525666324d764663466e380a4a6e426c4e57366b4c563366453775535333617347446a6e6a34384c374763484d494c4d466e30335774590a2d2d2d204d58484371435442755151662b63657a4b7656427247334f652f776d7557464543457641525a33666965730a469b5531efc2e60ba2e9ca5b79f6707a8fc21a8e7b4b30d35dafe591620f97738f65ee136cb794ea861fee4e355663dc7aba867a1d589de1c70ce01130c3913a21d8e0fded6031c39c18bee50a398822f7c158ba056d9cdc9ec3aabdf3dfde811650f700360b5ad90bad271b17501d661d0d1799b9bc2140312ede8fee194b1c6b516cde97587011cc69ac19b9ad9d1f16113d4930fcda1299b783ee0d15c9ca538be7f8ecc43c296d13fef4d4740ac34c631837580ef8871a92163574509e248d7919cebac2502899ab4098a046a7664984f962580d5953572e129874f28f1ed6f8bf44f46fb06cca5e995acf6fef20c706e5042e36a23d7c2a301ee1b5eb0fbae0a33c74b6120d08704fd856db0816041674f2ffeac3dec052dad43be2949d"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": true,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "format 2: DateKey A + release of round B",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": []
+ },
+ "release": {
+ "round": 1001,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_ROUND_MISMATCH",
+ "step": 10
+ },
+ {
+ "name": "format 2: chain hash changed",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [173, 64, "61626162616261626162616261626162616261626162616261626162616261626162616261626162616261626162616261626162616261626162616261626162"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_PROFILE_MISMATCH",
+ "step": 8
+ },
+ {
+ "name": "format 2: version changed",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [4, 1, "03"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_UNSUPPORTED_VERSION",
+ "step": 2
+ },
+ {
+ "name": "format 2: flags != 0",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [5, 1, "80"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_INVALID_FLAGS",
+ "step": 2
+ },
+ {
+ "name": "format 2: reserved != 0",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [7, 1, "01"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_INVALID_FLAGS",
+ "step": 2
+ },
+ {
+ "name": "format 2: payload truncated",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [80682, 1, ""]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "format 2: payload age modified",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [80682, 1, "e9"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "format 2: control modified",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [594, 1, "50"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: non-canonical dk1_ JSON",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [11, 124, "7c000001caa5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037856646b315f65794a325a584a7a61573975496a6f784c434169626d56306432397961794936496d5268644756725a586c7a4f6e463161574e72626d56304f6e597849697767496e4a766457356b496a6f784d4441776651"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_DATEKEY_NON_CANONICAL",
+ "step": 4
+ },
+ {
+ "name": "format 2: unknown profile",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [11, 124, "76000001caa5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037850646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d365a585a74626d56304f6e597849697769636d3931626d51694f6a45774d444239"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_UNKNOWN_PROFILE",
+ "step": 4
+ },
+ {
+ "name": "format 2: release of another round",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": []
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 2: access_policy=time_only with time_and_key structure",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [136, 1, "00"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250e3c7be83cbf1fbd6b115c96411b3bd010350fe68d3b3bb59db0c14b7ef57d8d6cb5e04667832353531390558209c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c365780106a1005820600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "format 2: access_policy=time_and_key with time_only structure",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [136, 1, "01"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1G2PR0YP2Q6DHNQV9QPC7PFAC34AGUUU9CGJGJQCLJR3QLAUYPMGQ2LKA30"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "format 2: extra stanza in OUTER_TIME_AGE",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b433102000000000000790000022ca5006a646174656b6579636170010102507d965df193d494fde4ee98c20f4465c3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b365641313277544a4f744679425a7a5a2b7a774d704a697735787955446c4a4c73564b62644739465879716a34766a6a69542b5376524a507a78424c2f6d680a464a2b6c4e666c6957726e55756271736139586e7959585562484b64416648654d39383064573772774b7a503877694e41714b67437848486a6f575549524a6a0a64564671514e57493433766968643775696d684f62726d65616254336c575652726e5761686166446266550a2d3e20583235353139205a76385075384a465a5a48636749692b6f4b573671384a496250484b4a645270594646556b62685244546f0a67304b646572587a435545676b503168627169696d5a4c6c6e4e706b763136717576777042536e446842450a2d2d2d206c564f72355a4c74624e707662413670317a6a686a385055512f3538593876716b687431456241586e71550a1cc8cea5a51dee728945c44dbb55f5cc6d7bc34ef07cf389224c753065d502a7e86e68396bf5ba7e68310f58988ebfde618c633ea2a09623feb08c2e3eb3b89b46aae5b611a8814df7214f2b5eb73c316c618d466b0735c40086a36df23a12c52b8c774907c4cce86803ba2a9a65ad40d507f5673115629f2e2ecb90e6ff2de9f97feeb06adeb86167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139204674785a4c434f68794c504d686565502f4c556d7632395572544978484f724f32754c6e484576712f54730a33446e7855424a675950697441624c7a754b3167756a41355a576b39676563523458636f415662776451300a2d2d2d2065446241336d5657312b46355457483467727833472f497a554357566669417138627135416a4f386231670af172099346600583f15edbbf24840f56f3d5441129772e44978c99f139ba6898109c5e86229e21283f25f4f7f5ffbfba815153ff2d78a5b2cdfb8edd933db2b07db2b64db04a07261e9a2a4db71a9898dcfe0b6bf75623a3462233a5998367a2c0979c5e5cfee9733a02a68609b74995c487f33196d054c0cf4d80c8028820e21d0d3d41f796c05d5828999c33f93c5bd20d4f2a782bb734abcaf8e2653eb429dfd305e5d68de4290b3e645022af501e389ed821f80f0656c22074571132552ebe3572889d6cf84d393257c09ec466743b3085f9a078540a292c4dee3d823ee7a8ee0c0276055a11e599359e996e95ea07d12e315f4147351b58019e653647367422ed8a934beb1261ea0d2bc4ad4555efbd0aac40adea788495ff24800f3bb6"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": false,
+ "frozen": true,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 5
+ },
+ {
+ "name": "format 2: extra stanza in PAYLOAD_AGE",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b657963617001010250b95e3e9843b73c6316dfca167b6a0515037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b6c335773644b364e75615039354f43756d7431396e61636f323764596f4e632b4752527438445756736a6e4e6f70414f5876552b7838302b2b3366444537370a41547a4f45655a4f70706f2f7448466733717367786e63706f5475557039486c5654644d766b725a42634d7631484347772f3961324f474e54517851315364550a47424444565356724b727a66714c78764131714f62507131566e42744f322f765257774b66554538335a510a2d2d2d20536654655078535a714a59666b36335a3453732b654d32354b4b414a2b2b5a5a6634754141557133394a490a5c5688c7b3dab00a78585607ac15ce2ae5650a73fc3a9ea33b2065c684b8a5e9e8d29de2c95570993f2ca577e72b44ff93d56d236e3538d2f23678191f28fb106c45953b059af7541d64067d143a8b02087faf290cd704ef0a05e89a652b73e255575d3540955c81ac5b0efafff22fb73b85dd4c0de9a596c9ecad5ecf35f2339e3c6aec52629d6167652d656e6372797074696f6e2e6f72672f76310a2d3e205832353531392046657039356c66327a655077783970726a646c563069796b746176524b43486849555a74467861314d6b340a7958776778686d656e7477506a706c4d677079776379474b594d2b5a622f57764c6d426f4f436a4f4b6d550a2d3e20583235353139204350636165716e7963624f76524434654c455733436134335a476555304a34583956505a6135574a5a69730a774d566f4e3654425946456f423273325a635539314341765852536f744374553031626b4d39644458444d0a2d2d2d2062576f44514f476c552f3157446145577366646a557a712b6c6834595075792b484b5663596d4b79322b510a99c9cb8ecbbd5498e783e17e9abbad26e5a647d0b2cab86560fefa2efac640a21a6de5152cdb19f4a54fd8956a2d2829aab5941bac1211ee5111839483d1255bda15c58fefb68124bdea126c6ff639fe80da29589b9a727df5ac7e2a5d62f9b90a431a9a333d64e4ab3d5ea690d3c27002d02b64cae39c9fa50e25aadf1beadb43ff35b73ae636baf697ed6a4d96eb718592a3152651c6e57aef7adc8b7f94d54847ddf87986fd08c7153161804295e730111a21a9a2e74d5a2cb5abe47091c81b47cfda46287b3e0fa45b788d3d3636154ec7627909f2705b3ead28b789f1f1e355ba9369d81b5234382603c1f2f85918f0c67b1548ac106753ddf14bfc0a46d8da23a061388aba9c8059c225a996d1338c4e2f9aa44f80718c78a9de80bb9c"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": false,
+ "frozen": true,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 6
+ },
+ {
+ "name": "format 2: non-X25519 stanza in INNER_ACCESS_AGE",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b433102000000000000790000083ea5006a646174656b6579636170010102507101efd33d947a5f5c312d8b4f20b80d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7075795968655144322f4c776b4d5150353451696d4459396b41556431544d67475a56513231704f5a4f77484d4a576a665848624c3043696464494a7a4a69360a45516c7656746a667a446e6b33374e4a5661386c445635485974516862546a65774b6f59706c413674597962647377477966626352424d4633527454344955300a73525a6f2b5a486f336d4659592b39645a5971596334424d334d624c3441774f472f466d515574686e34510a2d2d2d207435556a545554304e46354365664f3633755a437844612f5441584938366f416e6c38596a3274644458670a3b1c80bd2304bc673d6f2edd941c69cde8b5897def30e3d36c440d64d3c72236dc5fd04ca932daf26ad70efe2f7a319b31bae8780fb87a5605812de8e650d202cb77a9aecd1089b645eed51945cdf6a84e6db88404d7f232e38d4469d7e0813e5333e21564c5ea777d3eea0200459d0fcb647461d5ae47fa30a375cfa9c720a713533586b55a7ef547110f853cb845ebbfb807023537752b6f69e5e34818674f331cfa54bd9aa5d1710af7f71ef970e2ae11a12e4c9598724cdd7f8409b33dd8d3523767948d0ff3dc906dd138977eff8677c50cb32a632a2654e18f30c92c302dbe18b61dda1fceffaf6f2e21fe05314ac6ac98836294e16584f67124ff7a1d0ace79aa96832cb4aa5c488160a41a9b4159fda552fe172be6c8e71b57870c41630e90008b24dabc5cbf3532265ee39647e0580a3c302ee53e1877cf328e6e567493681b7b1067b70d78893198af4679f7f65a24cab69e11a4ac8044b4b8bb69eedb3d3ae49a2f1711b59dd0620095942fdcaaca816a3929382b1afb5daec96aaf54a252e65d90255e063d4af36a9a391a9078b464980cf2c9f981b207f9b0c28052e47e283e70ee90b6506e2ad4766408026015393e4c04a83c5cc598d5a68143dd049f9e32a6bd7415d985114328cd33e6dd01bb2a83cd6eca8011d5da74e2a8a575368cbaaa82542a44f8c876f43c812b5f3e3444f8994b10ab3e5f9db8481d5038e0d037de0ec0ece641a49aea6ddd82973ab433e8265ed8aa80c2f0bffd1b138be7e89ae4e735bf5ecad6042e26e9f050625958b11bac23333d4f3dad4e387bd4ac86a0d1cd267c39acfe6efee718c214337a076ba9e0834911accd474f2c81fed78b94964c65b6a5bbf04f4000bff8504d3300f372ed89a792a537d4c5c235b822fd102f4b59c8af59a416210dc5182737ccf23e2b5f6b0a18537c60893a88e22818ad33cc5a1b37c57612b3c999458eb1f518902e137f2ee6d44524df253178898690d8aa5f454c184d1d8d75389186bdf01468a38dd4c7307c4c3fe4448a92e82e812eb20ab1bf17859436b768a438fcc4e2a2f2d3ec05ae493ad46e171bf37dc0e6050763c9df0d1b0a6c638b21a01fa756063b3fb105b05fcb83555a0c2609c39f9ebb65846e156890cf83779f9bf83a25aade2e742a26cc3e2ded117ebea279d47be0f622cb205c76ea9b22560be5423737e135edfd9921f409d728b8d1dbbca9dbaf84e214e8e4db5633a404c05f4fde3916fe11175aef9b3668a51cd32746d8cf362041d2ecaca49299465c160f048aa1f8dc706eab34517ed61de9b6053496a3b336417c6f46b16d365ffc9dac9f6cb73608bb039cc97899bc29702a6f0a23ebf7391ef114955ff2196a07e49e71de787c90a5309c56a05c8d48e6045c3707f5d386e5a7d913fbc56140a6f48fe9eda2c827426fab163b03573862ddabca76b07ff366d0452701969f713f0b1bab70e10be82c8e6866797b255fcd77811d217d4ed2c0c61030d2b3a80ecbe261e5627aedf915d6217ba382afb11007bd7c39439796fa32971e31694b7f9037141e0c71406c128bb72a67dc57dc870f3e957dfe1ccc7468a21c388e4501287b72266c2cb263746ca5c8f451433f040b416eaa7e46c3e5c21312f3ca8208410ed0604fe5ebe7d74b41c0edd7c0b6c42ba00ff147572cd29f0651e7076890e22b6c9942dfdd8bf3b1e60c102ca0957dd8afb65ebdd950daed16ebc0f4c76287115a52530f0a1b1b226fdfa581b3f512a95a9e2ed84162e04803eb07a304872262d382d155939fe97f41a00ea3b190c95729fd255f7316136eb9aa395cc797ba0b8de59c955772072787f3e7cdadc6723cc6369fa4b21c060537221007353110c32a12698f31020398b650613bfee2121ee77bf6ba4f38d7ea08d22716dcb16cafae957b748c89b7e55677791b946fa1f1f5f182bd761e90b77cb99f3920b8e737f58de2cc8204942ccf14155f673092c495507dfccf0d9785cad1aed168d825cfe13d858851dfb81dd6287cbcea171ecd0370f45741ed43ed384dfd442518b1b2bad864540cf24ff5dcf928df1ddc1f43ea45a6b559aac8dbbb902738bcebb84349773465bfe5f8e70363182c836d822c933ee120f758dc72ca210f4b805615b86977394d9563b7761e17d2389158ad4e33934861812393202451eb85fe4146edb60328c393dd4da9d50471a81ace01f683d796179c398a649a93c91cbe1c93aab01a0d4324f3b51067560819ad08c4b47fc34920fb6c6a1936d5b63bbff08418ad8c7ce6ded42e1313f749f74e8652590c119965d9cd4c8d24e5cf4ae65273cc015e657e15fcd1bcc4be8d33f6af986a0c53b1aed4dc82bbb0a4b616739aa5455b9cf9158330a32624aa8e3b1f0b4a37f947228b094a772cfbc7945630cc402e70fc14ee53bf2c7cb15b0b2368ae1e26acc167fbe01d7cf05697a7fa306e33a37c6cf2770e2d45e08307b264e4f560acd968b5104570bf2c0fbf27259e23662cb51c02011a39830d6167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139205736566f6964786b5a63636f6e355158303831735036646c377846522f7468706e44516c4e6e42374b47300a536f4266436c34554e5649637a6c4579667063693679562b4156434f6375787741574b31627868325571630a2d2d2d204a794f4b673677334d666d74654a6b304e4455634a337a6b4b70706a77616851695757534279357836764d0a0e5d8fabd6ab24fef1774cf3dfd2e338a7f0bd5d0f6dd019c78a8271012ad078225c923b6af8f3c81c1567b12ee2ec8619aae06f19917bdc5cfb9d03d6cc6d6ec742e79807a05053a1adabf73a06bb6c28f42c98306efe8f2c3fbc05929a3bf6c98f87f68572bfdf712fca299937c4deaea77947caa95905b82dfa872cfa14c20fe91f4ede3a16f0d2bd3bfe4398946f36d6aff987032356ceced04f68c8ea1e15834333727ff914f378bdb04bd56c430f39283fa9d52823f6381a0f80a3d1fe63841b56d8c28b071e4ea5672250c283c4929e3287ca99bfb6dc0a978c3edc6187e13975c8cc852876c176328107f7f049cbb2d7410d417f8a8de3a09e1bd2cd342debb397d5984208091f24f27253ef41997e52ac9253b86c1b22fe4e7c6b5f"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1G2PR0YP2Q6DHNQV9QPC7PFAC34AGUUU9CGJGJQCLJR3QLAUYPMGQ2LKA30"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": true,
+ "frozen": true,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "format 2: tlock stanza round differs from DateKey.round",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b6579636170010102503ff8ffc4c4ce0514a55489e588f739a9037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303120353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a73442b7065616a59734a5566666f4c466f337736706944486e6854647239535277497a6737364c3256765165472b7a512f5638796c587130466b4a4a4b7a306a0a423862357a35486a414444305353654f37646c644f4b52783152592f6563675948736e414c37543472446b4c4d34636436336341692f304a7942414f50596f740a57556c7735574a4733312b41703678747441375633633050594c50436e73774c3556565a633041356461590a2d2d2d206254416732476f494a2f776a37533771687852583256474a666551325434684a6d39734b306b4d306d38380a9feba4618ffba32b09cd22ca80342096164fd09c507db777cc5a8d3db4447ab4d2653d2cfdf5a079572e264758cd414652b95534ecac3e894b2d683eb11d03c81de99e4f1d8298b90af782e81814595aced85a5a2244de7a69ac0d344d890992924bbef6fb1849f5ffd192c815f6244722f4c81a4e9527cc0a54883e1add7124e3d2e6cbd36b696167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139203069744c4966694f4649617562743759324a7a6d48347239594f4d57755648793446727135734a764848670a633542417641614254553275612b4c6137336b59486556476b316d6b2f686f3849732f66747834554947770a2d2d2d2046324c4678636a332b356955446273456d43524d526e51712f792f76706d527a31587862453848544645410a03240ce6df868def9bbdf6b2844fe6dae0612dd1c3aedc25d448a3fbef6925679b3dbf117edf4e336f21fe87724623a9cd4b85b4937a79c50f0fb7f182100a355fe5d872ef24469b01f9f7c4bae2223316ead16ff4efff1e59c9145ea2fe3222fa4e3b3f31a1b00bf6d7ea6444955d5ecaa575248735c39cf5df909c44477cdfd74e75887bdf463b6c697126b90a6b05a300106ba2580fe36f31c4951226c221a6ccd13d9a6925b8c8477a4e18bdb0e762c6db9429f5f938685ec88dec98898c02e556cd9858bef17ed6c76cf2764a069c12f15e614eed958fa5ee7c78439519cffcb764557b6ff5b64497e66b480d47cda16a909057eaa03d1deef821c1db037fb284d5803f53a98bddfde9127a17c905d141ab3ec302a428976adcc703231f"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": false,
+ "frozen": true,
+ "error": "ERR_ROUND_MISMATCH",
+ "step": 8
+ },
+ {
+ "name": "format 2: tlock stanza chain hash differs from the pinned profile",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b657963617001010250613dcacd9848dfcbf28e47bc2ba4d54e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020646264353036643665663736653566333836663431633635316463623830386335626362643735343731636334656166613366346466376164346534633439330a73694a444d4555476c6468726b474d3133454f6c316c506c33577053497a41354e39454237303469413276556f3273647132702f41336332697652354a752f720a444f39486a6437373850346d584e344a75356d52736e476e4c336f63393955686a6e726168654c39424d76794f38633844486574444e4153517373616863497a0a6c7048546e6d4c496734713743625679546543646f7a38375a776c4253333761624834736c31572b4658340a2d2d2d20734d59743932527a7342726d432b655a6467666156734a4f5141374d624b4b55384b4c78345a7a455934300a8c06824a83d81931ca5df84df127a2c26e3936933da4386fbd8fd6d6c68200af8ff3609bc11b22f4dbc5a0dce29e98bff1aac1da049df48026671abe50a21532712aabd35c25f1c50795efa5ff68926e89e80796f6f0a3262c835ce8c5ff3f6e94d789c98b11c9a191f8583e2d43801469618e89cbdcb43b1976f18e10fb74691d06fc894d8a276167652d656e6372797074696f6e2e6f72672f76310a2d3e205832353531392032642f74514751634348746f2b555832734f4f53684a51787231767579434937792b56445158736f6177410a5a515338384b614249677869636a414c4e305559614d4a666d54566a306a4c517150734c715a346d4476670a2d2d2d20543368706e74753239315835642b7347475a4d615066626a4362476e776d4d654270747837326c566635510a0f58d9c991084148b9b6be0117b3c8faae96f6ba65a40357ae2fbc4f15fc81a2764394024ab48f839cb21a91f88cf194af7a0cba39b95997ff625c4d5b0cd5d9d5eaf2e11234ac8cc114612903d6d245bb3746dd1561550203edc0dcbed1d3e9899185ab544afdb7fba31ce5a63404b8dabdb9ccb0ea59383d289f695f3f654f2fb0faa1207a505f0d50f8809c431606496048ba1ee0f1937d9a97b44d48523f50ad15ea3b67b32374edc9759ff521296eb05f185000531df1bb22f13aef4007a5d821caf990f6faaa1d8bafd82e4b12d8657cb3470276002c4f3c18671d0e8956885f4f8b3bc186e4055f746f5cf64ae0b93044ad3c95515e3d8ab082d315b5e2fb71692efc107cc19276ff5e26f690261461910377d2a5485909bfe711196c"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": false,
+ "frozen": true,
+ "error": "ERR_PROFILE_MISMATCH",
+ "step": 8
+ },
+ {
+ "name": "format 2: extension data of a type other than bstr",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [11, 126, "9f000001caa6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a300716f72672e6578616d706c652e6c6162656c0101026c7075626c6963206c6162656c"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 4
+ },
+ {
+ "name": "format 2: empty extension data (h'')",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [11, 126, "93000001caa6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004000681a300716f72672e6578616d706c652e6c6162656c01010240"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 4
+ },
+ {
+ "name": "format 2: 65 extensions in one array",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [10, 127, "0590000001caa6006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400069841a2006f6f72672e6578616d706c652e3030300101a2006f6f72672e6578616d706c652e3030310101a2006f6f72672e6578616d706c652e3030320101a2006f6f72672e6578616d706c652e3030330101a2006f6f72672e6578616d706c652e3030340101a2006f6f72672e6578616d706c652e3030350101a2006f6f72672e6578616d706c652e3030360101a2006f6f72672e6578616d706c652e3030370101a2006f6f72672e6578616d706c652e3030380101a2006f6f72672e6578616d706c652e3030390101a2006f6f72672e6578616d706c652e3031300101a2006f6f72672e6578616d706c652e3031310101a2006f6f72672e6578616d706c652e3031320101a2006f6f72672e6578616d706c652e3031330101a2006f6f72672e6578616d706c652e3031340101a2006f6f72672e6578616d706c652e3031350101a2006f6f72672e6578616d706c652e3031360101a2006f6f72672e6578616d706c652e3031370101a2006f6f72672e6578616d706c652e3031380101a2006f6f72672e6578616d706c652e3031390101a2006f6f72672e6578616d706c652e3032300101a2006f6f72672e6578616d706c652e3032310101a2006f6f72672e6578616d706c652e3032320101a2006f6f72672e6578616d706c652e3032330101a2006f6f72672e6578616d706c652e3032340101a2006f6f72672e6578616d706c652e3032350101a2006f6f72672e6578616d706c652e3032360101a2006f6f72672e6578616d706c652e3032370101a2006f6f72672e6578616d706c652e3032380101a2006f6f72672e6578616d706c652e3032390101a2006f6f72672e6578616d706c652e3033300101a2006f6f72672e6578616d706c652e3033310101a2006f6f72672e6578616d706c652e3033320101a2006f6f72672e6578616d706c652e3033330101a2006f6f72672e6578616d706c652e3033340101a2006f6f72672e6578616d706c652e3033350101a2006f6f72672e6578616d706c652e3033360101a2006f6f72672e6578616d706c652e3033370101a2006f6f72672e6578616d706c652e3033380101a2006f6f72672e6578616d706c652e3033390101a2006f6f72672e6578616d706c652e3034300101a2006f6f72672e6578616d706c652e3034310101a2006f6f72672e6578616d706c652e3034320101a2006f6f72672e6578616d706c652e3034330101a2006f6f72672e6578616d706c652e3034340101a2006f6f72672e6578616d706c652e3034350101a2006f6f72672e6578616d706c652e3034360101a2006f6f72672e6578616d706c652e3034370101a2006f6f72672e6578616d706c652e3034380101a2006f6f72672e6578616d706c652e3034390101a2006f6f72672e6578616d706c652e3035300101a2006f6f72672e6578616d706c652e3035310101a2006f6f72672e6578616d706c652e3035320101a2006f6f72672e6578616d706c652e3035330101a2006f6f72672e6578616d706c652e3035340101a2006f6f72672e6578616d706c652e3035350101a2006f6f72672e6578616d706c652e3035360101a2006f6f72672e6578616d706c652e3035370101a2006f6f72672e6578616d706c652e3035380101a2006f6f72672e6578616d706c652e3035390101a2006f6f72672e6578616d706c652e3036300101a2006f6f72672e6578616d706c652e3036310101a2006f6f72672e6578616d706c652e3036320101a2006f6f72672e6578616d706c652e3036330101a2006f6f72672e6578616d706c652e3036340101"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 4
+ },
+ {
+ "name": "format 2: tlock stanza U re-encoded with c0 + p",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [303, 156, "47767356342f426a37792b42394835566479466e705a316763796665646e334254332f2b66554158746e53706d30575865732b6e7633706e30632b4b6272676a0a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d2058384841766f4779353462544e456f356a554a3456416f694e5459656555504745383370754a5654695a73"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: tlock stanza U is the point at infinity",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [238, 221, "774141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141410a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d2062433146764a75425074647a376738755a595536322b68313332482b397966334a556c6639497455742b63"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: tlock stanza U with the infinity flag and a payload",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [238, 221, "7842756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d204a5574764474646b44706658326f393336744b625466784255453572536d4e54524f566b54777635667773"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: tlock stanza body of 127 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 444, "c9a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173410a2d2d2d20664d3147664471544772417532736948524e58472b75394e47766437313333564a6b5966724f3559736534"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: tlock stanza body of 129 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 444, "cba5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f410a2d2d2d20324a39614a58625751566464762f2b656d6d4d6c4b7a30546365706b6c344e35547966495635586a477549"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 11
+ },
+ {
+ "name": "format 2: release signature re-encoded with x + p",
+ "spec": true,
+ "dkc": {
+ "edits": [
+ [0, 0, "444b43310200000000000079000001caa5006a646174656b657963617001010250ef7e3f60d1f2eb0bd85931df923b1fe3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774e483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303420353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a673656776c454572337a676e55766f6771686476397736626e52493844497432306a34493568395a727a31516d37496955333358416769617569626972424c380a45356876586c5849755a343448652b6b743867757941306f6f775547707142387a6f686d6a4861723042546a7630664f72624252455066456a756c534c572f640a4333393138516c583677372b6f557668616474684c6b2b48596c4450534a7a657655716936577a33576f6b0a2d2d2d20663949306577586e3857706b642f53426b5241744a62797537546f6b58502b694b3632776e65476b495a490a10f1eddf383a4019120ba4ddc8def7177b6e645764bfb51cbd03c4420b4d1d1ee7fc5b2ad7d566340642b38d1ad4ef9f72ea6cbe575b94db31737770b09bd19688794045fabc4d6dbfd1f98d91250c492cf8e0bf2f12d0254d60d194147ddc114680f4a7a62f31889caaf65bb7a6e3d19587da989ab6a2ac201d6efd8241001561ecc7288368a46167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139205667702f2b48776c48426d2f34492b5474545a67556c476e6a67794a5773676a5a426b6e34364c6c326c770a4d36656a6b2b36655a446e3739757930584670707a644978366f77766e7139767757534555437a536c774d0a2d2d2d20544371714133354b3830672b50395143776a7132742f754874766c654e46554f655a6f7841413238334f6b0a8a548b92651a12bef4bf25221f1ee8e3a751356ef03e861e654d642083a7c9311dd09f460be9cef2868a2d99b26c8509c079e05b266d0a70f678d02a4ed3ed5f9db6d45607e5f880e039429bd53486562fe510c4a5a33bad9bacd0ba6fd74c87f1e4f1dec8aef3f81b8369b980dcd04573c27444d7ca2a1162247d682821d43738de9bbd3eea13ddd611b6a2c9110e24cc3e9a605b31377724ea9fc367c425ebcd0d1abdc8246ccfa2cf4ed9ceeeeb4d41bc57fb6b85fe98b7739840ee8ed8763209b4298015c0d5f1d4a72d337e9e2772f130b37335ae7c6fde9772e91d2dd84ad275dfb573a599b81ca0fb70f9b745743b252a2489d12dace0daa1db532c5faae1a512b538921bc5dd2f1d5a2ea292c6f12ecc97fcb907f03f2d0cded8fe83"]
+ ]
+ },
+ "release": {
+ "round": 1004,
+ "signature": "be076aa25a40df5b4d22f9f7bcedaff30dcac20d94556107b8e652c7b54b2a440ce796f9fa53ad28023c84b40a580f55"
+ },
+ "now": "2024-08-23T15:09:27Z",
+ "registry": "default",
+ "network": true,
+ "frozen": true,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 2: release signature is the point at infinity",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": []
+ },
+ "release": {
+ "round": 1000,
+ "signature": "c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 2: release signature with the infinity flag and a payload",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": []
+ },
+ "release": {
+ "round": 1000,
+ "signature": "d44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 2: release signature negated",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": []
+ },
+ "release": {
+ "round": 1000,
+ "signature": "944679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 2: negated release signature and U re-encoded with c0 + p",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [303, 156, "47767356342f426a37792b42394835566479466e705a316763796665646e334254332f2b66554158746e53706d30575865732b6e7633706e30632b4b6272676a0a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d2058384841766f4779353462544e456f356a554a3456416f694e5459656555504745383370754a5654695a73"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "944679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_RELEASE_INVALID",
+ "step": 10
+ },
+ {
+ "name": "format 1 time_only relabeled format 2",
+ "spec": true,
+ "dkc": {
+ "base": "time_only.dkc",
+ "edits": [
+ [4, 1, "02"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_UNSUPPORTED_VERSION",
+ "step": 14
+ },
+ {
+ "name": "format 1 time_and_key with one stanza relabeled format 2, with the identity",
+ "spec": true,
+ "dkc": {
+ "base": "time_and_key_portable.dkc",
+ "edits": [
+ [4, 1, "02"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1840Y650JZGMWEL6QMZWQ4H8E4GE95F9ERDR0M8G6LFYZ749J6TRQR3F5PZ"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "format 2 time_only relabeled format 1",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [4, 1, "01"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_UNSUPPORTED_VERSION",
+ "step": 14
+ },
+ {
+ "name": "format 2 time_and_key relabeled format 1, with the identity",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [4, 1, "01"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1NSY6AKN4N2RXF2VPYPP4LC8KH7ZSQQ9VTMC0NPFL73S5FSM90QQSN6LZCL"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_UNSUPPORTED_VERSION",
+ "step": 14
+ },
+ {
+ "name": "INNER_ACCESS_AGE with 15 stanzas",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [14, 2251, "07eea5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a703252434d5265364b50774a4562786b49447a647837654961784f6d414657355058766d70776b51434c4a3142786b34376b766c7958716164303964764257740a467961536b5231413445774570306359526a4c7563415831704b486f423942516d46444c616e62575130474c4a6232736e30666c4b6d75745757417970557a420a36474970623956316e78324f47666852476b51446b726e385877654b30424a4969614670392b4b7a6b52450a2d2d2d205a2f51636b533033634a4b644b67486845415259695979544131754d422f7733564d6b78706f763456466f0a4bf5d50d17e9cb4ae440640437ce21b64300587cb303478011b5bfa04969037b06b27faba14fa0032f3c921640ea97fe49d8f9145c7be4fe15d1936462039c5f27515f7ff097bd0783a1f066c72a2302280c943054183aa9efe5582d0dce3637f7c7ec215941b20c28633d44c687f711d2caadfe65241630b0c241342442eba379e6f5212ecf0142dc22002e50c17d66e2af116fef5feef2477599c010244589f9d609eed77f6e91da8865f85b2a7e235157a0f972239cc1d484985a33094c90a61a8cf43c9c452cf471adf4fb2a33112293821b27f87999fc6eb3ce653ec25fac3c1e7c81229493ec8cdda5aebca402302050b9f78c93970167980c29c1476699ae7e4c1f6736d506356105432d572893f7d8e9086d5fed5ede46f6cb0d95d226f17b38b2fdb569afc3fa2672a9075f053110639bee0a8e41cea90483e2f7fe7961d029143f4bbca18e98c3c0756bc08c37c3b61468f3fbef2bdc37ab31c49d3d6585bced2ff25b35a495ee34e4c235befd4e3358128e2acb3c6b9371ac72b6f71d99b9bc699cec15c7d15282346e3b05630c6c53bdb0e5bcd8f4a8f0b32610f4d4a2ed66fb7e30f6c7892fe93f4cee0264b57e778d2afc93d191eb69672ab990e86a03c86e14577a74ec26f67237ec2d229e1399fe2a4af76cdd1955ff1c609f4c7133a5b7e7156fc1e84b3310c825e7055c701879fa021c2b1089bc823ba4703d43265f5f00af30fa5242546970d2c18ace968614a1453381cd3485a93a876877fc978bc5b04df1f9a88536c70885119bf8d956c86cd179e642dc7c006edd1d4156ceea5a9d35f2e3edb73893906ca47bab919bbd74bc0b1dd29746c5e8b9b0e7877be5f4332397062468f37a5cb1217a2958d85742d0bf9dec33f324a9d4a5d2b4cd56920ab21840608260a262cd376e5fa2bbd8262da2925b7eb38c5fc823c5c9dc772ea1d7d050cf76b691d47a83261f8d9e513badca4a48d445d39af3e8ee132f1533f5cbbb0c6b1245c3d3e36dd596203444dda8e1aff04d3397515a48095ea254b3330f20afa34b511cede625b344f6fd540e918b48f5f4941d980c28409959efe861ec82aebde8234b3fd1e92b70bd2bf8ad6a251c127a0d7366023a692dd3a849285fec3ef60ad19133cae331eeea21678b04add2ec3c5d704168ca4416e623878dec8ee14cc85cc2f9e5ec514b1ce9e32b4cc06d37a2adeb5f8e589fa7b436dc769aed1fd48c77b91c279a22f6ef72fe2c68a75a74dad5c6deb6edcf8f78a9fabd3ee71d24214f4f2738ba5f152b2034356b1d493c088604ae35f40ee13a408a9f40d96cbf4bed8fbafea106b50fcce897344cb76fb438df5fb8209a3ccebc6e223f8064027833dd2604b3accb3de6c0f2945f9591db6779a8b305b5f2acaf3bda7fb601569394c399cd45b8146bd5610eb95b546b40f6b2b3b004aded6bf45991f3b0eb9b26e11d7319554cff6ebfbc0101aa5828c4321d4b4c06dd11c57f7adabbb86131b601c8e8a7397a8a1a540bc0b2f3a1432f6f31fe245e81cb0f0bbbfdaedbbbc3c7a4262ec3bc9049af29fabe75cf3a067a030c5b72b84ac03c87304d7a4e47e9a653464d8db07b548a8b7509a3629759f70644c8da71f924e4fb9da47c140fc9908a77531e31f69caad928c7807ba8dd6cb4f9e27c0448c57aafbfa96b2917b0a492bdf86bf0703fd1c1b7a0323738e6d09beef79a384725f359678e4b30d32e12dad4fe7ebb7dbcf07da0fe9072e27c40ef08ddf7cca30aa17b6ee38109bf62d00d6da6672bac3e48d2f751cc81ab41d45e76b170c32765a821a16b503e477bc580e4b30abc57f799cf1efbc10f781d65fb5964d98937f5b5539ffa2a4872ebd8c772c44c84330cdcb043b595cf25680e105807e527ca01e09fa083209524998cf3e4dac50d909d5e1849af62ab0842ac09375461feba211f7fe7d0f8f07f05fda41bbf57726f97e6f60606757d5b55ea783327347a776f5070f55d5c222f7730444881d8351fa092411e47947e7d817290122c82d5759baa0112773a8023a67ba7b62a0e834cb29a8685b9210fd365cbce12467a9b256d898536583cabdf8a4654df3a34acdd068e6413ff213856e11267205e3436f3e9de190609345e715fa3887cd17b6882f2141aa8bf5ffdeada5216b67ecf95f32b6917c7e3c33851e0fd036fe8ce092e3e2d7fb4a22fbbe5afbbd07c6490b841e8c47a1a896d5b7db0ee76f4129c1c061ddedaae76201703cd07532ef57fe1b158302207d353aa2f988db1e962e6423eb06e7d9d300a9e7b9bd88e7fed32f2ef68436a1cd8881ef57ef9eb7235c07ddfd16d1c20297e41963e6a7e91c8a474e6e7a4778b5815a21181694b52b6bcc9ca543948fadb7d9dc5aed2b162e15906c64163ff65bff705cad4"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1NSY6AKN4N2RXF2VPYPP4LC8KH7ZSQQ9VTMC0NPFL73S5FSM90QQSN6LZCL"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "INNER_ACCESS_AGE with 17 stanzas",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [15, 2250, "b2a5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a703252434d5265364b50774a4562786b49447a647837654961784f6d414657355058766d70776b51434c4a3142786b34376b766c7958716164303964764257740a467961536b5231413445774570306359526a4c7563415831704b486f423942516d46444c616e62575130474c4a6232736e30666c4b6d75745757417970557a420a36474970623956316e78324f47666852476b51446b726e385877654b30424a4969614670392b4b7a6b52450a2d2d2d205a2f51636b533033634a4b644b67486845415259695979544131754d422f7733564d6b78706f763456466f0a4bf5d50d17e9cb4ae440640437ce21b64300587cb303478011b5bfa04969037b06b27faba14fa0032f3c921640ea97fe49d8f9145c7be4fe15d1936462039c5f27515f7ff097bd0783a1f066c72a2302280c943054183aa9efe5582d0dce3637f7c7ec215941b20c28633d44c687f711d2caadfe65241630b0c241342442eba379e6f5212ecf0142dc22002e50c17d66e2af116fef5feef2477599c010244589f9d609eed77f6e91da8865f85b2a7e235157a0f972239cc1d484985a33094c90a61a8cf43c9c452cf471adf4fb2a33112293821b27f87999fc6eb3ce653ec25fac3c1e7c81229493ec8cdda5aebca402302050b9f78c93970167980c29c1476699ae7e4c1f6736d506356105432d572893f7d8e9086d5fed5ede46f6cb0d95d226f17b38b2fdb569afc3fa2672a9075f053110639bee0a8e41cea90483e2f7fe7961d029143f4bbca18e98c3c0756bc08c37c3b61468f3fbef2bdc37ab31c49d3d6585bced2ff25b35a495ee34e4c235befd4e3358128e2acb3c6b9371ac72b6f71d99b9bc699cec15c7d15282346e3b05630c6c53bdb0e5bcd8f4a8f0b32610f4d4a2ed66fb7e30f6c7892fe93f4cee0264b57e778d2afcc4cfefc335027feea8e1734cb04a2f54435bd369f4571bf86e2ae5679cd43411bb76db3f21f83d779557613390b9c73e75d5ff607110b458f4025c4b6a7cba253400158fa8ac238e7516414f4d26299f2fb2526e56604ad2c18ace968614a1453381f331c3b442e42052f1b7b294c64ecddbdb8505f200903dac89d130bb7f8f45a947d35b2236e436587cf4d45ab92c8dd3fbb62d969145a07aac90e68f2b9a3964d2b43bd2de88eeec9c4ae3fa626e94350272eb5947bb5c7a2958d85742d0bf9dec33de248083a6eebde24be53e926f1d5ae721df37c3477f78aeccf6252b82ff5a66f0af4af506c7ccc57b2ab9d7cc68ae59dc8acc75842c428e947043b5f51a769a5bd2dac0e6dd09313137d3cef8264f0f6de3eeb25ffaeb203444dda8e1aff04d33974e7b670261ff67e0497213abc24a661be9e54eb956cef62e7fbcd74780c8861ed33d4364b138f8d1448fc5aeb6ec47436fd1e91d33a10ef6a15c49123f0a07716510207b16edc42b0f7be13cec23cfa320e1e17cef942d678b04add2ec3c5d704168cf7c0c8965cebe8cf6c63ccd0ac6defcd33d2506d2c80f37c76d1ba3ffe04ea732baf1bc00d23f82f346d88c6ea56521c046c7f631ce00198a7d1c8cd4b6edbbde95b753b0cbaf6de602760b4f441217ab5d300c5d7b176b1d493c088604ae35f40ee71b6391d07aea11c66c98a4889b97538b13a1efd91f789178a619d0049b69a537e7ab43367de3791c683bdd4e1ca3ea8827c5f6bba47fc5b59c14068afe2eafe1e0b23ff6428e005defe7d594db4ae52145cf497aa657546b40f6b2b3b004aded6bb43be88c91cb83389d126a024f50df43e38a1407d77523db260d646a7bce60fa51649ec5d35659d70ff6afa759668b444a0a92a4bdb34d7b4149eb1b6cb4ce5835f6c2a7fab6eedca02334dd86d814a20efafd5fe72c0e7a030c5b72b84ac03c8730487d1f32f6807b1953acc57f60b2be5349987cac5dac6256d9f40dd42582f594b56b607196b7de0024367ef6be9db93388fe23a8c44b9fbdd956625ce519a7efd81d0b279f91e1a2c1289d4b00d5b5ea95137636c4f897eef79a384725f359678e4b44b27a11aabfe07ad970dbb562bdec874dd95f66eb51daf4f9a54c9e6971eaa5249a52c51730985c7cf14f48f4d9278d9cb61fe03e5e8764ce0264be5abf3b71744a60c1b1e4f60b836eb68ee26fda9c255e1f1be7495ad98937f5b5539ffa2a4872fdf3b8709d02b91168c3992680bbae2511312b581bf166d506d4b8e7bd3ba92899b0ea92c39b379ea2066949b144a17a219748186230cdbd113f2cc4abf9ea741fe59e5cc06d7250e2d8af232b037b0a51d16538583258776f5070f55d5c222f77307d7da6d53e2ec390240e74f54260cc58fd1553b4aa6ea6951d2c4058a445ac7c9fbd11539613a2908bdfee210bae0ef8f24745728c593b9fbb125c0d8addc44559ff244eefe31de30122a12d274ade43106153635cc9aede1915044c0d7c33a2e71aea0045fbc705728dc25acc97e82324ab4dfde8e2634960cfd4f7096cd7c9086fecdb2e2f19118972eaec1834b94fdd6d42d78d446c062acbc43d4d009dcbad185234e9c7b1daae0e59d6e766f9cb402c8af49a21d685201b6d5b8d2a9254bf06b0f4ceaea6fc789f29893ceb0a496e2b856a8fa67abaaeef8522521584d2072d595d3502c6b41aab40ca166ee2c5bbc08497ac1c0e99cfc89c3da0f6e12d206de37c00f3bd0b2ef94a78e60f19cdd07f1653f920dde0330042a25f0634fa4371dcfc680a195229823aa217216b9bc5e583fe75f5edaf0512635610fd5d85a5ce57b9e8d7c1962eebd8070cd796bc2bc7c882065dcfd80fa821c9ed3c523acc778d111a16f2a50f8d8d2cddd85f4412b495d63f6fdf6e02fa667cc374158c301378b1dc03577d28aed9e20f8f9916e6205124248ea6d643a862e5d2ce3b73a0630cd8737d91a2f5477ecef216b7af503597ef9e4d90103c92a63cca2adc179d64cd1831cb21c20f29dccb4c5cd66989ebf2a2236a45d7eb6dc969eba16c3d60b366"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1NSY6AKN4N2RXF2VPYPP4LC8KH7ZSQQ9VTMC0NPFL73S5FSM90QQSN6LZCL"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 12
+ },
+ {
+ "name": "16 stanzas, two for one recipient, and the identity of that recipient",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [900, 1365, "9394dcd109377c8ebbd67040d34d547b1250e330946719f3280ea614dcf7004f8c30d5202dd43c6bbd767533b19aee2f5af5fe6b77108f03f5272a755557e63d332e38b4d1a5388b162f7358510418b83ccb754a457c68d2c18ace968614a1453381f331c3b442e42052f1b7b294c64ecddbdb8505f200903dac89d130bb7f8f45a947d35b2236e436587cf4d45ab92c8dd3fbb62d969145a07aac90e68f2b9a3964d2b43bd2de88eeec9c4ae3fa626e94350272eb5947bb5c7a2958d85742d0bf9dec33de248083a6eebde24be53e926f1d5ae721df37c3477f78aeccf6252b82ff5a66f0af4af506c7ccc57b2ab9d7cc68ae59dc8acc75842c428e947043b5f51a769a5bd2dac0e6dd09313137d3cef8264f0f6de3eeb25ffaeb203444dda8e1aff04d33974e7b670261ff67e0497213abc24a661be9e54eb956cef62e7fbcd74780c8861ed33d4364b138f8d1448fc5aeb6ec47436fd1e91d33a10ef6a15c49123f0a07716510207b16edc42b0f7be13cec23cfa320e1e17cef942d678b04add2ec3c5d704168cf7c0c8965cebe8cf6c63ccd0ac6defcd33d2506d2c80f37c76d1ba3ffe04ea732baf1bc00d23f82f346d88c6ea56521c046c7f631ce00198a7d1c8cd4b6edbbde95b753b0cbaf6de602760b4f441217ab5d300c5d7b176b1d493c088604ae35f40ee71b6391d07aea11c66c98a4889b97538b13a1efd91f789178a619d0049b69a537e7ab43367de3791c683bdd4e1ca3ea8827c5f6bba47fc5b59c14068afe2eafe1e0b23ff6428e005defe7d594db4ae52145cf497aa657546b40f6b2b3b004aded6bb43be88c91cb83389d126a024f50df43e38a1407d77523db260d646a7bce60fa51649ec5d35659d70ff6afa759668b444a0a92a4bdb34d7b4149eb1b6cb4ce5835f6c2a7fab6eedca02334dd86d814a20efafd5fe72c0e7a030c5b72b84ac03c8730487d1f32f6807b1953acc57f60b2be5349987cac5dac6256d9f40dd42582f594b56b607196b7de0024367ef6be9db93388fe23a8c44b9fbdd956625ce519a7efd81d0b279f91e1a2c1289d4b00d5b5ea95137636c4f897eef79a384725f359678e4b44b27a11aabfe07ad970dbb562bdec874dd95f66eb51daf4f9a54c9e6971eaa5249a52c51730985c7cf14f48f4d9278d9cb61fe03e5e8764ce0264be5abf3b71744a60c1b1e4f60b836eb68ee26fda9c255e1f1be7495ad98937f5b5539ffa2a4872fdf3b8709d02b91168c3992680bbae2511312b581bf166d506d4b8e7bd3ba92899b0ea92c39b379ea2066949b144a17a219748186230cdbd113f2cc4abf9ea741fe59e5cc06d7250e2d8af232b037b0a51d16538583258776f5070f55d5c222f77307d7da6d53e2ec390240e74f54260cc58fd1553b4aa6ea6951d2c4058a445ac7c9fbd11539613a2908bdfee210bae0ef8f24745728c593b9fbb125c0d8addc44559ff244eefe31de30122a12d274ade43106153635cc9aede1915044c0d7c33a2e71aea0045fbc705728dc25acc97e82324ab4dfde8e2634960cfd4f7096cd7c9086fecdb2e2f19118972eaec1834b94fdd6d42d78d446c062acbc43d4d009dcbad185234e9c7b1daae0e59d6e766f9cb402c8af49a21d685201b6d488052911bd346a690ce82ffa76280299935d25355060ce86cbf8621d480a09f206f36a9b4173c5672012ec4b035e2943d41c86714d864e796d35302816e2ec7d3d692d666353038bc614751c1b6f02e85abdcedaeceb74ea9cdfa16636156aee1e699bb74f210cf5ae86dada245f80cf5de0be30bab8e0e9f098bb2f06c92b4957f79107353c494eabc76a6711f60f5c5b19496e272b96e77296f686dea8d386c72fa26b99bd641b9cca0dcbc4ff9a076d838fb10454c220e9720a284e83667a897f499e3de"]
+ ]
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1NSY6AKN4N2RXF2VPYPP4LC8KH7ZSQQ9VTMC0NPFL73S5FSM90QQSN6LZCL"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_POLICY_STRUCTURE_MISMATCH",
+ "step": 13
+ },
+ {
+ "name": "identity that is not a recipient of any of the 16",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": []
+ },
+ "identities": [
+ "AGE-SECRET-KEY-1G2PR0YP2Q6DHNQV9QPC7PFAC34AGUUU9CGJGJQCLJR3QLAUYPMGQ2LKA30"
+ ],
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 13
+ },
+ {
+ "name": "control of schema version 2 without key 6",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 579, "c0a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a32b958b75c5d115516b01bab5a296cd7c83b956144f17be01334cf961a9394f0b6d8b8fec6d566b2a2591b86da70351123a193e066db96ec45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e81a6b2281478f480de71ef03342c64ed3"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "control of schema version 2 without key 7",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 580, "c8a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a32b958b75c5d115516b01bab5a296cd7c83b956144f17bee0b1747f1549994e6c7ae03391a26bffcbd83462fd2edee17b00aa674719dedcc45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e9502f9c6b6c48c2054730cfec7a7d656b447630b4b439dfbabe"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "padding code 0",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [578, 17, "0d44858313fb885815265d4e1985d5390b"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "padding code 3",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [578, 17, "0e47dc0b8e0d25f76140bbcaf1b3956b2e"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "payload_length L_MAX + 1",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [570, 25, "83ab6c48c335f6580f0eccbf15b3e4a5da1a4fb320b4f992e4"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "payload_length of 7 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 580, "c9a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a02b958b75c5d115516b01bab5a296cd7c83b956144f17be5d3791fd50fb59de8a24ab1d59e3840615f9c9dcc8007010aae648150b53c721c45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e95f2f9c6b6c49f385f05d82e6fdf4fbf358c5e41fbcad20071df2"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "payload_length of 9 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 580, "cba5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a02b958b75c5d115516b01bab5a296cd7c83b956144f17be955d41376dd03b116ef0e8dc1ce9385256f62f550eea5ede5e70e64f25b58bbbc45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e9512f9c6b6c48c334c7ef0abf53239233b3b90f0f62af5ff21e33e12c"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "payload_length as an unsigned integer",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [15, 580, "c6a5006a646174656b657963617001010250c8cfc53d45c879da916edddf71f3bddd037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a7042756e7061565a6d64544968414131704954704632797252584c67616d597872353146647a4d2f3955516d7776306c506f624f616f44503933787757486a740a41506f442b62626b434a5532324e61664d3957367a6a6a704a364c71385773423645387233456c6d7746434b373057597958756e7638426f30632b4b627731340a6d364f332f777967703971495a43496f534775304c427a5737435a673945394d315648322f684a7173476f0a2d2d2d20687979676a2f692b777347494f316b394a7652656574416a56774d34332f4e736a67704e6333434f6361670a5eecba56ad5b1b89b5795934b152d3c7a02b958b75c5d115516b01bab5a296cd7c83b956144f17beae9f92629835c3ea6cfff3763049b759020b68d3a636c03d123d4ef037f64fd6c45ab9338a1325d6344c84f56498e861a153c826f192e332d331dcfcc67596f80bbb64e9022f9d5bdc4fc1b9383c0700e591604b642c97143d390e"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_NON_CANONICAL_CBOR",
+ "step": 14
+ },
+ {
+ "name": "last padding byte not zero",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only_extensions.dkc",
+ "edits": [
+ [1108, 17, "a9c4c81d0051c53edf9b90a846b2fd5e9f"]
+ ]
+ },
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "now": "2023-08-23T16:49:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "payload plaintext of P - 1 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only_extensions.dkc",
+ "edits": [
+ [1108, 17, "e0efdea667865b5fdf9dd98e76c33d25"]
+ ]
+ },
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "now": "2023-08-23T16:49:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "payload plaintext of P + 256 bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only_extensions.dkc",
+ "edits": [
+ [1109, 16, "1a1d49d40c97b151f361236ad3a665cfaf876aa422deb2a1af98f58ec6c56cc6230ad168a929f71996a02119c95da09da99265eb755d5150e0779d03b728ed79fb9912b12df9fd3d391df1996f564f2bcfbaa094dddcb7cb6f45ff7bdb24ac261600ff5a93e681a7b2e9fe7a5aa510e2248cb91ab42e109edcb2ece78ff5b78f152acdea1395088d2fb4e8981dbb400e1739ce987495dad128e2df852b929287d193f4d05b10b48663267c88facc6dbf3c2eab513c8d9337803df14ed1dc7fd31554d6ce62fec4e5efd4a163e7f21b153a3680caa0c46cf93900608aa56d954207b3feead254aaf8273e02b7c5b71be819f35e5bae615d3246d90e426193e01d7340f57db6563bc7e8a6f70cf876c03f"]
+ ]
+ },
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "now": "2023-08-23T16:49:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "payload plaintext without padding, of L bytes",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only_extensions.dkc",
+ "edits": [
+ [887, 238, "d6ce427933325eeabe9d771bfc4a64ec"]
+ ]
+ },
+ "release": {
+ "round": 2000,
+ "signature": "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e"
+ },
+ "now": "2023-08-23T16:49:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "padding code 2 changed to 1, with L = 78000",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [578, 17, "0c3c2efb98e8ecb9c80bffd140561508e8"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "payload_length L - 1, the last byte of the content not zero",
+ "spec": true,
+ "dkc": {
+ "base": "format2_time_only.dkc",
+ "edits": [
+ [576, 19, "58580f5c56ce65a8d754ee9c79638d30ac1df1"]
+ ]
+ },
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": true,
+ "frozen": false,
+ "error": "ERR_INTEGRITY",
+ "step": 17
+ },
+ {
+ "name": "format 1 time_and_key with one stanza relabeled format 2, with the .dkk",
+ "spec": false,
+ "dkc": {
+ "base": "time_and_key_portable.dkc",
+ "edits": [
+ [4, 1, "02"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b6579010102503955e944a3c60cfa1fd6485e9693c77d0350448e134a13457c319cab7fceaf7ffa1f04667832353531390558203d5e4d51f21236ecff40d89c0adcf9aa325a24b91b46fd9d1afa482f54b2d2c606a10058202e97878078bae6358037a9c264f379a3cbe839f767d69836b0343f35657b2972",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 9
+ },
+ {
+ "name": "format 2 time_and_key relabeled format 1, with the .dkk",
+ "spec": false,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [4, 1, "01"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250e3c7be83cbf1fbd6b115c96411b3bd010350fe68d3b3bb59db0c14b7ef57d8d6cb5e04667832353531390558209c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c365780106a1005820600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 9
+ },
+ {
+ "name": "INNER_ACCESS_AGE with 15 stanzas, with the .dkk",
+ "spec": false,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [14, 2251, "07eea5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a703252434d5265364b50774a4562786b49447a647837654961784f6d414657355058766d70776b51434c4a3142786b34376b766c7958716164303964764257740a467961536b5231413445774570306359526a4c7563415831704b486f423942516d46444c616e62575130474c4a6232736e30666c4b6d75745757417970557a420a36474970623956316e78324f47666852476b51446b726e385877654b30424a4969614670392b4b7a6b52450a2d2d2d205a2f51636b533033634a4b644b67486845415259695979544131754d422f7733564d6b78706f763456466f0a4bf5d50d17e9cb4ae440640437ce21b64300587cb303478011b5bfa04969037b06b27faba14fa0032f3c921640ea97fe49d8f9145c7be4fe15d1936462039c5f27515f7ff097bd0783a1f066c72a2302280c943054183aa9efe5582d0dce3637f7c7ec215941b20c28633d44c687f711d2caadfe65241630b0c241342442eba379e6f5212ecf0142dc22002e50c17d66e2af116fef5feef2477599c010244589f9d609eed77f6e91da8865f85b2a7e235157a0f972239cc1d484985a33094c90a61a8cf43c9c452cf471adf4fb2a33112293821b27f87999fc6eb3ce653ec25fac3c1e7c81229493ec8cdda5aebca402302050b9f78c93970167980c29c1476699ae7e4c1f6736d506356105432d572893f7d8e9086d5fed5ede46f6cb0d95d226f17b38b2fdb569afc3fa2672a9075f053110639bee0a8e41cea90483e2f7fe7961d029143f4bbca18e98c3c0756bc08c37c3b61468f3fbef2bdc37ab31c49d3d6585bced2ff25b35a495ee34e4c235befd4e3358128e2acb3c6b9371ac72b6f71d99b9bc699cec15c7d15282346e3b05630c6c53bdb0e5bcd8f4a8f0b32610f4d4a2ed66fb7e30f6c7892fe93f4cee0264b57e778d2afc93d191eb69672ab990e86a03c86e14577a74ec26f67237ec2d229e1399fe2a4af76cdd1955ff1c609f4c7133a5b7e7156fc1e84b3310c825e7055c701879fa021c2b1089bc823ba4703d43265f5f00af30fa5242546970d2c18ace968614a1453381cd3485a93a876877fc978bc5b04df1f9a88536c70885119bf8d956c86cd179e642dc7c006edd1d4156ceea5a9d35f2e3edb73893906ca47bab919bbd74bc0b1dd29746c5e8b9b0e7877be5f4332397062468f37a5cb1217a2958d85742d0bf9dec33f324a9d4a5d2b4cd56920ab21840608260a262cd376e5fa2bbd8262da2925b7eb38c5fc823c5c9dc772ea1d7d050cf76b691d47a83261f8d9e513badca4a48d445d39af3e8ee132f1533f5cbbb0c6b1245c3d3e36dd596203444dda8e1aff04d3397515a48095ea254b3330f20afa34b511cede625b344f6fd540e918b48f5f4941d980c28409959efe861ec82aebde8234b3fd1e92b70bd2bf8ad6a251c127a0d7366023a692dd3a849285fec3ef60ad19133cae331eeea21678b04add2ec3c5d704168ca4416e623878dec8ee14cc85cc2f9e5ec514b1ce9e32b4cc06d37a2adeb5f8e589fa7b436dc769aed1fd48c77b91c279a22f6ef72fe2c68a75a74dad5c6deb6edcf8f78a9fabd3ee71d24214f4f2738ba5f152b2034356b1d493c088604ae35f40ee13a408a9f40d96cbf4bed8fbafea106b50fcce897344cb76fb438df5fb8209a3ccebc6e223f8064027833dd2604b3accb3de6c0f2945f9591db6779a8b305b5f2acaf3bda7fb601569394c399cd45b8146bd5610eb95b546b40f6b2b3b004aded6bf45991f3b0eb9b26e11d7319554cff6ebfbc0101aa5828c4321d4b4c06dd11c57f7adabbb86131b601c8e8a7397a8a1a540bc0b2f3a1432f6f31fe245e81cb0f0bbbfdaedbbbc3c7a4262ec3bc9049af29fabe75cf3a067a030c5b72b84ac03c87304d7a4e47e9a653464d8db07b548a8b7509a3629759f70644c8da71f924e4fb9da47c140fc9908a77531e31f69caad928c7807ba8dd6cb4f9e27c0448c57aafbfa96b2917b0a492bdf86bf0703fd1c1b7a0323738e6d09beef79a384725f359678e4b30d32e12dad4fe7ebb7dbcf07da0fe9072e27c40ef08ddf7cca30aa17b6ee38109bf62d00d6da6672bac3e48d2f751cc81ab41d45e76b170c32765a821a16b503e477bc580e4b30abc57f799cf1efbc10f781d65fb5964d98937f5b5539ffa2a4872ebd8c772c44c84330cdcb043b595cf25680e105807e527ca01e09fa083209524998cf3e4dac50d909d5e1849af62ab0842ac09375461feba211f7fe7d0f8f07f05fda41bbf57726f97e6f60606757d5b55ea783327347a776f5070f55d5c222f7730444881d8351fa092411e47947e7d817290122c82d5759baa0112773a8023a67ba7b62a0e834cb29a8685b9210fd365cbce12467a9b256d898536583cabdf8a4654df3a34acdd068e6413ff213856e11267205e3436f3e9de190609345e715fa3887cd17b6882f2141aa8bf5ffdeada5216b67ecf95f32b6917c7e3c33851e0fd036fe8ce092e3e2d7fb4a22fbbe5afbbd07c6490b841e8c47a1a896d5b7db0ee76f4129c1c061ddedaae76201703cd07532ef57fe1b158302207d353aa2f988db1e962e6423eb06e7d9d300a9e7b9bd88e7fed32f2ef68436a1cd8881ef57ef9eb7235c07ddfd16d1c20297e41963e6a7e91c8a474e6e7a4778b5815a21181694b52b6bcc9ca543948fadb7d9dc5aed2b162e15906c64163ff65bff705cad4"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250e3c7be83cbf1fbd6b115c96411b3bd010350fe68d3b3bb59db0c14b7ef57d8d6cb5e04667832353531390558209c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c365780106a1005820600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 9
+ },
+ {
+ "name": "INNER_ACCESS_AGE with 17 stanzas, with the .dkk",
+ "spec": false,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [15, 2250, "b2a5006a646174656b657963617001010250fe68d3b3bb59db0c14b7ef57d8d6cb5e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a703252434d5265364b50774a4562786b49447a647837654961784f6d414657355058766d70776b51434c4a3142786b34376b766c7958716164303964764257740a467961536b5231413445774570306359526a4c7563415831704b486f423942516d46444c616e62575130474c4a6232736e30666c4b6d75745757417970557a420a36474970623956316e78324f47666852476b51446b726e385877654b30424a4969614670392b4b7a6b52450a2d2d2d205a2f51636b533033634a4b644b67486845415259695979544131754d422f7733564d6b78706f763456466f0a4bf5d50d17e9cb4ae440640437ce21b64300587cb303478011b5bfa04969037b06b27faba14fa0032f3c921640ea97fe49d8f9145c7be4fe15d1936462039c5f27515f7ff097bd0783a1f066c72a2302280c943054183aa9efe5582d0dce3637f7c7ec215941b20c28633d44c687f711d2caadfe65241630b0c241342442eba379e6f5212ecf0142dc22002e50c17d66e2af116fef5feef2477599c010244589f9d609eed77f6e91da8865f85b2a7e235157a0f972239cc1d484985a33094c90a61a8cf43c9c452cf471adf4fb2a33112293821b27f87999fc6eb3ce653ec25fac3c1e7c81229493ec8cdda5aebca402302050b9f78c93970167980c29c1476699ae7e4c1f6736d506356105432d572893f7d8e9086d5fed5ede46f6cb0d95d226f17b38b2fdb569afc3fa2672a9075f053110639bee0a8e41cea90483e2f7fe7961d029143f4bbca18e98c3c0756bc08c37c3b61468f3fbef2bdc37ab31c49d3d6585bced2ff25b35a495ee34e4c235befd4e3358128e2acb3c6b9371ac72b6f71d99b9bc699cec15c7d15282346e3b05630c6c53bdb0e5bcd8f4a8f0b32610f4d4a2ed66fb7e30f6c7892fe93f4cee0264b57e778d2afcc4cfefc335027feea8e1734cb04a2f54435bd369f4571bf86e2ae5679cd43411bb76db3f21f83d779557613390b9c73e75d5ff607110b458f4025c4b6a7cba253400158fa8ac238e7516414f4d26299f2fb2526e56604ad2c18ace968614a1453381f331c3b442e42052f1b7b294c64ecddbdb8505f200903dac89d130bb7f8f45a947d35b2236e436587cf4d45ab92c8dd3fbb62d969145a07aac90e68f2b9a3964d2b43bd2de88eeec9c4ae3fa626e94350272eb5947bb5c7a2958d85742d0bf9dec33de248083a6eebde24be53e926f1d5ae721df37c3477f78aeccf6252b82ff5a66f0af4af506c7ccc57b2ab9d7cc68ae59dc8acc75842c428e947043b5f51a769a5bd2dac0e6dd09313137d3cef8264f0f6de3eeb25ffaeb203444dda8e1aff04d33974e7b670261ff67e0497213abc24a661be9e54eb956cef62e7fbcd74780c8861ed33d4364b138f8d1448fc5aeb6ec47436fd1e91d33a10ef6a15c49123f0a07716510207b16edc42b0f7be13cec23cfa320e1e17cef942d678b04add2ec3c5d704168cf7c0c8965cebe8cf6c63ccd0ac6defcd33d2506d2c80f37c76d1ba3ffe04ea732baf1bc00d23f82f346d88c6ea56521c046c7f631ce00198a7d1c8cd4b6edbbde95b753b0cbaf6de602760b4f441217ab5d300c5d7b176b1d493c088604ae35f40ee71b6391d07aea11c66c98a4889b97538b13a1efd91f789178a619d0049b69a537e7ab43367de3791c683bdd4e1ca3ea8827c5f6bba47fc5b59c14068afe2eafe1e0b23ff6428e005defe7d594db4ae52145cf497aa657546b40f6b2b3b004aded6bb43be88c91cb83389d126a024f50df43e38a1407d77523db260d646a7bce60fa51649ec5d35659d70ff6afa759668b444a0a92a4bdb34d7b4149eb1b6cb4ce5835f6c2a7fab6eedca02334dd86d814a20efafd5fe72c0e7a030c5b72b84ac03c8730487d1f32f6807b1953acc57f60b2be5349987cac5dac6256d9f40dd42582f594b56b607196b7de0024367ef6be9db93388fe23a8c44b9fbdd956625ce519a7efd81d0b279f91e1a2c1289d4b00d5b5ea95137636c4f897eef79a384725f359678e4b44b27a11aabfe07ad970dbb562bdec874dd95f66eb51daf4f9a54c9e6971eaa5249a52c51730985c7cf14f48f4d9278d9cb61fe03e5e8764ce0264be5abf3b71744a60c1b1e4f60b836eb68ee26fda9c255e1f1be7495ad98937f5b5539ffa2a4872fdf3b8709d02b91168c3992680bbae2511312b581bf166d506d4b8e7bd3ba92899b0ea92c39b379ea2066949b144a17a219748186230cdbd113f2cc4abf9ea741fe59e5cc06d7250e2d8af232b037b0a51d16538583258776f5070f55d5c222f77307d7da6d53e2ec390240e74f54260cc58fd1553b4aa6ea6951d2c4058a445ac7c9fbd11539613a2908bdfee210bae0ef8f24745728c593b9fbb125c0d8addc44559ff244eefe31de30122a12d274ade43106153635cc9aede1915044c0d7c33a2e71aea0045fbc705728dc25acc97e82324ab4dfde8e2634960cfd4f7096cd7c9086fecdb2e2f19118972eaec1834b94fdd6d42d78d446c062acbc43d4d009dcbad185234e9c7b1daae0e59d6e766f9cb402c8af49a21d685201b6d5b8d2a9254bf06b0f4ceaea6fc789f29893ceb0a496e2b856a8fa67abaaeef8522521584d2072d595d3502c6b41aab40ca166ee2c5bbc08497ac1c0e99cfc89c3da0f6e12d206de37c00f3bd0b2ef94a78e60f19cdd07f1653f920dde0330042a25f0634fa4371dcfc680a195229823aa217216b9bc5e583fe75f5edaf0512635610fd5d85a5ce57b9e8d7c1962eebd8070cd796bc2bc7c882065dcfd80fa821c9ed3c523acc778d111a16f2a50f8d8d2cddd85f4412b495d63f6fdf6e02fa667cc374158c301378b1dc03577d28aed9e20f8f9916e6205124248ea6d643a862e5d2ce3b73a0630cd8737d91a2f5477ecef216b7af503597ef9e4d90103c92a63cca2adc179d64cd1831cb21c20f29dccb4c5cd66989ebf2a2236a45d7eb6dc969eba16c3d60b366"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250e3c7be83cbf1fbd6b115c96411b3bd010350fe68d3b3bb59db0c14b7ef57d8d6cb5e04667832353531390558209c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c365780106a1005820600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 9
+ },
+ {
+ "name": "16 stanzas, two for one recipient, with the .dkk",
+ "spec": false,
+ "dkc": {
+ "base": "format2_time_and_key_portable.dkc",
+ "edits": [
+ [900, 1365, "9394dcd109377c8ebbd67040d34d547b1250e330946719f3280ea614dcf7004f8c30d5202dd43c6bbd767533b19aee2f5af5fe6b77108f03f5272a755557e63d332e38b4d1a5388b162f7358510418b83ccb754a457c68d2c18ace968614a1453381f331c3b442e42052f1b7b294c64ecddbdb8505f200903dac89d130bb7f8f45a947d35b2236e436587cf4d45ab92c8dd3fbb62d969145a07aac90e68f2b9a3964d2b43bd2de88eeec9c4ae3fa626e94350272eb5947bb5c7a2958d85742d0bf9dec33de248083a6eebde24be53e926f1d5ae721df37c3477f78aeccf6252b82ff5a66f0af4af506c7ccc57b2ab9d7cc68ae59dc8acc75842c428e947043b5f51a769a5bd2dac0e6dd09313137d3cef8264f0f6de3eeb25ffaeb203444dda8e1aff04d33974e7b670261ff67e0497213abc24a661be9e54eb956cef62e7fbcd74780c8861ed33d4364b138f8d1448fc5aeb6ec47436fd1e91d33a10ef6a15c49123f0a07716510207b16edc42b0f7be13cec23cfa320e1e17cef942d678b04add2ec3c5d704168cf7c0c8965cebe8cf6c63ccd0ac6defcd33d2506d2c80f37c76d1ba3ffe04ea732baf1bc00d23f82f346d88c6ea56521c046c7f631ce00198a7d1c8cd4b6edbbde95b753b0cbaf6de602760b4f441217ab5d300c5d7b176b1d493c088604ae35f40ee71b6391d07aea11c66c98a4889b97538b13a1efd91f789178a619d0049b69a537e7ab43367de3791c683bdd4e1ca3ea8827c5f6bba47fc5b59c14068afe2eafe1e0b23ff6428e005defe7d594db4ae52145cf497aa657546b40f6b2b3b004aded6bb43be88c91cb83389d126a024f50df43e38a1407d77523db260d646a7bce60fa51649ec5d35659d70ff6afa759668b444a0a92a4bdb34d7b4149eb1b6cb4ce5835f6c2a7fab6eedca02334dd86d814a20efafd5fe72c0e7a030c5b72b84ac03c8730487d1f32f6807b1953acc57f60b2be5349987cac5dac6256d9f40dd42582f594b56b607196b7de0024367ef6be9db93388fe23a8c44b9fbdd956625ce519a7efd81d0b279f91e1a2c1289d4b00d5b5ea95137636c4f897eef79a384725f359678e4b44b27a11aabfe07ad970dbb562bdec874dd95f66eb51daf4f9a54c9e6971eaa5249a52c51730985c7cf14f48f4d9278d9cb61fe03e5e8764ce0264be5abf3b71744a60c1b1e4f60b836eb68ee26fda9c255e1f1be7495ad98937f5b5539ffa2a4872fdf3b8709d02b91168c3992680bbae2511312b581bf166d506d4b8e7bd3ba92899b0ea92c39b379ea2066949b144a17a219748186230cdbd113f2cc4abf9ea741fe59e5cc06d7250e2d8af232b037b0a51d16538583258776f5070f55d5c222f77307d7da6d53e2ec390240e74f54260cc58fd1553b4aa6ea6951d2c4058a445ac7c9fbd11539613a2908bdfee210bae0ef8f24745728c593b9fbb125c0d8addc44559ff244eefe31de30122a12d274ade43106153635cc9aede1915044c0d7c33a2e71aea0045fbc705728dc25acc97e82324ab4dfde8e2634960cfd4f7096cd7c9086fecdb2e2f19118972eaec1834b94fdd6d42d78d446c062acbc43d4d009dcbad185234e9c7b1daae0e59d6e766f9cb402c8af49a21d685201b6d488052911bd346a690ce82ffa76280299935d25355060ce86cbf8621d480a09f206f36a9b4173c5672012ec4b035e2943d41c86714d864e796d35302816e2ec7d3d692d666353038bc614751c1b6f02e85abdcedaeceb74ea9cdfa16636156aee1e699bb74f210cf5ae86dada245f80cf5de0be30bab8e0e9f098bb2f06c92b4957f79107353c494eabc76a6711f60f5c5b19496e272b96e77296f686dea8d386c72fa26b99bd641b9cca0dcbc4ff9a076d838fb10454c220e9720a284e83667a897f499e3de"]
+ ]
+ },
+ "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250e3c7be83cbf1fbd6b115c96411b3bd010350fe68d3b3bb59db0c14b7ef57d8d6cb5e04667832353531390558209c09aeda759a8664a98120435fe0f6bf850000ac5ef0f9853ff46144c365780106a1005820600892659fe4890223e895876275f656995d170fda42b07fb2bec0ca51ce4b43",
+ "release": {
+ "round": 1000,
+ "signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
+ },
+ "now": "2023-08-23T15:59:24Z",
+ "registry": "default",
+ "network": false,
+ "frozen": false,
+ "error": "ERR_ACCESS_INVALID",
+ "step": 9
}
]
}
diff --git a/testdata/vectors/padding.json b/testdata/vectors/padding.json
new file mode 100644
index 0000000..6d8b9ff
--- /dev/null
+++ b/testdata/vectors/padding.json
@@ -0,0 +1,286 @@
+{
+ "spec": "0.9",
+ "description": "Padding rules of the payload of a format 2 capsule (spec §29.1): for each content length L, P with code 1 (bloque256) and code 2 (reforzado), and the length of PAYLOAD_AGE for each. e, s and last_bits are informative. Generated by the reference implementation. See testdata/README.md.",
+ "l_max": 8936830510563328,
+ "vectors": [
+ {
+ "l": 0,
+ "bloque256": 256,
+ "reforzado": 256,
+ "payload_age_bloque256": 456,
+ "payload_age_reforzado": 456
+ },
+ {
+ "l": 1,
+ "bloque256": 256,
+ "reforzado": 256,
+ "payload_age_bloque256": 456,
+ "payload_age_reforzado": 456
+ },
+ {
+ "l": 40,
+ "bloque256": 256,
+ "reforzado": 256,
+ "payload_age_bloque256": 456,
+ "payload_age_reforzado": 456
+ },
+ {
+ "l": 255,
+ "bloque256": 256,
+ "reforzado": 256,
+ "payload_age_bloque256": 456,
+ "payload_age_reforzado": 456
+ },
+ {
+ "l": 256,
+ "bloque256": 256,
+ "reforzado": 256,
+ "payload_age_bloque256": 456,
+ "payload_age_reforzado": 456
+ },
+ {
+ "l": 257,
+ "bloque256": 512,
+ "reforzado": 512,
+ "payload_age_bloque256": 712,
+ "payload_age_reforzado": 712,
+ "e": 8,
+ "s": 4,
+ "last_bits": 4
+ },
+ {
+ "l": 1000,
+ "bloque256": 1024,
+ "reforzado": 1024,
+ "payload_age_bloque256": 1224,
+ "payload_age_reforzado": 1224,
+ "e": 9,
+ "s": 4,
+ "last_bits": 5
+ },
+ {
+ "l": 4096,
+ "bloque256": 4096,
+ "reforzado": 4096,
+ "payload_age_bloque256": 4296,
+ "payload_age_reforzado": 4296,
+ "e": 12,
+ "s": 4,
+ "last_bits": 8
+ },
+ {
+ "l": 8192,
+ "bloque256": 8192,
+ "reforzado": 8192,
+ "payload_age_bloque256": 8392,
+ "payload_age_reforzado": 8392,
+ "e": 13,
+ "s": 4,
+ "last_bits": 9
+ },
+ {
+ "l": 8193,
+ "bloque256": 8448,
+ "reforzado": 8704,
+ "payload_age_bloque256": 8648,
+ "payload_age_reforzado": 8904,
+ "e": 13,
+ "s": 4,
+ "last_bits": 9
+ },
+ {
+ "l": 10000,
+ "bloque256": 10240,
+ "reforzado": 10240,
+ "payload_age_bloque256": 10440,
+ "payload_age_reforzado": 10440,
+ "e": 13,
+ "s": 4,
+ "last_bits": 9
+ },
+ {
+ "l": 65536,
+ "bloque256": 65536,
+ "reforzado": 65536,
+ "payload_age_bloque256": 65736,
+ "payload_age_reforzado": 65736,
+ "e": 16,
+ "s": 5,
+ "last_bits": 11
+ },
+ {
+ "l": 65537,
+ "bloque256": 65792,
+ "reforzado": 67584,
+ "payload_age_bloque256": 66008,
+ "payload_age_reforzado": 67800,
+ "e": 16,
+ "s": 5,
+ "last_bits": 11
+ },
+ {
+ "l": 78000,
+ "bloque256": 78080,
+ "reforzado": 79872,
+ "payload_age_bloque256": 78296,
+ "payload_age_reforzado": 80088,
+ "e": 16,
+ "s": 5,
+ "last_bits": 11
+ },
+ {
+ "l": 1000000,
+ "bloque256": 1000192,
+ "reforzado": 1015808,
+ "payload_age_bloque256": 1000632,
+ "payload_age_reforzado": 1016248,
+ "e": 19,
+ "s": 5,
+ "last_bits": 14
+ },
+ {
+ "l": 3000000,
+ "bloque256": 3000064,
+ "reforzado": 3014656,
+ "payload_age_bloque256": 3000984,
+ "payload_age_reforzado": 3015576,
+ "e": 21,
+ "s": 5,
+ "last_bits": 16
+ },
+ {
+ "l": 600000000,
+ "bloque256": 600000000,
+ "reforzado": 603979776,
+ "payload_age_bloque256": 600146680,
+ "payload_age_reforzado": 604127416,
+ "e": 29,
+ "s": 5,
+ "last_bits": 24
+ },
+ {
+ "l": 1000000000,
+ "bloque256": 1000000000,
+ "reforzado": 1006632960,
+ "payload_age_bloque256": 1000244328,
+ "payload_age_reforzado": 1006878904,
+ "e": 29,
+ "s": 5,
+ "last_bits": 24
+ },
+ {
+ "l": 2113929216,
+ "bloque256": 2113929216,
+ "reforzado": 2113929216,
+ "payload_age_bloque256": 2114445496,
+ "payload_age_reforzado": 2114445496,
+ "e": 30,
+ "s": 5,
+ "last_bits": 25
+ },
+ {
+ "l": 2113929217,
+ "bloque256": 2113929472,
+ "reforzado": 2147483648,
+ "payload_age_bloque256": 2114445768,
+ "payload_age_reforzado": 2148008120,
+ "e": 30,
+ "s": 5,
+ "last_bits": 25
+ },
+ {
+ "l": 4227858432,
+ "bloque256": 4227858432,
+ "reforzado": 4227858432,
+ "payload_age_bloque256": 4228890808,
+ "payload_age_reforzado": 4228890808,
+ "e": 31,
+ "s": 5,
+ "last_bits": 26
+ },
+ {
+ "l": 4227858433,
+ "bloque256": 4227858688,
+ "reforzado": 4294967296,
+ "payload_age_bloque256": 4228891080,
+ "payload_age_reforzado": 4296016056,
+ "e": 31,
+ "s": 5,
+ "last_bits": 26
+ },
+ {
+ "l": 4294967295,
+ "bloque256": 4294967296,
+ "reforzado": 4294967296,
+ "payload_age_bloque256": 4296016056,
+ "payload_age_reforzado": 4296016056,
+ "e": 31,
+ "s": 5,
+ "last_bits": 26
+ },
+ {
+ "l": 4294967297,
+ "bloque256": 4294967552,
+ "reforzado": 4362076160,
+ "payload_age_bloque256": 4296016328,
+ "payload_age_reforzado": 4363141304,
+ "e": 32,
+ "s": 6,
+ "last_bits": 26
+ },
+ {
+ "l": 5000000000,
+ "bloque256": 5000000000,
+ "reforzado": 5033164800,
+ "payload_age_bloque256": 5001220888,
+ "payload_age_reforzado": 5034393784,
+ "e": 32,
+ "s": 6,
+ "last_bits": 26
+ },
+ {
+ "l": 1000000000000,
+ "bloque256": 1000000000000,
+ "reforzado": 1005022347264,
+ "payload_age_bloque256": 1000244140824,
+ "payload_age_reforzado": 1005267714232,
+ "e": 39,
+ "s": 6,
+ "last_bits": 33
+ },
+ {
+ "l": 562949953421311,
+ "bloque256": 562949953421312,
+ "reforzado": 562949953421312,
+ "payload_age_bloque256": 563087392374968,
+ "payload_age_reforzado": 563087392374968,
+ "e": 48,
+ "s": 6,
+ "last_bits": 42
+ },
+ {
+ "l": 4503599627370497,
+ "bloque256": 4503599627370752,
+ "reforzado": 4573968371548160,
+ "payload_age_bloque256": 4504699138998728,
+ "payload_age_reforzado": 4575085063045304,
+ "e": 52,
+ "s": 6,
+ "last_bits": 46
+ },
+ {
+ "l": 8936830510563328,
+ "bloque256": 8936830510563328,
+ "reforzado": 8936830510563328,
+ "payload_age_bloque256": 8939012353949880,
+ "payload_age_reforzado": 8939012353949880,
+ "e": 52,
+ "s": 6,
+ "last_bits": 46
+ }
+ ],
+ "rejected": [
+ 8936830510563329,
+ 9007199254740992
+ ]
+}
diff --git a/testdata/vectors/profile_quicknet.json b/testdata/vectors/profile_quicknet.json
index 67df903..009cd00 100644
--- a/testdata/vectors/profile_quicknet.json
+++ b/testdata/vectors/profile_quicknet.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "Quicknet Provider Profile V1: exact Deterministic CBOR and profile_hash (spec §11, §12, §75 item 2), generated by the reference implementation.",
"profile_id": "datekeys:quicknet:v1",
"provider": "drand",
diff --git a/testdata/vectors/quicknet_rounds.json b/testdata/vectors/quicknet_rounds.json
index d87d9ca..44668f7 100644
--- a/testdata/vectors/quicknet_rounds.json
+++ b/testdata/vectors/quicknet_rounds.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"profile": "datekeys:quicknet:v1",
"description": "Quicknet date to round resolution (spec §15, §16, §65), generated by the reference implementation.",
"vectors": [
diff --git a/testdata/vectors/tlock_ibe.json b/testdata/vectors/tlock_ibe.json
index bda6ef8..0dc31a7 100644
--- a/testdata/vectors/tlock_ibe.json
+++ b/testdata/vectors/tlock_ibe.json
@@ -1,5 +1,5 @@
{
- "spec": "0.8.2",
+ "spec": "0.9",
"description": "H2 of the IBE-CCA of tlock (spec §63 step 11): SHA-256 of \"IBE-H2\" and the 576 bytes of an element of GT, c1 before c0 at every level of the tower and each coordinate of Fp in 48 bytes big-endian (the order of kilic/bls12-381), truncated to 16 bytes. Generated by the reference implementation with drand/kyber-bls12381, the pairing of tlock.",
"vectors": [
{