[{"data":1,"prerenderedAt":285},["ShallowReactive",2],{"navigation_docs":3,"-guide-playground":116,"-guide-playground-surround":280},[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-solar-book-2-linear",{"title":37,"path":38,"stem":39,"children":40,"icon":115},"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],{"title":42,"path":38,"stem":39},"Overview",{"title":44,"path":45,"stem":46},"Caesar","\u002Fciphers\u002Fcaesar","2.ciphers\u002F01.caesar",{"title":48,"path":49,"stem":50},"ROT-13","\u002Fciphers\u002Frot13","2.ciphers\u002F02.rot13",{"title":52,"path":53,"stem":54},"ROT-47","\u002Fciphers\u002Frot47","2.ciphers\u002F03.rot47",{"title":56,"path":57,"stem":58},"Atbash","\u002Fciphers\u002Fatbash","2.ciphers\u002F04.atbash",{"title":60,"path":61,"stem":62},"Affine","\u002Fciphers\u002Faffine","2.ciphers\u002F05.affine",{"title":64,"path":65,"stem":66},"Vigenère","\u002Fciphers\u002Fvigenere","2.ciphers\u002F06.vigenere",{"title":68,"path":69,"stem":70},"Trithemius","\u002Fciphers\u002Ftrithemius","2.ciphers\u002F07.trithemius",{"title":72,"path":73,"stem":74},"Alberti","\u002Fciphers\u002Falberti","2.ciphers\u002F08.alberti",{"title":76,"path":77,"stem":78},"Playfair","\u002Fciphers\u002Fplayfair","2.ciphers\u002F09.playfair",{"title":80,"path":81,"stem":82},"Polybius square","\u002Fciphers\u002Fpolybius","2.ciphers\u002F10.polybius",{"title":84,"path":85,"stem":86},"Morse code","\u002Fciphers\u002Fmorse","2.ciphers\u002F11.morse",{"title":88,"path":89,"stem":90},"Bacon's cipher","\u002Fciphers\u002Fbacon","2.ciphers\u002F12.bacon",{"title":92,"path":93,"stem":94},"Tap code","\u002Fciphers\u002Ftap-code","2.ciphers\u002F13.tap-code",{"title":96,"path":97,"stem":98},"ADFGVX","\u002Fciphers\u002Fadfgvx","2.ciphers\u002F14.adfgvx",{"title":100,"path":101,"stem":102},"Bifid","\u002Fciphers\u002Fbifid","2.ciphers\u002F15.bifid",{"title":104,"path":105,"stem":106},"Rail fence","\u002Fciphers\u002Frail-fence","2.ciphers\u002F16.rail-fence",{"title":108,"path":109,"stem":110},"Columnar transposition","\u002Fciphers\u002Fcolumnar","2.ciphers\u002F17.columnar",{"title":112,"path":113,"stem":114},"Enigma M3","\u002Fciphers\u002Fenigma","2.ciphers\u002F18.enigma","i-solar-library-linear",{"id":117,"title":32,"body":118,"description":272,"extension":273,"links":274,"meta":275,"navigation":277,"path":33,"seo":278,"stem":34,"__hash__":279},"docs\u002F1.guide\u002F07.playground.md",{"type":119,"value":120,"toc":265},"minimark",[121,135,219,234,239,246,250,253,257],[122,123,124,125,129,130,134],"p",{},"The ",[126,127,32],"a",{"href":128},"\u002Fplayground"," imports ",[131,132,133],"code",{},"@agntn\u002Fciphers"," into the page and runs it in your browser. Every encode, decode, brute force and histogram is the library's own answer, the same code the CLI and the agent tools run. Nothing is sent anywhere. The docs worker serves the page and that's the end of its involvement.",[136,137,138,154],"table",{},[139,140,141],"thead",{},[142,143,144,148,151],"tr",{},[145,146,147],"th",{},"Operation",[145,149,150],{},"Runs",[145,152,153],{},"Tool equivalent",[155,156,157,173,188,204],"tbody",{},[142,158,159,163,168],{},[160,161,162],"td",{},"Encode",[160,164,165],{},[131,166,167],{},"create(cipher).encode(text, options)",[160,169,170],{},[131,171,172],{},"cipher_encode",[142,174,175,178,183],{},[160,176,177],{},"Decode",[160,179,180],{},[131,181,182],{},"create(cipher).decode(text, options)",[160,184,185],{},[131,186,187],{},"cipher_decode",[142,189,190,193,199],{},[160,191,192],{},"Brute force",[160,194,195,198],{},[131,196,197],{},"create(\"caesar\").decode(text, { shift })"," for 1 to 25",[160,200,201],{},[131,202,203],{},"cipher_brute_caesar",[142,205,206,209,214],{},[160,207,208],{},"Frequency",[160,210,211],{},[131,212,213],{},"analyzeFrequency(text, language)",[160,215,216],{},[131,217,218],{},"cipher_frequency",[122,220,221,222,225,226,229,230,233],{},"The option fields come from ",[131,223,224],{},"create(cipher).info().options",". A cipher that gains an option shows it without anyone touching the page. ",[131,227,228],{},"preserveCase"," and ",[131,231,232],{},"stripNonAlpha"," are the two flags every cipher shares.",[235,236,238],"h2",{"id":237},"every-state-is-a-link","Every state is a link",[122,240,241,242,245],{},"The form writes itself into the address: ",[131,243,244],{},"\u002Fplayground?op=encode&cipher=vigenere&text=ATTACK+AT+DAWN&key=LEMON"," opens the page on that answer. Paste it to someone and they see what you saw. The permalink button copies the current one.",[235,247,249],{"id":248},"the-two-snippets","The two snippets",[122,251,252],{},"Under the result the page prints the same call as a CLI line and as a tool invocation in JSON, both with copy buttons. They are built from the form, so what you copy is what you ran. Not an example that looks like it.",[235,254,256],{"id":255},"the-landing","The landing",[122,258,259,260,264],{},"The panels on the ",[126,261,263],{"href":262},"\u002F","home page"," walk through the eighteen ciphers with one sample sentence each, computed the same way, in the browser, on one clock. Hover a panel to pause it. The arrows under the code step it by hand.",{"title":266,"searchDepth":267,"depth":267,"links":268},"",2,[269,270,271],{"id":237,"depth":267,"text":238},{"id":248,"depth":267,"text":249},{"id":255,"depth":267,"text":256},"The page behind ciphers.agntn.dev\u002Fplayground runs the library in your browser. What it can tell you and what it can't.","md",null,{"icon":276},"i-solar-tuning-2-linear",true,{"title":32,"description":272},"-ChQFVVHTPiN0NSR9d5CtFgq3_vnHmNdZf4cDnXCd0Y",[281,283],{"title":28,"path":29,"stem":30,"description":282,"children":-1},"Extend the abstract Cipher, register the class, and it shows up in create, the CLI and the tools.",{"title":42,"path":38,"stem":39,"description":284,"children":-1},"Eighteen ciphers in eight families. Each page has the options, the keyspace, the conventions and a vector you can check yourself.",1788614952931]