Started on documentation
[szyfrow.git] / docs / szyfrow / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6 <meta name="generator" content="pdoc 0.9.2" />
7 <title>szyfrow API documentation</title>
8 <meta name="description" content="Simple ciphers, enciphering, deciphering, and breaking …" />
9 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11 <link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12 <style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13 <style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14 <style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15 <script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16 <script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17 </head>
18 <body>
19 <main>
20 <article id="content">
21 <header>
22 <h1 class="title">Package <code>szyfrow</code></h1>
23 </header>
24 <section id="section-intro">
25 <p>Simple ciphers, enciphering, deciphering, and breaking.</p>
26 <p>The ciphers implemented here are mostly ones that predate mechanical cipher
27 systems. The most complex cipher is the Enigma of World War II.</p>
28 <p>Each cipher is presented with functions to encipher, decipher, and
29 automatically break messages with that cipher.</p>
30 <p>Most of the time, messages are broken by brute-force trying each possible key
31 and scoring the resulting deciphered message using a bag-of-words probability
32 measure (or a bag-of-bigrams, or a bag-of-trigrams).</p>
33 <p>You can find more information on the ciphers and how they are implemented in
34 the <a href="https://work.njae.me.uk/tag/codes-and-ciphers/">codes and ciphers area of my blog</a>.</p>
35 <p>Ciphers work on messages encoded with the 26 letters of the Latin alphabet,
36 without accents (the letters contained in the <code>string.ascii_letters</code> constant).
37 Most of the ciphers convert letters to lowercase, strip accents from letters,
38 and drop all other characters (such as spaces and punctuation).</p>
39 <p><code><a title="szyfrow.support.text_prettify" href="support/text_prettify.html">szyfrow.support.text_prettify</a></code> contains functions to make the output easier
40 to read, such as automatically recovering word boundaries.</p>
41 <p>The name comes from the Polish cipher bureau, the Biuro Szyfrów, who were
42 breaking Enigma ciphers by hand before World War II.</p>
43 <details class="source">
44 <summary>
45 <span>Expand source code</span>
46 </summary>
47 <pre><code class="python">&#34;&#34;&#34;Simple ciphers, enciphering, deciphering, and breaking.
48
49 The ciphers implemented here are mostly ones that predate mechanical cipher
50 systems. The most complex cipher is the Enigma of World War II.
51
52 Each cipher is presented with functions to encipher, decipher, and
53 automatically break messages with that cipher.
54
55 Most of the time, messages are broken by brute-force trying each possible key
56 and scoring the resulting deciphered message using a bag-of-words probability
57 measure (or a bag-of-bigrams, or a bag-of-trigrams).
58
59 You can find more information on the ciphers and how they are implemented in
60 the [codes and ciphers area of my blog](https://work.njae.me.uk/tag/codes-and-ciphers/).
61
62 Ciphers work on messages encoded with the 26 letters of the Latin alphabet,
63 without accents (the letters contained in the `string.ascii_letters` constant).
64 Most of the ciphers convert letters to lowercase, strip accents from letters,
65 and drop all other characters (such as spaces and punctuation).
66
67 `szyfrow.support.text_prettify` contains functions to make the output easier
68 to read, such as automatically recovering word boundaries.
69
70 The name comes from the Polish cipher bureau, the Biuro Szyfrów, who were
71 breaking Enigma ciphers by hand before World War II.
72 &#34;&#34;&#34;</code></pre>
73 </details>
74 </section>
75 <section>
76 <h2 class="section-title" id="header-submodules">Sub-modules</h2>
77 <dl>
78 <dt><code class="name"><a title="szyfrow.affine" href="affine.html">szyfrow.affine</a></code></dt>
79 <dd>
80 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Affine_cipher">affine cipher</a>.
81 Also attempts to break messages that use an …</p></div>
82 </dd>
83 <dt><code class="name"><a title="szyfrow.amsco" href="amsco.html">szyfrow.amsco</a></code></dt>
84 <dd>
85 <div class="desc"><p>Enciphering and deciphering using the <a href="http://ericbrandel.com/2016/10/09/the-amsco-cipher/">Amsco cipher</a>.
86 Also attempts to break messages that use …</p></div>
87 </dd>
88 <dt><code class="name"><a title="szyfrow.autokey" href="autokey.html">szyfrow.autokey</a></code></dt>
89 <dd>
90 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Autokey_cipher">Autokey cipher</a>.
91 Also attempts to break messages that use a …</p></div>
92 </dd>
93 <dt><code class="name"><a title="szyfrow.bifid" href="bifid.html">szyfrow.bifid</a></code></dt>
94 <dd>
95 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Bifid_cipher">Bifid cipher</a>.
96 Also attempts to break messages that use a Bifid …</p></div>
97 </dd>
98 <dt><code class="name"><a title="szyfrow.bombe" href="bombe.html">szyfrow.bombe</a></code></dt>
99 <dd>
100 <div class="desc"><p>A simulator for Bombe machines …</p></div>
101 </dd>
102 <dt><code class="name"><a title="szyfrow.cadenus" href="cadenus.html">szyfrow.cadenus</a></code></dt>
103 <dd>
104 <div class="desc"><p>Enciphering and deciphering using the <a href="https://www.thonky.com/kryptos/cadenus-cipher">Cadenus cipher</a>.
105 Also attempts to break messages that use a …</p></div>
106 </dd>
107 <dt><code class="name"><a title="szyfrow.caesar" href="caesar.html">szyfrow.caesar</a></code></dt>
108 <dd>
109 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Caesar_cipher">Caesar cipher</a>.
110 Also attempts to break messages that use a Caesar …</p></div>
111 </dd>
112 <dt><code class="name"><a title="szyfrow.column_transposition" href="column_transposition.html">szyfrow.column_transposition</a></code></dt>
113 <dd>
114 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Bifid_cipher">Column transposition cipher</a>.
115 Also attempts to break messages that …</p></div>
116 </dd>
117 <dt><code class="name"><a title="szyfrow.enigma" href="enigma.html">szyfrow.enigma</a></code></dt>
118 <dd>
119 <div class="desc"><p>A simulator for Enigma machines …</p></div>
120 </dd>
121 <dt><code class="name"><a title="szyfrow.keyword_cipher" href="keyword_cipher.html">szyfrow.keyword_cipher</a></code></dt>
122 <dd>
123 <div class="desc"><p>Monoalphabetic substitution ciphers, mainly done by keyword. Enciphering
124 and deciphering, and a couple of ways to break these ciphers.</p></div>
125 </dd>
126 <dt><code class="name"><a title="szyfrow.language_model_files" href="language_model_files/index.html">szyfrow.language_model_files</a></code></dt>
127 <dd>
128 <div class="desc"><p>Descriptions of English, used for building language models …</p></div>
129 </dd>
130 <dt><code class="name"><a title="szyfrow.playfair" href="playfair.html">szyfrow.playfair</a></code></dt>
131 <dd>
132 <div class="desc"><p>Enciphering and deciphering using the <a href="https://en.wikipedia.org/wiki/Playfair_cipher">Playfair cipher</a>.
133 Also attempts to break messages that use a …</p></div>
134 </dd>
135 <dt><code class="name"><a title="szyfrow.pocket_enigma" href="pocket_enigma.html">szyfrow.pocket_enigma</a></code></dt>
136 <dd>
137 <div class="desc"><p>The Pocket Enigma machine, a simple example that illustrates the mechanisms
138 of the Enigma machine. See [a …</p></div>
139 </dd>
140 <dt><code class="name"><a title="szyfrow.polybius" href="polybius.html">szyfrow.polybius</a></code></dt>
141 <dd>
142 <div class="desc"><p>Simple digraph substitution cipher, using the
143 <a href="https://en.wikipedia.org/wiki/Polybius_square">Polybius square</a>. Enciphering
144 and deciphering, and a …</p></div>
145 </dd>
146 <dt><code class="name"><a title="szyfrow.railfence" href="railfence.html">szyfrow.railfence</a></code></dt>
147 <dd>
148 <div class="desc"><p><a href="https://en.wikipedia.org/wiki/Rail_fence_cipher">Railfence transposition cipher</a></p></div>
149 </dd>
150 <dt><code class="name"><a title="szyfrow.support" href="support/index.html">szyfrow.support</a></code></dt>
151 <dd>
152 <div class="desc"><p>Support utilities for ciphers …</p></div>
153 </dd>
154 <dt><code class="name"><a title="szyfrow.vigenere" href="vigenere.html">szyfrow.vigenere</a></code></dt>
155 <dd>
156 <div class="desc"><p><a href="https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher">Vigenère polyalphabetic substitution ciphers</a>,
157 mainly done by keyword. Also does Beaufort …</p></div>
158 </dd>
159 </dl>
160 </section>
161 <section>
162 </section>
163 <section>
164 </section>
165 <section>
166 </section>
167 </article>
168 <nav id="sidebar">
169 <h1>Index</h1>
170 <div class="toc">
171 <ul></ul>
172 </div>
173 <ul id="index">
174 <li><h3><a href="#header-submodules">Sub-modules</a></h3>
175 <ul>
176 <li><code><a title="szyfrow.affine" href="affine.html">szyfrow.affine</a></code></li>
177 <li><code><a title="szyfrow.amsco" href="amsco.html">szyfrow.amsco</a></code></li>
178 <li><code><a title="szyfrow.autokey" href="autokey.html">szyfrow.autokey</a></code></li>
179 <li><code><a title="szyfrow.bifid" href="bifid.html">szyfrow.bifid</a></code></li>
180 <li><code><a title="szyfrow.bombe" href="bombe.html">szyfrow.bombe</a></code></li>
181 <li><code><a title="szyfrow.cadenus" href="cadenus.html">szyfrow.cadenus</a></code></li>
182 <li><code><a title="szyfrow.caesar" href="caesar.html">szyfrow.caesar</a></code></li>
183 <li><code><a title="szyfrow.column_transposition" href="column_transposition.html">szyfrow.column_transposition</a></code></li>
184 <li><code><a title="szyfrow.enigma" href="enigma.html">szyfrow.enigma</a></code></li>
185 <li><code><a title="szyfrow.keyword_cipher" href="keyword_cipher.html">szyfrow.keyword_cipher</a></code></li>
186 <li><code><a title="szyfrow.language_model_files" href="language_model_files/index.html">szyfrow.language_model_files</a></code></li>
187 <li><code><a title="szyfrow.playfair" href="playfair.html">szyfrow.playfair</a></code></li>
188 <li><code><a title="szyfrow.pocket_enigma" href="pocket_enigma.html">szyfrow.pocket_enigma</a></code></li>
189 <li><code><a title="szyfrow.polybius" href="polybius.html">szyfrow.polybius</a></code></li>
190 <li><code><a title="szyfrow.railfence" href="railfence.html">szyfrow.railfence</a></code></li>
191 <li><code><a title="szyfrow.support" href="support/index.html">szyfrow.support</a></code></li>
192 <li><code><a title="szyfrow.vigenere" href="vigenere.html">szyfrow.vigenere</a></code></li>
193 </ul>
194 </li>
195 </ul>
196 </nav>
197 </main>
198 <footer id="footer">
199 <p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
200 </footer>
201 </body>
202 </html>