{ "spec": "0.16", "description": "The key of words (spec §38.1): the words of a text, after NFD, without U+0300 to U+036F, in simple lower case of Unicode 18.0.0 and split by the spaces of the list; what a writer refuses; and the identity, PBKDF2-HMAC-SHA256 of 600000 rounds, for a chain hash, a round and a capsule_id. See testdata/README.md.", "normalize": [ { "name": "the words of the vector of §38.1", "text": "perro luna casa verde tren mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ] }, { "name": "accents, upper case and runs of spaces", "text": " Ábaco ÁRBOL\tniño ΣΑΣ İ ", "words": [ "abaco", "arbol", "nino", "σασ", "i" ] }, { "name": "«Ábaco ÁRBOL» of §38.1", "text": "Ábaco ÁRBOL", "words": [ "abaco", "arbol" ] }, { "name": "«abaco arbol» of §38.1", "text": "abaco arbol", "words": [ "abaco", "arbol" ] }, { "name": "«ábaco árbol» of §38.1", "text": "ábaco árbol", "words": [ "abaco", "arbol" ] }, { "name": "the accents written as combining marks", "text": "ábaco árbol", "words": [ "abaco", "arbol" ] }, { "name": "punctuation counts", "text": "Perro, luna.", "words": [ "perro,", "luna." ] }, { "name": "no text", "text": "", "words": [] }, { "name": "only spaces", "text": " \t  ", "words": [] }, { "name": "the simple lower case of a final sigma", "text": "ΟΔΟΣ", "words": [ "οδοσ" ] }, { "name": "capital sharp s, lowered by its simple mapping", "text": "STRAẞE", "words": [ "straße" ] }, { "name": "a dotless i stays", "text": "ı", "words": [ "ı" ] }, { "name": "the angstrom sign, whose NFD is A and a ring", "text": "Å", "words": [ "a" ] }, { "name": "Hangul, decomposed into jamo", "text": "한글", "words": [ "한글" ] }, { "name": "a combining mark outside U+0300 to U+036F stays", "text": "a⃗", "words": [ "a⃗" ] }, { "name": "fullwidth letters are not folded to ASCII", "text": "ABC", "words": [ "abc" ] }, { "name": "U+A7CB, lowered by Unicode 18.0.0 to U+0264", "text": "Ɤ", "words": [ "ɤ" ] }, { "name": "a zero width space is not a space", "text": "a​b", "words": [ "a​b" ] }, { "name": "U+180E is not a space", "text": "a᠎b", "words": [ "a᠎b" ] }, { "name": "a byte order mark is not a space", "text": "ab", "words": [ "ab" ] }, { "name": "the text of the annex of v0.16", "text": "Ñandú PINGÜINO\tcamión árbol Éter ola", "words": [ "nandu", "pinguino", "camion", "arbol", "eter", "ola" ] }, { "name": "the text of the annex of v0.16, with its marks apart", "text": "Ñandú PINGÜINO\tcamión árbol Éter ola", "words": [ "nandu", "pinguino", "camion", "arbol", "eter", "ola" ] }, { "name": "U+0009 is a space", "text": "uno\tdos", "words": [ "uno", "dos" ] }, { "name": "U+000A is a space", "text": "uno\ndos", "words": [ "uno", "dos" ] }, { "name": "U+000B is a space", "text": "uno\u000bdos", "words": [ "uno", "dos" ] }, { "name": "U+000C is a space", "text": "uno\fdos", "words": [ "uno", "dos" ] }, { "name": "U+000D is a space", "text": "uno\rdos", "words": [ "uno", "dos" ] }, { "name": "U+0020 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+0085 is a space", "text": "uno…dos", "words": [ "uno", "dos" ] }, { "name": "U+00A0 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+1680 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2000 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2001 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2002 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2003 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2004 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2005 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2006 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2007 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2008 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2009 is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+200A is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+2028 is a space", "text": "uno\u2028dos", "words": [ "uno", "dos" ] }, { "name": "U+2029 is a space", "text": "uno\u2029dos", "words": [ "uno", "dos" ] }, { "name": "U+202F is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+205F is a space", "text": "uno dos", "words": [ "uno", "dos" ] }, { "name": "U+3000 is a space", "text": "uno dos", "words": [ "uno", "dos" ] } ], "check": [ { "name": "six words", "text": "perro luna casa verde tren mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "result": "ok" }, { "name": "six words with upper case and accents", "text": "Perro LUNA casa verde trén mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "result": "ok" }, { "name": "three words", "text": "uno dos tres", "words": [ "uno", "dos", "tres" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 3" }, { "name": "only short words", "text": "a b c d e f g h", "words": [ "a", "b", "c", "d", "e", "f", "g", "h" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 0" }, { "name": "one word six times", "text": "perro perro perro perro perro perro", "words": [ "perro", "perro", "perro", "perro", "perro", "perro" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 1" }, { "name": "short words do not count", "text": "de la casa al mar en tren verde", "words": [ "de", "la", "casa", "al", "mar", "en", "tren", "verde" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 4" }, { "name": "five words that count and a short one", "text": "perro luna casa verde tren y", "words": [ "perro", "luna", "casa", "verde", "tren", "y" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 5" }, { "name": "a word of three letters counts", "text": "sol luna casa verde tren mar", "words": [ "sol", "luna", "casa", "verde", "tren", "mar" ], "result": "ok" }, { "name": "a word of three letters that are not ASCII counts", "text": "ñuñ luna casa verde tren mar", "words": [ "nun", "luna", "casa", "verde", "tren", "mar" ], "result": "ok" }, { "name": "the same words in other case count once", "text": "perro PERRO luna casa verde tren", "words": [ "perro", "perro", "luna", "casa", "verde", "tren" ], "result": "error", "error": "wordkey: a key of words needs at least 6 different words of 3 or more letters, not 5" }, { "name": "a zero width space, which the writer refuses", "text": "perro luna casa verde tren mar​", "words": [ "perro", "luna", "casa", "verde", "tren", "mar​" ], "result": "error", "error": "wordkey: the words hold the invisible character U+200B" }, { "name": "a soft hyphen, ignorable", "text": "per­ro luna casa verde tren mar", "words": [ "per­ro", "luna", "casa", "verde", "tren", "mar" ], "result": "error", "error": "wordkey: the words hold the invisible character U+00AD" }, { "name": "a variation selector, ignorable", "text": "perro luna casa verde tren mar️", "words": [ "perro", "luna", "casa", "verde", "tren", "mar️" ], "result": "error", "error": "wordkey: the words hold the invisible character U+FE0F" }, { "name": "a byte order mark", "text": "perro luna casa verde tren mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "result": "error", "error": "wordkey: the words hold the invisible character U+FEFF" }, { "name": "a control character", "text": "perro luna casa verde tren mar\u0001", "words": [ "perro", "luna", "casa", "verde", "tren", "mar\u0001" ], "result": "error", "error": "wordkey: the words hold the control character U+0001" }, { "name": "a C1 control character", "text": "perro luna casa verde tren marŸ", "words": [ "perro", "luna", "casa", "verde", "tren", "marŸ" ], "result": "error", "error": "wordkey: the words hold the control character U+009F" }, { "name": "DEL", "text": "perro luna casa verde tren mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "result": "error", "error": "wordkey: the words hold the control character U+007F" }, { "name": "an unassigned code point", "text": "perro luna casa verde tren mar͸", "words": [ "perro", "luna", "casa", "verde", "tren", "mar͸" ], "result": "error", "error": "wordkey: the words hold U+0378, unassigned in Unicode 18.0.0" }, { "name": "a private use code point is assigned", "text": "perro luna casa verde tren mar", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "result": "ok" }, { "name": "an emoji", "text": "perro luna casa verde tren mar 🌍", "words": [ "perro", "luna", "casa", "verde", "tren", "mar", "🌍" ], "result": "ok" } ], "keys": [ { "name": "the vector of §38.1", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 1000, "capsule_id": "000102030405060708090a0b0c0d0e0f", "key": "fceec4d8ca8de86c85a1f26ed49f82a2b38431bd0ce36db995ae7dfd49b96e41", "recipient": "age1fqk6hflp8q5um2qrl5ckd8lu4x75rhtuncfus7f7up3v3v0zss0stdpqkr" }, { "name": "the second vector of the annex of v0.16, 79.7", "words": [ "nandu", "pinguino", "camion", "arbol", "eter", "ola" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 1000, "capsule_id": "000102030405060708090a0b0c0d0e0f", "key": "273295d29370126a3be50b743132718d3cd9137fb3bb4cb20aa23163d2e19bb7", "recipient": "age1zje929pk9ej2kqp4pjra5rs4cly7k7deaeclz0jrp5843u6qcy5qwsvjdh" }, { "name": "the next round", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 1001, "capsule_id": "000102030405060708090a0b0c0d0e0f", "key": "f4faecd9cac596b1a99c399d92cb031955201e5fc0db2c5d67163b1d244ef960", "recipient": "age1f53tt9sjxc7l635jxc2xnerssquk7dl62j6nhvtjlefjwv5elgqsy2h9ae" }, { "name": "another capsule_id", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 1000, "capsule_id": "000102030405060708090a0b0c0d0e0e", "key": "08fe6614ea4bbcfc324c69c370d22ad5d32e09333606b565c3831fe0110d2fe2", "recipient": "age1e2quqz6svvjqa5wrpwlkyr9362vqw8qfz43thq39977sts5wj4sqv6ep86" }, { "name": "another chain hash", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "chain_hash": "8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce", "round": 1000, "capsule_id": "000102030405060708090a0b0c0d0e0f", "key": "5da2ab56a8c841ca05970470bca4c7c108543acf2e4129e6743a09c0443577ed", "recipient": "age1zn5cqedknwdlqsts23azduere4zlugc3fvz7m0sfrhcsfpz05axswl0km6" }, { "name": "round 2^53 - 1", "words": [ "perro", "luna", "casa", "verde", "tren", "mar" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 9007199254740991, "capsule_id": "000102030405060708090a0b0c0d0e0f", "key": "6077e1675c84264fbe03a33abb1359520fc6f9fdb9b293603779127327bce7d4", "recipient": "age1fjv9e2a6vd7pcr20llzsxthauam80snlskxcrr7rp0ulvy62xyuqt3v3jf" }, { "name": "words that are not ASCII", "words": [ "abaco", "arbol", "nino", "σασ", "nandu", "straße" ], "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971", "round": 1000, "capsule_id": "ffeeddccbbaa99887766554433221100", "key": "f64bce685596c1db68058125c0caf7cf4ab949d29d2829dff5627da5f758e6cd", "recipient": "age1vc7tfsz048an895g5nxpkpj99cd54j44c3qv95kg57yu3klfxfdstpvqm6" } ] }