diff --git a/test/capsule_writer_cases.dart b/test/capsule_writer_cases.dart new file mode 100644 index 0000000..818eca1 --- /dev/null +++ b/test/capsule_writer_cases.dart @@ -0,0 +1,71 @@ +// The cases of test/vectors/capsule_writer.json as tests: each recipe is +// written again with the seeded source of its seed and the hooks that give +// what Go's gave, and must draw what Go drew, ask the hooks what Go's were +// asked, and write the bytes that capsule.EncryptFiles wrote, or fail with +// its text and code after writing as many bytes. The capsule is then opened +// by this library with each credential, as Go opened it, with the same +// files, verdicts and area. capsule_writer_vm_test.dart runs them all from +// the file, and capsule_writer_test.dart those marked node from the Dart +// constant, also compiled to JavaScript. + +import 'package:datekeys/datekeys.dart'; +import 'package:test/test.dart'; + +import 'capsule_writer_support.dart'; + +/// The tests of the cases of [doc]; with [allOpens] false, only the first +/// opening of each capsule, which costs a verification of the round. +void writerCases(Json doc, {bool allOpens = true}) { + final releases = releasesOf(doc); + for (final c in listOf(doc['cases'])) { + final r = c['recipe']! as Json; + test(r['name'], () async { + final w = await writeRecipe(r, c['hooks'] as Json? ?? const {}); + expect(w.draws, c['draws'], reason: 'the draws'); + expect(w.asked, c['hooks'] ?? const {}, reason: 'the hooks'); + final e = c['error'] as Json?; + if (e != null) { + final err = w.error; + expect(err, isNotNull, reason: 'Go fails with ${e['text']}'); + expect(errorText(err!), e['text']); + expect(writerCode(err), e['code']); + expect(w.dkc.length, e['written'], reason: 'the bytes written'); + expect(w.sink.aborted, same(err)); + expect(w.sink.closed, isFalse); + return; + } + expect(w.error, isNull); + final g = c['written']! as Json; + final res = w.result!; + final header = hexOf(g['header']); + expect(toHex(w.dkc.sublist(16, 16 + header.length)), g['header']); + expect(w.dkc.length, g['length_dkc']); + expect(toHex(sha256Of(w.dkc)), g['sha256']); + if (g['dkc'] != null) expect(toHex(w.dkc), g['dkc']); + expect(w.sink.closed, isTrue); + expect(w.sink.aborted, isNull); + expect(res.dateKey.round, g['round']); + expect(res.unlockAt.toString(), g['unlock_at']); + expect(toHex(res.capsuleId), g['capsule_id']); + expect(res.length, g['length']); + expect(res.padding.code, g['padding']); + expect(res.paddedLength, g['padded_length']); + expect(toHex(encodeHead(res.head)), g['head']); + final k = res.portableKey; + expect(k == null ? null : toHex(encodeAccessKey(k)), g['dkk']); + expect(g['reencoded'], isTrue); + + final want = listOf(c['opens']); + final got = await opensOf( + r, + w.dkc, + releases, + res.dateKey.round, + res.capsuleId, + k == null ? null : encodeAccessKey(k), + limit: allOpens ? null : 1, + ); + expect(got, want.sublist(0, got.length)); + }); + } +} diff --git a/test/capsule_writer_support.dart b/test/capsule_writer_support.dart new file mode 100644 index 0000000..6cfd016 --- /dev/null +++ b/test/capsule_writer_support.dart @@ -0,0 +1,479 @@ +// Helpers of the tests of the writer of capsules: the recipes of +// test/vectors/capsule_writer.json made into options and sources of +// encryptFiles, as tool/capsule_writer_go_vectors_test.go makes them for Go, +// the hooks that give the writer what the hooks of Go gave, the sink that +// receives a capsule, and the opening of a capsule with each credential, in +// the form of the vectors. They read no file, so that the tests that run on +// Node.js can use them. +library; + +import 'dart:async'; +import 'dart:typed_data'; + +import 'package:datekeys/datekeys.dart'; +import 'package:datekeys/src/age.dart' show X25519Identity; +import 'package:datekeys/src/bytes.dart' show utf8Bytes; +import 'package:datekeys/src/encrypt3.dart'; +import 'package:datekeys/src/random.dart'; +import 'package:datekeys/src/recipient.dart'; +import 'package:datekeys/src/sha256.dart'; + +import 'age_support.dart' show pattern; +import 'age_writer_support.dart' show labelIdentity; +import 'random_support.dart'; + +export 'age_support.dart' show pattern; +export 'age_writer_support.dart' show labelIdentity; +export 'random_support.dart'; + +Uint8List hexOf(Object? v) => fromHex(v! as String); + +/// The published signatures of the rounds of the vectors. +Map releasesOf(Json doc) => { + for (final e in (doc['releases']! as Json).entries) + int.parse(e.key): fromHex(e.value! as String), +}; + +/// A source of the releases of [releases], which counts its requests. +final class KnownReleases implements ReleaseSource { + KnownReleases(this.releases); + + final Map releases; + + @override + Future fetch(PinnedProfile p, int round) async { + final s = releases[round]; + if (s == null) { + throw DateKeysException( + ErrorCode.releaseUnavailable, + 'test: no release of round $round', + ); + } + return Release(round, s); + } +} + +/// The genesis of Quicknet. +final Instant genesis = Instant(quicknetGenesisTime); + +/// [i] plus [ns] nanoseconds. +Instant addNanos(Instant i, int ns) { + final total = i.nanos + ns; + final s = total >= 0 + ? total ~/ 1000000000 + : -((-total + 999999999) ~/ 1000000000); + return Instant(i.seconds + s, total - s * 1000000000); +} + +List extsOf(Object? v) => [ + for (final e in (v as List? ?? const []).cast()) + Extension( + e['id']! as String, + e['version']! as int, + e['data'] == null ? null : hexOf(e['data']), + ), +]; + +/// The content of a file of a recipe: its text, or n bytes of the pattern. +Uint8List contentOf(Json f) { + final t = f['text'] as String?; + return t != null ? utf8Bytes(t) : pattern(f['pattern'] as int? ?? 0); +} + +/// An error whose text is its message, as Go's errors.New. +final class TextError implements Exception { + const TextError(this.message); + + final String message; + + @override + String toString() => message; +} + +/// The source of a file of a recipe, with its fault, as sourceOf of the +/// generator: each Open counts, and the fault of the reading it names +/// happens there. +FileSource sourceOf(Json f) { + final content = contentOf(f); + final size = f['size'] as int? ?? content.length; + final mtime = f['mtime'] as List?; + final fault = f['fault'] as String? ?? ''; + var calls = 0; + return FileSource( + path: f['path']! as String, + size: size, + modTime: mtime == null ? null : Instant(mtime[0] as int, mtime[1] as int), + open: () { + if (size != content.length) { + throw StateError('a source opened whose size is not its content\'s'); + } + calls++; + var c = content; + switch ('$fault/$calls') { + case 'open1/1' || 'open2/2': + throw const TextError('the file is gone'); + case 'short1/1' || 'short2/2': + c = Uint8List.sublistView(c, 0, c.length - 1); + case 'long1/1' || 'long2/2': + c = Uint8List.fromList([...c, 0x78]); + case 'change2/2': + c = Uint8List.fromList(c)..[0] ^= 1; + case 'read2/2': + return _failing(Uint8List.sublistView(c, 0, c.length ~/ 2)); + } + return _chunks(c); + }, + ); +} + +// The bytes of c in pieces of 32 KiB, as Go's readSource reads them. +Stream> _chunks(Uint8List c) async* { + for (var i = 0; i < c.length; i += 32 << 10) { + yield Uint8List.sublistView( + c, + i, + i + (32 << 10) < c.length ? i + (32 << 10) : c.length, + ); + } +} + +Stream> _failing(Uint8List first) async* { + yield* _chunks(first); + throw const TextError('the disk failed'); +} + +/// The sources of a recipe, with its many empty files. +List sourcesOf(Json r) => [ + for (final f in listOf(r['files'] ?? const [])) sourceOf(f), + for (var i = 0; i < (r['many_files'] as int? ?? 0); i++) + FileSource.bytes('f${'$i'.padLeft(5, '0')}', const []), +]; + +/// The profile of a recipe: Quicknet, or Quicknet with a genesis one second +/// later. +Profile profileOf(Json r) { + final p = quicknet(); + return switch (r['profile'] as String? ?? '') { + '' => p, + 'genesis_plus_one' => p.copyWith(genesisTime: p.genesisTime + 1), + final s => throw ArgumentError('profile $s'), + }; +} + +/// The hooks of a recipe, which give what the hooks of Go gave and record +/// what the writer asks of them. +final class Hooks { + Hooks(this.recipe, this.recorded); + + final Json recipe; + final Json recorded; + final Json asked = {}; + + AuthorKey? get authorKey => + recipe['author_key'] == null ? null : _ReplayAuthor(this); + + CmsSigner? get cmsSigner => recipe['cms'] == null ? null : _ReplayCms(this); + + Sealer? get sealer => recipe['sealer'] == null ? null : _ReplaySealer(this); +} + +final class _ReplayAuthor implements AuthorKey { + _ReplayAuthor(this.h); + + final Hooks h; + + @override + Uint8List get publicKey { + final pub = hexOf(h.recorded['author_public']); + h.asked['author_public'] = toHex(pub); + return pub; + } + + @override + Uint8List sign(Uint8List message) { + h.asked['author_message'] = toHex(message); + final sig = hexOf(h.recorded['author_signature']); + h.asked['author_signature'] = toHex(sig); + return sig; + } +} + +final class _ReplayCms implements CmsSigner { + _ReplayCms(this.h); + + final Hooks h; + + @override + List get signers { + final list = (h.recorded['cms_signers'] as List? ?? const []) + .cast(); + h.asked['cms_signers'] = list; + return [for (final s in list) fromHex(s)]; + } + + @override + Future sign(Uint8List message) async { + h.asked['cms_message'] = toHex(message); + final e = (h.recipe['cms']! as Json)['error'] as String?; + if (e != null) throw TextError(e); + final der = hexOf(h.recorded['cms_der']); + h.asked['cms_der'] = toHex(der); + return der; + } +} + +final class _ReplaySealer implements Sealer { + _ReplaySealer(this.h); + + final Hooks h; + + @override + Future seal(Uint8List subject) async { + h.asked['seal_subject'] = toHex(subject); + final e = (h.recipe['sealer']! as Json)['error'] as String?; + if (e != null) throw TextError(e); + final token = hexOf(h.recorded['seal_token']); + h.asked['seal_token'] = toHex(token); + return token; + } +} + +/// The options of a recipe, with the source [random] and the [hooks]. +EncryptOptions optionsOf(Json r, RandomSource random, Hooks hooks) { + final q = quicknet(); + final unlock = addNanos( + roundTime(q, r['round']! as int), + r['unlock_ns'] as int? ?? 0, + ); + final nowText = r['now'] as String?; + final now = nowText == null ? genesis : parseRfc3339(nowText); + final padding = r['padding'] as int? ?? 0; + return EncryptOptions( + profile: profileOf(r), + unlockAt: unlock, + now: () => now, + policy: r['policy'] == 'time_and_key' + ? AccessPolicy.timeAndKey + : AccessPolicy.timeOnly, + recipients: [ + for (final l in (r['identities'] as List? ?? const []).cast()) + X25519Recipient.of(labelIdentity(l)), + for (final raw + in (r['raw_recipients'] as List? ?? const []).cast()) + X25519Recipient(fromHex(raw)), + ], + newPortableKey: r['portable'] as bool? ?? false, + words: (r['words'] as List? ?? const []).cast(), + padding: padding == 0 ? null : PaddingRule.fromCode(padding), + critical: extsOf(r['critical']), + noncritical: extsOf(r['noncritical']), + controlCritical: extsOf(r['control_critical']), + controlNoncritical: extsOf(r['control_noncritical']), + headCritical: extsOf(r['head_critical']), + headNoncritical: extsOf(r['head_noncritical']), + comment: r['comment'] as String? ?? '', + author: r['author'] as String? ?? '', + publicNote: r['note'] as String? ?? '', + authorKey: hooks.authorKey, + cmsSigner: hooks.cmsSigner, + sealer: hooks.sealer, + largeArea: r['large_area'] as bool? ?? false, + testVectors: r['test_vectors'] as bool? ?? false, + testAreaLen: r['test_area_len'] as int? ?? 0, + random: random, + ); +} + +/// A sink that keeps what it receives, and whether it was closed or +/// aborted. +final class CapsuleSink implements ByteSink { + final BytesBuilder _received = BytesBuilder(); + bool closed = false; + Object? aborted; + int adds = 0; + + int get length => _received.length; + + Uint8List get bytes => _received.toBytes(); + + @override + void add(Uint8List bytes) { + if (closed || aborted != null) throw StateError('add after the end'); + adds++; + _received.add(bytes); + } + + @override + void close() { + if (aborted != null) throw StateError('close after abort'); + closed = true; + } + + @override + void abort(Object reason) => aborted = reason; +} + +/// What a recipe gave: the capsule and the result, or the error, with the +/// sizes of the draws and the hooks as asked. +typedef Written = ({ + Uint8List dkc, + EncryptResult? result, + Object? error, + List draws, + Json asked, + CapsuleSink sink, +}); + +/// Writes the capsule of the recipe [r] with the seeded source of its seed, +/// and the hooks that give what [recorded] says Go's gave. +Future writeRecipe(Json r, Json recorded) async { + final random = RecordingSource(seeded(r['seed']! as String)); + final hooks = Hooks(r, recorded); + final sink = CapsuleSink(); + EncryptResult? res; + Object? error; + try { + res = await encryptFiles(sink, sourcesOf(r), optionsOf(r, random, hooks)); + } catch (e) { + error = e; + } + return ( + dkc: sink.bytes, + result: res, + error: error, + draws: [for (final d in random.draws) d.length], + asked: hooks.asked, + sink: sink, + ); +} + +/// The text of an error of the writer, as Go's err.Error(). +String errorText(Object e) => switch (e) { + DateKeysException(:final message) => message, + CapsuleWriteException(:final message) => message, + ArgumentError(:final message) => '$message', + _ => 'unexpected ${e.runtimeType}: $e', +}; + +/// The code of an error of the writer, or null. +String? writerCode(Object e) => e is DateKeysException ? e.code.code : null; + +/// The extensions of a recipe, known to the opening, as extSet of the +/// generator. +ExtensionRegistry extSetOf(Json r) { + final known = >{}; + for (final k in const [ + 'critical', + 'noncritical', + 'control_critical', + 'control_noncritical', + 'head_critical', + 'head_noncritical', + ]) { + for (final e in extsOf(r[k])) { + (known[e.id] ??= []).add(e.version); + } + } + return ExtensionSet(known); +} + +/// The raw identity of the key of words of [r] for the capsule [capsuleId] +/// of [round]. +Uint8List wordIdentityOf(Json r, int round, List capsuleId) => wordKey( + (r['words']! as List).cast(), + quicknet().chainHash, + round, + capsuleId, +); + +/// Opens [dkc] as the generator does: with the identities, the .dkk, or +/// both, and returns the verdict in the form of the vectors. +Future openedJson( + Json r, + Uint8List dkc, + Map releases, { + List identities = const [], + Uint8List? dkk, +}) async { + final files = MemoryFileSink(); + final o = await openCapsule( + dkc, + OpenOptions( + source: KnownReleases(releases), + now: () => Instant(1791244800), + extensions: extSetOf(r), + identities: identities, + accessKeyFile: dkk, + sink: files, + ), + ); + final err = o.error; + if (err != null) { + return {'result': err.code.code, 'step': o.inspection.checks.last.step}; + } + final head = o.head!; + return { + 'result': 'ok', + 'files': [ + for (var i = 0; i < head.files.length; i++) + { + 'path': head.files[i].path, + 'size': head.files[i].size, + 'sha256': toHex(sha256(files.files![i])), + if (head.files[i].mtime != null) 'mtime': head.files[i].mtime, + }, + ], + 'head': toHex(encodeHead(head)), + 'verdicts': [o.verdicts!.signature!.code, o.verdicts!.seal!.code], + 'area_len': o.areaLen, + 'length': o.payloadLength, + 'padded_length': o.paddedLength, + }; +} + +/// The openings of a capsule with each credential of its recipe, all +/// together and none, as opens of the generator: the first [limit] of them, +/// all without one. +Future> opensOf( + Json r, + Uint8List dkc, + Map releases, + int round, + Uint8List capsuleId, + Uint8List? dkk, { + int? limit, +}) async { + final todo = <(String, List, Uint8List?)>[]; + if (r['policy'] != 'time_and_key') { + todo.add(('time', const [], null)); + } else { + final all = []; + for (final l in (r['identities'] as List? ?? const []).cast()) { + final id = labelSecret(l); + todo.add(('identity $l', [id], null)); + all.add(id); + } + if ((r['words'] as List? ?? const []).isNotEmpty) { + final id = wordIdentityOf(r, round, capsuleId); + todo.add(('words', [id], null)); + all.add(id); + } + if (dkk != null) todo.add(('portable', const [], dkk)); + todo.add(('all', all, dkk)); + todo.add(('none', const [], null)); + } + return [ + for (final (name, ids, k) in todo.take(limit ?? todo.length)) + { + ...await openedJson(r, dkc, releases, identities: ids, dkk: k), + 'with': name, + }, + ]; +} + +/// SHA-256 of [b]. +Uint8List sha256Of(List b) => sha256(b); + +/// The identity of a label, raw. +Uint8List labelSecret(String label) => + X25519Identity(sha256(utf8Bytes('identity $label'))).secretKey; diff --git a/test/capsule_writer_test.dart b/test/capsule_writer_test.dart new file mode 100644 index 0000000..91d323d --- /dev/null +++ b/test/capsule_writer_test.dart @@ -0,0 +1,15 @@ +// The writer of capsules against Go, the cases marked node of +// test/vectors/capsule_writer.json, from a Dart constant, so that they also +// run compiled to JavaScript (see capsule_writer_cases.dart). Each capsule is +// opened only with its first credential there: every opening verifies the +// release of the round. + +import 'dart:convert'; + +import 'capsule_writer_cases.dart'; +import 'capsule_writer_support.dart'; +import 'vectors/capsule_writer.g.dart'; + +void main() { + writerCases(jsonDecode(capsuleWriterJson) as Json, allOpens: !isWeb); +} diff --git a/test/capsule_writer_vm_test.dart b/test/capsule_writer_vm_test.dart new file mode 100644 index 0000000..eca75ed --- /dev/null +++ b/test/capsule_writer_vm_test.dart @@ -0,0 +1,29 @@ +// The writer of capsules against Go: every case of +// test/vectors/capsule_writer.json (see capsule_writer_cases.dart). +@TestOn('vm') +library; + +import 'dart:convert'; +import 'dart:io'; + +import 'package:test/test.dart'; + +import 'capsule_writer_cases.dart'; +import 'capsule_writer_support.dart'; +import 'vectors/capsule_writer.g.dart'; + +void main() { + final text = File('test/vectors/capsule_writer.json').readAsStringSync(); + final doc = jsonDecode(text) as Json; + + test('the Dart constant holds the cases marked node', () { + final node = jsonDecode(capsuleWriterJson) as Json; + expect(node['releases'], doc['releases']); + expect(node['cases'], [ + for (final c in listOf(doc['cases'])) + if ((c['recipe']! as Json)['node'] == true) c, + ]); + }); + + writerCases(doc); +} diff --git a/test/vectors/capsule_writer.g.dart b/test/vectors/capsule_writer.g.dart new file mode 100644 index 0000000..d872abe --- /dev/null +++ b/test/vectors/capsule_writer.g.dart @@ -0,0 +1,1804 @@ +// Generated by tool/capsule_writer_go_vectors_test.go: the cases of +// test/vectors/capsule_writer.json marked node, for the tests that also run +// compiled to JavaScript, where no file can be read. Do not edit. + +/// Part of test/vectors/capsule_writer.json. +const capsuleWriterJson = r''' +{ + "cases": [ + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820fd15094577c9c6746e6965d12fbe1a319d18cf29022e0e82ddd6eea048e988e90581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 637, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, one file, area of 512", + "seed": "capsule writer time_only, one file, area of 512", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "3dedd7de5a1a499eeccab01a296e98b0", + "control": "a60070646174656b6579732d636f6e74726f6c010302582017078a4bba3455e7380f579b74e59b58b7541d9894a2858b81366f73c2f4d9c8035820c6d701b5d3846f091ebaafe7c0cb8e2947db8bcba14e96ffebe874650ec1bb980648000000000000027d0702", + "dkc": "444b43310300000000000079000001caa5006a646174656b6579636170010102503dedd7de5a1a499eeccab01a296e98b0037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6c314b4d46612b33484d4249446b59565237554770476a516e42636b7866616e49413330332b32344a52416331694252486533677543684539686336573758740a447a42474b6c7732793275797871544f724a384e6555736b557a2b7255733676486e4a43387047506948475237355474397a305a314f6a312f61514c4f69704a0a6a4e6441697a51506d4d6676626c58446745524b52664a2b706e764170514e75626a4b54394554783847550a2d2d2d204d6776736c692f59387452364b625350416a684159386b6c33306b546e3763334b302f6c48544e364e4e340ab205d007bb5d9402e853f0ac318bda7aa417e4afa937c0bdd5564415cda3a2a671f6e1620bbcf0ee4c581303fcc84765e12841715f6ee5c491fbc70a922968a3a6ed4d5cdb05d42d74dfd2206b1637fbe33a2d76de3fb5bb262fc4225539a7b45fa2a2315b5db781aac13a297018c7af16d6d9853e14116504ce5fe2e15f9a3a2f3c823dd700d76167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139204a626d6d5651437843755172394436715673522f4739435a343136514e2f3132636a51615a7a74455877410a59486250586d7268707164783077656f4d6e6d79354b466f4e7479423671496639306e2b684d636a424f6f0a2d2d2d206a2b4a42524b374a6a77716f643575322b364e794473526948495a4a68616a517a4567622f6a68597031510a26cae301c00ffb173f8b636d555aba0881375675b33e8bdfcee57fb98c8e1846e825e95bf393af42ef8cd09025aff328a1646cc6cc6c6a57b9a2f3f1c8ba721e1cd5673921781b4fbf4e6520368f0cc39ed11074bd74dbc3884cd6f487d2528921c9f7b3fe8b52a8c45b25518dc475b4317ba00f6a528f1f31796c014ebd98e44ceba61fd7f0c2fd874874cb6d0ed2870db30bb13fccf1f1d52894c105eb107f75566ded0d008dcb85846f081cea8e0c9720e91552fd44caf755793742e7ed4d1fd4e45a7f8c8d47ab46bed5734cad8343e2f5180134f2b01836c8a9b2664fd0cf4c2514f1d3273103c5de1bc36c7587879ba988164c1550d28a42e28332f63010b5ddefd5300aafbfeff49dcd6ccd8657b308b482af8115479f2ab910f5caf5f1fcfd1995f12bc5c9a8a6feed8e5ae30555df3134437758090a61383076d926c759ad90d8bb2a4b124b9df156ac5972ea02d666dbba127f5a51c3e6ea1d9f5a1513be85e324d953a571ffb80cad90e9e8b2b4257b35e49f0fab5d7f1b92e7b55f3b8f18eab7034248daf355d48a914831626db45182218bd9fb9175c99ebc92959422fb584f2fb228d41fdfa3509652e36747dd2685b70546cecb7c66c2cd8152a7fb9f5d80505a1cb0e64572f1b3592fb883e4de2f06b012c5fd604bb4816f03e1cc0ec7799ca2831aa111d5181c72b4d895b37e14b8f2a318fdfc11445ead459738f6b467246baea2a26fe8065fa4cbb64967662a51dca07477f1a32018b221e2264e1160cbc3bfc341c352da35ade48f6b12a59c66d3cea49da1cb417d37e7c1d3744d389a89995b013becb8dc8ab5f6f0d9bb237bb544ac998f0dfd0cb713510e06e2b1219243eb7a3a8d96fbdc42813a2d1b1b297436c8d5052b4e9f39370f3282007051704d5effd950ede44183496481a69041a8c3dffbfececab653ca6cf6315b5a6449803855a95a365f43050b4b0c52b385cef54b8b30c6cf755f91ead0145d8e93ac9877b25494ad096bcf7243934238c392adbe0a6ec1159280b58e57d2ee94faf95746e902b8d0c1c115949a2e18097551b1f7fce64b758141d1665d971597911fe7306a592d04fe9a827faed874ac35dd333b76c082d0f5d4", + "head": "a4006d646174656b6579732d686561640101025820fd15094577c9c6746e6965d12fbe1a319d18cf29022e0e82ddd6eea048e988e90581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b6579636170010102503dedd7de5a1a499eeccab01a296e98b0037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 637, + "length_dkc": 1563, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "af288666e5716608a3cd658cd9651f191174efbfb516b9e6d1d8d2cb84eed312", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [], + "head": "a5006d646174656b6579732d6865616401010258203328e16c01eaa56b830641370d955b5be26c37879873aadada60202460a789890375556e61206cc3ad6e65612e0a4f7472612e0a46696e046a416e61204cc3b370657a", + "length": 612, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, a comment alone, bloque256", + "seed": "capsule writer time_only, a comment alone, bloque256", + "round": 1000, + "padding": 1, + "comment": "Una línea.\r\nOtra.\rFin", + "author": "Ana López", + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "d2623c50f42d70213f738822a240caa3", + "control": "a60070646174656b6579732d636f6e74726f6c010302582012a5dc4a9003760ce6887519d06293befd34c778afbc3e9d134a6010d0b5bf110358204f7e040422f8c6c073db04fdcec70f12ac960354769245740512bdce9a50365c064800000000000002640701", + "dkc": "444b43310300000000000079000001caa5006a646174656b657963617001010250d2623c50f42d70213f738822a240caa3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6c2b7132486451784a415977746d6749727276514255526958444f434957575075756f467761345a4c4b5a6d50535a35456e6b35496f46674f74694a6d4557430a41554550565679672b727650347368496e4e4c49735867466158516b4558424c4e4e525575304572414952552b7476756f52617775703977563942793852507a0a79345144486e4c7576785772514e4c78513679744c666457656d33636874484a6d6962644a545679796e670a2d2d2d2047373271762f7a5446705069446166686a6c733134496d576c54367874356c4f526753707973756748736b0ab069ad5bca36f791d3412c20afd2e37b4ca1392d39d73ca130e2ff2d07cdf6618b7dcf7029d096faf17498291e22184403529f1aac7701a634961afb9d6f18d99e9b680fab1f5d7b9cde803c1eeb9db576ca435b767ac243e42c3656f57caf017078a88ee8950e5f6891b0efc5bc2602c12dd68bc9dc09100b84c796035727e90811da04ef0b8d6167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139206b4639644f482b386b746d67624a706c686a7a44326a6c4a71795a637073624b6f487a4169464767756d450a6f4974456a7337385234503245494c2b456c6368317a5a2b5541453832356173452f6472343344306839630a2d2d2d202b384b687a67346a4169494d6853537736644e487a2f475a485068426e6b6641346667596b3263347147590a882a9a68ce5a1fc41b0cda466933cb288a798d7b113562998894a92e4b93c14874c3e537b1a820be1a66f0d3c3144547ce151d1843d58ec2873522ba426bbfc994da99607f40d13e2ae5893d5c66cdfb1ae2d9d87d787b1375e8c67d34eecc4dd3035a1ec1f6f31f700149a26455326b5f6eab48beda491b11ba19b3da71d53356eae25366ab8b1e9d08276a2f61a420ab4594e1b902baaa38308941c3ff9db9d6bae113fcb8a6499dbdc4689140b8f70171cb057af34e4b106cce503edb96875116f11041397f1a539023688e476cf03d687a7ccb6765e9c43a6c8954da9c540dd9f51a34961ba1eb5745737aa46f5f3ad41c1e63a3ab11938ecbc28f743e81dfb4c471579f1826565a7113b2e0fcea18687983f274364f41aec106dbbdd953d0d36a90a10d0402ffb3c87c90c873f5ae62eb248dc5cd7a27ddee97ac40b49e4791378d13c27de1432593b744ba9f5332dc5ecff187161ae166df32723b5911cb98afa814989588e50c0b274402747b9187b7d1fa37f14f2076b691800051858ddef58598b20c43f39e5f0f72377da139254ee74291b7284da7b1c357e48faa72bd535e6ff3cbd2b7b344dbd4f513633215c1df775497daa38f96814606e339cb99950cc0ace453c833cba2288656e4eea895105b5e77e5464114274ecd57c78318998f066fb458fcf935c32eeee68231efa80d7135238b0107040e126e1c43172051b129870400b46740bb68d83b3cf7623175e6b979382b6d4d177a6450aeea678128e311446a8c2a4ce4dcd64f1edb9ce4c4b7cc203d5e288ca723c8059d4c70689ec6c810641247bf763f9a941a75ff47be6634243e1c24dabc29711bdc2610fbd076f15da1c368e3c9480aa42f8f34ac63bb6bb77dfd02a7f8a6fe3125849fb2311f2458394c43dc1710a45c1cb5cc5e07fdb6be7c1dba4482cd9b7c79e7fbc3538a9aa2f3bfd8cbe4eb970ee874f0f3d1426eefc8a47453618299a8c2c06df379dc48e352657a64577014135902581006119b836e8d42559f0dafea455c5f6135981924e74efc2a88d6ef8243b44cd5a3452167f1392faa493bb0b9293cb22bfc127f1f7d7724d2e01754d4de58224b0d60ff8ea4b01224c418909af3", + "head": "a5006d646174656b6579732d6865616401010258203328e16c01eaa56b830641370d955b5be26c37879873aadada60202460a789890375556e61206cc3ad6e65612e0a4f7472612e0a46696e046a416e61204cc3b370657a", + "header": "a5006a646174656b657963617001010250d2623c50f42d70213f738822a240caa3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 612, + "length_dkc": 1563, + "padded_length": 768, + "padding": 1, + "reencoded": true, + "round": 1000, + "sha256": "c3c90d410ed2b07a3cbd9176e3769661b98dcac2a4ff141103a5330466806cee", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + }, + { + "path": "b/c.txt", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "length": 680, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "portable" + }, + { + "area_len": 512, + "files": [ + { + "path": "a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + }, + { + "path": "b/c.txt", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "length": 680, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, a portable key", + "seed": "capsule writer time_and_key, a portable key", + "round": 1000, + "policy": "time_and_key", + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b/c.txt", + "text": "" + } + ], + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "1cec84704c8d5e50261524a8ce880d4d", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820e25993fc980d4f99fead13635ae03ba4de7c7cccc12883140a293413e8fb6e5b0358208b2a99356a038f60b13a67e6ecbb3ad920728ae6dfc4c1093352e4eb48122176064800000000000002a80702", + "dkc": "444b4331030000000000007900000850a5006a646174656b6579636170010102501cec84704c8d5e50261524a8ce880d4d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a674b49786b557441437a45445a793857536c686256305a4c46674f324d656d4733596e70336f594e7043476137706b7757727732564a624c49427a30373664720a462b663175553168766465707545327730385645365833454477686566744b5779632f6865433939426635654d7a6f762f566d324f3175544b66612f5234654f0a426f4a777276346c6269416b666b4468445838416a6a302f514a746e325336594c326c72447879786d68510a2d2d2d2063542b78732b564e7a76364b326167324a786458485648456949483177706f39766c3074313933436c43450aaecda2a2c7fad53640b6ac93cf334848ec29161d1e361460cb0c95499899bd112b15144a7c2c7ee40fb0d92e6d29f95e7f26007d9e861e1b559c6b3f5e0a27be5a7661115465b8be5be4058df8485d5ed08233e09095699a6723cddff587f4fc3d3e3c68d5b6aa931205133358f65f24df078ae752aae337669de1e13833dffe0db81bf681d0402435229b7b833b077def01e80f293aa3fe57961fcceee8aee3389813d07d578088acc66d1b258694cd50e8c0e8d104d4853d644efa58a567aa2cf0116a0c2dd130f07fbf9e174c8328a02de17d3dfa816c44d354c7e1803c6c18bf50f28a7b484e972e9b9ef88e68e5af503eaf396f3daffdb2483093e89711d7fd8d34dd6436b0ecf61fbb329c2680c51bb580b2aeaad3d24432b728f056f590dbcc5ab374d34a21fe0f76a63887e43f4bf3b165dd7bfbb0b8c29628b65383cea68effa4f46174b20e51847a36e6cbdf26ff4429de63efc575e5b44dd9184c4500f1a49f459cfd3d1b3d52036a6a4007ad9e8fd4fef785d108ee70eaa1aeacf441bd36f7e937aedd587e3bd23716208e492c80ae0cb1bbea969a58cc26861e839783abfdc2c6cb67df0634f8237cabb313915a5ad560d7651a4a00be4ab59a0bd590aa352483d04cca0c5970afaf7884ca6257bb8ae5d61e23b8a235584163028307fc2e74a0412a2f2b154382da3a15cbc36520a8332d5070bf23588b7e4becb2706936306957f871fbc1b2bae8e49974025828c183d4e12484130fd6a1b156f7c10e56228514ada9575261ecb45ec96293dfefcf135e8940e6cb3729bcc10f1012ace92a4f1b6e6d2ed5af101ab569fb978fef36b2c6314797dcede8bbddde3b3af769d9dfe3ac6bead7f9f9793f2cd48308e99701df568c9ab82fd30cd884b39636ef534d24a70e5587fc4997b41cf62b205967f047e279d52ac4d8d8b4811c09f3f384a39495d8285a1c6ac66daebbe6419b4518da59eaa4eb0a156b5e5d31d76fdcbaba29d1f60eae1153ff6ec34a6bc59379b8842bd664888c4e589495cd56a65f280f8117d860830cd39afd6015296402a53c33064de9da0b788c786d6a09d298597d0a65f570c38145071e4011346fc36bb7c3a416a80cbfff2a3461fcce8302d5720186ba4a7f5015cad72ba3a621e1b47d80f7f9b27b0bff31addd0b2c419af9a4750b90facd820722e09df06fc52798ead2526cb4ae5837ad173faa64af58e3827512c3c55b5fb2119b37d552454b4ef4e03f0acf97974801abf7458fb53cd7542604b7a46dee48ed5bbdb0c1ca5f58ea3b6ab32322ed79733ad099877b38132065ade617a08616ef99657cbd15013495ac3211d51b61cb4ce61b1d01ebba6c1e37891c9bd2ca9cd559527216b556a9cf7e9ed5991f1502758f5b66c0f5fec6048098d7534c62df660e11fc68d41fb5d48df501ef4eb479ff434de0d8deefb66af88afdc8168ae1f63c5e1ae04d9042534e7499a975818eefd965dde1065587fad73120573f2358c13227a4f0bfcce9d5e667b366cec8799ece11820a651db1e35257e358d6ed5831bfc18dee2067606483e149f2ee732df41f787a8f7bddfb7e10a4d6b49911cb54f8e670c6ac7391c3f392d83e26f8a5c3e1af074f006e2874ee1ec87e020c121733f2789c39e5dc8d576a8bcc15668be5986aabe110d41c9462f29edd5936d1182af6c822a8c1be9aa19fe65cf829fefa4aa3de131f0183c7b3f6658c88e9a9450ac5ce53d0485271a7f36655dfb6e161488b1670fc1f7f8204446417f518dad26fba689567d6192b98cdf03d84eaee300ab0f54ae78a48c08ad7a5863158edd01eb50f9f0f5411abc4fbc096348f677379b63c3a23501dc6a2bf33a80b7ad30544a556ffbe6f3ed4dd88a43af32c6aadaad0d8ae6d2f52106f9a703b8c41c54ad097a7a11bbe6398c38f53e10cb9066fc4f83e5399e617add045c4cbbdaf8b23d263b797d8f7ddeacf9ea619ba2f4f8ef4a5f1a8eaecf901627b5f7b17ba8a405deed63845e9af450b27d0c531298648dfd5b749e6875a009755cdf640aba196465dbfc143d8c9bc1b5e0c1f075b0e4f27a8ae63a1a1d4d6d24fa6b02c53e2dbf8d01f1edac9378b44f6a831c99431df9148023e44148c65d085a8d246796e5f6647df6059b9eb4d3c1e8df8f76eaa38ad3d112728b1e64d5e86843b5163a656524724399c7fd2251b060df47492e01e7b18ae103adaf555b81d4197d2aa4060feedf3f2d4299d7488909ac5e1b0ca895542754322c35a6c16e5dfbd50e6d5f5e37ae5c544179d7c43f2229edfee1c5f0ebdf33c00fffe63e964721f8b0a1aba652df448fb65953b8f0248e094f141c5d262af68cb4b5578e793d33de3aaa26855564b01adf82768d8e36e730a3be75fe1c080c71a167b9a79a9759344e554c3cd16a2f84a88658170c00333f746381fc5931a232c78a4fb6b8e4331c1742afa18b271264bf6c5d4b8a4427d7cb6800832a03860084b07d0f8559ce23c3529cbebeceb2770bd4fe356080603979a59c051a6fc598d3a644e27f1522d41a16167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139202f2f6f4a317369312b6a5149747837684836685345767054304a565a4b6b3049705a59735662464c4430490a4e6970434b6a766c443330386f795836354f516f69445535466c4d544b554b7557657866315435596357380a2d2d2d2063674a6b2b33436d3573505350574c654154584a354c326a5a34464f57647376375978654c42646b5866770a94317d7b23456913328bdd4b96466e6375e1ee60d720498069dd7b4c98f232acb39f2b09a2743d69b9ae115bd1bf6a47d21a85da5ef4c8c7eef9272d83405803f805652b522fa9a3d809170fe31958bb5a774e5fd800b6da28dc8dfd86c361d7c5e7f9efba037183e09d0955026083b338ac607ea58a6cf7ccd4fd29331511973b3b9b13a679d6da753dfe3b4750784e5ada68e54ede126d1686a3f7e5afec97cd98f603b38b1c47aa3ae374f9a5bdc15dd17483a1f202cd054228b232cd5be7405558d51bbe208a5cab3e33777b8d2893c95548b95e5da04889ed5f03447d642afe22e6234c13cc3a57fce9223f0886fe2c295c3feb05c7b62a76c95d038295b27438f443b4edab2e52d9dacbbe1e3d808146b5ae3c2d7b1fbe9a51fc7f8608a668deeba478047bf0aeeca59930ae9b511ad64521822f4db89a642b5c671581a093ccea28ec7611e5223a68139662d4f828fe9c1e2cab56df91c6eb215c4e6567dceb691790b3f50c32030559fe3f3f226009c8e66be496ddd5af7f928cdd9c43963f1bc321c8ab03d3c9cd6e69906bbb113fe8a2343df90c415e630daae7dcf4309e91b142d562894b9c0d3006ce3d5299c441ecc407104a6c1334fc30683d20ac3e16fb66c7952dc1888bce564943888ade34b4c71c0d729f0b68acb2b3f8c01c148d6ef4b77604adc9c4167511372f287f0a246940e71411a140ab0be9a4bd3dfdfcff5c17c57f2945711b63717d129839626761577b957c14a35c0f8c2cc8d7ea2be7165f3c0e2015cf96eaebd3478aa43f92da86b7a46865b505ceaf0a2daf76db95c4e95af1d1789fd0e7b0a5cc05da025a5f9dc395e66e711cce05c86db4347b6a5fbfc62418103bad7286ac55e99eb3ab9a6757dca15fae1787600347a55e8fb1c6a6701ca1222c29ea052b36e8f92f3dd638eae39d5aebbbb18555d3b091736dfc4e565c544b1c661026d87816dff390bd36e3a15d30397738c82d90d49ed2dd74a08da0cf79467ac2b11fe87017228166c4ee8c0eff71899c6391032279aa17b5de3429cd9cfc7de630a044a475a323626e30acc775b6b44c8f220029eb90a701b6dcf7ceae4aec455560014af620ac571431616cf0e1f24d2e45", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250352bd1b50802fee34747d676dd1345bd03501cec84704c8d5e50261524a8ce880d4d04667832353531390558203935161c6bb9809814a1e294e44eb1284768eef9088e27977df7c74e96e3bd9106a100582030f89bad161e707614df8e2483cf617a20a89bc0eace95a1a679ab56200efbc4", + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "header": "a5006a646174656b6579636170010102501cec84704c8d5e50261524a8ce880d4d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401", + "length": 680, + "length_dkc": 3233, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "30f89bad161e707614df8e2483cf617a20a89bc0eace95a1a679ab56200efbc4", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "hooks": { + "author_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a306537346235633062663134346463376237363133383061633964653164646637343764316335646132663235383132383535376431316131393664646662380a", + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d2041", + "author_signature": "0bdd3719a8938866ad459c444caf5880b643be36d0cd227c8f6503bd6fa30a850051d72205ad21cf9afaeee56a477b9063105e546c3186d131d759886c5bcc09" + }, + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820df125219708df84754ef61e8adcff1374e8a659f0bc3e780e68470b30f40d5150581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 637, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F4", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "signed with alg 1, area of 512", + "seed": "capsule writer signed with alg 1, area of 512", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + }, + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "a0da0425ca5ef886f0914641d9bb51c6", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820c19de6f48116ec77c60e96e24b300ae755d01dd20d5676e0c7729f5aa4b3ad640358201c7a025ced962f8458663b63a826640a6e2c9bae560eb3697d5c23eb835dee7e0648000000000000027d0702", + "dkc": "444b43310300000000000079000001caa5006a646174656b657963617001010250a0da0425ca5ef886f0914641d9bb51c6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b376170624936516e6a3146576853574357656a717849522b4464576a48476f3156645847674d537347774a6e6e572b2f4e4b6941416e782b505172567547710a444e39304d596841734563717a4342756678664f59384a7448754d36326a6676433149525830595135576236766e7a7677514a326e6552525956492f777948630a55536c6c2b362f3551615438545152687062426449633757766c795852467539344c7375467848715267550a2d2d2d20326b644c2f55506b4b77784e3173656f6e4a6e42695463675a72314c6e7172485a2f45585538424a4e456f0a5503812ea912afa878065d3602f31fe88877cad745e0fd5918f1e228c101c1812626346a01926c853ae7555a5d7001cc5c8aadf0d1189459284e7a1732b19667290e3e6e452c7c4075506a096afaa7aba1f2eeb44bd294eab9a0724b3e8184ffef9a3059683426f64dc83c1c11ab840f5fbd9437082df7f55a46fe2e77e3ea237781275af9e5186167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139206c686234435537794467424e724a6e68417935594b4b59576f325a59532b7976433431642b7976485248630a7776594166507168716d35752f37382f4c46553479424374676156316d426a46674b474b644e65482b7a410a2d2d2d204d376e4377564b64657338334a664b544d446870444b56315a675034494c2f2b492b58334a7138762f66410adb1778383753a614ca2eb964344b917223c9c83e1ab2ce745ecf5fd86f7fbd367044650945eb9ea3c7bb7bf3730737981a1fecb6904bf9d552918c0b2b0259de119e35181c2f59413f9b1b249b804d25c81eba4b46a02ce212ce52131d455d4985134f320215189bf1d21d279c0b307ca630974e68b9a59863127fe0b7e452246ace41f529df08e0eddfe04384139e905edc9204fc45f49056778d62a3480c0b90d65b9b5db5e6694e2dc341ec441c3d4aebf1cd59b317c8016823b3e006fd3881ef2136c2eebbb9578bad625d0e167b3ad8a4da26b6fca91428ae41cd82a22f561174e9c08d353523cd2a28ab1ab10ea840a121898f06d57347ec236dc8c02e362066c972773c5fb237d58d57fadff9eb6b7c73a85a38bd4998992a640d7aad6ea7cb567452b7de2b1938de38c2e458d8479b6f9d4a9cac2d09fcbd045cda13a4ec3200da4619cb6024b354fa449e1e04afba83031669cddd73124ab90285d4a5899ac2cb764eccd624adc5e9e36276211991bfed675e3f01670c0ac55ac14106b0a52c97c933929e1fcacd34862b27b049f0cee0deea715206e353581763efc77909187377f8a453e63ae4ee73c141f7ab020bfd4555595a96037022ffab8b2b8c7b3ff6d5911090b99d67f22d33dadac792b45ae99be5eea133c52f0e31306a10f32b44c7c1af7f229cabcead8e1e34cc9af9f85a6a5ad39707c004ddbfb46060bc2bd28c32d34b53b023d60bd2ce04ccacd325bd3b6699dfa24978bd01fccf58e046f52b62b2c326864799d4939df39358e0a68f9e95c4e8df2e219c4137d4720fc97d11494d7ac1e1aef7c798ea86032122c3936c4a6bb1f6dc8e7eda9ebbb66d36c780f35bb47c9346b888835098f1ef681563abf33c6b70aa2a244e036404f840a41c58f8be1f6374ea585a7fc46b0a390542904b7ac730e126e0a69167f06d29d8b4e83aa353d090bcba1459c63dad6fa582947e4c5882e66589b2123f4219e304339533662c60dc3184fea609cf1bd3451b152d21e29e91e3dcfa7420096461c94d8daf941d4ad470680b2d98f57575b4ca0e67123207a87af012012c44225a2f472c1f56e6113433d149d49abd13aba0f15bcdad070a42eb232d68", + "head": "a4006d646174656b6579732d686561640101025820df125219708df84754ef61e8adcff1374e8a659f0bc3e780e68470b30f40d5150581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b657963617001010250a0da0425ca5ef886f0914641d9bb51c6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 637, + "length_dkc": 1563, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "52648c20f05d0153597baf76920a45cd369994a8f174bff475033bd25a23431f", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [], + "error": { + "text": "capsule: EncryptOptions.TestAreaLen is for generators of test vectors: it needs TestVectors (spec §62.1 rule 13)", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen without TestVectors", + "seed": "capsule writer TestAreaLen without TestVectors", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_area_len": 512, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 1000 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen not a multiple of 512", + "seed": "capsule writer TestAreaLen not a multiple of 512", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_vectors": true, + "test_area_len": 1000, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 66048 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen above the largest", + "seed": "capsule writer TestAreaLen above the largest", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_vectors": true, + "test_area_len": 66048, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 512 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen with LargeArea", + "seed": "capsule writer TestAreaLen with LargeArea", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "large_area": true, + "test_vectors": true, + "test_area_len": 512, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: AuthorKey and CMSSigner are exclusive: a capsule has one signature", + "written": 0 + }, + "recipe": { + "name": "AuthorKey and CMSSigner", + "seed": "capsule writer AuthorKey and CMSSigner", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + }, + "cms": { + "signers": [ + "Ana López" + ] + }, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: with CMSSigner the seal goes inside each signature (spec §29.10): Sealer must be nil", + "written": 0 + }, + "recipe": { + "name": "CMSSigner and Sealer", + "seed": "capsule writer CMSSigner and Sealer", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ] + }, + "sealer": {}, + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: a public note that breaks the rules of text: text: control U+000A in the declared author: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "a public note with a line feed", + "seed": "capsule writer a public note with a line feed", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "note": "dos\nlíneas", + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: a public note of 1025 bytes, not 1 to 1024: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "a public note of 1025 bytes", + "seed": "capsule writer a public note of 1025 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "note": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.note version 1 is not registered for noncritical_extensions of CONTROL_CBOR: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.note in CONTROL_CBOR", + "seed": "capsule writer datekeys.note in CONTROL_CBOR", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "control_noncritical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "686f6c61" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.capsule version 1 is not registered for noncritical_extensions of PUBLIC_HEADER: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.capsule in PUBLIC_HEADER", + "seed": "capsule writer datekeys.capsule in PUBLIC_HEADER", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.capsule", + "version": 1, + "data": "78" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: extension: datekeys.note version 1: a public note that breaks the rules of text: text: control U+0009 in the declared author: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "datekeys.note with invalid data", + "seed": "capsule writer datekeys.note with invalid data", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "610962" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: extension: datekeys.note version 1: a public note without data: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "datekeys.note without data", + "seed": "capsule writer datekeys.note without data", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.note", + "version": 1 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.note version 1 is not registered for critical_extensions of head: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.note in the critical array of the head", + "seed": "capsule writer datekeys.note in the critical array of the head", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "head_critical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "686f6c61" + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32 + ], + "error": { + "code": "ERR_NON_CANONICAL_CBOR", + "text": "extension org.example.x: both critical and noncritical: ERR_NON_CANONICAL_CBOR", + "written": 0 + }, + "recipe": { + "name": "an extension in both arrays", + "seed": "capsule writer an extension in both arrays", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "critical": [ + { + "id": "org.example.x", + "version": 1, + "data": "61" + } + ], + "noncritical": [ + { + "id": "org.example.x", + "version": 2, + "data": "62" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_PROFILE_MISMATCH", + "text": "profile datekeys:quicknet:v1: parameters hash to chain 8df9eb0df64b4edab143ea089f8247af191950666dd271a99165943727a2c193, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH", + "written": 0 + }, + "recipe": { + "name": "a profile whose chain hash does not match", + "seed": "capsule writer a profile whose chain hash does not match", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "profile": "genesis_plus_one", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: unlock time 2023-08-23T15:59:24Z is not in the future", + "written": 0 + }, + "recipe": { + "name": "an instant that is now", + "seed": "capsule writer an instant that is now", + "round": 1000, + "now": "2023-08-23T15:59:24Z", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_DATEKEY_INVALID", + "text": "datekey: 2023-08-23T15:09:22Z is before the genesis of datekeys:quicknet:v1: ERR_DATEKEY_INVALID", + "written": 0 + }, + "recipe": { + "name": "an instant before the genesis", + "seed": "capsule writer an instant before the genesis", + "round": 1, + "unlock_ns": -5000000000, + "now": "2023-08-23T14:00:00Z", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with a recipient", + "seed": "capsule writer time_only with a recipient", + "round": 1000, + "identities": [ + "holder 0" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with a portable key", + "seed": "capsule writer time_only with a portable key", + "round": 1000, + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with words", + "seed": "capsule writer time_only with words", + "round": 1000, + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key needs at least one recipient, a portable key or a key of words", + "written": 0 + }, + "recipe": { + "name": "time_and_key without credentials", + "seed": "capsule writer time_and_key without credentials", + "round": 1000, + "policy": "time_and_key", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key takes at most 16 credentials, recipients, portable key and key of words together; 17 given", + "written": 0 + }, + "recipe": { + "name": "seventeen credentials", + "seed": "capsule writer seventeen credentials", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14", + "holder 15" + ], + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key takes at most 16 credentials, recipients, portable key and key of words together; 17 given", + "written": 0 + }, + "recipe": { + "name": "seventeen credentials with words", + "seed": "capsule writer seventeen credentials with words", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14", + "holder 15" + ], + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 1: agewrap: recipient age1uqy63xjx7cay73372ths7sv82p8fm0st0ya9p5gkufdhyds2mjtqxx3uwd is not canonical: bit 255 is set", + "written": 0 + }, + "recipe": { + "name": "a recipient with bit 255 set", + "seed": "capsule writer a recipient with bit 255 set", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0" + ], + "raw_recipients": [ + "e009a89a46f63a4f463e52ef0f4187504e9dbe0b793a50d116e25b72360adc96" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 0: agewrap: recipient age1ahlllllllllllllllllllllllllllllllllllllllllllllllalsn46ayy is not canonical: u is not below 2^255 - 19", + "written": 0 + }, + "recipe": { + "name": "a recipient of u = p", + "seed": "capsule writer a recipient of u = p", + "round": 1000, + "policy": "time_and_key", + "raw_recipients": [ + "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 0: agewrap: recipient age1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq5cu47z is a point of low order: the shared secret would be zero", + "written": 0 + }, + "recipe": { + "name": "a recipient of low order", + "seed": "capsule writer a recipient of low order", + "round": 1000, + "policy": "time_and_key", + "raw_recipients": [ + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient age1guzknzsfgrc03xxa9v9948cmq3jnserntrnzhu8a26c2xvuxwc4sjm3nvt listed twice; INNER_ACCESS_AGE holds one stanza per recipient", + "written": 0 + }, + "recipe": { + "name": "a recipient listed twice", + "seed": "capsule writer a recipient listed twice", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1" + ], + "raw_recipients": [ + "4705698a0940f0f898dd2b0a5a9f1b046538647358e62bf0fd56b0a33386762b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: a key of words needs at least 6 different words of 3 or more letters, not 5", + "written": 0 + }, + "recipe": { + "name": "five words", + "seed": "capsule writer five words", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: the words hold the control character U+0085", + "written": 0 + }, + "recipe": { + "name": "words with a control character", + "seed": "capsule writer words with a control character", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince", + "a…b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: the words hold the invisible character U+200B", + "written": 0 + }, + "recipe": { + "name": "words with an invisible character", + "seed": "capsule writer words with an invisible character", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince", + "a​b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a format 3 capsule holds at least one file or a comment (spec §62.1 rule 14)", + "written": 0 + }, + "recipe": { + "name": "no file and no comment", + "seed": "capsule writer no file and no comment", + "round": 1000, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [], + "head": "a4006d646174656b6579732d686561640101025820d9559670b81b22c8adff0314021d6e75df632850f4b2823923c5e0b210a2aafa03610a", + "length": 32836, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "a comment that is a lone CR", + "seed": "capsule writer a comment that is a lone CR", + "round": 1000, + "comment": "\r", + "node": true + }, + "written": { + "capsule_id": "ca9bab5e9d61e9f6237a06d195877ee4", + "control": "a60070646174656b6579732d636f6e74726f6c01030258201bd0a530dcf826eb01e21b5feb2740d0edc60f4e0736911d36b9e4dac358da900358207513fe888a922d4f95c45b4d8270aaf6b678813eb09d751789889a42c2e66ee4064800000000000080440702", + "head": "a4006d646174656b6579732d686561640101025820d9559670b81b22c8adff0314021d6e75df632850f4b2823923c5e0b210a2aafa03610a", + "header": "a5006a646174656b657963617001010250ca9bab5e9d61e9f6237a06d195877ee4037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32836, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "0c9956dfff60781b19df26b5a37883c83dd1a632d9dc258c1db613bef858a51b", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [], + "error": { + "text": "capsule: comment: text: control U+0001", + "written": 0 + }, + "recipe": { + "name": "a comment with a control character", + "seed": "capsule writer a comment with a control character", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "comment": "hola\u0001", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: comment: 16385 bytes, more than 16384", + "written": 0 + }, + "recipe": { + "name": "a comment of 16385 bytes", + "seed": "capsule writer a comment of 16385 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "comment": "ñññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññña", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: declared author: text: control U+000A in the declared author", + "written": 0 + }, + "recipe": { + "name": "a declared author with a line feed", + "seed": "capsule writer a declared author with a line feed", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author": "Ana\nLópez", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: declared author: 257 bytes, more than 256", + "written": 0 + }, + "recipe": { + "name": "a declared author of 257 bytes", + "seed": "capsule writer a declared author of 257 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"b\" given twice", + "written": 0 + }, + "recipe": { + "name": "a path given twice", + "seed": "capsule writer a path given twice", + "round": 1000, + "files": [ + { + "path": "b", + "text": "1" + }, + { + "path": "a", + "text": "2" + }, + { + "path": "b", + "text": "3" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"\": R1: 0 bytes, not 1 to 1024", + "written": 0 + }, + "recipe": { + "name": "an empty path", + "seed": "capsule writer an empty path", + "round": 1000, + "files": [ + { + "path": "", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\": R1: 1025 bytes, not 1 to 1024", + "written": 0 + }, + "recipe": { + "name": "a path of 1025 bytes", + "seed": "capsule writer a path of 1025 bytes", + "round": 1000, + "files": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"/etc/passwd\": R2: segment 1 is empty", + "written": 0 + }, + "recipe": { + "name": "an absolute path", + "seed": "capsule writer an absolute path", + "round": 1000, + "files": [ + { + "path": "/etc/passwd", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"a/../b\": R3: segment 2: the segment is two dots", + "written": 0 + }, + "recipe": { + "name": "a path with ..", + "seed": "capsule writer a path with ..", + "round": 1000, + "files": [ + { + "path": "a/../b", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"docs/CON.txt\": R6: segment 2: CON is a reserved device name", + "written": 0 + }, + "recipe": { + "name": "a path with a reserved name", + "seed": "capsule writer a path with a reserved name", + "round": 1000, + "files": [ + { + "path": "docs/CON.txt", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: paths \"a\" and \"a/b\": R7: path 2 makes a file of path 1 a folder, or the reverse, in segment 1", + "written": 0 + }, + "recipe": { + "name": "a file that is a folder too", + "seed": "capsule writer a file that is a folder too", + "round": 1000, + "files": [ + { + "path": "a/b", + "text": "1" + }, + { + "path": "a", + "text": "2" + }, + { + "path": "c", + "text": "3" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: paths \"x/AÑO.txt\" and \"x/Año.txt\": R7: path 2 collides with path 1 in segment 2", + "written": 0 + }, + "recipe": { + "name": "two paths that fold to the same key", + "seed": "capsule writer two paths that fold to the same key", + "round": 1000, + "files": [ + { + "path": "x/Año.txt", + "text": "1" + }, + { + "path": "x/AÑO.txt", + "text": "2" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: file \"a\": negative size -1", + "written": 0 + }, + "recipe": { + "name": "a negative size", + "seed": "capsule writer a negative size", + "round": 1000, + "files": [ + { + "path": "a", + "text": "", + "size": -1 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: the files add up to more than 8936830510563328 bytes, the maximum of L", + "written": 0 + }, + "recipe": { + "name": "files beyond L_MAX", + "seed": "capsule writer files beyond L_MAX", + "round": 1000, + "files": [ + { + "path": "a", + "text": "a" + }, + { + "path": "b", + "text": "", + "size": 8936830510563328 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: content of 8936830510596124 bytes exceeds L_MAX = 8936830510563328", + "written": 0 + }, + "recipe": { + "name": "L beyond L_MAX", + "seed": "capsule writer L beyond L_MAX", + "round": 1000, + "files": [ + { + "path": "b", + "text": "", + "size": 8936830510563228 + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"a\" changed after its first reading: its SHA-256 is another", + "written": 779 + }, + "recipe": { + "name": "a source that changes in a small file", + "seed": "capsule writer a source that changes in a small file", + "round": 1000, + "files": [ + { + "path": "a", + "text": "abc", + "fault": "change2" + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F2 and S0 in this security area, not F4 and S0", + "written": 0 + }, + "hooks": { + "author_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a616463663963313461323365383939656134353232623161633833393134386531613239386662303263346530316631663639356638333334626234663238660a", + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d2041", + "author_signature": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "recipe": { + "name": "an author key whose signature does not verify", + "seed": "capsule writer an author key whose signature does not verify", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", + "bad": "zero_signature" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: the author key is 31 bytes, not 32", + "written": 0 + }, + "hooks": { + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d20" + }, + "recipe": { + "name": "an author key of 31 bytes", + "seed": "capsule writer an author key of 31 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", + "bad": "short_key" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: signing: the person cancelled", + "written": 0 + }, + "hooks": { + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a643539386630623061356566326539613537663164323538333837333938633765616139663163373035353036306633663631373461306532376665356135620a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signer that fails", + "seed": "capsule writer a CMS signer that fails", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "error": "the person cancelled" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F1 and S0 in this security area, not F6 and S0", + "written": 0 + }, + "hooks": { + "cms_der": "6e6f742061207369676e6174757265", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a356164653466623863363334353933356465363033376464323663663565386366383438666133616438386635313239303831343862386138313833393537340a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signer that returns garbage", + "seed": "capsule writer a CMS signer that returns garbage", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "garbage": true + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: SIGNERS holds from 1 to 16 certificates", + "written": 0 + }, + "hooks": { + "cms_signers": [] + }, + "recipe": { + "name": "a CMS signer without signers", + "seed": "capsule writer a CMS signer without signers", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": null + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: sealing: the authority is down", + "written": 0 + }, + "hooks": { + "seal_subject": "567a000a34ee27e6db26cb6f168591f6fc9d860e83ea9b01f5fe1c5718b227c9" + }, + "recipe": { + "name": "a sealer that fails", + "seed": "capsule writer a sealer that fails", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "sealer": { + "error": "the authority is down" + }, + "node": true + } + } + ], + "description": "What capsule.EncryptFiles of datekeys-go writes for each recipe while crypto/rand reads the keystream of SeededRandomSource (ChaCha20 under SHA-256(seed), zero nonce), with the size of each draw and what each hook was given and returned; and the text, the code and the bytes written of each error (tool/capsule_writer_go_vectors_test.go). A capsule written is opened with capsule.Open with each credential, all together and none. A file of n bytes of pattern has (31·i + 7) mod 256 as byte i; the raw secret of the identity of a label is SHA-256(\"identity \" + label).", + "go": "go1.26.8", + "releases": { + "1000": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39", + "1001": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" + }, + "source": "c531e936fa8188a4aab01575607cc85d4f5d4fa4" +} +'''; diff --git a/test/vectors/capsule_writer.json b/test/vectors/capsule_writer.json new file mode 100644 index 0000000..2407a10 --- /dev/null +++ b/test/vectors/capsule_writer.json @@ -0,0 +1,4771 @@ +{ + "cases": [ + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820fd15094577c9c6746e6965d12fbe1a319d18cf29022e0e82ddd6eea048e988e90581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 637, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, one file, area of 512", + "seed": "capsule writer time_only, one file, area of 512", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "3dedd7de5a1a499eeccab01a296e98b0", + "control": "a60070646174656b6579732d636f6e74726f6c010302582017078a4bba3455e7380f579b74e59b58b7541d9894a2858b81366f73c2f4d9c8035820c6d701b5d3846f091ebaafe7c0cb8e2947db8bcba14e96ffebe874650ec1bb980648000000000000027d0702", + "dkc": "444b43310300000000000079000001caa5006a646174656b6579636170010102503dedd7de5a1a499eeccab01a296e98b0037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6c314b4d46612b33484d4249446b59565237554770476a516e42636b7866616e49413330332b32344a52416331694252486533677543684539686336573758740a447a42474b6c7732793275797871544f724a384e6555736b557a2b7255733676486e4a43387047506948475237355474397a305a314f6a312f61514c4f69704a0a6a4e6441697a51506d4d6676626c58446745524b52664a2b706e764170514e75626a4b54394554783847550a2d2d2d204d6776736c692f59387452364b625350416a684159386b6c33306b546e3763334b302f6c48544e364e4e340ab205d007bb5d9402e853f0ac318bda7aa417e4afa937c0bdd5564415cda3a2a671f6e1620bbcf0ee4c581303fcc84765e12841715f6ee5c491fbc70a922968a3a6ed4d5cdb05d42d74dfd2206b1637fbe33a2d76de3fb5bb262fc4225539a7b45fa2a2315b5db781aac13a297018c7af16d6d9853e14116504ce5fe2e15f9a3a2f3c823dd700d76167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139204a626d6d5651437843755172394436715673522f4739435a343136514e2f3132636a51615a7a74455877410a59486250586d7268707164783077656f4d6e6d79354b466f4e7479423671496639306e2b684d636a424f6f0a2d2d2d206a2b4a42524b374a6a77716f643575322b364e794473526948495a4a68616a517a4567622f6a68597031510a26cae301c00ffb173f8b636d555aba0881375675b33e8bdfcee57fb98c8e1846e825e95bf393af42ef8cd09025aff328a1646cc6cc6c6a57b9a2f3f1c8ba721e1cd5673921781b4fbf4e6520368f0cc39ed11074bd74dbc3884cd6f487d2528921c9f7b3fe8b52a8c45b25518dc475b4317ba00f6a528f1f31796c014ebd98e44ceba61fd7f0c2fd874874cb6d0ed2870db30bb13fccf1f1d52894c105eb107f75566ded0d008dcb85846f081cea8e0c9720e91552fd44caf755793742e7ed4d1fd4e45a7f8c8d47ab46bed5734cad8343e2f5180134f2b01836c8a9b2664fd0cf4c2514f1d3273103c5de1bc36c7587879ba988164c1550d28a42e28332f63010b5ddefd5300aafbfeff49dcd6ccd8657b308b482af8115479f2ab910f5caf5f1fcfd1995f12bc5c9a8a6feed8e5ae30555df3134437758090a61383076d926c759ad90d8bb2a4b124b9df156ac5972ea02d666dbba127f5a51c3e6ea1d9f5a1513be85e324d953a571ffb80cad90e9e8b2b4257b35e49f0fab5d7f1b92e7b55f3b8f18eab7034248daf355d48a914831626db45182218bd9fb9175c99ebc92959422fb584f2fb228d41fdfa3509652e36747dd2685b70546cecb7c66c2cd8152a7fb9f5d80505a1cb0e64572f1b3592fb883e4de2f06b012c5fd604bb4816f03e1cc0ec7799ca2831aa111d5181c72b4d895b37e14b8f2a318fdfc11445ead459738f6b467246baea2a26fe8065fa4cbb64967662a51dca07477f1a32018b221e2264e1160cbc3bfc341c352da35ade48f6b12a59c66d3cea49da1cb417d37e7c1d3744d389a89995b013becb8dc8ab5f6f0d9bb237bb544ac998f0dfd0cb713510e06e2b1219243eb7a3a8d96fbdc42813a2d1b1b297436c8d5052b4e9f39370f3282007051704d5effd950ede44183496481a69041a8c3dffbfececab653ca6cf6315b5a6449803855a95a365f43050b4b0c52b385cef54b8b30c6cf755f91ead0145d8e93ac9877b25494ad096bcf7243934238c392adbe0a6ec1159280b58e57d2ee94faf95746e902b8d0c1c115949a2e18097551b1f7fce64b758141d1665d971597911fe7306a592d04fe9a827faed874ac35dd333b76c082d0f5d4", + "head": "a4006d646174656b6579732d686561640101025820fd15094577c9c6746e6965d12fbe1a319d18cf29022e0e82ddd6eea048e988e90581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b6579636170010102503dedd7de5a1a499eeccab01a296e98b0037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 637, + "length_dkc": 1563, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "af288666e5716608a3cd658cd9651f191174efbfb516b9e6d1d8d2cb84eed312", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [], + "head": "a5006d646174656b6579732d6865616401010258203328e16c01eaa56b830641370d955b5be26c37879873aadada60202460a789890375556e61206cc3ad6e65612e0a4f7472612e0a46696e046a416e61204cc3b370657a", + "length": 612, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, a comment alone, bloque256", + "seed": "capsule writer time_only, a comment alone, bloque256", + "round": 1000, + "padding": 1, + "comment": "Una línea.\r\nOtra.\rFin", + "author": "Ana López", + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "d2623c50f42d70213f738822a240caa3", + "control": "a60070646174656b6579732d636f6e74726f6c010302582012a5dc4a9003760ce6887519d06293befd34c778afbc3e9d134a6010d0b5bf110358204f7e040422f8c6c073db04fdcec70f12ac960354769245740512bdce9a50365c064800000000000002640701", + "dkc": "444b43310300000000000079000001caa5006a646174656b657963617001010250d2623c50f42d70213f738822a240caa3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6c2b7132486451784a415977746d6749727276514255526958444f434957575075756f467761345a4c4b5a6d50535a35456e6b35496f46674f74694a6d4557430a41554550565679672b727650347368496e4e4c49735867466158516b4558424c4e4e525575304572414952552b7476756f52617775703977563942793852507a0a79345144486e4c7576785772514e4c78513679744c666457656d33636874484a6d6962644a545679796e670a2d2d2d2047373271762f7a5446705069446166686a6c733134496d576c54367874356c4f526753707973756748736b0ab069ad5bca36f791d3412c20afd2e37b4ca1392d39d73ca130e2ff2d07cdf6618b7dcf7029d096faf17498291e22184403529f1aac7701a634961afb9d6f18d99e9b680fab1f5d7b9cde803c1eeb9db576ca435b767ac243e42c3656f57caf017078a88ee8950e5f6891b0efc5bc2602c12dd68bc9dc09100b84c796035727e90811da04ef0b8d6167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139206b4639644f482b386b746d67624a706c686a7a44326a6c4a71795a637073624b6f487a4169464767756d450a6f4974456a7337385234503245494c2b456c6368317a5a2b5541453832356173452f6472343344306839630a2d2d2d202b384b687a67346a4169494d6853537736644e487a2f475a485068426e6b6641346667596b3263347147590a882a9a68ce5a1fc41b0cda466933cb288a798d7b113562998894a92e4b93c14874c3e537b1a820be1a66f0d3c3144547ce151d1843d58ec2873522ba426bbfc994da99607f40d13e2ae5893d5c66cdfb1ae2d9d87d787b1375e8c67d34eecc4dd3035a1ec1f6f31f700149a26455326b5f6eab48beda491b11ba19b3da71d53356eae25366ab8b1e9d08276a2f61a420ab4594e1b902baaa38308941c3ff9db9d6bae113fcb8a6499dbdc4689140b8f70171cb057af34e4b106cce503edb96875116f11041397f1a539023688e476cf03d687a7ccb6765e9c43a6c8954da9c540dd9f51a34961ba1eb5745737aa46f5f3ad41c1e63a3ab11938ecbc28f743e81dfb4c471579f1826565a7113b2e0fcea18687983f274364f41aec106dbbdd953d0d36a90a10d0402ffb3c87c90c873f5ae62eb248dc5cd7a27ddee97ac40b49e4791378d13c27de1432593b744ba9f5332dc5ecff187161ae166df32723b5911cb98afa814989588e50c0b274402747b9187b7d1fa37f14f2076b691800051858ddef58598b20c43f39e5f0f72377da139254ee74291b7284da7b1c357e48faa72bd535e6ff3cbd2b7b344dbd4f513633215c1df775497daa38f96814606e339cb99950cc0ace453c833cba2288656e4eea895105b5e77e5464114274ecd57c78318998f066fb458fcf935c32eeee68231efa80d7135238b0107040e126e1c43172051b129870400b46740bb68d83b3cf7623175e6b979382b6d4d177a6450aeea678128e311446a8c2a4ce4dcd64f1edb9ce4c4b7cc203d5e288ca723c8059d4c70689ec6c810641247bf763f9a941a75ff47be6634243e1c24dabc29711bdc2610fbd076f15da1c368e3c9480aa42f8f34ac63bb6bb77dfd02a7f8a6fe3125849fb2311f2458394c43dc1710a45c1cb5cc5e07fdb6be7c1dba4482cd9b7c79e7fbc3538a9aa2f3bfd8cbe4eb970ee874f0f3d1426eefc8a47453618299a8c2c06df379dc48e352657a64577014135902581006119b836e8d42559f0dafea455c5f6135981924e74efc2a88d6ef8243b44cd5a3452167f1392faa493bb0b9293cb22bfc127f1f7d7724d2e01754d4de58224b0d60ff8ea4b01224c418909af3", + "head": "a5006d646174656b6579732d6865616401010258203328e16c01eaa56b830641370d955b5be26c37879873aadada60202460a789890375556e61206cc3ad6e65612e0a4f7472612e0a46696e046a416e61204cc3b370657a", + "header": "a5006a646174656b657963617001010250d2623c50f42d70213f738822a240caa3037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 612, + "length_dkc": 1563, + "padded_length": 768, + "padding": 1, + "reencoded": true, + "round": 1000, + "sha256": "c3c90d410ed2b07a3cbd9176e3769661b98dcac2a4ff141103a5330466806cee", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + }, + { + "path": "b/c.txt", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "length": 680, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "portable" + }, + { + "area_len": 512, + "files": [ + { + "path": "a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + }, + { + "path": "b/c.txt", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "length": 680, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, a portable key", + "seed": "capsule writer time_and_key, a portable key", + "round": 1000, + "policy": "time_and_key", + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b/c.txt", + "text": "" + } + ], + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "1cec84704c8d5e50261524a8ce880d4d", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820e25993fc980d4f99fead13635ae03ba4de7c7cccc12883140a293413e8fb6e5b0358208b2a99356a038f60b13a67e6ecbb3ad920728ae6dfc4c1093352e4eb48122176064800000000000002a80702", + "dkc": "444b4331030000000000007900000850a5006a646174656b6579636170010102501cec84704c8d5e50261524a8ce880d4d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004016167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a674b49786b557441437a45445a793857536c686256305a4c46674f324d656d4733596e70336f594e7043476137706b7757727732564a624c49427a30373664720a462b663175553168766465707545327730385645365833454477686566744b5779632f6865433939426635654d7a6f762f566d324f3175544b66612f5234654f0a426f4a777276346c6269416b666b4468445838416a6a302f514a746e325336594c326c72447879786d68510a2d2d2d2063542b78732b564e7a76364b326167324a786458485648456949483177706f39766c3074313933436c43450aaecda2a2c7fad53640b6ac93cf334848ec29161d1e361460cb0c95499899bd112b15144a7c2c7ee40fb0d92e6d29f95e7f26007d9e861e1b559c6b3f5e0a27be5a7661115465b8be5be4058df8485d5ed08233e09095699a6723cddff587f4fc3d3e3c68d5b6aa931205133358f65f24df078ae752aae337669de1e13833dffe0db81bf681d0402435229b7b833b077def01e80f293aa3fe57961fcceee8aee3389813d07d578088acc66d1b258694cd50e8c0e8d104d4853d644efa58a567aa2cf0116a0c2dd130f07fbf9e174c8328a02de17d3dfa816c44d354c7e1803c6c18bf50f28a7b484e972e9b9ef88e68e5af503eaf396f3daffdb2483093e89711d7fd8d34dd6436b0ecf61fbb329c2680c51bb580b2aeaad3d24432b728f056f590dbcc5ab374d34a21fe0f76a63887e43f4bf3b165dd7bfbb0b8c29628b65383cea68effa4f46174b20e51847a36e6cbdf26ff4429de63efc575e5b44dd9184c4500f1a49f459cfd3d1b3d52036a6a4007ad9e8fd4fef785d108ee70eaa1aeacf441bd36f7e937aedd587e3bd23716208e492c80ae0cb1bbea969a58cc26861e839783abfdc2c6cb67df0634f8237cabb313915a5ad560d7651a4a00be4ab59a0bd590aa352483d04cca0c5970afaf7884ca6257bb8ae5d61e23b8a235584163028307fc2e74a0412a2f2b154382da3a15cbc36520a8332d5070bf23588b7e4becb2706936306957f871fbc1b2bae8e49974025828c183d4e12484130fd6a1b156f7c10e56228514ada9575261ecb45ec96293dfefcf135e8940e6cb3729bcc10f1012ace92a4f1b6e6d2ed5af101ab569fb978fef36b2c6314797dcede8bbddde3b3af769d9dfe3ac6bead7f9f9793f2cd48308e99701df568c9ab82fd30cd884b39636ef534d24a70e5587fc4997b41cf62b205967f047e279d52ac4d8d8b4811c09f3f384a39495d8285a1c6ac66daebbe6419b4518da59eaa4eb0a156b5e5d31d76fdcbaba29d1f60eae1153ff6ec34a6bc59379b8842bd664888c4e589495cd56a65f280f8117d860830cd39afd6015296402a53c33064de9da0b788c786d6a09d298597d0a65f570c38145071e4011346fc36bb7c3a416a80cbfff2a3461fcce8302d5720186ba4a7f5015cad72ba3a621e1b47d80f7f9b27b0bff31addd0b2c419af9a4750b90facd820722e09df06fc52798ead2526cb4ae5837ad173faa64af58e3827512c3c55b5fb2119b37d552454b4ef4e03f0acf97974801abf7458fb53cd7542604b7a46dee48ed5bbdb0c1ca5f58ea3b6ab32322ed79733ad099877b38132065ade617a08616ef99657cbd15013495ac3211d51b61cb4ce61b1d01ebba6c1e37891c9bd2ca9cd559527216b556a9cf7e9ed5991f1502758f5b66c0f5fec6048098d7534c62df660e11fc68d41fb5d48df501ef4eb479ff434de0d8deefb66af88afdc8168ae1f63c5e1ae04d9042534e7499a975818eefd965dde1065587fad73120573f2358c13227a4f0bfcce9d5e667b366cec8799ece11820a651db1e35257e358d6ed5831bfc18dee2067606483e149f2ee732df41f787a8f7bddfb7e10a4d6b49911cb54f8e670c6ac7391c3f392d83e26f8a5c3e1af074f006e2874ee1ec87e020c121733f2789c39e5dc8d576a8bcc15668be5986aabe110d41c9462f29edd5936d1182af6c822a8c1be9aa19fe65cf829fefa4aa3de131f0183c7b3f6658c88e9a9450ac5ce53d0485271a7f36655dfb6e161488b1670fc1f7f8204446417f518dad26fba689567d6192b98cdf03d84eaee300ab0f54ae78a48c08ad7a5863158edd01eb50f9f0f5411abc4fbc096348f677379b63c3a23501dc6a2bf33a80b7ad30544a556ffbe6f3ed4dd88a43af32c6aadaad0d8ae6d2f52106f9a703b8c41c54ad097a7a11bbe6398c38f53e10cb9066fc4f83e5399e617add045c4cbbdaf8b23d263b797d8f7ddeacf9ea619ba2f4f8ef4a5f1a8eaecf901627b5f7b17ba8a405deed63845e9af450b27d0c531298648dfd5b749e6875a009755cdf640aba196465dbfc143d8c9bc1b5e0c1f075b0e4f27a8ae63a1a1d4d6d24fa6b02c53e2dbf8d01f1edac9378b44f6a831c99431df9148023e44148c65d085a8d246796e5f6647df6059b9eb4d3c1e8df8f76eaa38ad3d112728b1e64d5e86843b5163a656524724399c7fd2251b060df47492e01e7b18ae103adaf555b81d4197d2aa4060feedf3f2d4299d7488909ac5e1b0ca895542754322c35a6c16e5dfbd50e6d5f5e37ae5c544179d7c43f2229edfee1c5f0ebdf33c00fffe63e964721f8b0a1aba652df448fb65953b8f0248e094f141c5d262af68cb4b5578e793d33de3aaa26855564b01adf82768d8e36e730a3be75fe1c080c71a167b9a79a9759344e554c3cd16a2f84a88658170c00333f746381fc5931a232c78a4fb6b8e4331c1742afa18b271264bf6c5d4b8a4427d7cb6800832a03860084b07d0f8559ce23c3529cbebeceb2770bd4fe356080603979a59c051a6fc598d3a644e27f1522d41a16167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139202f2f6f4a317369312b6a5149747837684836685345767054304a565a4b6b3049705a59735662464c4430490a4e6970434b6a766c443330386f795836354f516f69445535466c4d544b554b7557657866315435596357380a2d2d2d2063674a6b2b33436d3573505350574c654154584a354c326a5a34464f57647376375978654c42646b5866770a94317d7b23456913328bdd4b96466e6375e1ee60d720498069dd7b4c98f232acb39f2b09a2743d69b9ae115bd1bf6a47d21a85da5ef4c8c7eef9272d83405803f805652b522fa9a3d809170fe31958bb5a774e5fd800b6da28dc8dfd86c361d7c5e7f9efba037183e09d0955026083b338ac607ea58a6cf7ccd4fd29331511973b3b9b13a679d6da753dfe3b4750784e5ada68e54ede126d1686a3f7e5afec97cd98f603b38b1c47aa3ae374f9a5bdc15dd17483a1f202cd054228b232cd5be7405558d51bbe208a5cab3e33777b8d2893c95548b95e5da04889ed5f03447d642afe22e6234c13cc3a57fce9223f0886fe2c295c3feb05c7b62a76c95d038295b27438f443b4edab2e52d9dacbbe1e3d808146b5ae3c2d7b1fbe9a51fc7f8608a668deeba478047bf0aeeca59930ae9b511ad64521822f4db89a642b5c671581a093ccea28ec7611e5223a68139662d4f828fe9c1e2cab56df91c6eb215c4e6567dceb691790b3f50c32030559fe3f3f226009c8e66be496ddd5af7f928cdd9c43963f1bc321c8ab03d3c9cd6e69906bbb113fe8a2343df90c415e630daae7dcf4309e91b142d562894b9c0d3006ce3d5299c441ecc407104a6c1334fc30683d20ac3e16fb66c7952dc1888bce564943888ade34b4c71c0d729f0b68acb2b3f8c01c148d6ef4b77604adc9c4167511372f287f0a246940e71411a140ab0be9a4bd3dfdfcff5c17c57f2945711b63717d129839626761577b957c14a35c0f8c2cc8d7ea2be7165f3c0e2015cf96eaebd3478aa43f92da86b7a46865b505ceaf0a2daf76db95c4e95af1d1789fd0e7b0a5cc05da025a5f9dc395e66e711cce05c86db4347b6a5fbfc62418103bad7286ac55e99eb3ab9a6757dca15fae1787600347a55e8fb1c6a6701ca1222c29ea052b36e8f92f3dd638eae39d5aebbbb18555d3b091736dfc4e565c544b1c661026d87816dff390bd36e3a15d30397738c82d90d49ed2dd74a08da0cf79467ac2b11fe87017228166c4ee8c0eff71899c6391032279aa17b5de3429cd9cfc7de630a044a475a323626e30acc775b6b44c8f220029eb90a701b6dcf7ceae4aec455560014af620ac571431616cf0e1f24d2e45", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250352bd1b50802fee34747d676dd1345bd03501cec84704c8d5e50261524a8ce880d4d04667832353531390558203935161c6bb9809814a1e294e44eb1284768eef9088e27977df7c74e96e3bd9106a100582030f89bad161e707614df8e2483cf617a20a89bc0eace95a1a679ab56200efbc4", + "head": "a4006d646174656b6579732d6865616401010258207f918dbaaf30bfc74d58cbb7ab8e9aa2885de3c01ec3275baf3e428da53122520582a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bba50067622f632e747874010002010301045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "header": "a5006a646174656b6579636170010102501cec84704c8d5e50261524a8ce880d4d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401", + "length": 680, + "length_dkc": 3233, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "30f89bad161e707614df8e2483cf617a20a89bc0eace95a1a679ab56200efbc4", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "carta.txt", + "sha256": "03099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a3", + "size": 13 + } + ], + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "length": 699, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 0" + }, + { + "area_len": 512, + "files": [ + { + "path": "carta.txt", + "sha256": "03099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a3", + "size": 13 + } + ], + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "length": 699, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 1" + }, + { + "area_len": 512, + "files": [ + { + "path": "carta.txt", + "sha256": "03099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a3", + "size": 13 + } + ], + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "length": 699, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 2" + }, + { + "area_len": 512, + "files": [ + { + "path": "carta.txt", + "sha256": "03099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a3", + "size": 13 + } + ], + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "length": 699, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "portable" + }, + { + "area_len": 512, + "files": [ + { + "path": "carta.txt", + "sha256": "03099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a3", + "size": 13 + } + ], + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "length": 699, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, three recipients and a portable key, a note and extensions", + "seed": "capsule writer time_and_key, three recipients and a portable key, a note and extensions", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2" + ], + "portable": true, + "files": [ + { + "path": "carta.txt", + "text": "Querida Ana:\n" + } + ], + "note": "Para Ana, en su cumpleaños", + "critical": [ + { + "id": "org.example.crit", + "version": 1, + "data": "63" + } + ], + "noncritical": [ + { + "id": "org.example.b", + "version": 2, + "data": "6e62" + }, + { + "id": "org.example.a", + "version": 1 + } + ], + "control_critical": [ + { + "id": "org.example.ctrl", + "version": 1, + "data": "6b" + } + ], + "control_noncritical": [ + { + "id": "org.example.ctrl2", + "version": 3, + "data": "6b6b" + } + ], + "head_critical": [ + { + "id": "org.example.head", + "version": 1, + "data": "68" + } + ], + "head_noncritical": [ + { + "id": "org.example.head2", + "version": 1, + "data": "6868" + } + ], + "test_vectors": true, + "test_area_len": 512 + }, + "written": { + "capsule_id": "4d7f635deb746cb5db65f57c766a8ff7", + "control": "a80070646174656b6579732d636f6e74726f6c0103025820ab2ed7aac602c895512878a1cc51f98c73ff8d5906321dd2f43be5a0042eafa5035820be2d4db34f415fe02125d9eac541f8c59c81d1c10d17e841801f30b14487c9810481a300706f72672e6578616d706c652e6374726c010102416b0581a300716f72672e6578616d706c652e6374726c32010302426b6b064800000000000002bb0702", + "dkc": "444b433103000000000000ed00000886a7006a646174656b6579636170010102504d7f635deb746cb5db65f57c766a8ff7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a300706f72672e6578616d706c652e6372697401010241630683a3006d646174656b6579732e6e6f7465010102581b5061726120416e612c20656e2073752063756d706c6561c3b16f73a2006d6f72672e6578616d706c652e610101a3006d6f72672e6578616d706c652e62010202426e626167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6752556f3633327562476556686b56793271366f5a7558745261514a4e58664b51377a546976596c755a724b6f6f734a5a6f50694d72424c577341347a596d4c0a474d51626952317333574a6f30703534716d69784156653354666748797a78354b41736a49636f462b536c64614b437949645271624e76536a506448514141740a33644739782f63663834532f6b7973784a52784d7347743852736c66516a30316450753976596f556467410a2d2d2d2039477a493058746539416838736b446a66764c315a6943304367484e645048714f6c6e616f47736e4857630a9f105f6ec6210debd975692c0d84bb0587161ea6401902406512e5cd72a07b0d41f5be6fce4f85e8797146d67dcf2d63eba78a17d6cee231ec153f73f6ddbdb6b14ce3aa0baac945b1dfccab0e623f9e2e0cc1b5e878041fc24396b6e597cc5b63fc477ba917fe6780ea33e91ae05580c91e2250e922f1aa9226c839c43e194ebf00b89cca0ff300a5e5ab7310ee6bca4ed4e3ef9adac3025e10a4c92744f0fdac4319e33d54228fd66cf62c0d496868ae8fcd2845262c1507a7d2d84fc531f5f01c64de9d2f1721493c656f9e10dded5dac5032d0827790d8d53e8d59f998ef9c6707f9cd25056e6923abaaeeff20a27115c232b699ad2d67734f6cd9c08e63e1e38cd6505cbfb0a9f871aade6e03800195ee0f39f03e5d00af1f9c8d478b66e26fd5920b23b974d04a95e9f1f9365ef06262b0cdc815400fe50840082a2a2ddae4d5fa4de23711b9838777b34157172200c3728c543cd1ca7c7b248dafa70aea0f7e1264f5f7db7d2efd226a99c1b1e215b0ab39a5f591298596d7d367110ebc3f861651f8e3d17f224d5368e7ba28278901e269e2755a485306a73590c9790cb454e7e58fe7104312c2a4513ec00470ee4a7b0cadc162bbd57886fe3b0e32ef25f7071369c26db266fdbce54b36cb1e6fed1fa45fee58d0bbb09d9cdbd54d8899c622e348aace36277782d8700963e3faad9c5a5c2f53afb024418a1b5ca3cc6d5f70c3edf4e2e5a3268d34832bc23c5b1646cd62e7119deab6768798b1907e1fd1c9d6641ebc494042489fb35aca7b8d63307ce3f1016458d712655a76272d9bcdac3eb21b8d6d7c22f761c59b6301dfda9195ec27da4204d599cf4fe1510f426a3e820ecfbabd63e046ba89f9af6ce92ec327f3274d6fe0b6d6fdc50b2e1d1fa19c19b8d33f6ea8ea563346f3a5e873f2e936dc5620165a78420d6aede434be6242b12db0ed1b15e41c066d44b91b95d9f2a0eb74e892fc4ea71eb4a00600ea017566859ac0389e1722bb37027d471a399cc6284875c717b3895f2b64e20125a8e610fa9093e08ac81fb095216ef2deefea204cc0cb7c3d754a8b98edfe723d176b8cef7c4a8ac3b737b3fe977e980544de030ad18c3124220ab87b1b8bd9719c012d729fa7869b767263f67d1f92d98fcad08a77842ec4d34219976715bb567b06ca0bea2e7f166264a77347366080aa807264dcf2660c9d8bea5d21f30b67327fd5d35a37645177126bcff3206516733473981d320e7e87cb3b73b7c1ce72d64d124e9e93e5d5114e2bf9dfbb933e4461c5f12a7d75f3163f6811e8f6a1c85e40ae7133c144f4f0c0db4fecb8ef8628a880577cd22c6315227a6cbcb018f4987ecaaa9712e41da98a7be136b92c14a586ea4d80a79aca17bb9bb1eb8013404041a52ab449c2217904fb58e19266be966223bc977b1c050e46dbd089a27392600dc94cc7cf07053bd201c0619406cd2f039d74043aefb0db1cddf939b822f4d47231864231ee45f86666c7a913d65c02b45d64a83da9975c2ad794e5fe407ff99da3fc43a7593131cc1c24e5aaa0ff784dc43d8c146b661cec09f1244bb233d3ba3c264e2124c0137a7cef33983a76cc4603b0bd8cd00185b2bf05158ff157d5420cbbbfabbc68d6b118735c47493bb51c4308ada14f27ee989c23f154768af22edc596e820c26a5d57808d6964133bae6694553c454f815272437a03da022bdff26ad1de0e6959e562fd91cd5bead75464d1fa76213e0bd2b85df5849c0f5b5443927fa8d7d3e5c5bc4f9b669d576ec90a234ebb8d46b4a8856ca060a95751c3055ca51f332a51e0f30c229e38d6eb0baaa80b2f0a2704f713dd29367a6d29e375df8c7545b72e0d2269cf7631cfb48726b386e2e9885fb4d0dac6f4ba362fb8ceda0c0b16ecbeeb6b8934d0c20f25d414b11c292c044031cca406cd2a617000f66966b07a46321ec70e39bdff0492049c71c9de7da5c4e81adc72a0877e4d36276cb65ffdf11b5f8d5f8ede094110fe39726c6d3c4a0dc45e178a58d6780e22d83898c0ff8de913f0fa0184f01924680f38426d130455f5cec227f170f903357cab94e979271e5927e54c8928bed05c1d6632974fa73e2ddf958160f83646264b5cbe0f059b0458a4f39ca012de5771f93e24ed9d04e1c40b0a1e61e1204e4a82ff2c45d3c4952368a9e9f0b61bf0e3a53b1c1571e5450437c4d66cdac3a3d67c138870df4c82b3721bf7975e99baf7c16dd9bc88dcaeee99395f4df6134970618da002c413dba7dac9371fc84b4f48ef7c259aa77a99295021e0580a91976cb78455fdc47a9b8fc56cc4c855e482cfa0a783c508d83d6b9ea4697259ede27d3281922f7318da3c54e5ebf6ff961f62861212d9b692fb211bc452d5407cad840d3127fc9c99f2d92dd6c66527c03309d3b85a3871757766e5d08cd88b844e06fc47703e4e46e5149a47e5a33ebd9de9f8e0b8d309f7bc0a44b68aac54b55a64022eb2336281b9930d4fa5784043727cde882bc4484dc4be759eb7c80a792bf064632dfde974bd433ea145be8e6d3e5acae13b9b4f86216036e417a78f45b9e98275c603fc4fd142ba858c0b74b181357dde034a857019cef96e25807fb02b16167652d656e6372797074696f6e2e6f72672f76310a2d3e2058323535313920714f5a755933506f6a546f7571754d6c69513378564161735943734f5442362f764264552f7057667a69410a30636a4a6d37344c4835625154654237496a4d326e6b6233646b6b31556a594d346e66782f6f58686955630a2d2d2d204a792f6b6744394743704a632f464f6d766259766a5a3167724a47625a7a7a50777862474e596f3334644d0a2da8968c1b9745e1670b1cbab53310cf52608346ed86b4d90dd98902a2e2271f677d9d3c7a21ba3b31ee105f82b403fde08e1a4e1c480e8a37faa145a729104236349886a836399d9d61ad7c6c4c554b0223ef807c8a14ca0b8a6a4d975ff18a59adaeb7c7e1e85ae2647e48aff171d5bf34070bd8231ba9055c82a75f41b3c11db9f1a606fc4aafb213b0b4966303bbb4817be9654559c1dee3b2ffb1c9d479f4e2150648f5840faf3c0e5f3648018cddd0654da01e24de852d70a4cf3a0523bab83241c02ecf0e9c089f7adc9430e166d3461e75e9dcf519da4d87b0772d2aff2cb6e85d50b1db8d5ecb729c432360dd762b567c6446244ed623c365f876dae282fbe17eae5c7964f11ca81f78d652fe39a084755b46c7534efcce7e1f97546726f0afa4a8bce05485130ecc19386d160dca1beb778c5df8147ad6af15872492012500459141e0d39ce8d460f1c7d942c715a79657a1656c10f411836b030809b0b8843afcac5f1a4e28383d600d79963786b1ba9b8bbe359094be4d1cec8408b1f99a1ff85a657bc09e6ec1df5074918e30779be013b3e1b8f3a2a3a90b4cab7113e73084e2afeee8c65c445bfdf8d9945de1803d1c6868b3030dcfd95a265a21ef1acba010aa6bbeae9431dd7daa2585e166519845c69f4effcfac72e1e561fa6c7385b8511f9e0b9b3f198ac6843eed677a51b87f6cc439a46ffa0dcc2b8c770f4956f512f5eb08579c8f9879f77b6e01eeeadeb6a2ed0270919c771b618ba19f0c1d47a5a44ea8ddfb748db4d8267c58b7ce69b721cffa8ceea34453d47d30312ba6661ca39517f9baeb3c3fbcbbaa54d53dbfeaa16261d9121fe68081d9c8d80076b5d859df60fb59320ea12ced29fb087eab517105bcae05f034d102b3a0784e39e394d0db94dc990397e990173ca36932b8f612ef9d9dc9b71f8637788125e6e46b8ad521167c86096d15ed9b5a632bbcb0aaeaa059e0cdc428848d374742b0b33ef6ec3ccc5e60a274b2f98fcef03590e7408c4148b426e5d4ca5211fd4a9d85dfa21c8b205655e43bf5a38c9cdf897c1a5d5f47b3f62b4375fc02e15516b6fe2eec72fbd7bdd2db4dd3f3e2dfe8fcf0cf39108aadffd45bd0b70f", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250dcf8bcf18d3ae37acd67864a19e4303203504d7f635deb746cb5db65f57c766a8ff704667832353531390558202a7a59dcafc41e93be7cf8752c181d7168226703b631860fbc69fe94b4be66e506a1005820b72edc8f1bbb97896965e05d271e633facb5961c81ef8825edf6c28de600ff8b", + "head": "a6006d646174656b6579732d6865616401010258208e29bb9842924481bbc06fcc0ce384ee334fac2ef9bcc1d02dffa29bc19342770581a5006963617274612e747874010d0200030d04582003099b51191207a3859384cf7ffb2c715e325cec6c019c6e735c22e1ca69e8a30681a300706f72672e6578616d706c652e6865616401010241680781a300716f72672e6578616d706c652e6865616432010102426868", + "header": "a7006a646174656b6579636170010102504d7f635deb746cb5db65f57c766a8ff7037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a300706f72672e6578616d706c652e6372697401010241630683a3006d646174656b6579732e6e6f7465010102581b5061726120416e612c20656e2073752063756d706c6561c3b16f73a2006d6f72672e6578616d706c652e610101a3006d6f72672e6578616d706c652e62010202426e62", + "length": 699, + "length_dkc": 3403, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "b72edc8f1bbb97896965e05d271e633facb5961c81ef8825edf6c28de600ff8b", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "mtime": 0, + "path": "fotos/a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + }, + { + "mtime": 1727712000, + "path": "fotos/playa.jpg", + "sha256": "8f9d1bf454d63cd9fc6edbe8f3f2331cc1f9b195c7ec90533717bf243ae966c7", + "size": 200000 + }, + { + "mtime": 1727712000, + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + }, + { + "path": "vacío.txt", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + }, + { + "path": "~.txt", + "sha256": "e3ef0df74b3ec171762f53f663dafecb63fb1f9bc52ebe33642ba579ff8acd98", + "size": 5 + }, + { + "path": "😀.txt", + "sha256": "4030f0c0b99ba5e189b6fe295448a8ca31ca589a55930175de18032545c11501", + "size": 5 + } + ], + "head": "a6006d646174656b6579732d686561640101025820293a644b93a44d3a4b013ae5920b59f0963ea05706fee7d8ac5516d282c29f4e0370466f746f732064656c20766572616e6f04644c7569730586a6006b666f746f732f612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0500a6006f666f746f732f706c6179612e6a7067011a00030d400201031a00030d410458208f9d1bf454d63cd9fc6edbe8f3f2331cc1f9b195c7ec90533717bf243ae966c7051a66facb00a600686e6f74612e7478740106021a00030d41031a00030d470458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685051a66facb00a5006a766163c3ad6f2e7478740100021a00030d47031a00030d47045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855a50067efbd9e2e7478740105021a00030d47031a00030d4c045820e3ef0df74b3ec171762f53f663dafecb63fb1f9bc52ebe33642ba579ff8acd98a50068f09f98802e7478740105021a00030d4c031a00030d510458204030f0c0b99ba5e189b6fe295448a8ca31ca589a55930175de18032545c11501", + "length": 233253, + "padded_length": 233472, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, the common area, files in byte order with mtimes", + "seed": "capsule writer time_only, the common area, files in byte order with mtimes", + "round": 1000, + "files": [ + { + "path": "vacío.txt", + "text": "" + }, + { + "path": "nota.txt", + "text": "Hola.\n", + "mtime": [ + 1727712000, + 0 + ] + }, + { + "path": "fotos/playa.jpg", + "pattern": 200000, + "mtime": [ + 1727712000, + 999999999 + ] + }, + { + "path": "😀.txt", + "text": "emoji" + }, + { + "path": "~.txt", + "text": "tilde" + }, + { + "path": "fotos/a.txt", + "text": "a", + "mtime": [ + 0, + 0 + ] + } + ], + "comment": "Fotos del verano", + "author": "Luis" + }, + "written": { + "capsule_id": "e3ad2c40c4f41a29ce4f994440ffe9a2", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820730e63082060b8831b870ac1073331e1a5ef7f04410510f374c029fa1b7dc4ec03582052c7e3a4d14f339ddceafc85b272cb6faae4a4cf4599889778885271a43256ee06480000000000038f250702", + "head": "a6006d646174656b6579732d686561640101025820293a644b93a44d3a4b013ae5920b59f0963ea05706fee7d8ac5516d282c29f4e0370466f746f732064656c20766572616e6f04644c7569730586a6006b666f746f732f612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0500a6006f666f746f732f706c6179612e6a7067011a00030d400201031a00030d410458208f9d1bf454d63cd9fc6edbe8f3f2331cc1f9b195c7ec90533717bf243ae966c7051a66facb00a600686e6f74612e7478740106021a00030d41031a00030d470458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685051a66facb00a5006a766163c3ad6f2e7478740100021a00030d47031a00030d47045820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855a50067efbd9e2e7478740105021a00030d47031a00030d4c045820e3ef0df74b3ec171762f53f663dafecb63fb1f9bc52ebe33642ba579ff8acd98a50068f09f98802e7478740105021a00030d4c031a00030d510458204030f0c0b99ba5e189b6fe295448a8ca31ca589a55930175de18032545c11501", + "header": "a5006a646174656b657963617001010250e3ad2c40c4f41a29ce4f994440ffe9a2037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 233253, + "length_dkc": 234315, + "padded_length": 233472, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "d50b71be9265190f83afa97d600fde7b68f5acc33aa3beed89e9527b70cc5e6e", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "size": 1 + }, + { + "mtime": 253402300799, + "path": "b", + "sha256": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35", + "size": 1 + }, + { + "path": "c", + "sha256": "4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce", + "size": 1 + }, + { + "path": "d", + "sha256": "4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a", + "size": 1 + }, + { + "path": "e", + "sha256": "ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d", + "size": 1 + } + ], + "head": "a4006d646174656b6579732d68656164010102582029dbb89ba9a8694ee1c2304688b1ef768c8f828afcee95663e2a7a0aee53bda70585a50061610101020003010458206b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4ba6006162010102010302045820d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35051b0000003afff4417fa50061630101020203030458204e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fcea50061640101020303040458204b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8aa5006165010102040305045820ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d", + "length": 33075, + "padded_length": 33280, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "time_only, mtimes out of range and at its ends", + "seed": "capsule writer time_only, mtimes out of range and at its ends", + "round": 1000, + "padding": 1, + "files": [ + { + "path": "a", + "text": "1", + "mtime": [ + -1, + 999999999 + ] + }, + { + "path": "b", + "text": "2", + "mtime": [ + 253402300799, + 999999999 + ] + }, + { + "path": "c", + "text": "3", + "mtime": [ + 253402300800, + 0 + ] + }, + { + "path": "d", + "text": "4", + "mtime": [ + -62135596800, + 0 + ] + }, + { + "path": "e", + "text": "5", + "mtime": [ + -62135596800, + 1 + ] + } + ] + }, + "written": { + "capsule_id": "863566216792e85b5be375b52040fd0e", + "control": "a60070646174656b6579732d636f6e74726f6c010302582007abb02172a5a06b7e75efafea07dee1a904c8a584586e14649e2920fe9d951a035820797ee1624c12cf7ea3440196849f0f88adfa6f0a3294e1f426b0e4331f889a05064800000000000081330701", + "head": "a4006d646174656b6579732d68656164010102582029dbb89ba9a8694ee1c2304688b1ef768c8f828afcee95663e2a7a0aee53bda70585a50061610101020003010458206b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4ba6006162010102010302045820d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35051b0000003afff4417fa50061630101020203030458204e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fcea50061640101020303040458204b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8aa5006165010102040305045820ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d", + "header": "a5006a646174656b657963617001010250863566216792e85b5be375b52040fd0e037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 33075, + "length_dkc": 34075, + "padded_length": 33280, + "padding": 1, + "reencoded": true, + "round": 1000, + "sha256": "e1343d495c915df4a8c4e4864baf156b5709589a98866d11e977a8625325f3e5", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 0" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 1" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 2" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 3" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 4" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 5" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 6" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 7" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 8" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 9" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 10" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 11" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 12" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 13" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 14" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "portable" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + } + ], + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "length": 98428, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, fifteen recipients and a portable key", + "seed": "capsule writer time_and_key, fifteen recipients and a portable key", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14" + ], + "portable": true, + "files": [ + { + "path": "x.bin", + "pattern": 65536 + } + ] + }, + "written": { + "capsule_id": "04d31fba4d7cfed281a8ea3e02dc830d", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820588a2e2c43d188dba487c44b07ef976339aa8b3213940963ef7893653cb6db7f035820e376b9c1266dcaf3c357217ef64ae26ac14ea28801137491f3abf017b1add69a0648000000000001807c0702", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250df195cff600e8d6d570e7b15e2abca54035004d31fba4d7cfed281a8ea3e02dc830d046678323535313905582011195c57786ce8f7d0501ed42215590d6c7c8460fe2218e578668fdf4ac9f77f06a10058206c72e63323bade138c9c951296dc8faff2ca9be564c88a7302c8deb9c83b872c", + "head": "a4006d646174656b6579732d6865616401010258207eb9cdb45eea9c6e3ebcfa4870bb76b061c1b251b50884a77d754310cef6cf0f0581a50065782e62696e011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "header": "a5006a646174656b65796361700101025004d31fba4d7cfed281a8ea3e02dc830d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401", + "length": 98428, + "length_dkc": 102833, + "padded_length": 100352, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "6c72e63323bade138c9c951296dc8faff2ca9be564c88a7302c8deb9c83b872c", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 0" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 1" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 2" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 3" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 4" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 5" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 6" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 7" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 8" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 9" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 10" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 11" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 12" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 13" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 14" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 15" + }, + { + "area_len": 32768, + "files": [ + { + "path": "x.bin", + "sha256": "74f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "size": 65537 + } + ], + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "length": 98429, + "padded_length": 100352, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, sixteen recipients", + "seed": "capsule writer time_and_key, sixteen recipients", + "round": 1001, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14", + "holder 15" + ], + "files": [ + { + "path": "x.bin", + "pattern": 65537 + } + ] + }, + "written": { + "capsule_id": "4d12e51818ffc0583d04ad44abeae840", + "control": "a60070646174656b6579732d636f6e74726f6c010302582061c7574e2c135151ffcc93918fdbb0d07850168657033ddd04ddceddc427c18c03582090c06ef66b0a7006d27c01db33b5b20a5a100eca7c5958c09d5faffff7ce191f0648000000000001807d0702", + "head": "a4006d646174656b6579732d68656164010102582049dee067411bdb5ff59129baae835790e4d8ccc744669a3779b4aa9536488cb10581a50065782e62696e011a000100010200031a0001000104582074f3260f4a9adaf7271c910ba2d111dbae7a176afb487e1b7f655897eadf1093", + "header": "a5006a646174656b6579636170010102504d12e51818ffc0583d04ad44abeae840037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300401", + "length": 98429, + "length_dkc": 102833, + "padded_length": 100352, + "padding": 2, + "reencoded": true, + "round": 1001, + "sha256": "18fa6f186ca3de51fdf528a91694dffa4b774ec7b660bd06622f840732d08da5", + "unlock_at": "2023-08-23T15:59:27Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "secreto.txt", + "sha256": "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "size": 2 + } + ], + "head": "a4006d646174656b6579732d6865616401010258204fdf78df2f6e5f64f508bdc6b0d41ca93c6a8baca1a74d5edde60068cc918eca0581a5006b7365637265746f2e74787401020200030204582073475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "length": 32892, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "identity holder 0" + }, + { + "area_len": 32768, + "files": [ + { + "path": "secreto.txt", + "sha256": "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "size": 2 + } + ], + "head": "a4006d646174656b6579732d6865616401010258204fdf78df2f6e5f64f508bdc6b0d41ca93c6a8baca1a74d5edde60068cc918eca0581a5006b7365637265746f2e74787401020200030204582073475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "length": 32892, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "words" + }, + { + "area_len": 32768, + "files": [ + { + "path": "secreto.txt", + "sha256": "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "size": 2 + } + ], + "head": "a4006d646174656b6579732d6865616401010258204fdf78df2f6e5f64f508bdc6b0d41ca93c6a8baca1a74d5edde60068cc918eca0581a5006b7365637265746f2e74787401020200030204582073475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "length": 32892, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "time_and_key, a key of words and a recipient", + "seed": "capsule writer time_and_key, a key of words and a recipient", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0" + ], + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "secreto.txt", + "text": "42" + } + ] + }, + "written": { + "capsule_id": "b4e4c0fc126ba1ef134e0ca45355be4d", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820e941c9e35eca14c4a6f03ff637c86b90f43f14a641f841362af8a45f4d5ab9a5035820ad9e73f2134bfe10032c7e586c9acc164f1aa6768f1b398caf4eb40898868ef20648000000000000807c0702", + "head": "a4006d646174656b6579732d6865616401010258204fdf78df2f6e5f64f508bdc6b0d41ca93c6a8baca1a74d5edde60068cc918eca0581a5006b7365637265746f2e74787401020200030204582073475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049", + "header": "a5006a646174656b657963617001010250b4e4c0fc126ba1ef134e0ca45355be4d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401", + "length": 32892, + "length_dkc": 37281, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "8df30b17750e541c77049843e011bdc1bbf396725bfe5fc6e39554f850c386e5", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a4006d646174656b6579732d6865616401010258200a3e400a6a446143c6a3968553605951ba7f2e82ef4ce6725ff5ae66be2dc5060581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "length": 32881, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "a requested instant one nanosecond after round 1000", + "seed": "capsule writer a requested instant one nanosecond after round 1000", + "round": 1000, + "unlock_ns": 1, + "files": [ + { + "path": "a", + "text": "a" + } + ] + }, + "written": { + "capsule_id": "4d110b11d1fa265af2f311e1c4a2a71a", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820309d3afcc6434053574fad2011de6ca09546b0f6874aa21aa3db67c68515a8ad0358206c48d6a5cc3a5870b273276f6deb0531045486e3db3ad83c6236b35bd38525de064800000000000080710702", + "head": "a4006d646174656b6579732d6865616401010258200a3e400a6a446143c6a3968553605951ba7f2e82ef4ce6725ff5ae66be2dc5060581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "header": "a5006a646174656b6579636170010102504d110b11d1fa265af2f311e1c4a2a71a037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400", + "length": 32881, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1001, + "sha256": "5b2f63ebd92437b477b96067cd54425f2a8baae73c7b2ecb57aa5d55e934cce8", + "unlock_at": "2023-08-23T15:59:27Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a4006d646174656b6579732d686561640101025820cedf1c9f6fa774f2e8c5df8772505a36bd22bb1905c5d475b06ea6c405c6e2380581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "length": 32881, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "a requested instant one nanosecond before round 1000", + "seed": "capsule writer a requested instant one nanosecond before round 1000", + "round": 1000, + "unlock_ns": -1, + "now": "2023-08-23T15:09:30.5Z", + "files": [ + { + "path": "a", + "text": "a" + } + ] + }, + "written": { + "capsule_id": "923f37ff633909fd970a35d6a10eca89", + "control": "a60070646174656b6579732d636f6e74726f6c01030258204dad3742b507d840bfb598ef8f9fdbcb9a7b3e4cce22897500ec8dbfd4de05df035820961deddda242a45b4f92746654a568e0016cd1065805569dff0e33555269b55b064800000000000080710702", + "head": "a4006d646174656b6579732d686561640101025820cedf1c9f6fa774f2e8c5df8772505a36bd22bb1905c5d475b06ea6c405c6e2380581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "header": "a5006a646174656b657963617001010250923f37ff633909fd970a35d6a10eca89037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32881, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "f8add43a60df4fba350b82837ec985a66a0f8ee8218a9eda392960a04136f227", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "hooks": { + "author_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a306537346235633062663134346463376237363133383061633964653164646637343764316335646132663235383132383535376431316131393664646662380a", + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d2041", + "author_signature": "0bdd3719a8938866ad459c444caf5880b643be36d0cd227c8f6503bd6fa30a850051d72205ad21cf9afaeee56a477b9063105e546c3186d131d759886c5bcc09" + }, + "opens": [ + { + "area_len": 512, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820df125219708df84754ef61e8adcff1374e8a659f0bc3e780e68470b30f40d5150581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 637, + "padded_length": 768, + "result": "ok", + "verdicts": [ + "F4", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "signed with alg 1, area of 512", + "seed": "capsule writer signed with alg 1, area of 512", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + }, + "test_vectors": true, + "test_area_len": 512, + "node": true + }, + "written": { + "capsule_id": "a0da0425ca5ef886f0914641d9bb51c6", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820c19de6f48116ec77c60e96e24b300ae755d01dd20d5676e0c7729f5aa4b3ad640358201c7a025ced962f8458663b63a826640a6e2c9bae560eb3697d5c23eb835dee7e0648000000000000027d0702", + "dkc": "444b43310300000000000079000001caa5006a646174656b657963617001010250a0da0425ca5ef886f0914641d9bb51c6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004006167652d656e6372797074696f6e2e6f72672f76310a2d3e20746c6f636b203130303020353264623962613730653063633066366561663738303364643037343437613166353437373733356664336636363137393262613934363030633834653937310a6b376170624936516e6a3146576853574357656a717849522b4464576a48476f3156645847674d537347774a6e6e572b2f4e4b6941416e782b505172567547710a444e39304d596841734563717a4342756678664f59384a7448754d36326a6676433149525830595135576236766e7a7677514a326e6552525956492f777948630a55536c6c2b362f3551615438545152687062426449633757766c795852467539344c7375467848715267550a2d2d2d20326b644c2f55506b4b77784e3173656f6e4a6e42695463675a72314c6e7172485a2f45585538424a4e456f0a5503812ea912afa878065d3602f31fe88877cad745e0fd5918f1e228c101c1812626346a01926c853ae7555a5d7001cc5c8aadf0d1189459284e7a1732b19667290e3e6e452c7c4075506a096afaa7aba1f2eeb44bd294eab9a0724b3e8184ffef9a3059683426f64dc83c1c11ab840f5fbd9437082df7f55a46fe2e77e3ea237781275af9e5186167652d656e6372797074696f6e2e6f72672f76310a2d3e20583235353139206c686234435537794467424e724a6e68417935594b4b59576f325a59532b7976433431642b7976485248630a7776594166507168716d35752f37382f4c46553479424374676156316d426a46674b474b644e65482b7a410a2d2d2d204d376e4377564b64657338334a664b544d446870444b56315a675034494c2f2b492b58334a7138762f66410adb1778383753a614ca2eb964344b917223c9c83e1ab2ce745ecf5fd86f7fbd367044650945eb9ea3c7bb7bf3730737981a1fecb6904bf9d552918c0b2b0259de119e35181c2f59413f9b1b249b804d25c81eba4b46a02ce212ce52131d455d4985134f320215189bf1d21d279c0b307ca630974e68b9a59863127fe0b7e452246ace41f529df08e0eddfe04384139e905edc9204fc45f49056778d62a3480c0b90d65b9b5db5e6694e2dc341ec441c3d4aebf1cd59b317c8016823b3e006fd3881ef2136c2eebbb9578bad625d0e167b3ad8a4da26b6fca91428ae41cd82a22f561174e9c08d353523cd2a28ab1ab10ea840a121898f06d57347ec236dc8c02e362066c972773c5fb237d58d57fadff9eb6b7c73a85a38bd4998992a640d7aad6ea7cb567452b7de2b1938de38c2e458d8479b6f9d4a9cac2d09fcbd045cda13a4ec3200da4619cb6024b354fa449e1e04afba83031669cddd73124ab90285d4a5899ac2cb764eccd624adc5e9e36276211991bfed675e3f01670c0ac55ac14106b0a52c97c933929e1fcacd34862b27b049f0cee0deea715206e353581763efc77909187377f8a453e63ae4ee73c141f7ab020bfd4555595a96037022ffab8b2b8c7b3ff6d5911090b99d67f22d33dadac792b45ae99be5eea133c52f0e31306a10f32b44c7c1af7f229cabcead8e1e34cc9af9f85a6a5ad39707c004ddbfb46060bc2bd28c32d34b53b023d60bd2ce04ccacd325bd3b6699dfa24978bd01fccf58e046f52b62b2c326864799d4939df39358e0a68f9e95c4e8df2e219c4137d4720fc97d11494d7ac1e1aef7c798ea86032122c3936c4a6bb1f6dc8e7eda9ebbb66d36c780f35bb47c9346b888835098f1ef681563abf33c6b70aa2a244e036404f840a41c58f8be1f6374ea585a7fc46b0a390542904b7ac730e126e0a69167f06d29d8b4e83aa353d090bcba1459c63dad6fa582947e4c5882e66589b2123f4219e304339533662c60dc3184fea609cf1bd3451b152d21e29e91e3dcfa7420096461c94d8daf941d4ad470680b2d98f57575b4ca0e67123207a87af012012c44225a2f472c1f56e6113433d149d49abd13aba0f15bcdad070a42eb232d68", + "head": "a4006d646174656b6579732d686561640101025820df125219708df84754ef61e8adcff1374e8a659f0bc3e780e68470b30f40d5150581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b657963617001010250a0da0425ca5ef886f0914641d9bb51c6037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 637, + "length_dkc": 1563, + "padded_length": 768, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "52648c20f05d0153597baf76920a45cd369994a8f174bff475033bd25a23431f", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "hooks": { + "author_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a303163623736316663303131356533383364353835666331396235393831663061613239363764653235626637326435656364613437653963623130363934640a", + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d2041", + "author_signature": "2223d3ebc89d0b420e039ceaa61cc386a9a88a534e5b10863ddc4e1d2b88d19ed15d15e366f7181e4e9342848c3af338941df63ee3ec9fa089475e683b141f04", + "seal_subject": "a2e4195efb306dc92650b8f7117195f84a02628d68d530a64c2c1003fd14f6b8", + "seal_token": "3082033506092a864886f70d010702a082032630820322020101310d300b06096086480165030402013060060b2a864886f70d0109100104a051044f304d02010106032a0304302f300b06096086480165030402010420cf4a35c086ff58ccf4f704ba0409bdae7f1a8b1857902b1c437feb2ee808a69a02012a180f32303233303832333135303932375aa08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420bb3e4781467a4c5c8cad4efc2079938a8bbea31f6240282a5d25bb0a90afd797300a06082a8648ce3d040302044630440220651ead69d4e58a0e05bbdacd81a5883c2737108025b7ee20522b8701f755cede0220760bb413b0204b93f9465794ba0f2e63dbb734fcd934fe1f4d87bec76c2e5fd4" + }, + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d6865616401010258200bafbfb695fbf67c5f561a157ec5db3e0352e88476fd4d44cc27909a1c88be950581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 32893, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F4", + "S4" + ], + "with": "portable" + }, + { + "area_len": 32768, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d6865616401010258200bafbfb695fbf67c5f561a157ec5db3e0352e88476fd4d44cc27909a1c88be950581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 32893, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F4", + "S4" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "signed with alg 1 and sealed", + "seed": "capsule writer signed with alg 1 and sealed", + "round": 1000, + "policy": "time_and_key", + "portable": true, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + }, + "sealer": {} + }, + "written": { + "capsule_id": "b746958665b74c4f913d46b37bdd75ae", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820dfc9b4a4c19a5980a43644ac03924840a00cdcfe786d8a84b51154533e0937490358208cd6591989d07a37825e8ab4010260b1b9344e4abce2a02dd70d0a7a07c412390648000000000000807d0702", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b65790101025021c42a7c3163ce2aa4fd055a2c2121a60350b746958665b74c4f913d46b37bdd75ae0466783235353139055820023e85928c4364e84f971986cd557e38c6bb78bbaa9119f38e99b9639bd30f1806a10058200cabc15945b4ace897c659607e5ef04901652f0e9e1e919065e4e68a5f88225a", + "head": "a4006d646174656b6579732d6865616401010258200bafbfb695fbf67c5f561a157ec5db3e0352e88476fd4d44cc27909a1c88be950581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b657963617001010250b746958665b74c4f913d46b37bdd75ae037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300401", + "length": 32893, + "length_dkc": 37281, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "0cabc15945b4ace897c659607e5ef04901652f0e9e1e919065e4e68a5f88225a", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "hooks": { + "seal_subject": "a22d0d4219d58749e5b872acfbeacd364ae2e1eb31731009277e9278d8bf1105", + "seal_token": "3082033606092a864886f70d010702a082032730820323020101310d300b06096086480165030402013060060b2a864886f70d0109100104a051044f304d02010106032a0304302f300b06096086480165030402010420b6b5ca836648d9e6cc10ffb0651067017b261be2c5476689c23b91ea97cea8e102012a180f32303233303832333135303932375aa08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201233082011f020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420493b06d3131049e8b08b20b18d48b141af14eb2921c9e5979cc591a316ea1590300a06082a8648ce3d04030204473045022022b44523e495f9381f799a569785a92521fd5d211f02f908f0d98ee1b8246c0e022100a7ae56c550b2ab41f5c33cdbe9170604cacce8cf96bd64be752da8440948d75c" + }, + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820426c772d4e6b16c0ee935041f677a8b7a0f5152d46bc695591d02fe0a87da3f40581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 32893, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S4" + ], + "with": "time" + } + ], + "recipe": { + "name": "sealed, without a signature", + "seed": "capsule writer sealed, without a signature", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "sealer": {} + }, + "written": { + "capsule_id": "cc3c3a0e571b96ddf70ad0869ac5a89f", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820b6e082fb309b695cb51115ee7446af795c6297042ffdcf5a49de57a1d7b0c4db0358201baff0057c82ee110f10d9f44e3b6a56eb6a94e3f163ef3c7c257730c59fa3aa0648000000000000807d0702", + "head": "a4006d646174656b6579732d686561640101025820426c772d4e6b16c0ee935041f677a8b7a0f5152d46bc695591d02fe0a87da3f40581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b657963617001010250cc3c3a0e571b96ddf70ad0869ac5a89f037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32893, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "076029dd390e5c23e31838356d72fba57b2dd93ae21a0f2eedf52f8baac86ffd", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "hooks": { + "cms_der": "30820e8206092a864886f70d010702a0820e7330820e6f020101310d300b0609608648016503040201300b06092a864886f70d010701a0820485308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e9130820306308201eea00302010202080ad004b9634ce59e300d06092a864886f70d01010b0500302e31163014060355040a130d446174654b65797320746573743114301206035504030c0b4c7569732047c3b36d657a301e170d3230303130313030303030305a170d3430303130313030303030305a302e31163014060355040a130d446174654b65797320746573743114301206035504030c0b4c7569732047c3b36d657a30820122300d06092a864886f70d01010105000382010f003082010a0282010100cd098bef678864c7241a3139b9615d0dc67c7116757b230dd46496bb2ae79a6b8ba575fb0da9e7176c8ee87d58ce45bfb81c81a7baeec70868fd7eeaea8b3014f97d32bbdd17866d456b55b64d7852406e7e36c17375865e075bedda9ff6d9154376eac17864ae346cebc17d152a5955a97cf460520d92384c2467e2a56af74e1de182b99c12f6abfb8662654aa62807da1488d203a18b9265552f4b2af4d3fea499d03dca4220a2e9ba3578f60b249e00b1720314f2bd3c1e3be6649cc77f235bf2dab2081e71a0f7352ad14113947ca52722f7a489f40b5ef440ff9c60566638b9b190b7c5d242bf433cb75b2cd7eb1e2ebf0bc1bf59d6c684639aa6c626810203010001a3283026300e0603551d0f0101ff04040302078030140603551d0e040d040b4c7569732047c3b36d657a300d06092a864886f70d01010b05000382010100aa2ba12dc3b1f785f3a90d2665805216607f2218d8cdeed5606c4da2cf3546ae5609b28014bab3eb89a2c7beea84b4f302c731cd8f5c1550a9e6f564c3ac9a26d4318deca828b664c08221a9ac84a8054766fe149bdd1b6315739d356f5a9589040116cff08dbcaf7670f7bd0d11fb573c003261dbbfc33c0ea562ca1d19ceeb498270c2fb1669c37a5c1c0be2046f571873078ff75f08a37474adaac31abef97179d356493a0ad5b9709046a69dfc099c9d55011c0b6b177ef2daf8426544441bb10bfbccab4d46ac949a5d0c76ec95a71121277d888ec6e9f1c841f2cfec449653b92168428c3461bb3f96266c383b7fa3922639a6f62eb9eaf7902defeece318209c33082047d0201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420807da2d8d4178b0c06eb1773301b712f926afba317fe5918e18bee09d719d7333037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d04030204463044022028fa5ba2f5925f179f0e2a8969e39d051bc909053eec0a3d41d901a1e9fd39f4022064dbe76d1635ea8f5b99155b577704649b69c5788488b96ba810cf66b7b10a65a18203533082034f060b2a864886f70d010910020e3182033e3082033a06092a864886f70d010702a082032b30820327020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b0609608648016503040201042029d55435aba7da8316a27465df387fef26d1738664b0d6d58f970b6ff9c7517902012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420b1336d9a04ce71380f18367e3bb9e94835f0f784d10cfb5a8d7e39f7b4179e9f300a06082a8648ce3d04030204463044022036ef36ba8c884ca2760cb0e8236f4022fa22799a83b4705a848b1109246f604f0220638b705cc871614d4d2e0cf0a48c398c6bb7286a51e54464ad8147c265abea543082053e020101303a302e31163014060355040a130d446174654b65797320746573743114301206035504030c0b4c7569732047c3b36d657a02080ad004b9634ce59e300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420807da2d8d4178b0c06eb1773301b712f926afba317fe5918e18bee09d719d7333037060b2a864886f70d010910022f31283026302430220420dd8dad5bfb2e4f8bacaa054ebfba5542d7b95fe4b82eba383b8cc1e7af03d18a300d06092a864886f70d010101050004820100004038b03c858fcd2de19da11a18ba41947a60b49e504e3fa2141b5332477523907477094fda3af34665310f19d4f6e4aabd3ecf90df3137fa2f70bccbea8de4b4121c70936097b6d832b8f326a3844fba6c2fc9b45876252fd4c869cc75c027b9c09a15db8b203aa1e57e3a08b1bd9c0e0c096c9cece2b0d742fe9b7905014e568aef61d0d5f744463ab99ce3f87b1b636a1f2bb3012ff2418e411af2d36e3c5172a4b21ba8950ac665b5fcb8067f27946d16fe308e65122fcfa5dadef11c7a0f81a72832feaf7e7bff6981c4471fdabebb9aabf92423ad471acd6f45d6c256eef20aea584dd359fc258504671fbbe4bf9fca17f04150679e30576e3ea04c89a182035430820350060b2a864886f70d010910020e3182033f3082033b06092a864886f70d010702a082032c30820328020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b06096086480165030402010420c4d9e87e3d7a2bb5ec7eaf38da6d6ea91d2077fd358118cb2d4a810841365af802012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201233082011f020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420bb52fc1ebcdbd155ed50373609482f7980ec9122d6830bc394172e466ce9d87e300a06082a8648ce3d04030204473045022100c20625576001f33898b3a8d0e910beaa4738577e7a09866a49d584337405dc9502202fa97d3ea4bf7e76ae658c291dfbff657fa57e06b3aabc5c5ae2a03b3a39fa17", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a623838396338663830336264643534316131653030656130393131336638363531363131393263393336623133386264383138633230643534343130383264360a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57", + "dd8dad5bfb2e4f8bacaa054ebfba5542d7b95fe4b82eba383b8cc1e7af03d18a" + ] + }, + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d6865616401010258202e8d042ef05295d762ee7f05406bca595235d4abc939680b1a53f5c469d50b8d0581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 32893, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F6", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "signed with alg 2 by two signers, each sealed", + "seed": "capsule writer signed with alg 2 by two signers, each sealed", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "cms": { + "signers": [ + "Ana López", + "Luis Gómez" + ] + } + }, + "written": { + "capsule_id": "20d969c2d2860c6831d1b7dbbeed2647", + "control": "a60070646174656b6579732d636f6e74726f6c010302582092eda2c99fa3f998e6befabfbbe93634b0e09afa17cfdc4aae7ae9dfc4b1171c035820621c720512a2a31d09bb46df6d2f71b4d368e4d4b368b242d0451352b9b855300648000000000000807d0702", + "head": "a4006d646174656b6579732d6865616401010258202e8d042ef05295d762ee7f05406bca595235d4abc939680b1a53f5c469d50b8d0581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b65796361700101025020d969c2d2860c6831d1b7dbbeed2647037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32893, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "a327e769ab8ddd69ae4ea61f97a49e294e271cf775d1894c06f76cdeefac6be5", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "hooks": { + "cms_der": "3082a64706092a864886f70d010702a082a6383082a634020101310d300b0609608648016503040201300b06092a864886f70d010701a082017b308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e913182a4923082a48e0201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d010904312204206d75c3b285e78382ae96ba9fd6bbc8ebdc858739cc55f08c4536bdb352d306b93037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d04030204453043021f0be1c680fe1fa4952c376c604e005cf7363092921551ca7cc6381b7fef7fa10220031dc807e4de9638680c28931bf858cd9ac27d5efa21c6c8aad6c0ab33ffaab8a182a3653082034f060b2a864886f70d010910020e3182033e3082033a06092a864886f70d010702a082032b30820327020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b0609608648016503040201042013b27c6cbe063190ec4979c404fddfc17ec87fb3d3fb634fd0670cbf7c2c5a3a02012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420823e7593f8ac1de18dbb6907f42a79f6064eb0e010115758053ba356c417469a300a06082a8648ce3d04030204463044022047883377eae387642f1d257e55449f5b19107002c65f78bd0de1b8223aa5fa480220427d4c8833f2f6b692b5ce543281f328de45ee504fe83b136ac40fd5b49602913082a00e06042a0304053182a0040482a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a623262326262643962363836636533626461653432386266356366636138363338383435303935323566623136356433633162346531626639643735356137340a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "opens": [ + { + "area_len": 65536, + "files": [ + { + "path": "nota.txt", + "sha256": "0397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "size": 6 + } + ], + "head": "a4006d646174656b6579732d686561640101025820bee0e80fd82c2b05eb890eb1cefa51d3acacd261de1830032c801148b8f0111c0581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "length": 65661, + "padded_length": 67584, + "result": "ok", + "verdicts": [ + "F6", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "a signature of 40 KiB with LargeArea: the area of 64 KiB", + "seed": "capsule writer a signature of 40 KiB with LargeArea: the area of 64 KiB", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "Hola.\n" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "junk": 40960 + }, + "large_area": true + }, + "written": { + "capsule_id": "32f9051285da1a70c174ee90dbd3a072", + "control": "a60070646174656b6579732d636f6e74726f6c01030258208ff51a1862a7a73ad026e665835bc9a12ec13b581868fb2a6caa0f55d37fae49035820c4a0e1925bff0c1f0270fa56498756be2b11de030ae9d084c9ee4e557d4062170648000000000001007d0702", + "head": "a4006d646174656b6579732d686561640101025820bee0e80fd82c2b05eb890eb1cefa51d3acacd261de1830032c801148b8f0111c0581a500686e6f74612e7478740106020003060458200397fe19bf28bbbef703f292f55d0cc96e9f535b6db7944504bde08c3709d685", + "header": "a5006a646174656b65796361700101025032f9051285da1a70c174ee90dbd3a072037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 65661, + "length_dkc": 68395, + "padded_length": 67584, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "fe051ab028474319e5cec7f1609c394dd9f96aee530e10a2195ea1c29255fc3d", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "nota.txt", + "sha256": "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", + "size": 1 + } + ], + "head": "a4006d646174656b6579732d686561640101025820b1d412a4b8de2ce5438c26cd8d59bc081c865932b80cf1cb8454d1d130b5c6820581a500686e6f74612e7478740101020003010458202d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", + "length": 32888, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "LargeArea without a signature keeps the common area", + "seed": "capsule writer LargeArea without a signature keeps the common area", + "round": 1000, + "files": [ + { + "path": "nota.txt", + "text": "x" + } + ], + "large_area": true + }, + "written": { + "capsule_id": "fa8128f46f2f97d3f64e79d60dc94dbe", + "control": "a60070646174656b6579732d636f6e74726f6c01030258209c1447f597d6b038311237fa92f7e8df9a0ce9301ff4b3b3bccd3f858e9a2aba0358207b8e0cc9bac13b3e2ae89a0a29fb7ed0cbefeeecbdaab0e1b35579c7a8ed1ff1064800000000000080780702", + "head": "a4006d646174656b6579732d686561640101025820b1d412a4b8de2ce5438c26cd8d59bc081c865932b80cf1cb8454d1d130b5c6820581a500686e6f74612e7478740101020003010458202d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881", + "header": "a5006a646174656b657963617001010250fa8128f46f2f97d3f64e79d60dc94dbe037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32888, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "ddc5833d7f12d51abdf1a8c29a1bf993478a9939301121e5ee3e7f10c6d6f584", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268a", + "size": 65536 + }, + { + "path": "b", + "sha256": "89536955cae40b0f50210b618fbd784556c02ab5e746f60937ded62f35c58611", + "size": 98092 + } + ], + "head": "a4006d646174656b6579732d686561640101025820989568b371dabd61f2d34006be015190c90aa2f176514b0e82587c2997cc12920582a5006161011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268aa5006162011a00017f2c021a00010000031a00027f2c04582089536955cae40b0f50210b618fbd784556c02ab5e746f60937ded62f35c58611", + "length": 196573, + "padded_length": 196608, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "content of whole chunks", + "seed": "capsule writer content of whole chunks", + "round": 1000, + "padding": 1, + "files": [ + { + "path": "a", + "pattern": 65536 + }, + { + "path": "b", + "pattern": 98092 + } + ] + }, + "written": { + "capsule_id": "94f3d1aa55e26f1aeeaa93a0059ef45d", + "control": "a60070646174656b6579732d636f6e74726f6c01030258207634fd5875450f17eb3ab72174c12fd7cfd2ef10aa788ebba39542f4639b31ba035820cb16b9570327a0a71a695aa2fd74176dbbf6fd90946cb568f4cb9e1e9c274e320648000000000002ffdd0701", + "head": "a4006d646174656b6579732d686561640101025820989568b371dabd61f2d34006be015190c90aa2f176514b0e82587c2997cc12920582a5006161011a000100000200031a00010000045820ef4636928161808e87035fa51983821677527ccd9661991c5d0126a778b2268aa5006162011a00017f2c021a00010000031a00027f2c04582089536955cae40b0f50210b618fbd784556c02ab5e746f60937ded62f35c58611", + "header": "a5006a646174656b65796361700101025094f3d1aa55e26f1aeeaa93a0059ef45d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 196573, + "length_dkc": 197435, + "padded_length": 196608, + "padding": 1, + "reencoded": true, + "round": 1000, + "sha256": "e86df969c008766d42779ba49666f17d58d165c22f060e839e4ddcb3f7613a14", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [ + 32, + 32, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a5006d646174656b6579732d68656164010102582027a94e826e71b75ad846ced5632cb6875dd21bbe0a5a4678fdf6c49c960bbf150581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0781a3006d6f72672e6578616d706c652e6e0101024178", + "length": 32904, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "words" + }, + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a5006d646174656b6579732d68656164010102582027a94e826e71b75ad846ced5632cb6875dd21bbe0a5a4678fdf6c49c960bbf150581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0781a3006d6f72672e6578616d706c652e6e0101024178", + "length": 32904, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "portable" + }, + { + "area_len": 32768, + "files": [ + { + "path": "a", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a5006d646174656b6579732d68656164010102582027a94e826e71b75ad846ced5632cb6875dd21bbe0a5a4678fdf6c49c960bbf150581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0781a3006d6f72672e6578616d706c652e6e0101024178", + "length": 32904, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "all" + }, + { + "result": "ERR_ACCESS_REQUIRED", + "step": 9, + "with": "none" + } + ], + "recipe": { + "name": "unknown extensions of the application in every array", + "seed": "capsule writer unknown extensions of the application in every array", + "round": 1000, + "policy": "time_and_key", + "portable": true, + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "a", + "text": "a" + } + ], + "critical": [ + { + "id": "z", + "version": 4294967295 + } + ], + "head_noncritical": [ + { + "id": "org.example.n", + "version": 1, + "data": "78" + } + ] + }, + "written": { + "capsule_id": "76dad45763d4822174685413958ceb0d", + "control": "a60070646174656b6579732d636f6e74726f6c0103025820a964c6686e336d0ee757b17f53aed0137ab68d9e813565bb14e3a7e5f1619fdf0358208034e1a74008671e7bbcba137d88c704c232926f24fd724d24bc028439b52823064800000000000080880702", + "dkk": "444b4b31010000000000008ca70073646174656b6579732d6163636573732d6b657901010250930ae6e4d9a4277d5a8e715f2edde714035076dad45763d4822174685413958ceb0d0466783235353139055820e59da5572d6608734f372b23dd388be335c959bd6fd07554627fd5632113db6306a100582002f2163724b699acbe8575863e4ee45a06f3eb8d81da817da094d65a1c3109b5", + "head": "a5006d646174656b6579732d68656164010102582027a94e826e71b75ad846ced5632cb6875dd21bbe0a5a4678fdf6c49c960bbf150581a5006161010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb0781a3006d6f72672e6578616d706c652e6e0101024178", + "header": "a6006a646174656b65796361700101025076dad45763d4822174685413958ceb0d037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d483004010581a200617a011affffffff", + "length": 32904, + "length_dkc": 37293, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "02f2163724b699acbe8575863e4ee45a06f3eb8d81da817da094d65a1c3109b5", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [], + "error": { + "text": "capsule: EncryptOptions.TestAreaLen is for generators of test vectors: it needs TestVectors (spec §62.1 rule 13)", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen without TestVectors", + "seed": "capsule writer TestAreaLen without TestVectors", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_area_len": 512, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 1000 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen not a multiple of 512", + "seed": "capsule writer TestAreaLen not a multiple of 512", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_vectors": true, + "test_area_len": 1000, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 66048 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen above the largest", + "seed": "capsule writer TestAreaLen above the largest", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "test_vectors": true, + "test_area_len": 66048, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a test area of 512 bytes: a multiple of 512 up to 65536, without LargeArea", + "written": 0 + }, + "recipe": { + "name": "TestAreaLen with LargeArea", + "seed": "capsule writer TestAreaLen with LargeArea", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "large_area": true, + "test_vectors": true, + "test_area_len": 512, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: AuthorKey and CMSSigner are exclusive: a capsule has one signature", + "written": 0 + }, + "recipe": { + "name": "AuthorKey and CMSSigner", + "seed": "capsule writer AuthorKey and CMSSigner", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + }, + "cms": { + "signers": [ + "Ana López" + ] + }, + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: with CMSSigner the seal goes inside each signature (spec §29.10): Sealer must be nil", + "written": 0 + }, + "recipe": { + "name": "CMSSigner and Sealer", + "seed": "capsule writer CMSSigner and Sealer", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ] + }, + "sealer": {}, + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: a public note that breaks the rules of text: text: control U+000A in the declared author: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "a public note with a line feed", + "seed": "capsule writer a public note with a line feed", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "note": "dos\nlíneas", + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: a public note of 1025 bytes, not 1 to 1024: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "a public note of 1025 bytes", + "seed": "capsule writer a public note of 1025 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "note": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.note version 1 is not registered for noncritical_extensions of CONTROL_CBOR: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.note in CONTROL_CBOR", + "seed": "capsule writer datekeys.note in CONTROL_CBOR", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "control_noncritical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "686f6c61" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.capsule version 1 is not registered for noncritical_extensions of PUBLIC_HEADER: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.capsule in PUBLIC_HEADER", + "seed": "capsule writer datekeys.capsule in PUBLIC_HEADER", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.capsule", + "version": 1, + "data": "78" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: extension: datekeys.note version 1: a public note that breaks the rules of text: text: control U+0009 in the declared author: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "datekeys.note with invalid data", + "seed": "capsule writer datekeys.note with invalid data", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "610962" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_EXTENSION_DATA_INVALID", + "text": "capsule: extension: datekeys.note version 1: a public note without data: ERR_EXTENSION_DATA_INVALID", + "written": 0 + }, + "recipe": { + "name": "datekeys.note without data", + "seed": "capsule writer datekeys.note without data", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "noncritical": [ + { + "id": "datekeys.note", + "version": 1 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: extension: datekeys.note version 1 is not registered for critical_extensions of head: an encoder must not write it there (spec §72)", + "written": 0 + }, + "recipe": { + "name": "datekeys.note in the critical array of the head", + "seed": "capsule writer datekeys.note in the critical array of the head", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "head_critical": [ + { + "id": "datekeys.note", + "version": 1, + "data": "686f6c61" + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32 + ], + "error": { + "code": "ERR_NON_CANONICAL_CBOR", + "text": "extension org.example.x: both critical and noncritical: ERR_NON_CANONICAL_CBOR", + "written": 0 + }, + "recipe": { + "name": "an extension in both arrays", + "seed": "capsule writer an extension in both arrays", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "critical": [ + { + "id": "org.example.x", + "version": 1, + "data": "61" + } + ], + "noncritical": [ + { + "id": "org.example.x", + "version": 2, + "data": "62" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "code": "ERR_PROFILE_MISMATCH", + "text": "profile datekeys:quicknet:v1: parameters hash to chain 8df9eb0df64b4edab143ea089f8247af191950666dd271a99165943727a2c193, not the pinned 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH", + "written": 0 + }, + "recipe": { + "name": "a profile whose chain hash does not match", + "seed": "capsule writer a profile whose chain hash does not match", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "profile": "genesis_plus_one", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: unlock time 2023-08-23T15:59:24Z is not in the future", + "written": 0 + }, + "recipe": { + "name": "an instant that is now", + "seed": "capsule writer an instant that is now", + "round": 1000, + "now": "2023-08-23T15:59:24Z", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [ + { + "path": "a.txt", + "sha256": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "size": 1 + } + ], + "head": "a4006d646174656b6579732d686561640101025820bcf01c5c1303e938818c0ae1b8256371c41c57a58e263c44a94982da3425cc4c0581a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "length": 32885, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "an instant after now by one nanosecond", + "seed": "capsule writer an instant after now by one nanosecond", + "round": 1000, + "now": "2023-08-23T15:59:23.999999999Z", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ] + }, + "written": { + "capsule_id": "31db207c8ca1f8cb62656190171167f4", + "control": "a60070646174656b6579732d636f6e74726f6c01030258206d90f9a89729fa0f6afd23bb4a71b265b0ea90230d7cf8049ebe15d72b702794035820ffddb284da557aec2596ad0cddcaca4ca0f436c2b2f0033f55f4c377f3feb66e064800000000000080750702", + "head": "a4006d646174656b6579732d686561640101025820bcf01c5c1303e938818c0ae1b8256371c41c57a58e263c44a94982da3425cc4c0581a50065612e747874010102000301045820ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "header": "a5006a646174656b65796361700101025031db207c8ca1f8cb62656190171167f4037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32885, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "1ea1521ca0642b269d4e83fc45a6eaedfa644cb5ab7afa5bf4485aa3586fa426", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [], + "error": { + "code": "ERR_DATEKEY_INVALID", + "text": "datekey: 2023-08-23T15:09:22Z is before the genesis of datekeys:quicknet:v1: ERR_DATEKEY_INVALID", + "written": 0 + }, + "recipe": { + "name": "an instant before the genesis", + "seed": "capsule writer an instant before the genesis", + "round": 1, + "unlock_ns": -5000000000, + "now": "2023-08-23T14:00:00Z", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with a recipient", + "seed": "capsule writer time_only with a recipient", + "round": 1000, + "identities": [ + "holder 0" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with a portable key", + "seed": "capsule writer time_only with a portable key", + "round": 1000, + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_only takes no recipients, no portable key and no key of words", + "written": 0 + }, + "recipe": { + "name": "time_only with words", + "seed": "capsule writer time_only with words", + "round": 1000, + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key needs at least one recipient, a portable key or a key of words", + "written": 0 + }, + "recipe": { + "name": "time_and_key without credentials", + "seed": "capsule writer time_and_key without credentials", + "round": 1000, + "policy": "time_and_key", + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key takes at most 16 credentials, recipients, portable key and key of words together; 17 given", + "written": 0 + }, + "recipe": { + "name": "seventeen credentials", + "seed": "capsule writer seventeen credentials", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14", + "holder 15" + ], + "portable": true, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: time_and_key takes at most 16 credentials, recipients, portable key and key of words together; 17 given", + "written": 0 + }, + "recipe": { + "name": "seventeen credentials with words", + "seed": "capsule writer seventeen credentials with words", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1", + "holder 2", + "holder 3", + "holder 4", + "holder 5", + "holder 6", + "holder 7", + "holder 8", + "holder 9", + "holder 10", + "holder 11", + "holder 12", + "holder 13", + "holder 14", + "holder 15" + ], + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 1: agewrap: recipient age1uqy63xjx7cay73372ths7sv82p8fm0st0ya9p5gkufdhyds2mjtqxx3uwd is not canonical: bit 255 is set", + "written": 0 + }, + "recipe": { + "name": "a recipient with bit 255 set", + "seed": "capsule writer a recipient with bit 255 set", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0" + ], + "raw_recipients": [ + "e009a89a46f63a4f463e52ef0f4187504e9dbe0b793a50d116e25b72360adc96" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 0: agewrap: recipient age1ahlllllllllllllllllllllllllllllllllllllllllllllllalsn46ayy is not canonical: u is not below 2^255 - 19", + "written": 0 + }, + "recipe": { + "name": "a recipient of u = p", + "seed": "capsule writer a recipient of u = p", + "round": 1000, + "policy": "time_and_key", + "raw_recipients": [ + "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient 0: agewrap: recipient age1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq5cu47z is a point of low order: the shared secret would be zero", + "written": 0 + }, + "recipe": { + "name": "a recipient of low order", + "seed": "capsule writer a recipient of low order", + "round": 1000, + "policy": "time_and_key", + "raw_recipients": [ + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: recipient age1guzknzsfgrc03xxa9v9948cmq3jnserntrnzhu8a26c2xvuxwc4sjm3nvt listed twice; INNER_ACCESS_AGE holds one stanza per recipient", + "written": 0 + }, + "recipe": { + "name": "a recipient listed twice", + "seed": "capsule writer a recipient listed twice", + "round": 1000, + "policy": "time_and_key", + "identities": [ + "holder 0", + "holder 1" + ], + "raw_recipients": [ + "4705698a0940f0f898dd2b0a5a9f1b046538647358e62bf0fd56b0a33386762b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: a key of words needs at least 6 different words of 3 or more letters, not 5", + "written": 0 + }, + "recipe": { + "name": "five words", + "seed": "capsule writer five words", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: the words hold the control character U+0085", + "written": 0 + }, + "recipe": { + "name": "words with a control character", + "seed": "capsule writer words with a control character", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince", + "a…b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: wordkey: the words hold the invisible character U+200B", + "written": 0 + }, + "recipe": { + "name": "words with an invisible character", + "seed": "capsule writer words with an invisible character", + "round": 1000, + "policy": "time_and_key", + "words": [ + "faro", + "nube", + "trigo", + "menta", + "barco", + "lince", + "a​b" + ], + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: a format 3 capsule holds at least one file or a comment (spec §62.1 rule 14)", + "written": 0 + }, + "recipe": { + "name": "no file and no comment", + "seed": "capsule writer no file and no comment", + "round": 1000, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "opens": [ + { + "area_len": 32768, + "files": [], + "head": "a4006d646174656b6579732d686561640101025820d9559670b81b22c8adff0314021d6e75df632850f4b2823923c5e0b210a2aafa03610a", + "length": 32836, + "padded_length": 34816, + "result": "ok", + "verdicts": [ + "F0", + "S0" + ], + "with": "time" + } + ], + "recipe": { + "name": "a comment that is a lone CR", + "seed": "capsule writer a comment that is a lone CR", + "round": 1000, + "comment": "\r", + "node": true + }, + "written": { + "capsule_id": "ca9bab5e9d61e9f6237a06d195877ee4", + "control": "a60070646174656b6579732d636f6e74726f6c01030258201bd0a530dcf826eb01e21b5feb2740d0edc60f4e0736911d36b9e4dac358da900358207513fe888a922d4f95c45b4d8270aaf6b678813eb09d751789889a42c2e66ee4064800000000000080440702", + "head": "a4006d646174656b6579732d686561640101025820d9559670b81b22c8adff0314021d6e75df632850f4b2823923c5e0b210a2aafa03610a", + "header": "a5006a646174656b657963617001010250ca9bab5e9d61e9f6237a06d195877ee4037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d48300400", + "length": 32836, + "length_dkc": 35611, + "padded_length": 34816, + "padding": 2, + "reencoded": true, + "round": 1000, + "sha256": "0c9956dfff60781b19df26b5a37883c83dd1a632d9dc258c1db613bef858a51b", + "unlock_at": "2023-08-23T15:59:24Z" + } + }, + { + "draws": [], + "error": { + "text": "capsule: comment: text: control U+0001", + "written": 0 + }, + "recipe": { + "name": "a comment with a control character", + "seed": "capsule writer a comment with a control character", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "comment": "hola\u0001", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: comment: 16385 bytes, more than 16384", + "written": 0 + }, + "recipe": { + "name": "a comment of 16385 bytes", + "seed": "capsule writer a comment of 16385 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "comment": "ñññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññña", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: declared author: text: control U+000A in the declared author", + "written": 0 + }, + "recipe": { + "name": "a declared author with a line feed", + "seed": "capsule writer a declared author with a line feed", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author": "Ana\nLópez", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: declared author: 257 bytes, more than 256", + "written": 0 + }, + "recipe": { + "name": "a declared author of 257 bytes", + "seed": "capsule writer a declared author of 257 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"b\" given twice", + "written": 0 + }, + "recipe": { + "name": "a path given twice", + "seed": "capsule writer a path given twice", + "round": 1000, + "files": [ + { + "path": "b", + "text": "1" + }, + { + "path": "a", + "text": "2" + }, + { + "path": "b", + "text": "3" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"\": R1: 0 bytes, not 1 to 1024", + "written": 0 + }, + "recipe": { + "name": "an empty path", + "seed": "capsule writer an empty path", + "round": 1000, + "files": [ + { + "path": "", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\": R1: 1025 bytes, not 1 to 1024", + "written": 0 + }, + "recipe": { + "name": "a path of 1025 bytes", + "seed": "capsule writer a path of 1025 bytes", + "round": 1000, + "files": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"/etc/passwd\": R2: segment 1 is empty", + "written": 0 + }, + "recipe": { + "name": "an absolute path", + "seed": "capsule writer an absolute path", + "round": 1000, + "files": [ + { + "path": "/etc/passwd", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"a/../b\": R3: segment 2: the segment is two dots", + "written": 0 + }, + "recipe": { + "name": "a path with ..", + "seed": "capsule writer a path with ..", + "round": 1000, + "files": [ + { + "path": "a/../b", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: path \"docs/CON.txt\": R6: segment 2: CON is a reserved device name", + "written": 0 + }, + "recipe": { + "name": "a path with a reserved name", + "seed": "capsule writer a path with a reserved name", + "round": 1000, + "files": [ + { + "path": "docs/CON.txt", + "text": "1" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: paths \"a\" and \"a/b\": R7: path 2 makes a file of path 1 a folder, or the reverse, in segment 1", + "written": 0 + }, + "recipe": { + "name": "a file that is a folder too", + "seed": "capsule writer a file that is a folder too", + "round": 1000, + "files": [ + { + "path": "a/b", + "text": "1" + }, + { + "path": "a", + "text": "2" + }, + { + "path": "c", + "text": "3" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: paths \"x/AÑO.txt\" and \"x/Año.txt\": R7: path 2 collides with path 1 in segment 2", + "written": 0 + }, + "recipe": { + "name": "two paths that fold to the same key", + "seed": "capsule writer two paths that fold to the same key", + "round": 1000, + "files": [ + { + "path": "x/Año.txt", + "text": "1" + }, + { + "path": "x/AÑO.txt", + "text": "2" + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: file \"a\": negative size -1", + "written": 0 + }, + "recipe": { + "name": "a negative size", + "seed": "capsule writer a negative size", + "round": 1000, + "files": [ + { + "path": "a", + "text": "", + "size": -1 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: the files add up to more than 8936830510563328 bytes, the maximum of L", + "written": 0 + }, + "recipe": { + "name": "files beyond L_MAX", + "seed": "capsule writer files beyond L_MAX", + "round": 1000, + "files": [ + { + "path": "a", + "text": "a" + }, + { + "path": "b", + "text": "", + "size": 8936830510563328 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: content of 8936830510596124 bytes exceeds L_MAX = 8936830510563328", + "written": 0 + }, + "recipe": { + "name": "L beyond L_MAX", + "seed": "capsule writer L beyond L_MAX", + "round": 1000, + "files": [ + { + "path": "b", + "text": "", + "size": 8936830510563228 + } + ], + "node": true + } + }, + { + "draws": [], + "error": { + "text": "capsule: 65536 files, more than 65535", + "written": 0 + }, + "recipe": { + "name": "65536 files", + "seed": "capsule writer 65536 files", + "round": 1000, + "many_files": 65536 + } + }, + { + "draws": [], + "error": { + "text": "capsule: file \"b.bin\": the file is gone", + "written": 0 + }, + "recipe": { + "name": "a source that fails: open1", + "seed": "capsule writer a source that fails: open1", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "open1" + } + ] + } + }, + { + "draws": [], + "error": { + "text": "capsule: file \"b.bin\": 99999 bytes, not its size of 100000", + "written": 0 + }, + "recipe": { + "name": "a source that fails: short1", + "seed": "capsule writer a source that fails: short1", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "short1" + } + ] + } + }, + { + "draws": [], + "error": { + "text": "capsule: file \"b.bin\": more than its size of 100000 bytes", + "written": 0 + }, + "recipe": { + "name": "a source that fails: long1", + "seed": "capsule writer a source that fails: long1", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "long1" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"b.bin\": the file is gone", + "written": 779 + }, + "recipe": { + "name": "a source that fails: open2", + "seed": "capsule writer a source that fails: open2", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "open2" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"b.bin\" changed after its first reading: 99999 bytes, not its size of 100000", + "written": 131883 + }, + "recipe": { + "name": "a source that fails: short2", + "seed": "capsule writer a source that fails: short2", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "short2" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"b.bin\" changed after its first reading: more than its size of 100000 bytes", + "written": 131883 + }, + "recipe": { + "name": "a source that fails: long2", + "seed": "capsule writer a source that fails: long2", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "long2" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"b.bin\" changed after its first reading: its SHA-256 is another", + "written": 131883 + }, + "recipe": { + "name": "a source that fails: change2", + "seed": "capsule writer a source that fails: change2", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "change2" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"b.bin\": the disk failed", + "written": 66331 + }, + "recipe": { + "name": "a source that fails: read2", + "seed": "capsule writer a source that fails: read2", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + }, + { + "path": "b.bin", + "pattern": 100000, + "fault": "read2" + } + ] + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 32, + 16 + ], + "error": { + "text": "capsule: file \"a\" changed after its first reading: its SHA-256 is another", + "written": 779 + }, + "recipe": { + "name": "a source that changes in a small file", + "seed": "capsule writer a source that changes in a small file", + "round": 1000, + "files": [ + { + "path": "a", + "text": "abc", + "fault": "change2" + } + ], + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F2 and S0 in this security area, not F4 and S0", + "written": 0 + }, + "hooks": { + "author_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a616463663963313461323365383939656134353232623161633833393134386531613239386662303263346530316631663639356638333334626234663238660a", + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d2041", + "author_signature": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "recipe": { + "name": "an author key whose signature does not verify", + "seed": "capsule writer an author key whose signature does not verify", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", + "bad": "zero_signature" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: the author key is 31 bytes, not 32", + "written": 0 + }, + "hooks": { + "author_public": "0b47823e71095dd59be78ac271c576ef389f87b64561ab07cf9a4ebcd02d20" + }, + "recipe": { + "name": "an author key of 31 bytes", + "seed": "capsule writer an author key of 31 bytes", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "author_key": { + "seed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", + "bad": "short_key" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F5 and S0 in this security area, not F6 and S0 (f14a82da948db1494824b3cf82cee1116f03f511ed208a7240351302e8502070: absent)", + "written": 0 + }, + "hooks": { + "cms_der": "3082063606092a864886f70d010702a082062730820623020101310d300b0609608648016503040201300b06092a864886f70d010701a082017b308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e91318204813082047d0201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420ec392b07ae642aafc88196c25e7c9662cfcb70c887ab1a2ebbf85026d01e4c003037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d04030204463044022051088089e387cfbedbdfb26efdbd62fb0cd4530cc5825011093ac8a67ba2fddd0220278ba32b4ef3a63a4c979744a90ec32d4b90b56bfd30a58b69deb6ef7978c9eaa18203533082034f060b2a864886f70d010910020e3182033e3082033a06092a864886f70d010702a082032b30820327020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b060960864801650304020104209356c327de3d69c69f1a0c6511ec3b82342eb0056103ca97457059e0fba5bd2e02012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d01090431220420e3967a31ddadf486742c9adcd38c53286e441afe690c9846ac785b2e4b86108f300a06082a8648ce3d04030204463044022012d0e4758200af7def352cac3b84b2b1ade1ed866db28be94e8b9aa20a03e8570220223e22628989ea22453b4ac7cb9df75784f0b0e68e2da08dd43078cf8ce7bfe9", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a643936653231353138333061623932346234386537633838393262316362613030343234613166656536333935663566323564353335643864366434663139320a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57", + "f14a82da948db1494824b3cf82cee1116f03f511ed208a7240351302e8502070" + ] + }, + "recipe": { + "name": "a CMS signature that lacks a required signer", + "seed": "capsule writer a CMS signature that lacks a required signer", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "extra": "Falta" + } + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F5 and S0 in this security area, not F6 and S0 (Ana López: without seal)", + "written": 0 + }, + "hooks": { + "cms_der": "308202e106092a864886f70d010702a08202d2308202ce020101310d300b0609608648016503040201300b06092a864886f70d010701a082017b308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e913182012c308201280201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420f3d58d66b06cb3c8c91e901a13f38707cf1312f86fe09141e9adf86085c2bdb73037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d04030204483046022100b3e70345014731716a61833f361f0e10d8c97cc8c031b4510bc9fe794dbe7c23022100eb54ad83fa25a5a8abb024e510951db38b2b32dd2db9daa49becf7872893ab33", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a396430643732353832653763313833643831316435343134396539306132636239366334626638623566376234653662303134306233623233366166313538350a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signature without seals", + "seed": "capsule writer a CMS signature without seals", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "unsealed": true + } + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: SECURITY_CBOR of 42644 bytes does not fit in the area of 32768 bytes: LargeArea lets the writer widen it to 65536", + "written": 0 + }, + "hooks": { + "cms_der": "3082a64906092a864886f70d010702a082a63a3082a636020101310d300b0609608648016503040201300b06092a864886f70d010701a082017b308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e913182a4943082a4900201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420ae45d4c4f4f02a748762ab861b3fade40cc1cad38d5cb42f26e7fd86907069d53037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d04030204473045022100e5a3202f25bb7bfea84b187ac61e881bfd7d520a2769c25197e223d9d687782b02203373f7daf75efde0196a3a051b4ca37ca80393921379f26a9ad053bea4c10491a182a3653082034f060b2a864886f70d010910020e3182033e3082033a06092a864886f70d010702a082032b30820327020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b060960864801650304020104209af1e0c6458b49cc48015418c72330d810f539e9f74ffa805cc5d3274aa7eedb02012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d0109043122042010d4f9b2d9f88d3c4e73359f372400f292dc886d4235765122fea6f29d146507300a06082a8648ce3d04030204463044022012b21412dd85b97def61ee345288f2c94f6d6c456cb2f169765a6411e0d3e35d02204efedb465c316fb04822dfa15119260d6b515307e463e5bb43776eea8b7dfdc63082a00e06042a0304053182a0040482a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a393963646365316535633333633765613134353134643261333937313062636139313434313061313063386530623766376331623539333861666561633166330a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signature of 40 KiB without LargeArea", + "seed": "capsule writer a CMS signature of 40 KiB without LargeArea", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "junk": 40960 + } + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: SECURITY_CBOR of 1665 bytes does not fit in the area of 512 bytes: LargeArea lets the writer widen it to 65536", + "written": 0 + }, + "hooks": { + "cms_der": "3082063606092a864886f70d010702a082062730820623020101310d300b0609608648016503040201300b06092a864886f70d010701a082017b308201773082011da00302010202080a2d17d0344c4223300a06082a8648ce3d040302302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a301e170d3230303130313030303030305a170d3430303130313030303030305a302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a3059301306072a8648ce3d020106082a8648ce3d030107034200045d675bbeb635e0726c75605f78e67a0a252c3c79f27b2f8ed9933fdae98893ecbe0a8970f8efd6adfb897f98cf2b493b3f8dbb4d50ba5c5e2d5fa65eda82bc7ca3273025300e0603551d0f0101ff04040302078030130603551d0e040c040a416e61204cc3b370657a300a06082a8648ce3d040302034800304502202b6d1a4052c04638cd70f7cbf1cae6272ceba5b44eb936adc3514aac5e0210db022100bfc3baf1635dec527acd3469c46df24ce66b3e5e10e4efd5b66f31250bd79e91318204813082047d0201013039302d31163014060355040a130d446174654b65797320746573743113301106035504030c0a416e61204cc3b370657a02080a2d17d0344c4223300b0609608648016503040201a08184301806092a864886f70d010903310b06092a864886f70d010701302f06092a864886f70d01090431220420b68d439ef3bc4ea94b115865bacb40f491489a867636c077ac25c3afca85d43d3037060b2a864886f70d010910022f3128302630243022042018c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57300a06082a8648ce3d0403020446304402203b6ee614d6a650e1baf9bb78f9bbe5541363a46e1ad194e2a606b6075020eb52022070229d07b72adcf89b4b46c687acc81e59c5f33883fa1b7fc27689c732aacdc8a18203533082034f060b2a864886f70d010910020e3182033e3082033a06092a864886f70d010702a082032b30820327020101310d300b06096086480165030402013065060b2a864886f70d0109100104a0560454305202010106032a0304302f300b0609608648016503040201042024d19f2eaa96efcfe00cb0510d2949fb8f067b730cd588b0aa93c748b1c118a302012a180f32303233303832333135303932375a3003020101a08201843082018030820126a00302010202082a6073f88125be7e300a06082a8648ce3d040302303031163014060355040a130d446174654b6579732074657374311630140603550403130d54534120646520707275656261301e170d3230303130313030303030305a170d3430303130313030303030305a303031163014060355040a130d446174654b6579732074657374311630140603550403130d545341206465207072756562613059301306072a8648ce3d020106082a8648ce3d03010703420004bb353efd3524a724cb4bbc6a153926339bf42c0b522167f986e72f75fb41f2343161bb09bf01088ee935d13b573d9c389859e6ee5f28f5a01341398939460e76a32a3028300e0603551d0f0101ff04040302078030160603551d0e040f040d54534120646520707275656261300a06082a8648ce3d0403020348003045022100db5ffa2d53a7d2be891153befae33ee9404c8d669bbf0f298394171f722198f30220092f78406c04f9623c5e4ac1d4342fdbdd502e4e6d4e4beeab0d2d4eb2a63dfa318201223082011e020101303c303031163014060355040a130d446174654b6579732074657374311630140603550403130d5453412064652070727565626102082a6073f88125be7e300b0609608648016503040201a07a301a06092a864886f70d010903310d060b2a864886f70d0109100104302b060b2a864886f70d010910020c311c301a30183016041412d56afa35856816ad62647a8c6acded6904cf46302f06092a864886f70d010904312204202dbf191ed640d4211b592def5380e662eb962715e4ccf8857470864ce05711f1300a06082a8648ce3d04030204463044022074a3c2d0012bf3200e7308f360014c20f1af04f52edb20f08b9e908313233d5d022043d134cf87372f2343b97eaf36ba5545c7823653faf80c8330688a50a8cef9ef", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a643631393533623564363861386233623433363036656534323838363430643130313438393434303233316138623066343335346330636334323534386337320a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signature larger than a test area", + "seed": "capsule writer a CMS signature larger than a test area", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ] + }, + "test_vectors": true, + "test_area_len": 512 + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: signing: the person cancelled", + "written": 0 + }, + "hooks": { + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a643539386630623061356566326539613537663164323538333837333938633765616139663163373035353036306633663631373461306532376665356135620a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signer that fails", + "seed": "capsule writer a CMS signer that fails", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "error": "the person cancelled" + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: self-check: the reader finds the verdicts F1 and S0 in this security area, not F6 and S0", + "written": 0 + }, + "hooks": { + "cms_der": "6e6f742061207369676e6174757265", + "cms_message": "646174656b6579733a646b63333a617574686f722d7369676e61747572653a76310a356164653466623863363334353933356465363033376464323663663565386366383438666133616438386635313239303831343862386138313833393537340a", + "cms_signers": [ + "18c0b89a0b811cf49d8ae0bf0b978c6e408c0bafc05f2ceb1e0cc6d39f746c57" + ] + }, + "recipe": { + "name": "a CMS signer that returns garbage", + "seed": "capsule writer a CMS signer that returns garbage", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": [ + "Ana López" + ], + "garbage": true + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: SIGNERS holds from 1 to 16 certificates", + "written": 0 + }, + "hooks": { + "cms_signers": [] + }, + "recipe": { + "name": "a CMS signer without signers", + "seed": "capsule writer a CMS signer without signers", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "cms": { + "signers": null + }, + "node": true + } + }, + { + "draws": [ + 32, + 16, + 32, + 16, + 16, + 16, + 16 + ], + "error": { + "text": "capsule: sealing: the authority is down", + "written": 0 + }, + "hooks": { + "seal_subject": "567a000a34ee27e6db26cb6f168591f6fc9d860e83ea9b01f5fe1c5718b227c9" + }, + "recipe": { + "name": "a sealer that fails", + "seed": "capsule writer a sealer that fails", + "round": 1000, + "files": [ + { + "path": "a.txt", + "text": "a" + } + ], + "sealer": { + "error": "the authority is down" + }, + "node": true + } + } + ], + "description": "What capsule.EncryptFiles of datekeys-go writes for each recipe while crypto/rand reads the keystream of SeededRandomSource (ChaCha20 under SHA-256(seed), zero nonce), with the size of each draw and what each hook was given and returned; and the text, the code and the bytes written of each error (tool/capsule_writer_go_vectors_test.go). A capsule written is opened with capsule.Open with each credential, all together and none. A file of n bytes of pattern has (31·i + 7) mod 256 as byte i; the raw secret of the identity of a label is SHA-256(\"identity \" + label).", + "go": "go1.26.8", + "releases": { + "1000": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39", + "1001": "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" + }, + "source": "c531e936fa8188a4aab01575607cc85d4f5d4fa4" +} diff --git a/tool/capsule_writer_go_vectors_test.go b/tool/capsule_writer_go_vectors_test.go new file mode 100644 index 0000000..e2767a6 --- /dev/null +++ b/tool/capsule_writer_go_vectors_test.go @@ -0,0 +1,974 @@ +// Writes test/vectors/capsule_writer.json, the vectors of the writer of +// capsules of format 3 of datekeys-dart, stage 6b of docs/PLAN_dart.md: +// what capsule.EncryptFiles of datekeys-go writes for each recipe of this +// file, and the text of each error it gives. +// +// EncryptFiles draws every random value from crypto/rand: the portable +// identity, the salt of the head, capsule_id, I_PAYLOAD, the dummies of +// INNER_ACCESS_AGE and their permutation, what age draws for the measured +// seal, the real seal and PAYLOAD_AGE, and the credential_id of the .dkk. +// Here crypto/rand.Reader reads the keystream of SeededRandomSource of +// lib/src/random.dart (ChaCha20 under SHA-256(seed), zero nonce), as in +// tool/age_writer_go_vectors.go: with the same seed the writer of +// datekeys-dart draws the same values, in the same order, and must write the +// same bytes. Each case records the size of each draw. +// +// A recipe that signs or seals runs the hooks of the tests of package +// capsule (signed_test.go): an Ed25519 author key from a seed (alg 1), the +// CMS signatures and RFC 3161 tokens of internal/cms/cmstest (alg 2 and +// seal_type 2). ECDSA and RSA draw from Go's internal generator, which only +// testing/cryptotest.SetGlobalRandom fixes, in a test binary: this file runs +// as a test. What each hook was given and returned is recorded, so that the +// tests of datekeys-dart give the writer the same signatures and tokens and +// check that it asks for them over the same messages. +// +// For each capsule written it records its length and SHA-256, the capsule +// itself when it is small, the .dkk, the Result, its PUBLIC_HEADER, its +// CONTROL_CBOR and its head; it opens the capsule with capsule.Open, with +// each credential alone, all together and none, and records the files, the +// verdicts and the area; and it encodes PUBLIC_HEADER, CONTROL_CBOR and the +// .dkk again and compares them with what was written. For each error it +// records the text, the code, and the number of bytes written before it. +// +// It imports internal packages, so it runs as a test in an export of +// datekeys-go made with git archive, which it does not change, never in the +// repository itself. From the root of datekeys-dart: +// +// commit=$(git -C ../datekeys-go rev-parse v0.12) +// out=$PWD/test/vectors +// tmp=$(mktemp -d) +// git -C ../datekeys-go archive "$commit" | tar -x -C "$tmp" +// mkdir "$tmp/capsulewriter" +// cp tool/capsule_writer_go_vectors_test.go "$tmp/capsulewriter/" +// (cd "$tmp/capsulewriter" && go test -run TestWriteVectors -count=1 \ +// -args -source "$commit" -out "$out") +// rm -rf "$tmp" +// +// It also writes test/vectors/capsule_writer.g.dart, the cases marked node, +// for the tests that also run compiled to JavaScript. Every run writes the +// same bytes with Go 1.26.8. +package capsulewriter + +import ( + "bytes" + "context" + "crypto/ed25519" + "crypto/elliptic" + "crypto/rand" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "flag" + "fmt" + "io" + "os" + "path/filepath" + "runtime" + "strings" + "testing" + "testing/cryptotest" + "time" + + "filippo.io/age" + "golang.org/x/crypto/chacha20" + + datekeys "g.activething.com/go/DateKeys" + "g.activething.com/go/DateKeys/accesskey" + "g.activething.com/go/DateKeys/agewrap" + "g.activething.com/go/DateKeys/authorkey" + "g.activething.com/go/DateKeys/capsule" + "g.activething.com/go/DateKeys/codec/bech32" + "g.activething.com/go/DateKeys/datekey" + "g.activething.com/go/DateKeys/extension" + "g.activething.com/go/DateKeys/internal/cms/cmstest" + "g.activething.com/go/DateKeys/internal/testkit" + "g.activething.com/go/DateKeys/profile" + "g.activething.com/go/DateKeys/provider" + "g.activething.com/go/DateKeys/wordkey" +) + +var ( + sourceFlag = flag.String("source", "", "the commit of datekeys-go that this tree exports") + outFlag = flag.String("out", "", "the directory test/vectors of datekeys-dart") +) + +type obj = map[string]any + +func h(b []byte) string { return hex.EncodeToString(b) } + +func sum(b []byte) string { + s := sha256.Sum256(b) + return h(s[:]) +} + +func must[T any](v T, err error) T { + if err != nil { + panic(err) + } + return v +} + +func unhex(s string) []byte { return must(hex.DecodeString(s)) } + +// --------------------------------------------------------------------------- +// The recipes + +type extIn struct { + ID string `json:"id"` + Version uint64 `json:"version"` + Data *string `json:"data,omitempty"` // hex; absent for none +} + +// fileIn is a file of a recipe: its content is the text, or n bytes of the +// pattern (31·i + 7) mod 256, and its declared size the length of the +// content unless size is given. +type fileIn struct { + Path string `json:"path"` + Text *string `json:"text,omitempty"` + Pattern int `json:"pattern,omitempty"` + Size *int64 `json:"size,omitempty"` + MTime []int64 `json:"mtime,omitempty"` // seconds and nanoseconds since 1970 + // Fault is what goes wrong with its source: + // - open1, open2: the first or the second Open fails with "the file is + // gone"; + // - short1, short2: that reading gives one byte less; + // - long1, long2: that reading gives one byte more, 0x78; + // - change2: the second reading gives the content with its first byte + // XOR 1; + // - read2: the second reading gives the first half of the content and + // then fails with "the disk failed". + Fault string `json:"fault,omitempty"` +} + +type authorIn struct { + Seed string `json:"seed"` // hex, 32 bytes + Bad string `json:"bad,omitempty"` // zero_signature, short_key +} + +type cmsIn struct { + Signers []string `json:"signers"` // names of the certificates that sign + Extra string `json:"extra,omitempty"` // a required signer that does not sign + Unsealed bool `json:"unsealed,omitempty"` // no seal in the signatures + Junk int `json:"junk,omitempty"` // bytes of an unsigned attribute + Error string `json:"error,omitempty"` // Sign fails with this text + Garbage bool `json:"garbage,omitempty"` // Sign returns bytes that are no signature +} + +type sealerIn struct { + Error string `json:"error,omitempty"` // Seal fails with this text +} + +type recipe struct { + Name string `json:"name"` + Seed string `json:"seed"` + Round uint64 `json:"round"` + // UnlockNs is added to the time of the round: the requested instant. + UnlockNs int64 `json:"unlock_ns,omitempty"` + // Now is the clock, in RFC 3339; the genesis of Quicknet by default. + Now string `json:"now,omitempty"` + Policy string `json:"policy,omitempty"` // time_and_key; time_only by default + // Identities are labels: the raw secret of each is + // SHA-256("identity " + label), and its recipient is given. + Identities []string `json:"identities,omitempty"` + // RawRecipients are given after them, as raw public keys. + RawRecipients []string `json:"raw_recipients,omitempty"` + Portable bool `json:"portable,omitempty"` + Words []string `json:"words,omitempty"` + Padding int `json:"padding,omitempty"` + Files []fileIn `json:"files,omitempty"` + // ManyFiles adds that many empty files, f00000 and on. + ManyFiles int `json:"many_files,omitempty"` + Comment string `json:"comment,omitempty"` + Author string `json:"author,omitempty"` + Note string `json:"note,omitempty"` + Critical []extIn `json:"critical,omitempty"` + Noncritical []extIn `json:"noncritical,omitempty"` + ControlCritical []extIn `json:"control_critical,omitempty"` + ControlNoncritical []extIn `json:"control_noncritical,omitempty"` + HeadCritical []extIn `json:"head_critical,omitempty"` + HeadNoncritical []extIn `json:"head_noncritical,omitempty"` + AuthorKey *authorIn `json:"author_key,omitempty"` + CMS *cmsIn `json:"cms,omitempty"` + Sealer *sealerIn `json:"sealer,omitempty"` + LargeArea bool `json:"large_area,omitempty"` + TestVectors bool `json:"test_vectors,omitempty"` + TestAreaLen uint32 `json:"test_area_len,omitempty"` + // Profile is "" for Quicknet, or genesis_plus_one, Quicknet with a + // genesis time one second later, which its chain hash does not match. + Profile string `json:"profile,omitempty"` + // Node puts the case in the .g.dart, for the tests compiled to + // JavaScript. + Node bool `json:"node,omitempty"` +} + +func ptr[T any](v T) *T { return &v } + +func ext(id string, version uint64, data string) extIn { + d := hex.EncodeToString([]byte(data)) + return extIn{ID: id, Version: version, Data: &d} +} + +func text(path, s string) fileIn { return fileIn{Path: path, Text: ptr(s)} } + +var words = []string{"faro", "nube", "trigo", "menta", "barco", "lince"} + +func ids(n int) []string { + var out []string + for i := range n { + out = append(out, fmt.Sprintf("holder %d", i)) + } + return out +} + +const authorSeed = "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0" + +func recipes() []recipe { + small := func(name string) recipe { + return recipe{Name: name, Round: 1000, TestVectors: true, TestAreaLen: 512} + } + var out []recipe + add := func(r recipe) { out = append(out, r) } + + // Capsules. + r := small("time_only, one file, area of 512") + r.Files, r.Node = []fileIn{text("nota.txt", "Hola.\n")}, true + add(r) + r = small("time_only, a comment alone, bloque256") + r.Comment, r.Author, r.Padding, r.Node = "Una línea.\r\nOtra.\rFin", "Ana López", 1, true + add(r) + r = small("time_and_key, a portable key") + r.Policy, r.Portable, r.Node = "time_and_key", true, true + r.Files = []fileIn{text("a.txt", "a"), text("b/c.txt", "")} + add(r) + r = small("time_and_key, three recipients and a portable key, a note and extensions") + r.Policy, r.Portable, r.Identities = "time_and_key", true, ids(3) + r.Note = "Para Ana, en su cumpleaños" + r.Files = []fileIn{text("carta.txt", "Querida Ana:\n")} + r.Critical = []extIn{ext("org.example.crit", 1, "c")} + r.Noncritical = []extIn{ext("org.example.b", 2, "nb"), {ID: "org.example.a", Version: 1}} + r.ControlCritical = []extIn{ext("org.example.ctrl", 1, "k")} + r.ControlNoncritical = []extIn{ext("org.example.ctrl2", 3, "kk")} + r.HeadCritical = []extIn{ext("org.example.head", 1, "h")} + r.HeadNoncritical = []extIn{ext("org.example.head2", 1, "hh")} + add(r) + add(recipe{Name: "time_only, the common area, files in byte order with mtimes", Round: 1000, + Comment: "Fotos del verano", Author: "Luis", + Files: []fileIn{ + {Path: "vacío.txt", Text: ptr("")}, + {Path: "nota.txt", Text: ptr("Hola.\n"), MTime: []int64{1727712000, 0}}, + {Path: "fotos/playa.jpg", Pattern: 200000, MTime: []int64{1727712000, 999999999}}, + {Path: "\U0001F600.txt", Text: ptr("emoji")}, + {Path: "~.txt", Text: ptr("tilde")}, + {Path: "fotos/a.txt", Text: ptr("a"), MTime: []int64{0, 0}}, + }}) + add(recipe{Name: "time_only, mtimes out of range and at its ends", Round: 1000, Padding: 1, + Files: []fileIn{ + {Path: "a", Text: ptr("1"), MTime: []int64{-1, 999999999}}, + {Path: "b", Text: ptr("2"), MTime: []int64{253402300799, 999999999}}, + {Path: "c", Text: ptr("3"), MTime: []int64{253402300800, 0}}, + {Path: "d", Text: ptr("4"), MTime: []int64{-62135596800, 0}}, + {Path: "e", Text: ptr("5"), MTime: []int64{-62135596800, 1}}, + }}) + add(recipe{Name: "time_and_key, fifteen recipients and a portable key", Round: 1000, Policy: "time_and_key", + Identities: ids(15), Portable: true, Files: []fileIn{{Path: "x.bin", Pattern: 65536}}}) + add(recipe{Name: "time_and_key, sixteen recipients", Round: 1001, Policy: "time_and_key", + Identities: ids(16), Files: []fileIn{{Path: "x.bin", Pattern: 65537}}}) + add(recipe{Name: "time_and_key, a key of words and a recipient", Round: 1000, Policy: "time_and_key", + Identities: ids(1), Words: words, Files: []fileIn{text("secreto.txt", "42")}}) + add(recipe{Name: "a requested instant one nanosecond after round 1000", Round: 1000, UnlockNs: 1, + Files: []fileIn{text("a", "a")}}) + add(recipe{Name: "a requested instant one nanosecond before round 1000", Round: 1000, UnlockNs: -1, + Now: "2023-08-23T15:09:30.5Z", Files: []fileIn{text("a", "a")}}) + r = small("signed with alg 1, area of 512") + r.AuthorKey, r.Files, r.Node = &authorIn{Seed: authorSeed}, []fileIn{text("nota.txt", "Hola.\n")}, true + add(r) + add(recipe{Name: "signed with alg 1 and sealed", Round: 1000, AuthorKey: &authorIn{Seed: authorSeed}, + Sealer: &sealerIn{}, Policy: "time_and_key", Portable: true, Files: []fileIn{text("nota.txt", "Hola.\n")}}) + add(recipe{Name: "sealed, without a signature", Round: 1000, Sealer: &sealerIn{}, + Files: []fileIn{text("nota.txt", "Hola.\n")}}) + add(recipe{Name: "signed with alg 2 by two signers, each sealed", Round: 1000, + CMS: &cmsIn{Signers: []string{"Ana López", "Luis Gómez"}}, Files: []fileIn{text("nota.txt", "Hola.\n")}}) + add(recipe{Name: "a signature of 40 KiB with LargeArea: the area of 64 KiB", Round: 1000, LargeArea: true, + CMS: &cmsIn{Signers: []string{"Ana López"}, Junk: 40 << 10}, Files: []fileIn{text("nota.txt", "Hola.\n")}}) + add(recipe{Name: "LargeArea without a signature keeps the common area", Round: 1000, LargeArea: true, + Files: []fileIn{text("nota.txt", "x")}}) + add(recipe{Name: "content of whole chunks", Round: 1000, Padding: 1, + Files: []fileIn{{Path: "a", Pattern: 65536}, {Path: "b", Pattern: 131072 - 12 - 32768 - 200}}}) + add(recipe{Name: "unknown extensions of the application in every array", Round: 1000, Policy: "time_and_key", + Words: words, Portable: true, + Critical: []extIn{{ID: "z", Version: 4294967295}}, HeadNoncritical: []extIn{ext("org.example.n", 1, "x")}, + Files: []fileIn{text("a", "a")}}) + + // Errors of the options. + e := func(name string, f func(r *recipe)) { + r := recipe{Name: name, Round: 1000, Files: []fileIn{text("a.txt", "a")}, Node: true} + f(&r) + add(r) + } + e("TestAreaLen without TestVectors", func(r *recipe) { r.TestAreaLen = 512 }) + e("TestAreaLen not a multiple of 512", func(r *recipe) { r.TestVectors, r.TestAreaLen = true, 1000 }) + e("TestAreaLen above the largest", func(r *recipe) { r.TestVectors, r.TestAreaLen = true, 66048 }) + e("TestAreaLen with LargeArea", func(r *recipe) { r.TestVectors, r.TestAreaLen, r.LargeArea = true, 512, true }) + e("AuthorKey and CMSSigner", func(r *recipe) { + r.AuthorKey, r.CMS = &authorIn{Seed: authorSeed}, &cmsIn{Signers: []string{"Ana López"}} + }) + e("CMSSigner and Sealer", func(r *recipe) { r.CMS, r.Sealer = &cmsIn{Signers: []string{"Ana López"}}, &sealerIn{} }) + e("a public note with a line feed", func(r *recipe) { r.Note = "dos\nlíneas" }) + e("a public note of 1025 bytes", func(r *recipe) { r.Note = strings.Repeat("a", 1025) }) + e("datekeys.note in CONTROL_CBOR", func(r *recipe) { + r.ControlNoncritical = []extIn{ext("datekeys.note", 1, "hola")} + }) + e("datekeys.capsule in PUBLIC_HEADER", func(r *recipe) { + r.Noncritical = []extIn{ext("datekeys.capsule", 1, "x")} + }) + e("datekeys.note with invalid data", func(r *recipe) { + r.Noncritical = []extIn{ext("datekeys.note", 1, "a\tb")} + }) + e("datekeys.note without data", func(r *recipe) { r.Noncritical = []extIn{{ID: "datekeys.note", Version: 1}} }) + e("datekeys.note in the critical array of the head", func(r *recipe) { + r.HeadCritical = []extIn{ext("datekeys.note", 1, "hola")} + }) + e("an extension in both arrays", func(r *recipe) { + r.Critical = []extIn{ext("org.example.x", 1, "a")} + r.Noncritical = []extIn{ext("org.example.x", 2, "b")} + }) + e("a profile whose chain hash does not match", func(r *recipe) { r.Profile = "genesis_plus_one" }) + e("an instant that is now", func(r *recipe) { r.Now = "2023-08-23T15:59:24Z" }) + e("an instant after now by one nanosecond", func(r *recipe) { r.Now = "2023-08-23T15:59:23.999999999Z"; r.Node = false }) + e("an instant before the genesis", func(r *recipe) { r.Round, r.UnlockNs, r.Now = 1, -5e9, "2023-08-23T14:00:00Z" }) + e("time_only with a recipient", func(r *recipe) { r.Identities = ids(1) }) + e("time_only with a portable key", func(r *recipe) { r.Portable = true }) + e("time_only with words", func(r *recipe) { r.Words = words }) + e("time_and_key without credentials", func(r *recipe) { r.Policy = "time_and_key" }) + e("seventeen credentials", func(r *recipe) { r.Policy, r.Identities, r.Portable = "time_and_key", ids(16), true }) + e("seventeen credentials with words", func(r *recipe) { r.Policy, r.Identities, r.Words = "time_and_key", ids(16), words }) + e("a recipient with bit 255 set", func(r *recipe) { + r.Policy, r.Identities = "time_and_key", ids(1) + raw := must(agewrap.RawX25519Recipient(identity("holder 0").Recipient())) + raw[31] |= 0x80 + r.RawRecipients = []string{h(raw)} + }) + e("a recipient of u = p", func(r *recipe) { + r.Policy = "time_and_key" + r.RawRecipients = []string{"edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f"} + }) + e("a recipient of low order", func(r *recipe) { + r.Policy = "time_and_key" + r.RawRecipients = []string{h(make([]byte, 32))} + }) + e("a recipient listed twice", func(r *recipe) { + r.Policy, r.Identities = "time_and_key", ids(2) + r.RawRecipients = []string{h(must(agewrap.RawX25519Recipient(identity("holder 1").Recipient())))} + }) + e("five words", func(r *recipe) { r.Policy, r.Words = "time_and_key", words[:5] }) + e("words with a control character", func(r *recipe) { + r.Policy, r.Words = "time_and_key", append(append([]string(nil), words...), "a\u0085b") + }) + e("words with an invisible character", func(r *recipe) { + r.Policy, r.Words = "time_and_key", append(append([]string(nil), words...), "a​b") + }) + e("no file and no comment", func(r *recipe) { r.Files = nil }) + e("a comment that is a lone CR", func(r *recipe) { r.Files, r.Comment = nil, "\r" }) + e("a comment with a control character", func(r *recipe) { r.Comment = "hola\x01" }) + e("a comment of 16385 bytes", func(r *recipe) { r.Comment = strings.Repeat("ñ", 8192) + "a" }) + e("a declared author with a line feed", func(r *recipe) { r.Author = "Ana\nLópez" }) + e("a declared author of 257 bytes", func(r *recipe) { r.Author = strings.Repeat("a", 257) }) + e("a path given twice", func(r *recipe) { r.Files = []fileIn{text("b", "1"), text("a", "2"), text("b", "3")} }) + e("an empty path", func(r *recipe) { r.Files = []fileIn{text("", "1")} }) + e("a path of 1025 bytes", func(r *recipe) { r.Files = []fileIn{text(strings.Repeat("a", 1025), "1")} }) + e("an absolute path", func(r *recipe) { r.Files = []fileIn{text("/etc/passwd", "1")} }) + e("a path with ..", func(r *recipe) { r.Files = []fileIn{text("a/../b", "1")} }) + e("a path with a reserved name", func(r *recipe) { r.Files = []fileIn{text("docs/CON.txt", "1")} }) + e("a file that is a folder too", func(r *recipe) { + r.Files = []fileIn{text("a/b", "1"), text("a", "2"), text("c", "3")} + }) + e("two paths that fold to the same key", func(r *recipe) { + r.Files = []fileIn{text("x/Año.txt", "1"), text("x/AÑO.txt", "2")} + }) + e("a negative size", func(r *recipe) { r.Files = []fileIn{{Path: "a", Text: ptr(""), Size: ptr(int64(-1))}} }) + e("files beyond L_MAX", func(r *recipe) { + r.Files = []fileIn{text("a", "a"), {Path: "b", Text: ptr(""), Size: ptr(int64(capsule.MaxPayloadLength))}} + }) + e("L beyond L_MAX", func(r *recipe) { + r.Files = []fileIn{{Path: "b", Text: ptr(""), Size: ptr(int64(capsule.MaxPayloadLength - 100))}} + }) + e("65536 files", func(r *recipe) { r.Files, r.ManyFiles, r.Node = nil, 65536, false }) + for _, f := range []string{"open1", "short1", "long1", "open2", "short2", "long2", "change2", "read2"} { + e("a source that fails: "+f, func(r *recipe) { + r.Files = []fileIn{text("a.txt", "a"), {Path: "b.bin", Pattern: 100000, Fault: f}} + r.Node = false + }) + } + e("a source that changes in a small file", func(r *recipe) { r.Files = []fileIn{{Path: "a", Text: ptr("abc"), Fault: "change2"}} }) + + // Errors of the hooks. + e("an author key whose signature does not verify", func(r *recipe) { + r.AuthorKey = &authorIn{Seed: authorSeed, Bad: "zero_signature"} + }) + e("an author key of 31 bytes", func(r *recipe) { r.AuthorKey = &authorIn{Seed: authorSeed, Bad: "short_key"} }) + e("a CMS signature that lacks a required signer", func(r *recipe) { + r.CMS, r.Node = &cmsIn{Signers: []string{"Ana López"}, Extra: "Falta"}, false + }) + e("a CMS signature without seals", func(r *recipe) { + r.CMS, r.Node = &cmsIn{Signers: []string{"Ana López"}, Unsealed: true}, false + }) + e("a CMS signature of 40 KiB without LargeArea", func(r *recipe) { + r.CMS, r.Node = &cmsIn{Signers: []string{"Ana López"}, Junk: 40 << 10}, false + }) + e("a CMS signature larger than a test area", func(r *recipe) { + r.CMS, r.TestVectors, r.TestAreaLen, r.Node = &cmsIn{Signers: []string{"Ana López"}}, true, 512, false + }) + e("a CMS signer that fails", func(r *recipe) { + r.CMS = &cmsIn{Signers: []string{"Ana López"}, Error: "the person cancelled"} + }) + e("a CMS signer that returns garbage", func(r *recipe) { + r.CMS = &cmsIn{Signers: []string{"Ana López"}, Garbage: true} + }) + e("a CMS signer without signers", func(r *recipe) { r.CMS = &cmsIn{} }) + e("a sealer that fails", func(r *recipe) { r.Sealer = &sealerIn{Error: "the authority is down"} }) + for i := range out { + if out[i].Seed == "" { + out[i].Seed = "capsule writer " + out[i].Name + } + } + return out +} + +// --------------------------------------------------------------------------- +// crypto/rand from a seed + +// seeded is the crypto/rand.Reader of a case: the ChaCha20 keystream under +// SHA-256(seed) and a zero nonce, the stream of SeededRandomSource. It +// records the size of every read. +type seeded struct { + c *chacha20.Cipher + draws []int +} + +func newSeeded(seed string) *seeded { + key := sha256.Sum256([]byte(seed)) + return &seeded{c: must(chacha20.NewUnauthenticatedCipher(key[:], make([]byte, chacha20.NonceSize)))} +} + +func (s *seeded) Read(p []byte) (int, error) { + clear(p) + s.c.XORKeyStream(p, p) + s.draws = append(s.draws, len(p)) + return len(p), nil +} + +// --------------------------------------------------------------------------- +// The keys and the hooks + +// identity is the X25519 identity of a label: its raw secret is +// SHA-256("identity " + label). +func identity(label string) *age.X25519Identity { + s := sha256.Sum256([]byte("identity " + label)) + return must(agewrap.X25519IdentityFromRaw(s[:])) +} + +// recipientOfRaw is the age recipient of 32 raw bytes, whatever they are: +// age.ParseX25519Recipient accepts any point. +func recipientOfRaw(raw []byte) *age.X25519Recipient { + return must(age.ParseX25519Recipient(must(bech32.Encode("age", raw)))) +} + +// The certificates of the CMS hooks, made in this order under the fixed +// randomness of the test, and the authority. +type certs struct { + byName map[string]cmstest.Signer + tsa cmstest.Signer +} + +var ( + certFrom, certTo = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC), time.Date(2040, 1, 1, 0, 0, 0, 0, time.UTC) +) + +func newCerts() *certs { + c := &certs{byName: map[string]cmstest.Signer{}} + c.byName["Ana López"] = cmstest.NewECDSA("Ana López", elliptic.P256(), certFrom, certTo) + c.byName["Luis Gómez"] = cmstest.NewRSA("Luis Gómez", 2048, certFrom, certTo) + c.byName["Falta"] = cmstest.NewECDSA("Falta", elliptic.P256(), certFrom, certTo) + c.tsa = cmstest.NewECDSA("TSA de prueba", elliptic.P256(), certFrom, certTo) + return c +} + +// hooks records what each hook was given and what it returned. +type hooks struct { + rec obj +} + +func (k *hooks) set(name string, v any) { k.rec[name] = v } + +// authorHook is the author key of a recipe. +type authorHook struct { + key *authorkey.Key + bad string + k *hooks +} + +func (a *authorHook) Public() []byte { + pub := a.key.Public() + if a.bad == "short_key" { + pub = pub[:31] + } + a.k.set("author_public", h(pub)) + return pub +} + +func (a *authorHook) Sign(msg []byte) []byte { + sig := a.key.Sign(msg) + if a.bad == "zero_signature" { + sig = make([]byte, ed25519.SignatureSize) + } + a.k.set("author_message", h(msg)) + a.k.set("author_signature", h(sig)) + return sig +} + +// cmsHook signs as a signing application, as cmsSigner of signed_test.go. +type cmsHook struct { + in cmsIn + c *certs + when time.Time + k *hooks +} + +func (s *cmsHook) signers() []cmstest.Signer { + var out []cmstest.Signer + for _, n := range s.in.Signers { + out = append(out, s.c.byName[n]) + } + return out +} + +func (s *cmsHook) Signers() [][32]byte { + var out [][32]byte + for _, x := range s.signers() { + out = append(out, sha256.Sum256(x.Cert.Raw)) + } + if s.in.Extra != "" { + out = append(out, sha256.Sum256(s.c.byName[s.in.Extra].Cert.Raw)) + } + list := []string{} + for _, x := range out { + list = append(list, h(x[:])) + } + s.k.set("cms_signers", list) + return out +} + +func (s *cmsHook) Sign(msg []byte) ([]byte, error) { + s.k.set("cms_message", h(msg)) + if s.in.Error != "" { + return nil, errors.New(s.in.Error) + } + var der []byte + if s.in.Garbage { + der = []byte("not a signature") + } else { + o := cmstest.Options{Junk: s.in.Junk} + if !s.in.Unsealed { + o.Token = func(sig []byte) []byte { + return cmstest.Token(sig, s.when, cmstest.TokenOptions{Accuracy: time.Second}, s.c.tsa) + } + } + der = cmstest.Signature(msg, o, s.signers()...) + } + s.k.set("cms_der", h(der)) + return der, nil +} + +// sealHook asks the authority, as sealer of signed_test.go. +type sealHook struct { + in sealerIn + c *certs + when time.Time + k *hooks +} + +func (s *sealHook) Seal(subject [32]byte) ([]byte, error) { + s.k.set("seal_subject", h(subject[:])) + if s.in.Error != "" { + return nil, errors.New(s.in.Error) + } + token := cmstest.Token(subject[:], s.when, cmstest.TokenOptions{}, s.c.tsa) + s.k.set("seal_token", h(token)) + return token, nil +} + +// --------------------------------------------------------------------------- +// Sources + +func pattern(n int) []byte { + b := make([]byte, n) + for i := range b { + b[i] = byte(31*i + 7) + } + return b +} + +func contentOf(f fileIn) []byte { + if f.Text != nil { + return []byte(*f.Text) + } + return pattern(f.Pattern) +} + +type errReader struct{ err error } + +func (r errReader) Read([]byte) (int, error) { return 0, r.err } + +func sourceOf(f fileIn) capsule.Source { + content := contentOf(f) + size := int64(len(content)) + if f.Size != nil { + size = *f.Size + } + calls := 0 + var mtime time.Time + if f.MTime != nil { + mtime = time.Unix(f.MTime[0], f.MTime[1]) + } + return capsule.Source{Path: f.Path, Size: size, ModTime: mtime, Open: func() (io.ReadCloser, error) { + if f.Size != nil && *f.Size != int64(len(content)) { + panic("a source opened whose size is not its content's") + } + calls++ + c := content + switch fmt.Sprintf("%s/%d", f.Fault, calls) { + case "open1/1", "open2/2": + return nil, errors.New("the file is gone") + case "short1/1", "short2/2": + c = c[:len(c)-1] + case "long1/1", "long2/2": + c = append(bytes.Clone(c), 'x') + case "change2/2": + c = bytes.Clone(c) + c[0] ^= 1 + case "read2/2": + return io.NopCloser(io.MultiReader(bytes.NewReader(c[:len(c)/2]), errReader{errors.New("the disk failed")})), nil + } + return io.NopCloser(bytes.NewReader(c)), nil + }} +} + +// --------------------------------------------------------------------------- +// Running a recipe + +func exts(list []extIn) []extension.Extension { + var out []extension.Extension + for _, e := range list { + x := extension.Extension{ID: e.ID, Version: e.Version} + if e.Data != nil { + x.Data = unhex(*e.Data) + if x.Data == nil { + x.Data = []byte{} + } + } + out = append(out, x) + } + return out +} + +func profileOf(name string) *profile.Profile { + p := profile.Quicknet() + switch name { + case "": + case "genesis_plus_one": + p.GenesisTime++ + default: + panic("profile " + name) + } + return p +} + +func nowOf(r recipe, p *profile.Profile) time.Time { + if r.Now == "" { + return time.Unix(p.GenesisTime, 0).UTC() + } + return must(time.Parse(time.RFC3339Nano, r.Now)) +} + +// run writes the capsule of r with EncryptFiles while crypto/rand reads the +// keystream of its seed. +func run(r recipe, c *certs) (*capsule.Result, []byte, *seeded, obj, error) { + p := profileOf(r.Profile) + q := profile.Quicknet() + unlock := must(datekey.RoundTime(q, r.Round)).Add(time.Duration(r.UnlockNs)) + now := nowOf(r, q) + opts := capsule.EncryptOptions{ + Profile: p, UnlockAt: unlock, Now: func() time.Time { return now }, + NewPortableKey: r.Portable, Words: r.Words, Padding: capsule.Padding(r.Padding), + Critical: exts(r.Critical), Noncritical: exts(r.Noncritical), + ControlCritical: exts(r.ControlCritical), ControlNoncritical: exts(r.ControlNoncritical), + HeadCritical: exts(r.HeadCritical), HeadNoncritical: exts(r.HeadNoncritical), + Comment: r.Comment, Author: r.Author, PublicNote: r.Note, + LargeArea: r.LargeArea, TestVectors: r.TestVectors, TestAreaLen: r.TestAreaLen, + } + if r.Policy == "time_and_key" { + opts.Policy = capsule.TimeAndKey + } + for _, l := range r.Identities { + opts.Recipients = append(opts.Recipients, identity(l).Recipient()) + } + for _, raw := range r.RawRecipients { + opts.Recipients = append(opts.Recipients, recipientOfRaw(unhex(raw))) + } + k := &hooks{rec: obj{}} + if r.AuthorKey != nil { + opts.AuthorKey = &authorHook{key: must(authorkey.NewFromSeed(unhex(r.AuthorKey.Seed))), bad: r.AuthorKey.Bad, k: k} + } + if r.CMS != nil { + opts.CMSSigner = &cmsHook{in: *r.CMS, c: c, when: now, k: k} + } + if r.Sealer != nil { + opts.Sealer = &sealHook{in: *r.Sealer, c: c, when: now, k: k} + } + var sources []capsule.Source + for _, f := range r.Files { + sources = append(sources, sourceOf(f)) + } + for i := range r.ManyFiles { + sources = append(sources, sourceOf(text(fmt.Sprintf("f%05d", i), ""))) + } + s := newSeeded(r.Seed) + old := rand.Reader + rand.Reader = s + var dst bytes.Buffer + res, err := capsule.EncryptFiles(&dst, sources, opts) + rand.Reader = old + return res, dst.Bytes(), s, k.rec, err +} + +// --------------------------------------------------------------------------- +// Opening + +func releases() provider.ReleaseSource { + return testkit.NewSource(testkit.Release(1000), testkit.Release(1001)) +} + +func extSet(r recipe) extension.Set { + s := extension.Set{} + for _, l := range [][]extIn{r.Critical, r.Noncritical, r.ControlCritical, r.ControlNoncritical, r.HeadCritical, r.HeadNoncritical} { + for _, e := range l { + s[e.ID] = append(s[e.ID], e.Version) + } + } + return s +} + +func opened(r recipe, dkc []byte, ids []age.Identity, dkk []byte) obj { + files := &testkit.MemorySink{} + o := capsule.OpenOptions{ + Registry: testkit.Registry(), Extensions: extSet(r), Source: releases(), Identities: ids, Sink: files, + Now: func() time.Time { return time.Date(2026, 10, 6, 0, 0, 0, 0, time.UTC) }, + } + if dkk != nil { + o.AccessKeyFile = bytes.NewReader(dkk) + } + res, err := capsule.Open(context.Background(), nil, bytes.NewReader(dkc), o) + v := obj{} + if err != nil { + v["result"] = datekeys.Code(err) + if v["result"] == "" { + v["result"] = "error: " + err.Error() + } + if res != nil && res.Inspection != nil && len(res.Inspection.Checks) > 0 { + v["step"] = res.Inspection.Checks[len(res.Inspection.Checks)-1].Step + } + return v + } + v["result"] = "ok" + var fs []obj + for i, f := range res.Head.Files { + fj := obj{"path": f.Path, "size": f.Size, "sha256": sum(files.Files[i])} + if f.HasMTime { + fj["mtime"] = f.MTime + } + fs = append(fs, fj) + } + if fs == nil { + fs = []obj{} + } + v["files"] = fs + v["head"] = h(must(capsule.EncodeHead(res.Head))) + v["verdicts"] = []string{string(res.Verdicts.Signature), string(res.Verdicts.Seal)} + v["area_len"] = res.AreaLen + v["length"] = res.PayloadLength + v["padded_length"] = res.PaddedLength + return v +} + +func opens(r recipe, dkc []byte, res *capsule.Result, dkk []byte) []obj { + if r.Policy != "time_and_key" { + v := opened(r, dkc, nil, nil) + v["with"] = "time" + return []obj{v} + } + var out []obj + var all []age.Identity + for _, l := range r.Identities { + id := identity(l) + v := opened(r, dkc, []age.Identity{id}, nil) + v["with"] = "identity " + l + out = append(out, v) + all = append(all, id) + } + if len(r.Words) != 0 { + id := must(wordkey.Identity(r.Words, profile.Quicknet().ChainHash[:], res.DateKey.Round, res.CapsuleID[:])) + v := opened(r, dkc, []age.Identity{id}, nil) + v["with"] = "words" + out = append(out, v) + all = append(all, id) + } + if dkk != nil { + v := opened(r, dkc, nil, dkk) + v["with"] = "portable" + out = append(out, v) + } + v := opened(r, dkc, all, dkk) + v["with"] = "all" + out = append(out, v) + v = opened(r, dkc, nil, nil) + v["with"] = "none" + out = append(out, v) + return out +} + +// layers opens SEALED_CONTROL with the release and, in time_and_key, with +// the first credential, and returns PUBLIC_HEADER, CONTROL_CBOR and whether +// they and the .dkk encode again to the bytes written. +func layers(r recipe, dkc []byte, res *capsule.Result, dkk []byte) (header, control []byte, same bool) { + pre := must(capsule.ParsePrelude(dkc)) + header = dkc[capsule.PreludeSize : capsule.PreludeSize+int(pre.PublicHeaderLen)] + sealed := dkc[capsule.PreludeSize+int(pre.PublicHeaderLen) : capsule.PreludeSize+int(pre.PublicHeaderLen)+int(pre.SealedControlLen)] + hd := must(capsule.DecodeHeader(header)) + same = bytes.Equal(must(capsule.EncodeHeader(hd)), header) + tid := must(agewrap.NewTimeIdentity(profile.Quicknet(), res.DateKey.Round, testkit.Release(res.DateKey.Round))) + control = must(io.ReadAll(must(age.Decrypt(bytes.NewReader(sealed), tid)))) + if r.Policy == "time_and_key" { + var id age.Identity + switch { + case len(r.Identities) > 0: + id = identity(r.Identities[0]) + case dkk != nil: + k := must(accesskey.Decode(bytes.NewReader(dkk))) + id = must(agewrap.X25519IdentityFromRaw(k.Material)) + default: + id = must(wordkey.Identity(r.Words, profile.Quicknet().ChainHash[:], res.DateKey.Round, res.CapsuleID[:])) + } + aid := must(agewrap.NewAccessIdentity(agewrap.AccessSlots, id)) + control = must(io.ReadAll(must(age.Decrypt(bytes.NewReader(control), aid)))) + } + c := must(capsule.DecodeControl(control, pre.Format)) + same = same && bytes.Equal(must(capsule.EncodeControl(c, pre.Format)), control) + if dkk != nil { + k := must(accesskey.Decode(bytes.NewReader(dkk))) + var b bytes.Buffer + must(0, accesskey.Encode(&b, k)) + same = same && bytes.Equal(b.Bytes(), dkk) + } + return header, control, same +} + +// --------------------------------------------------------------------------- +// The vectors + +func caseOf(r recipe, c *certs) obj { + res, dkc, s, rec, err := run(r, c) + draws := s.draws + if draws == nil { + draws = []int{} + } + out := obj{"recipe": r, "draws": draws} + if len(rec) > 0 { + out["hooks"] = rec + } + if err != nil { + e := obj{"text": err.Error(), "written": len(dkc)} + if code := datekeys.Code(err); code != "" { + e["code"] = code + } + out["error"] = e + return out + } + var dkk []byte + if res.PortableKey != nil { + var b bytes.Buffer + must(0, accesskey.Encode(&b, res.PortableKey)) + dkk = b.Bytes() + } + header, control, same := layers(r, dkc, res, dkk) + w := obj{ + "length_dkc": len(dkc), "sha256": sum(dkc), + "round": res.DateKey.Round, "unlock_at": res.UnlockAt.UTC().Format(time.RFC3339Nano), + "capsule_id": h(res.CapsuleID[:]), "length": res.Length, "padding": int(res.Padding), + "padded_length": res.PaddedLength, "head": h(must(capsule.EncodeHead(res.Head))), + "header": h(header), "control": h(control), "reencoded": same, + } + if len(dkc) <= 4096 { + w["dkc"] = h(dkc) + } + if dkk != nil { + w["dkk"] = h(dkk) + } + out["written"] = w + out["opens"] = opens(r, dkc, res, dkk) + return out +} + +func TestWriteVectors(t *testing.T) { + if *sourceFlag == "" || *outFlag == "" { + t.Skip("run with -args -source COMMIT -out DIR") + } + cryptotest.SetGlobalRandom(t, 20261006) + c := newCerts() + var cases, node []obj + for _, r := range recipes() { + v := caseOf(r, c) + cases = append(cases, v) + if r.Node { + node = append(node, v) + } + if e, ok := v["error"]; ok { + t.Logf("%s: %s", r.Name, e.(obj)["text"]) + } else { + t.Logf("%s: %d bytes", r.Name, v["written"].(obj)["length_dkc"]) + } + } + rel := obj{} + for _, round := range []uint64{1000, 1001} { + rel[fmt.Sprint(round)] = h(testkit.Release(round).Signature) + } + doc := func(cases []obj) []byte { + var buf bytes.Buffer + enc := json.NewEncoder(&buf) + enc.SetEscapeHTML(false) + enc.SetIndent("", " ") + must(0, enc.Encode(obj{ + "description": "What capsule.EncryptFiles of datekeys-go writes for each recipe while crypto/rand reads the keystream of SeededRandomSource (ChaCha20 under SHA-256(seed), zero nonce), with the size of each draw and what each hook was given and returned; and the text, the code and the bytes written of each error (tool/capsule_writer_go_vectors_test.go). A capsule written is opened with capsule.Open with each credential, all together and none. A file of n bytes of pattern has (31·i + 7) mod 256 as byte i; the raw secret of the identity of a label is SHA-256(\"identity \" + label).", + "source": *sourceFlag, + "go": runtime.Version(), + "releases": rel, + "cases": cases, + })) + if bytes.Contains(buf.Bytes(), []byte("'''")) { + t.Fatal("the JSON holds three quotes") + } + return buf.Bytes() + } + full := doc(cases) + path := filepath.Join(*outFlag, "capsule_writer.json") + must(0, os.WriteFile(path, full, 0o644)) + t.Logf("wrote %s, %d bytes", path, len(full)) + dart := "// Generated by tool/capsule_writer_go_vectors_test.go: the cases of\n" + + "// test/vectors/capsule_writer.json marked node, for the tests that also run\n" + + "// compiled to JavaScript, where no file can be read. Do not edit.\n\n" + + "/// Part of test/vectors/capsule_writer.json.\n" + + "const capsuleWriterJson = r'''\n" + string(doc(node)) + "''';\n" + dpath := filepath.Join(*outFlag, "capsule_writer.g.dart") + must(0, os.WriteFile(dpath, []byte(dart), 0o644)) + t.Logf("wrote %s", dpath) +}