The author approved the draft v0.14 with the recommendation of each of its
ten decisions; datekeys-go closes it with the tag spec-v0.14 (39b2033).
specVersion is 0.14 and testdata is synced with that commit: every file
changes its spec field, and vectors/tlock_steps.json is new (136 files).
Decision 8: validateProfile admits only bls-unchained-g1-rfc9380, with its
public key in G2, as validateDrand of Go since c041fa3, in its order and
with its text. formats_profile.json and its part of formats_vectors.g.dart
are regenerated with tool/formats_go_vectors.go on 39b2033: only the
thirteen cases of another drand scheme change. The other Go-generated
vectors change only their spec field.
tlock_steps_vm_test.dart walks tlock_steps.json value by value with the
code of the library, and tlock_steps_test.dart walks its copy,
tlock_steps.g.dart from tool/tlock_steps_copy.dart, compiled to JavaScript.
The comment of h3 in ibe.dart now says what the code does: it shifts the
first byte one bit to the right, as kyber does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The vectors of Go are regenerated on datekeys-go 69dbb0c: only the cases
of those checks change. The writer of the extension refuses a DateKey of a
profile that is not pinned.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spec v0.12, section 44.1, already asked for both. The vectors of Go are
regenerated on datekeys-go e801e03: only the ten addresses of those two
forms, and the locators that carry them, change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cambios notables de la librería Dart. El proyecto usa versionado semántico; mientras sea 0.x, no hay promesa de estabilidad.
## Especificación 0.14, en la rama `v0.14` — sin versión
### La especificación 0.14, aprobada (06-10-2026)
- El autor aprobó el 6 de octubre de 2026 el borrador v0.14 con la recomendación de cada una de sus diez decisiones: `datekeys-go` lo cierra con el tag `spec-v0.14` (`39b2033`). `specVersion` pasa a `0.14`, y `testdata` se sincroniza con ese tag: cambia el campo `spec` de cada fichero y llega `vectors/tlock_steps.json`, 136 ficheros.
- **Un solo scheme de drand (decisión 8, §12.1).**`validateProfile` admite solo `bls-unchained-g1-rfc9380`, con la clave pública en G2, como `validateDrand` de Go desde `c041fa3`, en su orden: un nombre que drand no conoce sigue siendo «is not a drand scheme», y cualquier otro scheme de drand, también `pedersen-bls-unchained` y `bls-unchained-on-g1`, da `ERR_UNKNOWN_PROFILE` con el texto de Go, «scheme … is not bls-unchained-g1-rfc9380, the only scheme of V1». Ninguna cápsula válida cambia.
- `test/vectors/formats_profile.json` y su parte de `formats_vectors.g.dart` se regeneran con `tool/formats_go_vectors.go` sobre `39b2033`: cambian solo los trece casos de otro scheme de drand y el campo `spec`. Cinco eran válidos y ahora dan `ERR_UNKNOWN_PROFILE`: cuatro de `bls-unchained-on-g1` con la clave de Quicknet, y el perfil `drand:default:v1` con `pedersen-bls-unchained`. Los otros ocho, de `pedersen-bls-chained` y `bls-bn254-unchained-on-g1`, ya se rechazaban y cambian solo de texto. Los demás vectores de `test/vectors/` cambian solo su campo `spec`.
- **`tlock_steps.json`.** `test/tlock_steps_vm_test.dart` lo recorre valor a valor con el código de la librería (`release.dart`, `ibe.dart`, `tlock.dart`, `bls12381_hash.dart`): M, H(M), la ecuación del emparejamiento, las partes del stanza, e(firma, U), H2, sigma, H4, la file key, cada intento de H3 y r, r·G2 = U, que `decryptOnG2` y `unwrapTlockStanza` dan la file key y que `encryptOnG2WithSigma` escribe el mismo cuerpo, y las comprobaciones negativas del generador de Go: otro DST, la ronda sin SHA-256 y un H3 que borre solo el bit más alto. `test/tlock_steps_test.dart` lo hace compilado a JavaScript, sobre la copia `test/vectors/tlock_steps.g.dart`, que escribe `tool/tlock_steps_copy.dart`.
- El comentario de `h3` de `ibe.dart` decía que se borra el bit más alto; el código desplaza el primer byte un bit a la derecha, como kyber y como dice ahora el §63. Solo cambia el comentario.
## Especificación 0.13, en la rama `v0.13` — sin versión
### El localizador sellado, comprobado antes de la fecha (06-10-2026)
- `parseCapsuleInfo` comprueba el localizador sellado como `ParseInfo` de Go desde `69dbb0c`, a petición del autor: la cadena del stanza tlock en hexadecimal en minúsculas y, si la DateKey es de Quicknet, la de Quicknet; y que el cuerpo tras la cabecera `age` lleve un texto de 4096 bytes o un múltiplo, así que una cabecera sin cuerpo se rechaza. Cada caso es `ERR_EXTENSION_DATA_INVALID` con el texto de Go. `CapsuleInfo.toExtension` rechaza además una DateKey de un perfil que la librería no fija. El límite de 1 MiB al abrir el localizador se queda, por decisión del autor.
- Los vectores de Go del localizador se regeneran sobre ese commit: cambian solo los casos de esas comprobaciones.
### La especificación 0.13, aprobada (06-10-2026)
- El autor aprobó el 6 de octubre de 2026 el borrador v0.13, tal como estaba: `datekeys-go` lo cierra con el tag `spec-v0.13` (`913dd60`). `specVersion` pasa a `0.13`, `testdata` se sincroniza con ese tag, y los vectores de `test/vectors/` cambian solo su campo `spec`.
### Dos direcciones que el §44.1 ya rechazaba (06-10-2026)
- Un CID con un carácter de más cuyos bits son cero y `https://[[2000::]/` se rechazan, como en `datekeys-go` desde `e801e03`. `test/vectors/locator_uris.json` y `locator_vectors.json` se regeneran sobre ese commit: cambian solo las diez direcciones de esas dos formas y los localizadores que las llevan.
### NAT64 (06-10-2026)
- El borrador v0.13 de `datekeys-go` (`a83b44d`, sin aprobar) cuenta una dirección de NAT64 a la que resuelve un nombre, de `64:ff9b::/96` o del prefijo de la red, por la IPv4 que lleva dentro (§44.1, cambio 1 del §76). `checkResolvedIp` lo sigue, con el parámetro `nat64` para el prefijo de la red, y los textos de `locator.CheckResolvedIP` de Go. Una dirección de NAT64 escrita en el localizador se sigue rechazando.
- `testdata` se sincroniza con `a83b44d`, que añade `vectors/resolved_ip.json`: 42 casos, que corre `test/resolved_ip_test.dart`. `specVersion` sigue en `0.12` hasta que el autor apruebe el borrador.
## Especificación 0.12, en la rama `v0.12` — sin versión
### La especificación 0.12, aprobada (06-10-2026)
- El autor aprobó el 6 de octubre de 2026 el borrador v0.12, tal como estaba: `datekeys-go` lo cierra con el tag `spec-v0.12` (`fe405e2`). La librería pasa a la rama `v0.12`, como dice el plan: la rama `v0.11` se queda en `bb66e48`.
- `specVersion` pasa a `0.12`, y `testdata` se sincroniza con el tag: solo cambia el campo `spec` de cada fichero.
- Los vectores de `test/vectors/` que escriben los generadores de Go cambian solo su campo `spec`, en los `.json` y en sus copias `.g.dart`: entre `c531e93` y `fe405e2`, Go solo cambia `SpecVersion` y añade `wordkey.json`, así que el resto sale igual. Dos pruebas que comparaban con `0.11` comparan ahora con `specVersion`.
- La librería ya seguía el borrador: no cambia nada más. `tool/check.sh` pasa con 2 131 pruebas en la VM y 665 en Node.
## Especificación 0.11, en la rama `v0.11` — sin versión
### Los vectores compartidos de la llave de palabras (06-10-2026)
- **El STREAM** se descifra según llega el texto cifrado (`AgePayloadDecryptor`), como el lector de Go: entrega el texto de cada chunk en cuanto se autentica, y un fallo que revela un byte posterior llega en la llamada siguiente.
- **La identity de `OUTER_TIME_AGE`** se compone en la etapa 4, con el perfil: `checkTimeStanzas` de esta etapa, que recibe la ronda, el chain hash y el id del perfil, y `checkTlockProfile` y `unwrapTlockStanza` de la etapa 3.
La etapa 3 porta BLS12-381 de `kilic/bls12-381` v0.1.0, sobre el que calcula `drand/kyber-bls12381` v0.3.4 para drand y tlock; el IBE de `encrypt/ibe` de `drand/kyber` v1.3.2, el de `tlock` v1.2.0 con Quicknet; y `provider.Verify` y el stanza tlock de `agewrap` de `datekeys-go`, con las mismas comprobaciones en el mismo orden y los mismos textos de error. Como `datekeys-ts`, verifica solo el scheme de Quicknet, `bls-unchained-g1-rfc9380`. Todo es código propio: de `package:crypto` usa solo SHA-256.
La etapa 3 porta BLS12-381 de `kilic/bls12-381` v0.1.0, sobre el que calcula `drand/kyber-bls12381` v0.3.4 para drand y tlock; el IBE de `encrypt/ibe` de `drand/kyber` v1.3.2, el de `tlock` v1.2.0 con Quicknet; y `provider.Verify` y el stanza tlock de `agewrap` de `datekeys-go`, con las mismas comprobaciones en el mismo orden y los mismos textos de error. Como `datekeys-ts`, verifica solo el scheme de Quicknet, `bls-unchained-g1-rfc9380`, el único que admite el §12.1 desde la v0.14. Todo es código propio: de `package:crypto` usa solo SHA-256.
| Módulo | Contenido | En Go |
|---|---|---|
@ -74,7 +74,7 @@ Notas de la etapa 3:
- **Los veredictos de un punto** son los de `FromCompressed` de kilic: el flag de compresión a 1; el punto en el infinito solo como `0xc0` y ceros; coordenadas menores que p, sin reducir; un punto de la curva; y un punto del subgrupo de orden r. En G1 el subgrupo se comprueba con [r]·P = O; en G2, con ψ(P) = [x]·P (Scott, eprint 2021/1130, como noble), que las pruebas comparan con [r]·P = O en puntos fuera del subgrupo, también con torsión de cada orden pequeño del cofactor.
- **GT** es el valor del emparejamiento de kilic, con su exponenciación final, f^(3·(p⁴ − p² + 1)/r), y se serializa en su orden (§63, «Serialización de GT en H2»).
- **El hash a G1** sigue a kilic, que suma las dos salidas del mapa en E′ antes de la isogenia. kilic se aparta del RFC 9380 solo donde ningún hash llega: dos salidas iguales u opuestas, que suma con la fórmula de E. Este código las suma con la ley de grupo de E′, como el RFC.
- **Las diferencias con Go, a propósito,** son las de `datekeys-ts`: otro scheme que el de Quicknet da `ERR_UNKNOWN_PROFILE` con un texto propio, donde Go verificaría los otros schemes de drand; y el punto en el infinito nunca es una firma válida (§63 paso 10), mientras que Go la acepta si la clave pública también es el punto en el infinito, una clave que ningún perfil pinneado tiene (§12.1). Las pruebas fijan las dos.
- **Las diferencias con Go, a propósito,** son las de `datekeys-ts`: otro scheme que el de Quicknet da `ERR_UNKNOWN_PROFILE` con un texto propio, donde `provider.Verify` de Go verificaría los otros schemes de drand en un perfil que no ha pasado por `Validate` (desde la v0.14, `validateProfile` rechaza esos perfiles, como Go); y el punto en el infinito nunca es una firma válida (§63 paso 10), mientras que Go la acepta si la clave pública también es el punto en el infinito, una clave que ningún perfil pinneado tiene (§12.1). Las pruebas fijan las dos.
- **El stanza tlock.**`unwrapTlockStanza` recibe los argumentos y el cuerpo del único stanza y hace lo que `NewTimeIdentity` y su `Unwrap` en Go: el perfil, los argumentos, otra vez el release y el cuerpo. El número y el tipo de los stanzas los comprueban las reglas de `agewrap` de la etapa 2, que necesitan la cabecera entera. Se guarda el último release verificado: el paso 11 vuelve a verificar el del paso 10, como en Go, sin otro emparejamiento.
- **La fuente de releases.** La librería no trae cliente HTTP: recibe una `ReleaseSource`, como `OpenOptions.Source` en Go. `fetchRelease` aplica la regla del paso 9: lo que lance la fuente es `ERR_RELEASE_UNAVAILABLE`, con su texto y ningún otro código.
- **Lo que se exporta.**`lib/datekeys.dart` exporta la verificación de releases y `checkCompressedPoint`, como `datekeys-ts`. El IBE y el stanza tlock son internos: los usará la apertura de la etapa 4. El cifrado no se exporta todavía: es del escritor, la etapa 6.
@ -271,10 +271,10 @@ La parte 7a de la etapa 7 porta el paquete `locator` de `datekeys-go` en `c531e9
Notas de la parte 7a:
- **Lo que queda fuera.** La librería no descarga nada. La app pide el resto solo cuando la persona lo pide, después de mostrarle el host o el CID (`LocatorAddress.host`), y solo a una dirección que acepte `checkAddressUri` (`Locator.usable`); no sigue una redirección a una dirección que `checkAddressUri` rechace; comprueba con `checkResolvedIp`, en cada conexión, que la IP a la que resuelve un nombre es pública; lee solo los bytes del resto, y se los da a `Locator.openEnvelope`, que comprueba su SHA-256, descifra el `.dkc` y comprueba el suyo (§44.1).
- **`checkResolvedIp`** no está en Go, cuyo lector no descarga. Recibe los 4 o los 16 bytes de la dirección, los de `InternetAddress.rawAddress`, y la clasifica como `publicIP`: una IPv4 mapeada en IPv6 no es pública, así que la app pasa una IPv4 como sus 4 bytes. En una red móvil solo IPv6, el NAT64 del sistema da a un nombre con solo IPv4 una dirección de `64:ff9b::/96`, que el §44.1 no deja usar.
- **`checkResolvedIp`** es `locator.CheckResolvedIP` de Go, de la v0.13. Recibe los 4 o los 16 bytes de la dirección, los de `InternetAddress.rawAddress`, y la clasifica como `publicIP`: una IPv4 mapeada en IPv6 no es pública, así que la app pasa una IPv4 como sus 4 bytes. En una red móvil solo IPv6, el NAT64 del sistema da a un nombre con solo IPv4 una dirección de `64:ff9b::/96`: cuenta como pública si la IPv4 de dentro lo es. Con `nat64`, el prefijo de NAT64 de la red, que la app descubre con RFC 7050, una dirección de ese prefijo cuenta solo por su IPv4. `test/resolved_ip_test.dart` corre los casos de `resolved_ip.json`.
- **Sellar y crear un sobre.**`Seal` y el cifrado `age` de `NewEnvelope` necesitan el escritor de `age` de la etapa 6: son de la parte 7b. `splitEnvelope` es el resto de `NewEnvelope`: parte el fichero `age` del sobre en su cabecera y su resto, con los textos de `headerEnd`.
- **Las direcciones** se leen como están escritas, sin decodificar nada, sobre sus bytes UTF-8, como lee Go un string: el primer byte que RFC 3986 no admite se cita como lo cita el `%q` de Go, una runa (0xc3 es `'Ã'`). Las IP las lee y las clasifica `ipaddr.dart`, código propio con la aceptación exacta de `netip.ParseAddr`, nunca `InternetAddress` de `dart:io`, que acepta otras notaciones; una IPv6 son 16 bytes, y cada bloque se compara byte a byte.
- **Dos rarezas de Go que se conservan,** porque los vectores son los de Go: el host de una IPv6 es `strings.Trim(host, "[]")`, así que `https://[[2000::]/` vale; e `isCIDv1` mira que los bits sobrantes sean cero, no cuántos son, así que un CID con un carácter más cuyos bits son cero vale también, con otro texto que el canónico. Son de Go, no del texto del §44.1: si Go las corrige, sus vectores lo dirán.
- **Dos rarezas de Go, corregidas** en `datekeys-go``e801e03` y aquí: `https://[[2000::]/` y un CID con un carácter más cuyos bits son cero se rechazan, porque el §44.1 de la v0.12 ya pedía un literal IPv6 con un solo par de corchetes y el CID en su forma canónica. Los vectores de `tool/locator_go_vectors.go` se regeneraron sobre ese commit.
- **La apertura** lee, como Go con `io.LimitReader`, como mucho 1 MiB del texto del localizador: un chunk de STREAM después de ese MiB no se descifra ni se comprueba, y lo leído no tiene la longitud de un localizador.
- **Los errores no llevan código normativo,** como en Go: un localizador que no se lee o no se abre, o una dirección fuera de las reglas, es inutilizable, y su error es una `LocatorException` con el texto de Go. Los datos de la extensión llevan un código solo, `ERR_EXTENSION_DATA_INVALID`, que la hace inutilizable a ella y nunca a la `.dkk` (§54).
- **`StandardExtensions`** comprueba por defecto la `data` de `datekeys.capsule` con `checkCapsuleData`, como `locator.Standard` de Go: al abrir una `.dkk` con ella, una extensión `datekeys.capsule` que no se lee queda inutilizable, con el texto de Go. Con `validateCapsule: null` solo comprueba que haya `data`, como el `extension.Standard` de Go sin `ValidateCapsule`: es el registro con el que el escritor de la `.dkk` comprueba lo que escribe, como el de Go, porque el codificador de `datekeys.capsule`, `CapsuleInfo.toExtension`, lee lo que escribe.
@ -541,7 +541,7 @@ Manda ECDSA: con el exponente 65 537, una verificación de RSA son 17 multiplica
| Número | Dónde | Hoy |
|---|---|---|
| Librería | `version` de `lib/src/version.dart` y de `pubspec.yaml`, que una prueba mantiene iguales | `0.1.0-dev` |
| Especificación | `specVersion` de `lib/src/version.dart`: la que nombra el campo `spec` de cada fichero de `testdata/` | `0.11` |
| Especificación | `specVersion` de `lib/src/version.dart`: la que nombra el campo `spec` de cada fichero de `testdata/` | `0.14` |
La rama sigue la versión de la especificación: `v0.11`, hasta que `datekeys-go` cierre la v0.12. Desde la etapa 5, `testdata/` es ya el de la rama `v0.12`.
@ -572,10 +572,10 @@ tool/check.sh
## Datos de prueba
`testdata/` es una copia de `datekeys-go/testdata` en un commit fijo. `testdata/SOURCE.json` registra el commit y el SHA-256 de cada fichero, igual que en `datekeys-ts`. La copia actual es la de la rama `v0.12` de `datekeys-go` en `084728d`, la misma que tiene `datekeys-ts`: 134 ficheros, con `wordkey.json`, los vectores compartidos de la llave de palabras, con los veredictos y las líneas del borrador v0.12. Cada fichero dice aún `"spec": "0.11"`, como el `SpecVersion` de Go, hasta que el autor apruebe el borrador.
`testdata/` es una copia de `datekeys-go/testdata` en un commit fijo. `testdata/SOURCE.json` registra el commit y el SHA-256 de cada fichero, igual que en `datekeys-ts`. La copia actual es la del tag `spec-v0.14` de `datekeys-go`, `39b2033`: 136 ficheros, con `tlock_steps.json`, los pasos 10 y 11 de Quicknet valor a valor, con `resolved_ip.json`, con `wordkey.json`, los vectores compartidos de la llave de palabras, y los veredictos y las líneas de la v0.12. Cada fichero dice `"spec": "0.14"`, como el `SpecVersion` de Go.
```bash
dart run tool/sync_testdata.dart sync --commit 084728d
dart run tool/sync_testdata.dart sync --commit spec-v0.14
```
```bash
@ -585,6 +585,7 @@ dart run tool/sync_testdata.dart check --against ../datekeys-go
- `sync` lee los ficheros con git en ese commit, así que nunca entran cambios sin commit del repositorio de Go.
- Los ficheros de `testdata/` no se editan ni se generan aquí.
- En cada `dart test`, `test/testdata_test.dart` comprueba la copia, y que cada fichero nombre `specVersion`.
- `test/tlock_steps_vm_test.dart` recorre `tlock_steps.json` valor a valor con el código de la librería: M, H(M), la ecuación del emparejamiento, las partes del stanza, e(firma, U), H2, sigma, H4, la file key, cada intento de H3 y r, r·G2 = U, y las comprobaciones negativas del generador de Go (otro DST, la ronda sin SHA-256 y H3 que borra solo el bit más alto). `test/tlock_steps_test.dart` hace lo mismo compilado a JavaScript, sobre `test/vectors/tlock_steps.g.dart`, la copia del fichero que escribe `dart run tool/tlock_steps_copy.dart` tras cada `sync`; la prueba de la VM comprueba que es el fichero byte a byte.
`test/vectors/` tiene los vectores de las primitivas, de la lectura y la escritura de `age`, de BLS12-381, de tlock, de las reglas de rutas y textos, de la llave de palabras, de los formatos, de la apertura, del área de seguridad, de la firma con certificados y el sello, del lector de CMS, del localizador, de las claves de autor y de la firma Ed25519, y del sellado del localizador y del sobre. Los escribe Go, con las librerías de la caché de módulos que usa `datekeys-go` (`x/crypto`, `filippo.io/age`, `kilic/bls12-381`, `drand/kyber`, `kyber-bls12381` y `tlock`) y sus paquetes, como `provider`, `agewrap`, `capsule`, `internal/pathrule`, `internal/testkit` y `wordkey`; ningún valor esperado se escribe a mano. Los generadores van en `tool/`, con `//go:build ignore`, y se ejecutan en el contexto del módulo de `datekeys-go`, sin cambiar nada en él; los de las rutas, de la apertura, del lector de CMS y del escritor de `age`, en una exportación suya, y el último, `tool/cms_go_vectors_test.go`, como una prueba de Go. Los de BLS12-381 y tlock dan la misma salida con el tag `spec-v0.11` y con el borrador v0.12, y leen ficheros congelados de `datekeys-ts`, cuya carpeta en esta máquina se llama todavía `App`:
"description":"CONTROL_CBOR of the three formats (capsule.DecodeControl) of the fixtures, in their format and in another, edited, and built field by field.",
"description":"The encoders on values: capsule.EncodeHeader and EncodeControl, accesskey.Encode, profile.NewRegistry, and the canonical JSON and dk1_ string of DateKeys (CanonicalJSON and Compact, empty when not valid); an encoding is in hex, or as its length and SHA-256 when it is large. big is the size of the data of the noncritical extension a of version 1, bytes 0x01, that takes the object to its limit. limits: the decoders on objects at the limits of spec §57 and one byte past them: zeros bytes of zeros, or an extension array 81 a3 00 61 61 01 01 02 5a <len, 4 bytes> and len bytes 0x07 (extension_data), or Canonical of the extension a of version 1 whose data is len zeros (extension_canonical).",
"description":"Extension arrays through codec.Unmarshal with extension.DecodeArray and EncodeArray, Canonical, CheckDisjoint, CheckCriticalIn and CheckNoncriticalIn with the registry placed of the generator (or CheckCritical and CheckNoncritical when object is empty, and no registry when registry is none), and CheckWrite with extension.Standard.",
"description":"The PRELUDE of a .dkc (capsule.ParsePrelude), the steps 1 to 3 of capsule.Inspect on truncated and edited fixtures (with the step that fails, 0 when steps 1 to 8 pass), and whole .dkk files (accesskey.Decode), with the result, the code and the text of the Go reference.",
"description":"capsule.PaddedLength with both codes and capsule.PayloadAgeLength, at the boundaries of spec §29.1 up to L_MAX and past it; a code with null was rejected with text. check: the plaintext of PAYLOAD_AGE checked by capsule.Open against L and P (step 17): the content of the fixture (its .plaintext) followed by zeros, cut or extended to length bytes, with the byte at at set to value when given; step 0 when the capsule opens.",
"description":"Provider Profiles: profile.Decode of the Quicknet profile, edited and with fields replaced, and Profile.Validate of values.",
"decode":[
@ -56,7 +56,7 @@
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d10640d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 204: map key 3 after key 6: keys must be strictly ascending: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582065dcdc7eff7c0c02ad8bc809f729ec0c11c95c704a9a63fd509a6d9ec6cc1ed106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0700081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_NON_CANONICAL_CBOR","text":"profile: key 7: period 0: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640478406161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616105582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a58213a29061a4d8c6d3c715eaf8e48da4b183b5b8ad74fbce0e484fbf91bbc80659911","result":"ERR_NON_CANONICAL_CBOR","text":"profile: key 10: codec: offset 299: a byte string of 33 bytes outside 32..32: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097819626c732d626e3235342d756e636861696e65642d6f6e2d67310a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-bn254-unchained-on-g1\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097819626c732d626e3235342d756e636861696e65642d6f6e2d67310a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-bn254-unchained-on-g1\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a071b001fffffffffffff081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820bd802afddcde3b4521da5b7dac9a4998fac55a86bb410a6852381b053a34d559","result":"ERR_NON_CANONICAL_CBOR","text":"profile: period 9007199254740991 s out of range: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081b0000003afff4417e097818626c732d756e636861696e65642d67312d726663393338300a582018b07fefff6c8fff0ce6088acf49e4de176436d70f941f0ad3fdfc8bd6c677b2","result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain 2c6bca0320709af44138375ac31e95ba56907b106c702443b1d558b55d4e9621, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e64047841616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616105582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a071b001fffffffffffff081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_NON_CANONICAL_CBOR","text":"profile: period 9007199254740991 s out of range: ERR_NON_CANONICAL_CBOR"},
@ -164,8 +164,8 @@
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c650101027880616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616103656472616e640468717569636b6e6574055820b1c41498aa9ccc4100b53f00687c6443f67a6a95f089e5a84ed58a3ac6257c380658608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_UNKNOWN_PROFILE","text":"profile aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820076449f967c2022a9342e07eff9b1180fa22e6b7c175a3fab631bdb7622f0cce06586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e6212709646e6f70650a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: \"nope\" is not a drand scheme: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e65740558204aa4595edb8fd7fa3e98d503b2d2c8fe20f06f428fb43700686ba2af394eeeae06583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a5f18588a097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c65010102706472616e643a64656661756c743a763103656472616e64046764656661756c740558208990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce065830868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af3107181e081a5f18588a0974706564657273656e2d626c732d636861696e65640a5820176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a","result":"ERR_UNKNOWN_PROFILE","text":"profile drand:default:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"}
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c65010102706472616e643a64656661756c743a763103656472616e64046764656661756c740558208990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce065830868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af3107181e081a5f18588a0976706564657273656e2d626c732d756e636861696e65640a5820176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a","result":"ERR_UNKNOWN_PROFILE","text":"profile drand:default:v1: scheme \"pedersen-bls-unchained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c65010102706472616e643a64656661756c743a763103656472616e64046764656661756c740558208990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce065830868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af3107181e081a5f18588a0974706564657273656e2d626c732d636861696e65640a5820176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a","result":"ERR_UNKNOWN_PROFILE","text":"profile drand:default:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"}
],
"validate":[
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"Q","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid provider, network or scheme name: ERR_UNKNOWN_PROFILE"},
@ -178,7 +178,7 @@
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid public key length 0: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":0,"id":"datekeys:quicknet:v1","max_round":84467433600,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 0: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-on-g1"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-unchained-on-g1\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"cf87a715c185fffc915f9f1727ad3f9636f944d71d857fdeeab012291255a38e03cba65f31c021431341375991575b17ffc58ea27dd56206821da91223e1f72fe51c75fe30c3986ead0d7d9a622824fde5104421e7a461d13b151227ddc30af0bd637a16cb37c162b92ad9d6b5109ac4d1e0cf815c21c5e2a559f6de3d674a1e7318c80c96bdb26544087fc4e289ae7620c7bb8e8adcd28725f72f2d2551a278a2077d6c167919a629f16e672034941ed1927b97bf4356697eaad969a216315e78dabec06e290d05b0b60e3c2a201a6c0ad7f07a2e01cfa9a429e6ec0ff5c3ab81e359612bbf8bacefbf6e3f53370ba5d30184019e73b39f30c9cc8861a8137eabce1132d5bd3d78d9423f4f37befa45d57d018fd9b0fb3b1b61418c8d4233517c30c9b7ee9a2ecd81cdc55cba922160a38ed77a63eb08576706004c5d63ccfe49b15a3212d5987569f424d3110120673b05dad0ad0432fb2a782b74f9c906654dd0355ee3c90f2553d974a85580a3ae05d55d81502f785444b40fe226452ff5298f08a02be10412336a5a390458e6cce9783174f0d65724e08f9e7033db7606eb9e4c23469bbddd23b4212659480903c7c5d123f131cfa9dba39d27537da5f3428361baaa262b7ac53f50f7a985482c4cdace6e5922c7b83daa4b2cc248f16b9989d6cb55cdf886dd6ef9f1dea716d3aa763bc5005f70edfa2849fff315305b9a6bbb857769b85495069320f6eba8a47e1d27ffd6283d399092ae4576c851afde52eeb3cf17b1ba0881e54be59fa56310fdc769af61fdeb3ec9f7700729f5f25547d34de2244bf839b20a69d4237c43e55c43c9b238eda5bd443da05e3594b1c915d9af90d21758374cc68017c7b2563ac3f81df50b2cda448ec4293603587235b843b1ffbef0ea8a2b2e0c10d1ac9c7626e18798bebe2206e98088c8aecd2be8a6278a90e06b20dd36dae022442a798772912aa1239ab896c6174b352c6b355b8cc0862b31c7167c71fd7a252a1043c46a4124308ae3656a50e1c2be30154a00c83faca0bd52d359ae9044f154717e0adcb68450c15fd1c19e16851c4586a742467434fba558684072385a6fdec6707454ffc4731f8f587238d45fa140710ac6bb4a058c07fb028db32b84a79bfe04caa7f1d51760c09d6ff7609d288548a18789364b9dd145e70197df650c027a2c6293f7347f32e9e2873af1eefbc4a070001518bd2603541e4f9a19961a6863da42934dc2e5716a6edf818f7bbe87ef4dd77cd0e096db2439e51b0d5f14ec3dfb5e4ce9733757a0bab7f7ddf47a473bedbe29b6041bab7d40acd8bdd1d961db4cfb1db82f01ea0fb93a3b202c89c361b41a405f75d0cccd871b9706221277f1fe45e664bd9e41b698d0bf934368c4d7cd6f0d80c4d3c0716844911a64523eddb6e8d739aa24c2ef391685cbc2827a621a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid provider, network or scheme name: ERR_UNKNOWN_PROFILE"},
@ -188,11 +188,11 @@
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"nope"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: \"nope\" is not a drand scheme: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"cf87a715c185fffc915f9f1727ad3f9636f944d71d857fdeeab012291255a38e03cba65f31c021431341375991575b17ffc58ea27dd56206821da91223e1f72fe51c75fe30c3986ead0d7d9a622824fde5104421e7a461d13b151227ddc30af0bd637a16cb37c162b92ad9d6b5109ac4d1e0cf815c21c5e2a559f6de3d674a1e7318c80c96bdb26544087fc4e289ae7620c7bb8e8adcd28725f72f2d2551a278a2077d6c167919a629f16e672034941ed1927b97bf4356697eaad969a216315e78dabec06e290d05b0b60e3c2a201a6c0ad7f07a2e01cfa9a429e6ec0ff5c3ab81e359612bbf8bacefbf6e3f53370ba5d30184019e73b39f30c9cc8861a8137eabce1132d5bd3d78d9423f4f37befa45d57d018fd9b0fb3b1b61418c8d4233517c30c9b7ee9a2ecd81cdc55cba922160a38ed77a63eb08576706004c5d63ccfe49b15a3212d5987569f424d3110120673b05dad0ad0432fb2a782b74f9c906654dd0355ee3c90f2553d974a85580a3ae05d55d81502f785444b40fe226452ff5298f08a02be10412336a5a390458e6cce9783174f0d65724e08f9e7033db7606eb9e4c23469bbddd23b4212659480903c7c5d123f131cfa9dba39d27537da5f3428361baaa262b7ac53f50f7a985482c4cdace6e5922c7b83daa4b2cc248f16b9989d6cb55cdf886dd6ef9f1dea716d3aa763bc5005f70edfa2849fff315305b9a6bbb857769b85495069320f6eba8a47e1d27ffd6283d399092ae4576c851afde52eeb3cf17b1ba0881e54be59fa56310fdc769af61fdeb3ec9f7700729f5f25547d34de2244bf839b20a69d4237c43e55c43c9b238eda5bd443da05e3594b1c915d9af90d21758374cc68017c7b2563ac3f81df50b2cda448ec4293603587235b843b1ffbef0ea8a2b2e0c10d1ac9c7626e18798bebe2206e98088c8aecd2be8a6278a90e06b20dd36dae022442a798772912aa1239ab896c6174b352c6b355b8cc0862b31c7167c71fd7a252a1043c46a4124308ae3656a50e1c2be30154a00c83faca0bd52d359ae9044f154717e0adcb68450c15fd1c19e16851c4586a742467434fba558684072385a6fdec6707454ffc4731f8f587238d45fa140710ac6bb4a058c07fb028db32b84a79bfe04caa7f1d51760c09d6ff7609d288548a18789364b9dd145e70197df650c027a2c6293f7347f32e9e2873af1eefbc4a070001518bd2603541e4f9a19961a6863da42934dc2e5716a6edf818f7bbe87ef4dd77cd0e096db2439e51b0d5f14ec3dfb5e4ce9733757a0bab7f7ddf47a473bedbe29b6041bab7d40acd8bdd1d961db4cfb1db82f01ea0fb93a3b202c89c361b41a405f75d0cccd871b9706221277f1fe45e664bd9e41b698d0bf934368c4d7cd6f0d80c4d3c0716844911a64523eddb6e8d739aa24c2ef391685cbc2827a621a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":253402300798,"id":"datekeys:quicknet:v1","max_round":1,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain 5daeb5ff2fdfcd368828087dd982690008eccb638dc31cb78b7bfa450cbede18, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":9007199254740991,"id":"datekeys:quicknet:v1","max_round":0,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 9007199254740991: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-on-g1"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-unchained-on-g1\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1,"id":"datekeys:quicknet:v1","max_round":84467433600,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain 950cfcb27d257316ed5fa4216178445129f54b6b09bb6051ea45b7ab0dff8f0a, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":0,"network":"quicknet","period":-1,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": period -1s is not a whole number of seconds in 1..86400: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913305,"network":"quicknet","period":86400,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain c11da7002fbe7b2ab5db749677c90aed2afdf497830e0b1ffecb743c823b2888, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913305,"network":"quicknet","period":86400,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain c11da7002fbe7b2ab5db749677c90aed2afdf497830e0b1ffecb743c823b2888, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2796773,"network":"quicknet","period":90000,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": period 25h0m0s is not a whole number of seconds in 1..86400: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-on-g1"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-unchained-on-g1\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid public key length 0: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":-1,"id":"datekeys:quicknet:v1","max_round":84467433601,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": genesis time -1 outside 0..9007199254740991: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913271,"network":"quicknet","period":86401,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": period 24h0m1s is not a whole number of seconds in 1..86400: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":-1,"id":"datekeys:quicknet:v1","max_round":84467433601,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": genesis time -1 outside 0..9007199254740991: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"nope"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: \"nope\" is not a drand scheme: ERR_UNKNOWN_PROFILE"},
@ -223,7 +223,7 @@
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"cf87a715c185fffc915f9f1727ad3f9636f944d71d857fdeeab012291255a38e03cba65f31c021431341375991575b17ffc58ea27dd56206821da91223e1f72fe51c75fe30c3986ead0d7d9a622824fde5104421e7a461d13b151227ddc30af0bd637a16cb37c162b92ad9d6b5109ac4d1e0cf815c21c5e2a559f6de3d674a1e7318c80c96bdb26544087fc4e289ae7620c7bb8e8adcd28725f72f2d2551a278a2077d6c167919a629f16e672034941ed1927b97bf4356697eaad969a216315e78dabec06e290d05b0b60e3c2a201a6c0ad7f07a2e01cfa9a429e6ec0ff5c3ab81e359612bbf8bacefbf6e3f53370ba5d30184019e73b39f30c9cc8861a8137eabce1132d5bd3d78d9423f4f37befa45d57d018fd9b0fb3b1b61418c8d4233517c30c9b7ee9a2ecd81cdc55cba922160a38ed77a63eb08576706004c5d63ccfe49b15a3212d5987569f424d3110120673b05dad0ad0432fb2a782b74f9c906654dd0355ee3c90f2553d974a85580a3ae05d55d81502f785444b40fe226452ff5298f08a02be10412336a5a390458e6cce9783174f0d65724e08f9e7033db7606eb9e4c23469bbddd23b4212659480903c7c5d123f131cfa9dba39d27537da5f3428361baaa262b7ac53f50f7a985482c4cdace6e5922c7b83daa4b2cc248f16b9989d6cb55cdf886dd6ef9f1dea716d3aa763bc5005f70edfa2849fff315305b9a6bbb857769b85495069320f6eba8a47e1d27ffd6283d399092ae4576c851afde52eeb3cf17b1ba0881e54be59fa56310fdc769af61fdeb3ec9f7700729f5f25547d34de2244bf839b20a69d4237c43e55c43c9b238eda5bd443da05e3594b1c915d9af90d21758374cc68017c7b2563ac3f81df50b2cda448ec4293603587235b843b1ffbef0ea8a2b2e0c10d1ac9c7626e18798bebe2206e98088c8aecd2be8a6278a90e06b20dd36dae022442a798772912aa1239ab896c6174b352c6b355b8cc0862b31c7167c71fd7a252a1043c46a4124308ae3656a50e1c2be30154a00c83faca0bd52d359ae9044f154717e0adcb68450c15fd1c19e16851c4586a742467434fba558684072385a6fdec6707454ffc4731f8f587238d45fa140710ac6bb4a058c07fb028db32b84a79bfe04caa7f1d51760c09d6ff7609d288548a18789364b9dd145e70197df650c027a2c6293f7347f32e9e2873af1eefbc4a070001518bd2603541e4f9a19961a6863da42934dc2e5716a6edf818f7bbe87ef4dd77cd0e096db2439e51b0d5f14ec3dfb5e4ce9733757a0bab7f7ddf47a473bedbe29b6041bab7d40acd8bdd1d961db4cfb1db82f01ea0fb93a3b202c89c361b41a405f75d0cccd871b9706221277f1fe45e664bd9e41b698d0bf934368c4d7cd6f0d80c4d3c0716844911a64523eddb6e8d739aa24c2ef391685cbc2827a621a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"9a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: public key is not the canonical encoding of a point of the key group of bls-unchained-g1-rfc9380: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1,"id":"datekeys:quicknet:v1","max_round":84467433600,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain 950cfcb27d257316ed5fa4216178445129f54b6b09bb6051ea45b7ab0dff8f0a, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-on-g1"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"bls-unchained-on-g1\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"nope"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: \"nope\" is not a drand scheme: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":253402300799,"id":"datekeys:quicknet:v1","max_round":1,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 253402300799: ERR_UNKNOWN_PROFILE"},
@ -322,7 +322,7 @@
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0700081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"another chain_hash, and period 0","result":"ERR_NON_CANONICAL_CBOR","text":"profile: key 7: period 0: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a071a00015181081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"another chain_hash, and period 86401","result":"ERR_NON_CANONICAL_CBOR","text":"profile: period 86401 s out of range: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a07030800097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"another chain_hash, and genesis_time 0","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 0: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"another chain_hash, and the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"another chain_hash, and the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"hex":"aa007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097818626c732d756e636861696e65642d67312d72666339333830","name":"another chain_hash, and no key 10","result":"ERR_NON_CANONICAL_CBOR","text":"profile: 10 keys, want all 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ac007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e1400","name":"another chain_hash, and an unknown key","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 1: map of 12 entries, at most 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e6574055820000000000000000000000000000000000000000000000000000000000000000006586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e00","name":"another chain_hash, and a trailing byte","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 274: 1 trailing bytes: ERR_NON_CANONICAL_CBOR"},
@ -332,7 +332,7 @@
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0700081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the public key of G1, and period 0","result":"ERR_NON_CANONICAL_CBOR","text":"profile: key 7: period 0: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb071a00015181081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the public key of G1, and period 86401","result":"ERR_NON_CANONICAL_CBOR","text":"profile: period 86401 s out of range: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb07030800097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the public key of G1, and genesis_time 0","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 0: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the public key of G1, and the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the public key of G1, and the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"hex":"aa007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a64e62127097818626c732d756e636861696e65642d67312d72666339333830","name":"the public key of G1, and no key 10","result":"ERR_NON_CANONICAL_CBOR","text":"profile: 10 keys, want all 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ac007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e1400","name":"the public key of G1, and an unknown key","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 1: map of 12 entries, at most 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106583097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0703081a64e62127097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e00","name":"the public key of G1, and a trailing byte","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 226: 1 trailing bytes: ERR_NON_CANONICAL_CBOR"},
@ -362,7 +362,7 @@
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a07030800097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e00","name":"genesis_time 0, and a trailing byte","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 270: 1 trailing bytes: ERR_NON_CANONICAL_CBOR"},
{"hex":"ac007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a07030800097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"genesis_time 0, and a head of one entry more","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 1: map of 12 entries, at most 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c650274646174656b6579733a717569636b6e65743a7631010103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a07030800097818626c732d756e636861696e65642d67312d726663393338300a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"genesis_time 0, and keys 1 and 2 swapped","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 30: map key 2 where key 1 was expected: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","name":"the scheme pedersen-bls-chained","result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"hex":"aa007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e6564","name":"the scheme pedersen-bls-chained, and no key 10","result":"ERR_NON_CANONICAL_CBOR","text":"profile: 10 keys, want all 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ac007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e1400","name":"the scheme pedersen-bls-chained, and an unknown key","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 1: map of 12 entries, at most 11: ERR_NON_CANONICAL_CBOR"},
{"hex":"ab007819646174656b6579732d70726f76696465722d70726f66696c6501010274646174656b6579733a717569636b6e65743a763103656472616e640468717569636b6e657405582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97106586083cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a0703081a64e621270974706564657273656e2d626c732d636861696e65640a5820f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e00","name":"the scheme pedersen-bls-chained, and a trailing byte","result":"ERR_NON_CANONICAL_CBOR","text":"profile: codec: offset 269: 1 trailing bytes: ERR_NON_CANONICAL_CBOR"},
"description":"RFC 3339: time.Parse with time.RFC3339Nano, ok or error, and Format with RFC3339 and RFC3339Nano in UTC; datekey.Resolve, RoundTime and DateKey.Validate, and Profile.MaxRound, on the Quicknet profile with other genesis times and periods.",
"description":"The PRELUDE of a .dkc (capsule.ParsePrelude), the steps 1 to 3 of capsule.Inspect on truncated and edited fixtures (with the step that fails, 0 when steps 1 to 8 pass), and whole .dkk files (accesskey.Decode), with the result, the code and the text of the Go reference.",
"description":"PUBLIC_HEADER (capsule.DecodeHeader) of the fixtures, edited, and built field by field.",
"header":[
@ -301,7 +301,7 @@ const formatsHeaderJson = r'''
///Partoftest/vectors/formats_control.json.
constformatsControlJson=r'''
{
"spec":"0.11",
"spec":"0.14",
"generator":"tool/formats_go_vectors.go",
"description":"CONTROL_CBOR of the three formats (capsule.DecodeControl) of the fixtures, in their format and in another, edited, and built field by field.",
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"Q","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid provider, network or scheme name: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":0,"id":"datekeys:quicknet:v1","max_round":84467433600,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: invalid genesis time 0: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"default","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain bb53bd3c1f404463b224d27e22872c4754f7d4f5549693d349f616c3ac27d4a9, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not supported by tlock: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":83903165811,"network":"quicknet","period":3,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"pedersen-bls-chained"},"result":"ERR_UNKNOWN_PROFILE","text":"profile datekeys:quicknet:v1: scheme \"pedersen-bls-chained\" is not bls-unchained-g1-rfc9380, the only scheme of V1: ERR_UNKNOWN_PROFILE"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913271,"network":"quicknet","period":86401,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": period 24h0m1s is not a whole number of seconds in 1..86400: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913271,"network":"quicknet","period":86401,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_NON_CANONICAL_CBOR","text":"profile \"datekeys:quicknet:v1\": period 24h0m1s is not a whole number of seconds in 1..86400: ERR_NON_CANONICAL_CBOR"},
{"profile":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_seed":"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e","genesis_time":1692803367,"id":"datekeys:quicknet:v1","max_round":2913305,"network":"quicknet","period":86400,"provider":"drand","public_key":"83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a","scheme":"bls-unchained-g1-rfc9380"},"result":"ERR_PROFILE_MISMATCH","text":"profile datekeys:quicknet:v1: parameters hash to chain c11da7002fbe7b2ab5db749677c90aed2afdf497830e0b1ffecb743c823b2888, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"},
"description":"Extension arrays through codec.Unmarshal with extension.DecodeArray and EncodeArray, Canonical, CheckDisjoint, CheckCriticalIn and CheckNoncriticalIn with the registry placed of the generator (or CheckCritical and CheckNoncritical when object is empty, and no registry when registry is none), and CheckWrite with extension.Standard.",
"description":"RFC 3339: time.Parse with time.RFC3339Nano, ok or error, and Format with RFC3339 and RFC3339Nano in UTC; datekey.Resolve, RoundTime and DateKey.Validate, and Profile.MaxRound, on the Quicknet profile with other genesis times and periods.",
"parse":[
@ -817,7 +817,7 @@ const formatsTimeJson = r'''
///Partoftest/vectors/formats_padding.json.
constformatsPaddingJson=r'''
{
"spec":"0.11",
"spec":"0.14",
"generator":"tool/formats_go_vectors.go",
"description":"capsule.PaddedLength with both codes and capsule.PayloadAgeLength, at the boundaries of spec §29.1 up to L_MAX and past it; a code with null was rejected with text. check: the plaintext of PAYLOAD_AGE checked by capsule.Open against L and P (step 17): the content of the fixture (its .plaintext) followed by zeros, cut or extended to length bytes, with the byte at at set to value when given; step 0 when the capsule opens.",
"description":"The encoders on values: capsule.EncodeHeader and EncodeControl, accesskey.Encode, profile.NewRegistry, and the canonical JSON and dk1_ string of DateKeys (CanonicalJSON and Compact, empty when not valid); an encoding is in hex, or as its length and SHA-256 when it is large. big is the size of the data of the noncritical extension a of version 1, bytes 0x01, that takes the object to its limit. limits: the decoders on objects at the limits of spec §57 and one byte past them: zeros bytes of zeros, or an extension array 81 a3 00 61 61 01 01 02 5a <len, 4 bytes> and len bytes 0x07 (extension_data), or Canonical of the extension a of version 1 whose data is len zeros (extension_canonical).",
"header":[
@ -932,7 +932,7 @@ const formatsEncodeJson = r'''
///Partoftest/vectors/formats_body.json.
constformatsBodyJson=r'''
{
"spec":"0.11",
"spec":"0.14",
"generator":"tool/formats_go_vectors.go",
"description":"The frame of BODY (capsule.ParseBodyFrame) against L, and the zeros of the security area (capsule.CheckArea).",
"locator: datekeys.capsule: key 9007199254740992 is not defined: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 1: codec: offset 5: a text string of 1025 bytes outside 0..1024: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 1: codec: offset 2: a byte string where a text string was expected: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: the locator is an age header without a body: ERR_EXTENSION_DATA_INVALID",
"locator: the locator is sealed for the chain 0000000000000000000000000000000000000000000000000000000000000000, not for the one of the profile datekeys:quicknet:v1 of its DateKey: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 2: codec: offset 99: truncated input: a byte string of 4451 bytes: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: the tlock stanza of the locator has no chain hash in lower-case hexadecimal: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 1: codec: offset 12: truncated input: a text string of 83 bytes: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 0: codec: offset 2: a negative integer (initial byte 0x26) is outside the CBOR profile: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"locator: datekeys.capsule: key 2: codec: offset 96: an unsigned integer where a byte string was expected: ERR_NON_CANONICAL_CBOR: ERR_EXTENSION_DATA_INVALID",
"description":"The text of the error of capsule.Open for every case of testdata/vectors/mutations.json, or ok for a capsule that opens, and its checks as [step, name, ok, detail, code]; go_error and go_step where Go and the corpus disagree. See the header of tool/mutation_go_texts.go.",
"description":"capsule.Open of a .dkc, as edits of a fixture, given the release (null: none), or a source that fails with source_error (its text and its code, none for a plain error); the clock now; the registry of profiles, empty when registry is empty; the extensions known at (id, version) with valid data valid_data (testkit.KnownExtensions), or reject_all, a registry that knows every extension and rejects all data with that text; the age identities, the .dkk decoded before (dkk, with its material replaced by dkk_material) or the .dkk still encoded (dkk_file); a sink that fails at sink_fail (begin, create i, write i, close i or commit, with the text no and the call); an output that fails with disk full when output_fail; accept, refuse to refuse every verdict with not trusted; and author_keys, the author keys saved with their labels. The outcome: result (ok, refused, or the code), text, the checks as [step, name, ok, detail, code], the release requests, the state of the sink, the content (length and SHA-256) or the files ([path, size, SHA-256 of what the sink received]) of a capsule that opens, the verdicts of a capsule of format 3 that opens (signature, seal, lines, author_key and author_label of alg 1, sealed_at), and the unusable extensions of each object as [id, version, text].",
"description":"HEAD_CBOR of a fixed seed, valid and broken in each layer of spec §69.1, through capsule.DecodeHead with no registry: the result, the code and the text; with_registry when the registry of the extensions a version 1 and org.example version 2 with data 01 (testkit.KnownExtensions) gives another. encode: capsule.EncodeHead of the decoded heads, their extensions reordered, repeated or in both arrays.",
"description":"texts: the texts of the errors of capsule.Inspect, and results: for each mutation of testdata/vectors/inspect_differential.json, in its order, the index of its text in texts, -1 when steps 1 to 8 pass. views: the exact output of datekeys inspect -json (internal/inspectview) for time_only_extensions with another PUBLIC_HEADER, with the registry standard (extension.Standard), none, or reject_all, which knows every extension and rejects all data with not today.",
"description":"The public note of spec §24.1: extension.CheckNote on the string of the bytes data; extension.Note and Header.UnusableNote of noncritical arrays (usable, text, unusable); and extension.Standard, in the order of check, on a note of version 1 with its bytes, absent data when empty: CheckNoncriticalIn of PUBLIC_HEADER (unusable, as [id, version, text]) and CheckWrite in its noncritical array (result and text).",
"description":"The security area of format 3 as package capsule of the Go reference gives it at the draft v0.12: commitments (PayloadCommit, ControlCommit with decode_format and format, or the text of its error, HeadDigest, SignersDigest, AuthorMessage, AuthorCode as Go's string and its bytes, SigPart, SealSubject); encode (EncodeSecurity, EncodeSecurityWith, EncodeAuthorSignature, EncodeSeal); evaluate: EvaluateSecurityIn of SECURITY_CBOR (hex, parts as [hex, repeat], or a base with edits) in the context of the index, EvaluateSecurity when null: the verdicts, author_key and author_label of alg 1, lines as indices into texts, alg and seal_type as read, and cms, the parts that only the reader of CMS evaluates; lines: Verdicts.Lines and SealedAt of verdicts built here; holder: holderText of a name, or of UTF-16 code units, and a hash. See the header of tool/security_go_vectors.go.",
"description":"Part of test/vectors/securitycms_vectors.json: its contexts and texts, its bases whole, and some of its cases, each built area as its hexadecimal.",
"description":"Signatures of alg 2 and seals of seal_type 2 that this program makes, with keys of labels and the deterministic signatures of Go, as package capsule of the Go reference at the draft v0.12 evaluates them with EvaluateSecurityIn in the context of the index: the verdicts, the lines as indices into texts, alg and seal_type as read, cms, the detail of the signers and of a valid seal as the lines of security_vectors.json write it, sealed_at, and author_key of alg 1. An area is pieces (the hexadecimal of bytes, or the index of a chunk, each chunk itself pieces of the chunks before it), or a base edited in its target (value, the SignedData of key 2; signers, its SIGNERS; token, that of key 3) and written again with the encoders of capsule; sha256 is the first 8 bytes of the SHA-256 of the area. See the header of tool/security_go_vectors.go.",
"description":"Steps 10 and 11 of spec §63 for Quicknet, value by value, over published releases. Step 10: M = SHA-256(uint64_be(round)), H(M) the hash to G1 of RFC 9380 with the suite BLS12381G1_XMD:SHA-256_SSWU_RO_ and the DST dst, and e(H(M), public_key) = e(signature, G2). Step 11: a stanza body U || V || W built with the sigma and the file key of the vector; H2 = SHA-256(\"IBE-H2\" || e(signature, U))[:16], sigma = V XOR H2, H4 = SHA-256(\"IBE-H4\" || sigma)[:16], file_key = W XOR H4, and r = H3(sigma, file_key): h3_base = SHA-256(\"IBE-H3\" || sigma || file_key), then for i = 1, 2, ... d = SHA-256(uint16_le(i) || h3_base), its first byte shifted one bit to the right, until it is below the order of the group; r·G2 = U. Generated by the reference implementation and checked against drand, kyber, tlock and agewrap. See testdata/README.md.",
Official vectors, fixtures and corpora of the DateKeys Protocol Specification
v0.11 and of the draft v0.12, generated by the reference implementation.
v0.14, 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
@ -21,12 +21,12 @@ 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.
The `spec` field of every file is `"0.11"`, the version this module declares,
until the author approves the draft v0.12. What the draft changes, the texts
of the verdicts of a certificate and of a seal, the profile of a certificate
and the rules of the addresses and of the padding of a locator, is already in
the files: the verdicts and the lines of `security.json`, `security_cms.json`
and `mutations.json`, and the cases of `locator.json`, are those of the draft.
The `spec` field of every file is `"0.14"`, the version this module declares.
What v0.12 changes from v0.11, the texts of the verdicts of a certificate and
of a seal, the profile of a certificate and the rules of the addresses and of
the padding of a locator, is in the files: the verdicts and the lines of
`security.json`, `security_cms.json` and `mutations.json`, and the cases of
`locator.json`, are those of v0.12.
Conventions for every file:
@ -48,6 +48,7 @@ Conventions for every file:
| `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, CONTROL_CBOR in the three formats | §58, CDDL |
| `vectors/tlock_ibe.json` | H2 of the tlock IBE: the serialization of an element of GT | §63 step 11 |
| `vectors/tlock_steps.json` | steps 10 and 11 for Quicknet value by value: the message of a round, its hash to G1, and the decryption of a tlock stanza with H2, H4, H3 and the file key | §63 steps 10 and 11 (v0.14) |
| `vectors/padding.json` | the padding of formats 2 and 3: P for each content length L, and the length of PAYLOAD_AGE | §29.1 |
| `vectors/paths.json` | the paths of a format 3 head: the rules of one entry, and those of the paths of a head | §29.5 |
| `vectors/path_fold.json` | the key of R7 of segments, and their NFD | §29.5, §29.5.1 |
@ -56,6 +57,7 @@ Conventions for every file:
| `vectors/security_cms.json` | security areas with a signature of `alg` 2 or a seal of `seal_type` 2, each with its context, verdicts, results and lines | §29.7, §29.10, §29.11 |
| `vectors/ed25519_strict.json` | Ed25519 signatures and the result of the strict profile of the author signature | §29.9 |
| `vectors/note.json` | the data of the public note and the result of its rules | §24.1, §29.6 |
| `vectors/resolved_ip.json` | the IP address a name of a locator resolves to, NAT64 included, and whether a reader may connect | §44.1 (v0.13) |
| `vectors/wordkey.json` | the key of words: the words of a text, what a writer refuses, and the identity the words derive | §38.1, §64 |
| `vectors/locator.json` | the extension `datekeys.capsule` of a `.dkk`, its envelope and its locator, and what a reader rejects and uses of them | §44.1, §64 |
| `vectors/mutations.json` | the mutation corpus: the 178 mutations of §64 and further cases | §63, §64 |
@ -310,6 +312,87 @@ 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/tlock_steps.json`
Steps 10 and 11 of spec §63 for Quicknet, every intermediate value written
out, over the published releases of rounds 1000, 1001, 1004 and 2000 (spec
v0.14: the paragraphs "Mensaje de ronda y hash a G1" and "H3 y H4" after the
Every byte string is hex. The top-level fields are those of the pinned
profile (spec §12), the DST of the hash to G1 as text and the tags of H2, H3
and H4 as bytes: the ASCII of `IBE-H2`, `IBE-H3` and `IBE-H4`.
Step 10, the release:
- `signature`: the published signature of `round`, the release, compressed in
G1 (spec §12.2).
- `message`: M = SHA-256 of the round as 8 bytes big-endian, the message an
unchained drand scheme signs.
- `hash_to_g1`: H(M), hash_to_curve of RFC 9380 with the suite
`BLS12381G1_XMD:SHA-256_SSWU_RO_` and the DST `dst`, compressed. The
signature verifies: e(H(M), `public_key`) = e(`signature`, G2), with G2 the
generator of G2.
Step 11, one tlock stanza of the round:
- `body`: the stanza body U || V || W, 128 bytes, and `u`, `v` and `w` its
three parts: U compressed in G2, V and W of 16 bytes.
- `pairing`: e(`signature`, U), 576 bytes in the order of `tlock_ibe.json`.
- `h2`: SHA-256 of `IBE-H2` and `pairing`, truncated to 16 bytes.
- `sigma`: V XOR `h2`.
- `h4`: SHA-256 of `IBE-H4` and `sigma`, truncated to 16 bytes.
- `file_key`: W XOR `h4`, FK_TIME, the file key of OUTER_TIME_AGE.
- `h3_base`: SHA-256 of `IBE-H3`, `sigma` and `file_key`.
- `h3_tries`: the tries of H3, in order. Try `i` hashes the counter `i` as 2
bytes little-endian followed by `h3_base` (`digest`), then shifts the first
byte of the digest one bit to the right (`shifted`); the try is accepted
when `shifted`, read as a big-endian integer, is below the order r of the
groups (spec §12.2). Only the last try is accepted. The shift moves every
bit of the first byte; clearing only its top bit gives another r.
- `r`: the accepted `shifted`, the scalar of the check r·G2 = U.
The last vector is the first stanza of round 1000, in the order of the
generator, whose H3 needs at least three tries: it accepts its fourth, where
clearing the top bit would accept the second. A reader checks every value
in this order and the check r·G2 = U.
The generator chooses `sigma` and `file_key` per stanza, derives r, U, V and W
with its own H2, H3 and H4, and checks the result against the libraries the
reference uses: `message` against `DigestBeacon` of the drand scheme,
`hash_to_g1` against the pairing equation with the published signature, and
the body against `tlock.TimeUnlock`, `DecryptCCAonG2` of drand/kyber and the
tlock identity of `agewrap`, which give back `file_key` only if their H2, H3
and H4 are the ones written here.
## `vectors/padding.json`
The padding of the payload of a capsule of format 2 or 3, spec §29.1, where L
@ -457,7 +540,7 @@ in `security_cms.json`.
Security areas with an author signature of `alg` 2, a CMS signature with
certificates, or a time seal of `seal_type` 2, an RFC 3161 token: 135 cases,
each with the context of its capsule, the verdicts, the result of each signer
and the lines of the draft v0.12, §29.7, §29.10 and §29.11. They complete
and the lines of v0.12, §29.7, §29.10 and §29.11. They complete
`security.json`, whose areas have no valid signature or seal of these kinds.
The file is frozen: the certificates and the tokens are made once, with test
keys, so a second implementation reads them and must reach the same verdicts
@ -585,6 +668,28 @@ feed, a space at either end, U+202E, U+200B, a byte order mark, a
noncharacter, a byte that is not UTF-8 and the UTF-8 of a lone surrogate,
refused.
## `vectors/resolved_ip.json`
The IP address that the name of an https address of a locator resolves to,
which a reader checks on every connection (spec §44.1 of v0.13):
`ip`, `nat64`, the NAT64 prefix of the network that the reader knows, or ""
for none, and `result`, `ok`, or `error` with the text of the reference in
`error`.
```json
{ "name": "the well-known prefix with 192.168.1.10", "ip": "64:ff9b::c0a8:10a", "nat64": "", "result": "error", "error": "locator: an https address whose name resolves to 64:ff9b::c0a8:10a, an address of NAT64 that holds 192.168.1.10, an IP address that is not public" }
```
A public address is accepted. An address of NAT64 (RFC 6052) of
`64:ff9b::/96`, or of the prefix of the network, counts by the IPv4 address
it holds, at the positions of RFC 6052: the cases put a public one and one of
several blocks that are not public in each, and the prefix of the network in
each length of RFC 6052. A prefix of another length, with bits after its
length, outside `64:ff9b::/16` and the public IPv6 addresses, or of IPv4, is
refused. Among the addresses that are not public: IPv4-mapped, 6to4, Teredo,
link-local, unique local, loopback, and the local-use prefix of RFC 8215
without the prefix of the network.
## `vectors/wordkey.json`
The key of words of spec §38.1, the cases that §64 of v0.11 asks for, in
"description":"format 3 time_only capsule with a single file, nota.txt, and the public note «Cartas del viaje a Lisboa» in the noncritical array of PUBLIC_HEADER (spec v0.11, §24.1)",
"description":"format 3 time_only capsule with an author-signature of alg 4294967295, as in format3_signature_unsupported, and a seal of seal_type 4294967295, reserved for tests, with a random token of 32 bytes: verdicts F1 and S1",
"description":"format 3 time_only capsule with a single file, nota.txt, signed with alg 1 by the test key of format3_signed and sealed with seal_type 2 by a test time-stamping authority before the round time: verdicts F4 and S4, with SEAL_SUBJECT and the token in the record",
"description":"format 3 time_only capsule with an author-signature of alg 4294967295, a random key of 32 bytes and a random signature of 64: verdicts F1 and S0",
"description":"format 3 time_only capsule with a single file, nota.txt, signed with alg 1 by a test key whose seed the record gives: verdict F4, and the commitments and the message of the signature",
"description":"format 3 time_only capsule with a single file, nota.txt, signed with alg 2 by two test certificates, an ECDSA P-256 one and an RSA 2048 one, each sealed by a test time-stamping authority before the round time: verdict F6, with the certificates, the commitments, SIGNERS and the result of each signer in the record",
"description":"format 3 time_only capsule with five files in three folders, one of them over two STREAM chunks and one without mtime, a comment of two lines and a declared author",
"description":"format 3 time_only capsule with a single file, nota.txt, as format3_signed, without a signature: the area of 32 KiB of spec v0.11 holds the empty security, and P is the one of format3_signed",
"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",
"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.",
"description":"Ed25519 signatures and the result of the strict profile of the author signature (spec v0.11, §29.9), after the cases of «Taming the many EdDSAs»; stdlib is the result of crypto/ed25519 of Go, for the record. Generated by the reference implementation. See testdata/README.md.",
"description":"HEAD_CBOR of format 3 (spec §29.4 to §29.6) and the result of decoding it with no extension known, generated by the reference implementation: layer 2 (type tag and version), layer 3 (the CDDL with R1 and R8), then layer 4 in key order (spec §69.1). See testdata/README.md.",
"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.",
"description":"The extension datekeys.capsule of a .dkk and what it points to (spec v0.12, 44.1): an envelope of age with its header apart from its rest, the rest hidden in a host file, the locator sealed with tlock for round 1000, and the data of the extension. On the same envelope, what a reader rejects and what it uses (64): addresses, a locator with rejected and usable addresses, resources of the rest, data of the extension and plaintexts of the locator. Frozen. See testdata/README.md.",
"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.",
"description":"The data of the public note, datekeys.note version 1 in the noncritical array of PUBLIC_HEADER (spec §24.1): the text in UTF-8, from 1 to 1024 bytes, that meets the rules of the declared author of §29.6. See testdata/README.md.",
"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.",
"description":"The key of R7 (spec §29.5) of segments, with the Unicode 18.0.0 tables of §29.5.1, generated by the reference implementation: nfd is NFD(segment) and key is NFD(fold(NFD(s'))), s' the segment without ZWNJ, ZWJ, VS15 and VS16. See testdata/README.md.",
"description":"Paths of a format 3 head (spec §29.5) with the Unicode 18.0.0 and best-fit tables of §29.5.1, generated by the reference implementation. paths: one path and the rules of one entry, R2 to R6c and R10; trees: the paths of a head, of 0 bytes each, and the result of decoding it. See testdata/README.md.",
"description":"The IP address that the name of an https address of a locator resolves to, and whether a reader may connect (spec v0.13, 44.1): a public address, or an address of NAT64 (RFC 6052) of 64:ff9b::/96 or of the NAT64 prefix of the network, whose IPv4 address inside is public. See testdata/README.md.",
"cases":[
{
"name":"a public IPv4 address",
"ip":"203.0.114.5",
"nat64":"",
"result":"ok"
},
{
"name":"a public IPv6 address",
"ip":"2a01:4f8::1",
"nat64":"",
"result":"ok"
},
{
"name":"a private IPv4 address",
"ip":"192.168.1.10",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 192.168.1.10, an IP address that is not public"
},
{
"name":"loopback",
"ip":"127.0.0.1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 127.0.0.1, an IP address that is not public"
},
{
"name":"IPv6 loopback",
"ip":"::1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to ::1, an IP address that is not public"
},
{
"name":"an IPv6 link-local address",
"ip":"fe80::1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to fe80::1, an IP address that is not public"
},
{
"name":"an IPv6 unique local address",
"ip":"fd00::1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to fd00::1, an IP address that is not public"
},
{
"name":"an IPv4-mapped address of a public IPv4 address",
"ip":"::ffff:203.0.114.5",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to ::ffff:203.0.114.5, an IP address that is not public"
},
{
"name":"6to4",
"ip":"2002:cb00:7205::1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 2002:cb00:7205::1, an IP address that is not public"
},
{
"name":"Teredo",
"ip":"2001:0:cb00:7205::1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 2001:0:cb00:7205::1, an IP address that is not public"
},
{
"name":"the well-known prefix with a public IPv4 address",
"ip":"64:ff9b::cb00:7205",
"nat64":"",
"result":"ok"
},
{
"name":"the well-known prefix with 8.8.8.8",
"ip":"64:ff9b::808:808",
"nat64":"",
"result":"ok"
},
{
"name":"the well-known prefix with an IPv4 address of 10.0.0.0/8",
"ip":"64:ff9b::a00:1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::a00:1, an address of NAT64 that holds 10.0.0.1, an IP address that is not public"
},
{
"name":"the well-known prefix with 192.168.1.10",
"ip":"64:ff9b::c0a8:10a",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::c0a8:10a, an address of NAT64 that holds 192.168.1.10, an IP address that is not public"
},
{
"name":"the well-known prefix with loopback",
"ip":"64:ff9b::7f00:1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::7f00:1, an address of NAT64 that holds 127.0.0.1, an IP address that is not public"
},
{
"name":"the well-known prefix with 169.254.169.254",
"ip":"64:ff9b::a9fe:a9fe",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::a9fe:a9fe, an address of NAT64 that holds 169.254.169.254, an IP address that is not public"
},
{
"name":"the well-known prefix with 100.64.0.1",
"ip":"64:ff9b::6440:1",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::6440:1, an address of NAT64 that holds 100.64.0.1, an IP address that is not public"
},
{
"name":"the well-known prefix with 0.0.0.0",
"ip":"64:ff9b::",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::, an address of NAT64 that holds 0.0.0.0, an IP address that is not public"
},
{
"name":"the well-known prefix with 255.255.255.255",
"ip":"64:ff9b::ffff:ffff",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::ffff:ffff, an address of NAT64 that holds 255.255.255.255, an IP address that is not public"
},
{
"name":"the well-known prefix with a documentation address",
"ip":"64:ff9b::cb00:7105",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::cb00:7105, an address of NAT64 that holds 203.0.113.5, an IP address that is not public"
},
{
"name":"an address of 64:ff9b::/16 outside 64:ff9b::/96",
"ip":"64:ff9b::1:cb00:7205",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b::1:cb00:7205, an IP address that is not public"
},
{
"name":"the local-use prefix of RFC 8215 without the prefix of the network",
"ip":"64:ff9b:1::cb00:7205",
"nat64":"",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b:1::cb00:7205, an IP address that is not public"
},
{
"name":"the well-known prefix, given as the prefix of the network",
"ip":"64:ff9b::cb00:7205",
"nat64":"64:ff9b::/96",
"result":"ok"
},
{
"name":"the well-known prefix with another prefix of the network",
"ip":"64:ff9b::cb00:7205",
"nat64":"64:ff9b:1::/48",
"result":"ok"
},
{
"name":"the local-use prefix of RFC 8215, /48",
"ip":"64:ff9b:1:cb00:72:500::",
"nat64":"64:ff9b:1::/48",
"result":"ok"
},
{
"name":"the local-use prefix, /48, with a private IPv4 address",
"ip":"64:ff9b:1:c0a8:1:a00::",
"nat64":"64:ff9b:1::/48",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b:1:c0a8:1:a00::, an address of NAT64 that holds 192.168.1.10, an IP address that is not public"
},
{
"name":"the local-use prefix, /48, with bits 64 to 71 set",
"ip":"64:ff9b:1:cb00:172:500::",
"nat64":"64:ff9b:1::/48",
"result":"error",
"error":"locator: an https address whose name resolves to 64:ff9b:1:cb00:172:500::, an address of the NAT64 prefix 64:ff9b:1::/48 whose bits 64 to 71 are not zero"
},
{
"name":"a public prefix of the network, /96",
"ip":"2a01:4f8:c0:64::cb00:7205",
"nat64":"2a01:4f8:c0:64::/96",
"result":"ok"
},
{
"name":"a public prefix of the network, /96, with a private IPv4 address",
"ip":"2a01:4f8:c0:64::c0a8:10a",
"nat64":"2a01:4f8:c0:64::/96",
"result":"error",
"error":"locator: an https address whose name resolves to 2a01:4f8:c0:64::c0a8:10a, an address of NAT64 that holds 192.168.1.10, an IP address that is not public"
},
{
"name":"a public prefix of the network, /96, with loopback",
"ip":"2a01:4f8:c0:64::7f00:1",
"nat64":"2a01:4f8:c0:64::/96",
"result":"error",
"error":"locator: an https address whose name resolves to 2a01:4f8:c0:64::7f00:1, an address of NAT64 that holds 127.0.0.1, an IP address that is not public"
},
{
"name":"a public prefix of the network, /32",
"ip":"2a01:4f8:cb00:7205::",
"nat64":"2a01:4f8::/32",
"result":"ok"
},
{
"name":"a public prefix of the network, /40",
"ip":"2a01:4f8:c0cb:72:5::",
"nat64":"2a01:4f8:c000::/40",
"result":"ok"
},
{
"name":"a public prefix of the network, /56",
"ip":"2a01:4f8:c0:64cb:0:7205::",
"nat64":"2a01:4f8:c0:6400::/56",
"result":"ok"
},
{
"name":"a public prefix of the network, /64",
"ip":"2a01:4f8:c0:64:cb:72:500:0",
"nat64":"2a01:4f8:c0:64::/64",
"result":"ok"
},
{
"name":"a public prefix of the network, /64, with a private IPv4 address",
"ip":"2a01:4f8:c0:64:c0:a801:a00:0",
"nat64":"2a01:4f8:c0:64::/64",
"result":"error",
"error":"locator: an https address whose name resolves to 2a01:4f8:c0:64:c0:a801:a00:0, an address of NAT64 that holds 192.168.1.10, an IP address that is not public"
},
{
"name":"a public address outside the prefix of the network",
"ip":"2a01:4f8::1",
"nat64":"64:ff9b:1::/48",
"result":"ok"
},
{
"name":"a prefix of the network of 80 bits",
"ip":"64:ff9b:1::cb00:7205",
"nat64":"64:ff9b:1::/80",
"result":"error",
"error":"locator: the NAT64 prefix 64:ff9b:1::/80 is not of 32, 40, 48, 56, 64 or 96 bits (RFC 6052)"
},
{
"name":"a link-local prefix of the network",
"ip":"fe80::cb00:7205",
"nat64":"fe80::/96",
"result":"error",
"error":"locator: the NAT64 prefix fe80::/96 is neither in 64:ff9b::/16 nor a public IPv6 prefix"
},
{
"name":"a unique local prefix of the network",
"ip":"fd00::cb00:7205",
"nat64":"fd00::/96",
"result":"error",
"error":"locator: the NAT64 prefix fd00::/96 is neither in 64:ff9b::/16 nor a public IPv6 prefix"
},
{
"name":"a prefix of the network of 2001:db8::/32",
"ip":"2001:db8::cb00:7205",
"nat64":"2001:db8::/96",
"result":"error",
"error":"locator: the NAT64 prefix 2001:db8::/96 is neither in 64:ff9b::/16 nor a public IPv6 prefix"
},
{
"name":"a prefix of the network with bits after its length",
"ip":"64:ff9b::cb00:7205",
"nat64":"64:ff9b::1/96",
"result":"error",
"error":"locator: the NAT64 prefix 64:ff9b::1/96 has bits set after its length"
},
{
"name":"an IPv4 prefix of the network",
"ip":"203.0.114.5",
"nat64":"203.0.114.0/24",
"result":"error",
"error":"locator: the NAT64 prefix 203.0.114.0/24 is not an IPv6 prefix"
"description":"SECURITY_CBOR of format 3, exactly its SECURITY_LEN bytes, the verdicts of the signature and of the seal in the context of the file, and their lines (spec §29.3, §29.7, §29.9). See testdata/README.md.",
"description":"SECURITY_CBOR with an author signature of alg 2 or a time seal of seal_type 2, the context of its capsule, and the verdicts, the result of each signer and the lines of spec v0.12 29.7, 29.10 and 29.11. Certificates and tokens are made once with test keys and the file is frozen. See testdata/README.md.",
"spec":"0.11",
"spec":"0.14",
"cases":[
{
"name":"alg 2: two signers, each sealed before the round time: F6",
"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.",
"description":"Steps 10 and 11 of spec §63 for Quicknet, value by value, over published releases. Step 10: M = SHA-256(uint64_be(round)), H(M) the hash to G1 of RFC 9380 with the suite BLS12381G1_XMD:SHA-256_SSWU_RO_ and the DST dst, and e(H(M), public_key) = e(signature, G2). Step 11: a stanza body U || V || W built with the sigma and the file key of the vector; H2 = SHA-256(\"IBE-H2\" || e(signature, U))[:16], sigma = V XOR H2, H4 = SHA-256(\"IBE-H4\" || sigma)[:16], file_key = W XOR H4, and r = H3(sigma, file_key): h3_base = SHA-256(\"IBE-H3\" || sigma || file_key), then for i = 1, 2, ... d = SHA-256(uint16_le(i) || h3_base), its first byte shifted one bit to the right, until it is below the order of the group; r·G2 = U. Generated by the reference implementation and checked against drand, kyber, tlock and agewrap. See testdata/README.md.",
"description":"The key of words (spec §38.1): the words of a text, after NFD, without U+0300 to U+036F, in simple lower case of Unicode 18.0.0 and split by the spaces of the list; what a writer refuses; and the identity, PBKDF2-HMAC-SHA256 of 600000 rounds, for a chain hash, a round and a capsule_id. See testdata/README.md.",