[{"data":1,"prerenderedAt":745},["ShallowReactive",2],{"navigation_docs":3,"-ciphers-rabbit":220,"-ciphers-rabbit-surround":742},[4,36],{"title":5,"path":6,"stem":7,"children":8,"icon":35},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Encode and decode","\u002Fguide\u002Ftransform","1.guide\u002F02.transform",{"title":16,"path":17,"stem":18},"Analysis","\u002Fguide\u002Fanalysis","1.guide\u002F03.analysis",{"title":20,"path":21,"stem":22},"CLI","\u002Fguide\u002Fcli","1.guide\u002F04.cli",{"title":24,"path":25,"stem":26},"Agents","\u002Fguide\u002Fagents","1.guide\u002F05.agents",{"title":28,"path":29,"stem":30},"Custom ciphers","\u002Fguide\u002Fcustom","1.guide\u002F06.custom",{"title":32,"path":33,"stem":34},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F07.playground","i-lucide-book-open",{"title":37,"path":38,"stem":39,"children":40,"icon":219},"Ciphers","\u002Fciphers","2.ciphers\u002F00.index",[41,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":42,"path":38,"stem":39},"Overview",{"title":44,"path":45,"stem":46},"Classical","\u002Fciphers\u002Fclassical","2.ciphers\u002F01.classical",{"title":48,"path":49,"stem":50},"Caesar","\u002Fciphers\u002Fcaesar","2.ciphers\u002F02.caesar",{"title":52,"path":53,"stem":54},"ROT-13","\u002Fciphers\u002Frot13","2.ciphers\u002F03.rot13",{"title":56,"path":57,"stem":58},"ROT-47","\u002Fciphers\u002Frot47","2.ciphers\u002F04.rot47",{"title":60,"path":61,"stem":62},"Atbash","\u002Fciphers\u002Fatbash","2.ciphers\u002F05.atbash",{"title":64,"path":65,"stem":66},"Affine","\u002Fciphers\u002Faffine","2.ciphers\u002F06.affine",{"title":68,"path":69,"stem":70},"Vigenère","\u002Fciphers\u002Fvigenere","2.ciphers\u002F07.vigenere",{"title":72,"path":73,"stem":74},"Beaufort","\u002Fciphers\u002Fbeaufort","2.ciphers\u002F08.beaufort",{"title":76,"path":77,"stem":78},"Autokey","\u002Fciphers\u002Fautokey","2.ciphers\u002F09.autokey",{"title":80,"path":81,"stem":82},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F10.trithemius",{"title":84,"path":85,"stem":86},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F11.alberti",{"title":88,"path":89,"stem":90},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F12.playfair",{"title":92,"path":93,"stem":94},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F13.polybius",{"title":96,"path":97,"stem":98},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F14.morse",{"title":100,"path":101,"stem":102},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F15.bacon",{"title":104,"path":105,"stem":106},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F16.tap-code",{"title":108,"path":109,"stem":110},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F17.adfgvx",{"title":112,"path":113,"stem":114},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F18.bifid",{"title":116,"path":117,"stem":118},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F19.rail-fence",{"title":120,"path":121,"stem":122},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F20.columnar",{"title":124,"path":125,"stem":126},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F21.enigma",{"title":128,"path":129,"stem":130},"Block","\u002Fciphers\u002Fblock","2.ciphers\u002F22.block",{"title":132,"path":133,"stem":134},"AES (ECB)","\u002Fciphers\u002Faes","2.ciphers\u002F23.aes",{"title":136,"path":137,"stem":138},"AES (CBC)","\u002Fciphers\u002Faes-cbc","2.ciphers\u002F24.aes-cbc",{"title":140,"path":141,"stem":142},"AES (CFB)","\u002Fciphers\u002Faes-cfb","2.ciphers\u002F25.aes-cfb",{"title":144,"path":145,"stem":146},"AES (OFB)","\u002Fciphers\u002Faes-ofb","2.ciphers\u002F26.aes-ofb",{"title":148,"path":149,"stem":150},"AES (CTR)","\u002Fciphers\u002Faes-ctr","2.ciphers\u002F27.aes-ctr",{"title":152,"path":153,"stem":154},"AES (CCM)","\u002Fciphers\u002Faes-ccm","2.ciphers\u002F28.aes-ccm",{"title":156,"path":157,"stem":158},"AES (OCB)","\u002Fciphers\u002Faes-ocb","2.ciphers\u002F29.aes-ocb",{"title":160,"path":161,"stem":162},"AES (LRW)","\u002Fciphers\u002Faes-lrw","2.ciphers\u002F30.aes-lrw",{"title":164,"path":165,"stem":166},"AES (XTS)","\u002Fciphers\u002Faes-xts","2.ciphers\u002F31.aes-xts",{"title":168,"path":169,"stem":170},"AES (CBC-MAC)","\u002Fciphers\u002Faes-cbc-mac","2.ciphers\u002F32.aes-cbc-mac",{"title":172,"path":173,"stem":174},"Rijndael (ECB)","\u002Fciphers\u002Frijndael","2.ciphers\u002F33.rijndael",{"title":176,"path":177,"stem":178},"DES (ECB)","\u002Fciphers\u002Fdes","2.ciphers\u002F34.des",{"title":180,"path":181,"stem":182},"DESX (ECB)","\u002Fciphers\u002Fdesx","2.ciphers\u002F35.desx",{"title":184,"path":185,"stem":186},"Triple DES (ECB)","\u002Fciphers\u002Ftriple-des","2.ciphers\u002F36.triple-des",{"title":188,"path":189,"stem":190},"Triple DES (CBC)","\u002Fciphers\u002Ftriple-des-cbc","2.ciphers\u002F37.triple-des-cbc",{"title":192,"path":193,"stem":194},"Blowfish (ECB)","\u002Fciphers\u002Fblowfish","2.ciphers\u002F38.blowfish",{"title":196,"path":197,"stem":198},"IDEA (ECB)","\u002Fciphers\u002Fidea","2.ciphers\u002F39.idea",{"title":200,"path":201,"stem":202},"Lucifer (ECB)","\u002Fciphers\u002Flucifer","2.ciphers\u002F40.lucifer",{"title":204,"path":205,"stem":206},"MARS (ECB)","\u002Fciphers\u002Fmars","2.ciphers\u002F41.mars",{"title":208,"path":209,"stem":210},"Serpent (ECB)","\u002Fciphers\u002Fserpent","2.ciphers\u002F42.serpent",{"title":212,"path":213,"stem":214},"Stream","\u002Fciphers\u002Fstream","2.ciphers\u002F43.stream",{"title":216,"path":217,"stem":218},"Rabbit","\u002Fciphers\u002Frabbit","2.ciphers\u002F44.rabbit","i-lucide-library",{"id":221,"title":216,"body":222,"description":736,"extension":737,"links":738,"meta":739,"navigation":500,"path":217,"seo":740,"stem":218,"__hash__":741},"docs\u002F2.ciphers\u002F44.rabbit.md",{"type":223,"value":224,"toc":728},"minimark",[225,229,233,236,241,244,247,274,279,282,286,297,390,404,407,448,452,455,469,560,576,582,586,595,614,618,621,661,677,681,684,717,724],[226,227],"cipher-facts",{"name":228},"rabbit",[230,231,232],"p",{},"Rabbit comes from Denmark. Martin Boesgaard, Mette Vesterager, Thomas Pedersen, Jesper Christiansen and Ove Scavenius showed it at FSE in 2003. It went into eSTREAM in 2005 and made the final portfolio of software ciphers in 2008. RFC 4503 has described it since 2006. For years you needed a license to use it commercially, until the designers put it in the public domain in October 2008.",[230,234,235],{},"The name fits. It was built to be fast in software, a few cycles per byte on a Pentium 3, back when that mattered to anyone.",[237,238,240],"h2",{"id":239},"how-it-runs","How it runs",[230,242,243],{},"The state is 513 bits. Eight 32-bit state words, eight 32-bit counter words, and one carry bit that links the counters together.",[230,245,246],{},"Every step does two things:",[248,249,250,267],"ul",{},[251,252,253,254,258,259,262,263,266],"li",{},"adds fixed constants to the counters, ",[255,256,257],"code",{},"0x4D34D34D",", ",[255,260,261],{},"0xD34D34D3"," and ",[255,264,265],{},"0x34D34D34"," in turn, carrying from one counter to the next,",[251,268,269,270,273],{},"runs every state word plus its counter through ",[255,271,272],{},"g"," and mixes the eight results back into the state with additions and rotations by 8 and 16 bits.",[230,275,276,278],{},[255,277,272],{}," is the whole trick. Add two words, square the sum into 64 bits, XOR the high half with the low half. No S-boxes, no tables. Then 16 bytes of keystream get pulled out of the state, each 16-bit piece the XOR of halves from two different words.",[230,280,281],{},"The key fills the state and the counters, and four steps shake it up. The IV is optional. With one, it gets XORed into the counters and four more steps run. Without it you skip that part, and then you must never start the cipher twice with the same key, RFC 4503 says so in §3.2.",[237,283,285],{"id":284},"keys-and-bytes","Keys and bytes",[230,287,288,289,292,293,296],{},"The key is 32 hex digits and ",[255,290,291],{},"iv"," is 16. Case doesn't matter and spaces are ignored. Text goes in as UTF-8, ciphertext comes out as lowercase hex, and ",[255,294,295],{},"decode"," wants hex back.",[298,299,304],"pre",{"className":300,"code":301,"language":302,"meta":303,"style":303},"language-ts shiki shiki-themes ciphers ciphers ciphers","const rabbit = create(\"rabbit\");\nconst key = \"912813292e3d36fe3bfc62f1dc51c3ac\";\nrabbit.encode(\"ATTACK AT DAWN\", { key }).text; \u002F\u002F \"b29c6ab764eac93e97a4c3a306d2\"\nrabbit.decode(\"b29c6ab764eac93e97a4c3a306d2\", { key }).text; \u002F\u002F \"ATTACK AT DAWN\"\n","ts","",[255,305,306,336,352,373],{"__ignoreMap":303},[307,308,311,315,319,322,326,329,333],"span",{"class":309,"line":310},"line",1,[307,312,314],{"class":313},"skH_V","const",[307,316,318],{"class":317},"s38Sx"," rabbit ",[307,320,321],{"class":313},"=",[307,323,325],{"class":324},"sK71F"," create",[307,327,328],{"class":317},"(",[307,330,332],{"class":331},"shU9J","\"rabbit\"",[307,334,335],{"class":317},");\n",[307,337,339,341,344,346,349],{"class":309,"line":338},2,[307,340,314],{"class":313},[307,342,343],{"class":317}," key ",[307,345,321],{"class":313},[307,347,348],{"class":331}," \"912813292e3d36fe3bfc62f1dc51c3ac\"",[307,350,351],{"class":317},";\n",[307,353,355,358,361,363,366,369],{"class":309,"line":354},3,[307,356,357],{"class":317},"rabbit.",[307,359,360],{"class":324},"encode",[307,362,328],{"class":317},[307,364,365],{"class":331},"\"ATTACK AT DAWN\"",[307,367,368],{"class":317},", { key }).text; ",[307,370,372],{"class":371},"scIB-","\u002F\u002F \"b29c6ab764eac93e97a4c3a306d2\"\n",[307,374,376,378,380,382,385,387],{"class":309,"line":375},4,[307,377,357],{"class":317},[307,379,295],{"class":324},[307,381,328],{"class":317},[307,383,384],{"class":331},"\"b29c6ab764eac93e97a4c3a306d2\"",[307,386,368],{"class":317},[307,388,389],{"class":371},"\u002F\u002F \"ATTACK AT DAWN\"\n",[230,391,392,393,258,396,399,400,403],{},"That key is the second one from Appendix A of RFC 4503, and this ciphertext can be checked by hand. The last 14 bytes of its ",[255,394,395],{},"S[0]",[255,397,398],{},"F3 C8 3E F6 ...",", XORed with ",[255,401,402],{},"ATTACK AT DAWN",". Why the last 14 and not the first, that's the next section.",[230,405,406],{},"With an IV, the same check works against A.2:",[298,408,410],{"className":300,"code":409,"language":302,"meta":303,"style":303},"rabbit.encode(\"ATTACK AT DAWN\", { key: \"0\".repeat(32), iv: \"c373f575c1267e59\" }).text;\n\u002F\u002F \"0fed0c4151a9c09d98b266402a23\"\n",[255,411,412,443],{"__ignoreMap":303},[307,413,414,416,418,420,422,425,428,431,434,437,440],{"class":309,"line":310},[307,415,357],{"class":317},[307,417,360],{"class":324},[307,419,328],{"class":317},[307,421,365],{"class":331},[307,423,424],{"class":317},", { key: ",[307,426,427],{"class":331},"\"0\"",[307,429,430],{"class":317},".",[307,432,433],{"class":324},"repeat",[307,435,436],{"class":317},"(32), iv: ",[307,438,439],{"class":331},"\"c373f575c1267e59\"",[307,441,442],{"class":317}," }).text;\n",[307,444,445],{"class":309,"line":338},[307,446,447],{"class":371},"\u002F\u002F \"0fed0c4151a9c09d98b266402a23\"\n",[237,449,451],{"id":450},"which-end-is-first","Which end is first",[230,453,454],{},"This is where Rabbit code out there disagrees, and it's not a bug on either side. RFC 4503 treats the key, the IV and every keystream block as one big number, and writes it most significant byte first. The eSTREAM reference code reads the same bytes least significant first. Crypto++, wolfSSL and libtomcrypt follow the reference. Same key bytes, different ciphertext.",[230,456,457,460,461,464,465,468],{},[255,458,459],{},"endian"," picks the order. ",[255,462,463],{},"big"," is the RFC's and the default, and it's also what CyberChef does by default. ",[255,466,467],{},"little"," gives what Crypto++ gives:",[298,470,472],{"className":300,"code":471,"language":302,"meta":303,"style":303},"rabbit.encode(\"ATTACK AT DAWN\", { key, endian: \"little\" }).text; \u002F\u002F \"32214a7fa92d752007004367e552\"\n\nrabbit.encode(\"Rabbit stream cipher test\", {\n  key: \"23c2731e8b5469fd8dabb5bc592a0f3a\",\n  iv: \"712906405ef03201\",\n  endian: \"little\",\n}).text;\n\u002F\u002F \"1ae2d4edcf9b6063b00fd6fda0b223aded157e77031cf0440b\", the first example on the Crypto++ wiki\n",[255,473,474,496,502,516,527,538,548,554],{"__ignoreMap":303},[307,475,476,478,480,482,484,487,490,493],{"class":309,"line":310},[307,477,357],{"class":317},[307,479,360],{"class":324},[307,481,328],{"class":317},[307,483,365],{"class":331},[307,485,486],{"class":317},", { key, endian: ",[307,488,489],{"class":331},"\"little\"",[307,491,492],{"class":317}," }).text; ",[307,494,495],{"class":371},"\u002F\u002F \"32214a7fa92d752007004367e552\"\n",[307,497,498],{"class":309,"line":338},[307,499,501],{"emptyLinePlaceholder":500},true,"\n",[307,503,504,506,508,510,513],{"class":309,"line":354},[307,505,357],{"class":317},[307,507,360],{"class":324},[307,509,328],{"class":317},[307,511,512],{"class":331},"\"Rabbit stream cipher test\"",[307,514,515],{"class":317},", {\n",[307,517,518,521,524],{"class":309,"line":375},[307,519,520],{"class":317},"  key: ",[307,522,523],{"class":331},"\"23c2731e8b5469fd8dabb5bc592a0f3a\"",[307,525,526],{"class":317},",\n",[307,528,530,533,536],{"class":309,"line":529},5,[307,531,532],{"class":317},"  iv: ",[307,534,535],{"class":331},"\"712906405ef03201\"",[307,537,526],{"class":317},[307,539,541,544,546],{"class":309,"line":540},6,[307,542,543],{"class":317},"  endian: ",[307,545,489],{"class":331},[307,547,526],{"class":317},[307,549,551],{"class":309,"line":550},7,[307,552,553],{"class":317},"}).text;\n",[307,555,557],{"class":309,"line":556},8,[307,558,559],{"class":371},"\u002F\u002F \"1ae2d4edcf9b6063b00fd6fda0b223aded157e77031cf0440b\", the first example on the Crypto++ wiki\n",[230,561,562,563,565,566,568,569,571,572,575],{},"A short last block takes the least significant bytes of its keystream, as §2.8 says. With ",[255,564,467],{}," those are the first bytes of the block, with ",[255,567,463],{}," the last. That's why a 14-byte text above lines up with the end of ",[255,570,395],{},", and why CyberChef's own test encrypts eight zero bytes to ",[255,573,574],{},"f56b45261c4af702",", the back half of the first block.",[230,577,578,579,581],{},"If a vector doesn't match, flip ",[255,580,459],{}," before anything else.",[237,583,585],{"id":584},"checked-against","Checked against",[230,587,588,589,262,591,594],{},"All six keystreams in Appendix A of RFC 4503, three keys without an IV and three IVs under the zero key, both ways. Little-endian output against Crypto++ 8.9 ",[255,590,216],{},[255,592,593],{},"RabbitWithIV",", and CyberChef's Rabbit tests for the short last block and the Crypto++ wiki example.",[230,596,597,598,601,602,605,606,609,610,613],{},"One trap if you check the RFC yourself. Appendix B prints the key as ",[255,599,600],{},"91 28 13 29 2E ED ...",", while Appendix A has ",[255,603,604],{},"2E 3D"," there and the state words in B, ",[255,607,608],{},"X1 = 0x13292E3D",", agree with A. The ",[255,611,612],{},"ED"," is a typo.",[237,615,617],{"id":616},"same-iv-twice","Same IV twice",[230,619,620],{},"Same key and same IV means the same keystream. XOR two ciphertexts and it cancels out:",[298,622,624],{"className":300,"code":623,"language":302,"meta":303,"style":303},"rabbit.encode(\"ATTACK AT DAWN\", { key }).text; \u002F\u002F \"b29c6ab764eac93e97a4c3a306d2\"\nrabbit.encode(\"ATTACK AT DUSK\", { key }).text; \u002F\u002F \"b29c6ab764eac93e97a4c3b702d7\"\n\u002F\u002F XOR: \"0000000000000000000000140405\"\n",[255,625,626,640,656],{"__ignoreMap":303},[307,627,628,630,632,634,636,638],{"class":309,"line":310},[307,629,357],{"class":317},[307,631,360],{"class":324},[307,633,328],{"class":317},[307,635,365],{"class":331},[307,637,368],{"class":317},[307,639,372],{"class":371},[307,641,642,644,646,648,651,653],{"class":309,"line":338},[307,643,357],{"class":317},[307,645,360],{"class":324},[307,647,328],{"class":317},[307,649,650],{"class":331},"\"ATTACK AT DUSK\"",[307,652,368],{"class":317},[307,654,655],{"class":371},"\u002F\u002F \"b29c6ab764eac93e97a4c3b702d7\"\n",[307,657,658],{"class":309,"line":354},[307,659,660],{"class":371},"\u002F\u002F XOR: \"0000000000000000000000140405\"\n",[230,662,663,664,667,668,671,672,676],{},"That's ",[255,665,666],{},"DAWN"," XOR ",[255,669,670],{},"DUSK",", no key involved. The two-time pad, the same leak as in ",[673,674,675],"a",{"href":149},"CTR",". Every message wants its own IV. And with 64 bits of IV there are only so many of them, so someone attacking lots of keys at once gets down to about 96 bits of work instead of 128.",[237,678,680],{"id":679},"how-strong-is-it","How strong is it",[230,682,683],{},"Nobody broke it. Aumasson found a small bias in the output in 2006, a distinguisher at 2^247. Lu, Wang and Ling pushed it down to 2^158 in 2008, still far above just trying all 2^128 keys.",[230,685,686,687,690,691,693,694,696,697,699,700,702,703,706,707,709,710,713,714,716],{},"A key that isn't 32 hex digits is an ",[255,688,689],{},"InvalidOptionError",", so is an ",[255,692,291],{}," that isn't 16 hex digits or an ",[255,695,459],{}," that isn't ",[255,698,463],{}," or ",[255,701,467],{},". A missing key is a ",[255,704,705],{},"MissingOptionError",", a missing IV just skips the IV setup. On ",[255,708,295],{},", an odd number of hex digits is a ",[255,711,712],{},"CipherError",". No padding means only the UTF-8 check catches a wrong key or the wrong ",[255,715,459],{},", and a short message can still slip through as valid garbage.",[230,718,719,720,723],{},"No integrity check, plain TypeScript, ",[255,721,722],{},"BigInt"," in the squaring, not constant time. It's here for the puzzle that uses Rabbit and for seeing how a stream cipher works. Real data wants your platform's crypto.",[725,726,727],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":303,"searchDepth":338,"depth":338,"links":729},[730,731,732,733,734,735],{"id":239,"depth":338,"text":240},{"id":284,"depth":338,"text":285},{"id":450,"depth":338,"text":451},{"id":584,"depth":338,"text":585},{"id":616,"depth":338,"text":617},{"id":679,"depth":338,"text":680},"The eSTREAM stream cipher from RFC 4503. A 128-bit key and an optional 64-bit IV give 16 bytes of keystream per step. UTF-8 text in and hex out with no padding.","md",null,{},{"title":216,"description":736},"FYUlMhbzPfa1o7h3FBOV_Z0XwHdBO-pGAUJEn3cnfC0",[743,738],{"title":212,"path":213,"stem":214,"description":744,"children":-1},"Rabbit for now. A key and an IV grow a keystream and the keystream is XORed into the text. UTF-8 bytes in and hex out.",1790616466640]