summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/context
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-09 17:43:05 +0000
committerKarl Berry <karl@freefriends.org>2013-04-09 17:43:05 +0000
commitdd5d457b15c1951546bd0bf8ce5d6408d9d0f1e8 (patch)
tree0d4cd3cda9c288d4ea575b8d20bbef5dd06e4458 /Master/texmf-dist/doc/context
parent575a4952cc050d4c97c0238f4bce7ca36a3bc8a6 (diff)
enigma (8apr13)
git-svn-id: svn://tug.org/texlive/trunk@29802 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/context')
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/COPYING22
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/README29
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/enigma-doc.pdfbin0 -> 265288 bytes
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/enigma_manual.tex498
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-context.tex59
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-latex.tex53
-rw-r--r--Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-plain.tex50
7 files changed, 711 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/COPYING b/Master/texmf-dist/doc/context/third/enigma/enigma/COPYING
new file mode 100644
index 00000000000..dad85d026eb
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/COPYING
@@ -0,0 +1,22 @@
+Copyright 2011-2013 Philipp Gesang. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/README b/Master/texmf-dist/doc/context/third/enigma/enigma/README
new file mode 100644
index 00000000000..1da3eb07903
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/README
@@ -0,0 +1,29 @@
+Description of files:
+
+./enigma-example-context.tex usage example for Context
+./enigma-example-latex.tex usage example for LaTeX
+./enigma-example-plain.tex usage example for Plain
+./COPYING License (BSD)
+./enigma_manual.tex manual source (Context)
+./enigma-doc.pdf compiled manual
+./mtx-t-enigma.lua mtx script (run as “mtxrun --script enigma”)
+./enigma.lua format independent code
+./t-enigma.mkvi Context interface
+./enigma.sty wrapper for LaTeX (inputs enigma.tex)
+./enigma.tex Plain interface
+
+This is the directory layout I have in mind:
+
+enigma_manual.tex -> ./doc/context/third/enigma/enigma_manual.tex
+enigma-example-plain.tex -> ./doc/context/third/enigma/examples/enigma-example-plain.tex
+enigma-example-latex.tex -> ./doc/context/third/enigma/examples/enigma-example-latex.tex
+enigma-example-context.tex -> ./doc/context/third/enigma/examples/enigma-example-context.tex
+enigma-doc.pdf -> ./doc/context/third/enigma/enigma-doc.pdf
+COPYING -> ./doc/context/third/enigma/COPYING
+mtx-t-enigma.lua -> ./scripts/context/lua/third/enigma/mtx-t-enigma.lua
+t-enigma.mkvi -> ./tex/context/third/enigma/t-enigma.mkvi
+enigma.sty -> ./tex/latex/enigma/enigma.sty
+enigma.tex -> ./tex/plain/enigma/enigma.tex
+enigma.lua -> ./tex/generic/enigma/enigma.lua
+
+
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/enigma-doc.pdf b/Master/texmf-dist/doc/context/third/enigma/enigma/enigma-doc.pdf
new file mode 100644
index 00000000000..2a9a2f9ab78
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/enigma-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/enigma_manual.tex b/Master/texmf-dist/doc/context/third/enigma/enigma/enigma_manual.tex
new file mode 100644
index 00000000000..4331521900e
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/enigma_manual.tex
@@ -0,0 +1,498 @@
+%% If you’re looking for instructions concerning how to build this
+%% manual, please for now drop me an email: ·phg42.2a at gmail dot com·
+%% as you will need a certain mtx-script.
+\defineitemgroup [credits]
+\setupitemgroup [credits] [
+ % before={\startnarrower[middle]},
+ % after=\stopnarrower,
+ left=,
+ right=,
+ margin=,
+ option=2,
+]
+
+\pushcatcodetable
+\setcatcodetable\txtcatcodes
+\useurl [chickenize] [https://github.com/alt/chickenize]
+\useurl [codebook] [http://simonsingh.net/books/the-code-book/]
+\useurl [key_procedure] [http://users.telenet.be/d.rijmenants/en/enigmaproc.htm]
+\useurl [luatex-web] [http://www.luatex.org/]
+\useurl [rotor_wirings] [http://www.ellsbury.com/ultraenigmawirings.htm]
+\useurl [wp:day_key] [http://en.wikipedia.org/wiki/Cryptanalysis_of_the_Enigma#Key_setting]
+ [] [\hyphenatedurl{http://en.wikipedia.org/wiki/Cryptanalysis_of_the_Enigma\#Key_setting}]
+\useurl [wp:ring] [http://en.wikipedia.org/wiki/Enigma_rotor_details#The_ring_setting]
+ [] [\hyphenatedurl{http://en.wikipedia.org/wiki/Enigma_rotor_details\#The_ring_setting}]
+\useurl [initialization] [http://w1tp.com/enigma/mewirg.htm]
+\useurl [model-i] [http://www.cryptomuseum.com/crypto/enigma/i/index.htm]
+\useurl [ecollection] [http://cryptocellar.org/enigma/]
+\useurl [heinz_diss] [http://rzbl04.biblio.etc.tu-bs.de:8080/docportal/receive/DocPortal_document_00001705]
+\popcatcodetable
+
+\startdocchapter[title=Introduction]
+ This module implements an \emph{Enigma} cipher that is equivalent to
+ the most widely distributed model: the Enigma~I (subtypes {\sc m1}
+ {\sc m2} and {\sc m3}).%
+ \footnote{%
+ See \from[model-i] for a showcase.
+ }
+ Machines of this type had three rotors, a non-moving reflector and,
+ as a novelty at the time of their introduction, a plugboard.
+ The simulation accepts arbitrary configurations of these components,
+ as well as the starting position of the rotors, and then processes
+ text accordingly.
+ Depending on the input, this yields the plaintext or ciphertext, as
+ encryption and decryption are the same.
+
+ The code is provided as a module (interface for \CONTEXT) as well as
+ a package (\PLAIN, \LATEX).
+ It is subject to the {\sc bsd} license, see below,
+ \at{page}[license], for details.
+\stopdocchapter
+
+\startdocchapter[title=Usage]
+
+\startdocsection[title=Loading the Module / Package]
+ The intention is for the \modulename{Enigma} codebase to integrate
+ with the three most popular (as of 2012) \TEX\ formats:
+ \CONTEXT,
+ \PLAIN, and
+ \LATEX.
+ If the user interface does not fully conform with the common practice
+ of the latter two, please be lenient toward the author whose
+ intuitions are for the most part informed by \CONTEXT.
+ For this reason, a couple words concerning the interfaces will be
+ necessary.
+ The examples in this manual will be cycling through all three
+ formats, but once you get the general idea of how it works, you will
+ have no problem translating between coding styles.
+ Those familiar with \CONTEXT\ might, therefore, skip the following
+ paragraphs and continue directly with the next section on
+ \at{page}[sec:opts].%
+
+ The package is loaded as usual. For \PLAIN, issue a
+ \type{\input{enigma}}.
+ \LATEX-users need to place \type{\usepackage{enigma}} somewhere
+ inside the preamble.
+ (There are no package options.)
+ From this point on, instructions for both formats are the same.
+
+ The interface provides two basic macros from which all functionality
+ will be derived:
+ \texmacro{defineenigma} and \texmacro{setupenigma}.
+ Both are a kind of \emph{meta-macros}, meaning that they generate
+ other macros which may then be employed to access the functionality
+ of the package.
+ As such they naturally belong inside the preamble (if you chose to
+ use
+ \modulename{Enigma} with \LATEX, that is).
+ The correct order is to \texmacro{defineenigma} an enigma machine
+ first and then \texmacro{setupenigma} it.
+ The definition takes a single, setups a double mandatory argument.
+ Thus, \type{\defineenigma{encrypt}} creates a new environment
+ consisting of the macros \texmacro{beginencrypt} and
+ \texmacro{endencrypt}.%
+ \footnote{%
+ \CONTEXT-users will have noticed that there is no direct macro
+ \type{\encrypt{foo}}. The reason for this is that the callback
+ which the module relies on operates on node-level.
+ This means that for the Enigma encryption to have an effect it will
+ have to process entire paragraphs.
+ As encrypted passages are supposed to stand on their own, this
+ small limitation should not have a severe impact on functionality.
+ If you should, however, need a macro that works for smaller
+ portions of text, please send a feature request to the maintainer
+ (\ichdparameter{email}).
+ }
+ These correspond to \texmacro{startencrypt}/\texmacro{stopencrypt} in
+ the \CONTEXT\ interface.
+ The \CONTEXT-examples below are easily translated to
+ Plain/\LATEX-syntax by replacing curly brackets (groups) with
+ square brackets and substituting environment prefixes:
+ \type{\start<foo>} becomes \type{\begin<foo>} and
+ \type{\stop<foo>} becomes \type{\end<foo>}.
+ Except for those conventions the syntax, even in key-value
+ assignments, is identical.
+
+ However, the environment is not usable right away, as we still have
+ to set the initial state of the machine.
+ This is achieved by the second meta-macro,
+ \type{\setupenigma{encrypt}{<args>}}, where \type{<args>} is a
+ placeholder for a list of \emph{assignments}, i.\,e. pairs of
+ \emph{key=value} statements by means of which all further parameters
+ are specified.
+ The possible parameters are listed in the next section,
+ examples of their effects will be given further below in the section
+ on functionality (see \at{page}[sec:fun]).%
+ \footnote{%
+ If you grasp the concept of paired \type{\define<foo>}
+ \endash\space \type{\setup<foo>} macros, then congratulations are
+ in order: you qualify for migration from your current macro package
+ to \CONTEXT.
+ }
+\stopdocsection
+\startdocsection[title=Options Explained,reference=sec:opts]
+
+At the moment, the \texmacro{setupenigma} macro in any format accepts
+the following parameters.
+% \startpostponing[+2]%% messes up floats -- why?
+ \startplacefigure[
+ location={right,high},
+ title={Usage example for the \PLAIN\ format.},
+ ]
+ % \framed[align=right,frameoffset=1em]{%
+ \startframed[
+ align=right,
+ frameoffset=1em,
+ frame=off,
+ ]%
+ \startlatextyping[before=,after=,]
+ \input {enigma}
+ %% Definition ··········· %%
+ \defineenigma {encryption}
+ %% Setup ················ %%
+ \setupenigma {encryption} {
+ other_chars = no,
+ day_key = I II III
+ 01 01 01,
+ rotor_setting = aaa,
+ spacing = yes,
+ verbose = 1,
+ }
+ %% Usage ················ %%
+ \beginencryption
+ aaaaa aaaaa aaaaa
+ aaaaa aaaaa aaaaa
+ \endencryption
+ \beginencryption
+ Nobody in Poland is going
+ to be able to read this,
+ har har!
+ \endencryption
+ \bye
+ \stoplatextyping
+ \stopframed
+ \stopplacefigure
+% \stoppostponing
+\startitemize
+ \setuptolerance[tolerant]%% it’s crowded in here due to the float
+ \let\olditem\item
+ \let\item\undefined
+ \def\item#1#2{% 1 name, 2 type
+ \olditem
+ \identifier{#1}%
+ \reference[option:#1]{}%
+ \space
+ <\emph{#2}>%
+ \hskip1em%
+ }
+ \item{other_chars}{boolean} How to handle non-encodable characters,
+ i.\,e. glyphs outside the bare set of Latin letters; see below on
+ \at{page}[explained:other_chars].
+ \item{day_key}{string} Encryption key, i.\,e. a description of the
+ initial setup of an Enigma machine: the reflector used, the choice
+ and positions of the three rotors, the ring settings, and the
+ plugboard wiring.
+ \item{rotor_setting}{string} The initial rotor advancement.
+ \item{spacing}{boolean} Auto-space output?
+ \item{verbose}{integer} Controls overall verbosity level
+ (\emph{global}\/!).
+\stopitemize
+
+%% day key
+\noindentation
+To state the obvious, the value of \identifier{day_key} serves as the
+\emph{day key} for encryption. An Enigma day key ordinarily consists of
+(1) a list of the the rotor configuration,
+(2) the ring settings, and
+(3) the plugboard connections.\footnote{%
+ For a description of the initialization process see
+ \from[initialization].
+}
+Together these have the denotation \emph{day key}, because they are
+meant to be supplied in special code books by central authority, one
+for each day.\footnote{%
+ Read about the historical directives for daily key renewal at
+ \from[key_procedure].
+ there are some {\sc pdf}s with images of \emph{Kenngruppenbücher} at
+ \from[ecollection], section \emph{Enigma Messages and Keys}.
+ Also, while you’re at it, don’t miss the explanation on Wikipedia:
+ \from[wp:day_key].
+}
+In the \modulename{Enigma} setup, the day key starts
+with a triple of Roman numerals ({\sc i} to {\sc v}) describing which
+of the five rotors is located in which of the three slots.
+(e.\,g. \type{I VI II}).\footnote{%
+ For the individual wirings of the five rotors see
+ \from[rotor_wirings], as well as the implementation below at
+ \at{page}[listing:rotor_wiring].
+}
+Its next part is the ring setting, a triple of two-digit integers that
+are the amount by which the internal wiring of each rotor has been
+shifted (\type{03 23 11}). As the Enigma encrypts only the letters of
+the Latin alphabet, sane values range from one (first position: no
+shift) to twenty six.\footnote{%
+ Consult \from[wp:ring] for an introduction into the ring mechanics.
+}
+The third section specifies which pairs of letters are substituted by
+each other by means of plugboard connections (\type{NI CE GO LD ...}).
+There can be zero to thirteen of these redirections, thus the presence
+of this section is entirely optional.
+Also part of the \identifier{day_key}, but not mentioned yet, is the
+choice of the \emph{reflector}.
+It may be specified as one of the three letters \type{A}, \type{B} and
+\type{C} as the first item. If no reflector is requested explicitly,
+the machine defaults to \type{B}, which is actually the only one of the
+three models that had been in widespread use
+(see below on \at{page}[listing:reflector] for the wirings).
+
+Initialization is not complete without a \identifier{rotor_setting}.
+This is a triple of letters, each representing the initial state of one
+rotor (e.\,g. \type{fkd}). Historically this was not part of the day
+key but supposed to be chosen at random by the operating signal
+officer.
+
+The output can be automatically grouped into sequences of five
+characters, delimited by spaces (option \identifier{spacing}). This
+does not only conform with traditional crypto-style, but also allows
+for the resulting text to be sanely broken into lines by \TEX.
+
+%%% other_chars
+Most documents don’t naturally adhere to the machine-imposed
+restriction to the 26 letters of the Latin alphabet. The original
+encipherment directives comprised substitution tables to compensate for
+a set of intrinsic peculiarities of the German language, like umlauts
+and common digraphs. The \modulename{Enigma} simulation module strives
+to apply these automatically but there is no guarantee of completeness.
+
+However,\reference[explained:other_chars]{} the Enigma lacks means of
+handling languages other than German. When the substitution lookup
+fails, there are two ways of proceeding: either to ignore the current
+character or to pass it on to the output as if nothing happened. The
+default behaviour is to drop alien letters and move on. If the user
+intends to keep these foreign characters instead, E can achieve this by
+setting the \identifier{other_chars} key in the \modulename{Enigma}
+setup to the value \emph{true}. An example of how the result of both
+methods may look, other things being equal, is given in below listing
+(example for \CONTEXT; see the file \type{enigma-example-context.tex}
+in the \type{doc/} subtree of your installation path).
+
+\startcontexttyping
+\usemodule [enigma]
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+]
+
+\defineenigma [othermessage] [secretmessage]
+\setupenigma [othermessage] [other_chars=wrong]
+
+\starttext
+
+\startsecretmessage
+ føo bąr baž
+\stopsecretmessage
+\startothermessage
+ føo bąr baž
+\stopothermessage
+
+\stoptext
+\stopcontexttyping
+
+Both methods have their disadvantages: if the user chooses to have the
+unknown characters removed it might distort the decrypted text to
+becoming illegible. Far more serious, however, are the consequences of
+keeping them. As artefacts in the ciphertext they would convey
+information about the structure of the plain text.
+
+\stopdocsection
+
+\startdocsection[title=Basic Functionality,reference=sec:fun]
+
+Encrypt the text of your document using the script interface. For
+a start try out the settings as given in below listing.
+
+\starttyping
+mtxrun --script mtx-t-enigma \
+ --setup="day_key = B I II III 01 01 01, \
+ rotor_setting = xyz, \
+ verbose=0" \
+ --text="Gentlemen don’t read each other’s mail, Mr. Turing\!"
+\stoptyping
+
+This will result in the thoroughly scrambled string
+\typ{omribshpwfrfjovkntgqgi abbkhjpxmhdztapkatwrvf}.
+Then, use the same settings you encrypted the text with in your
+document.
+
+\startcontexttyping
+\usemodule[enigma]
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ day_key = B I II III 01 01 01,
+ rotor_setting = xyz,
+ verbose=3,
+]
+
+\starttext
+
+\startsecretmessage
+ omribshpwfrfjovkntgqgiabbkhjpxmhdztapkatwrvf
+\stopsecretmessage
+
+\stoptext
+\stopcontexttyping
+
+If you compile this document with \CONTEXT, the plain text will
+reappear.
+Notice that punctuation is substituted with the letter “x” before
+encryption and that spaces are omitted.
+
+\useURL[kgbuch] [http://de.wikipedia.org/wiki/Kenngruppenbuch]
+ [] [code book]
+Now it’s certainly not wise to carry around the key to encrypted
+documents as plain text within those documents. The keys will have to
+be distributed via an independent channel, e.\,g. a \from[kgbuch].
+Keys in general don’t have to be supplied inside the document. If there
+is none specified, the module will interrupt the \TEX\ run and
+\emph{ask} for user input. Suppose Alice wanted to send an encrypted
+file to Bob and already generated the cipher text as follows:
+
+\starttyping
+mtxrun --script mtx-t-enigma \
+ --setup="day_key =B I IV V 22 07 10 AZ DG IE YJ QM CW, \
+ rotor_setting = bar, \
+ verbose=0" \
+ --text="I have nothing to hide. From the NSA, that is."
+\stoptyping
+
+Alice would then include the result of this line in her \LATEX\
+document as follows:
+
+\startlatextyping
+\documentclass{scrartcl}
+\usepackage{enigma}
+\defineenigma{decryption}
+%% Encryption key not given in the setup.
+\setupenigma{decryption}{
+ rotor_setting = bar,
+ verbose = 3,
+}
+\begin{document}
+
+\begindecryption
+usbatbwcaajhzgeyzkqskupzbmdhbdepccgeh
+\enddecryption
+
+\end{document}
+\stoplatextyping
+
+She subsequently mails this file to Bob and conveys the key through a
+secure channel. They only thing that will be left for Bob to do now, is
+to enter the key at the prompt when compiling the document with
+\LUALATEX.
+\stopdocsection
+
+\startdocsection[title=Uses and Abuses]
+
+In \LUATEX, \identifier{callback}s may stack. This allows filtering the
+input through many enigma machines successively. For instance, in the
+following listing, two instances of the same machine are generated and
+applied.
+
+\startcontexttyping
+\usemodule [enigma] %% load the module
+\defineenigma [secretmessage] %% generate and
+\setupenigma [secretmessage] [ %% configure a machine
+ day_key = B IV V II 01 01 01 AD CN ET FL GI JV KZ PU QY WX,
+ rotor_setting = foo,
+ verbose=3,
+]
+
+%% now, copy the first machine’s settings
+\defineenigma [othermessage] [secretmessage]
+
+%% here we go!
+\starttext
+
+\startothermessage %% enable machine 1
+\startsecretmessage %% enable machine 2 while no 1 is active
+Encryption equals decryption.
+\stopothermessage
+\stopsecretmessage
+
+\stoptext \endinput
+\stopcontexttyping
+
+\stopdocsection
+
+\stopdocchapter
+
+\startdocchapter[title=Metadata]
+\startdocsection[title=License,reference=license]
+
+© 2012--2013 \emph{Philipp Gesang}. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+\startitemize[n]
+ \item Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+ \item Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+\stopitemize
+
+\begingroup
+\setuptolerance [horizontal,strict]
+\startalignment [right,nothyphenated]
+\noindentation\startsmallcaps
+ this software is provided by the copyright
+ holder “as is” and any express or implied warranties,
+ including, but not limited to, the implied warranties of
+ merchantability and fitness for a particular purpose are
+ disclaimed. in no event shall the copyright holder or
+ contributors be liable for any direct, indirect, incidental,
+ special, exemplary, or consequential damages (including, but
+ not limited to, procurement of substitute goods or services;
+ loss of use, data, or profits; or business interruption)
+ however caused and on any theory of liability, whether in
+ contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software,
+ even if advised of the possibility of such damage.
+\stopsmallcaps\endgraf
+\stopalignment
+\endgroup
+\stopdocsection
+
+\startdocsection[title=Acknowledgements]
+\startcredits
+ \item The idea to implement the \emph{Enigma} cipher for \TEX\ came
+ up while I was reading \emph{The Code Book} by Simon Singh.
+ This work contains an excellent portrayal of the history of
+ German military cryptography and Allied cryptanalysis before
+ and during the Second World War.\par
+ \from[codebook]
+ \item A more detailed account from a historical-cryptological
+ perspective is provided by Ulrich Heinz in his Dissertation (in
+ German), which is freely available.
+ Includes an interesting albeit speculative note on the
+ effectiveness of the Soviet code breaking efforts (chapter
+ seven).\par
+ \from[heinz_diss]
+ \item Also, the \modulename{Enigma} module drew lots of inspiration
+ from Arno Trautmann’s \modulename{Chickenize} package, which
+ remains the unsurpassed hands-on introduction to callback
+ trickery.\par
+ \from[chickenize]
+ \item Finally, without \LUATEX, encryption on node-level would not
+ have been possible.\par
+ \from[luatex-web]
+\stopcredits
+\stopdocsection
+\stopdocchapter
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-context.tex b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-context.tex
new file mode 100644
index 00000000000..051e719697f
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-context.tex
@@ -0,0 +1,59 @@
+\usemodule [enigma]
+%\usetypescript [computer-modern-unicode]
+%\setupbodyfont [computer-modern-unicode,20pt]
+%\usetypescript [iwona]
+%\setupbodyfont [iwona,20pt]
+\usetypescript [modern]
+\setupbodyfont [modern,20pt]
+
+\defineenigma [nilsettings]
+\setupenigma [nilsettings] [ %% a machine with vanilla settings
+ other_chars = no,
+ day_key = I II III 01 01 01,
+ rotor_setting = aaa,
+ spacing = yes,
+ verbose = 3,
+]
+
+\defineenigma [othernilsettings] [nilsettings]
+
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+]
+
+\defineenigma [othersecretmessage] [secretmessage]
+
+\defineenigma [othermessage] [secretmessage]
+\setupenigma [othermessage] [other_chars=wrong]
+
+\starttext
+
+\placefigure{Enigma output and its reversal using nil settings}{
+ \framed [width=.7\hsize,frame=off,align=middle]{
+ \startnilsettings
+ aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aa
+ \stopnilsettings
+
+ \startothernilsettings
+ bdzgo wcxlt ksbtm cdlpb muqof xyhcx tgyjf linhn xs
+ \stopothernilsettings
+ }
+}
+
+\startsecretmessage
+ føo bąr baž
+\stopsecretmessage
+
+\startothersecretmessage
+ iøtyąwqiž
+\stopothersecretmessage
+
+\startothermessage
+ føo bąr baž
+\stopothermessage
+
+\stoptext
+% vim:ft=context:tw=71:ts=2:sw=2:expandtab
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-latex.tex b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-latex.tex
new file mode 100644
index 00000000000..ea825cf1e9e
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-latex.tex
@@ -0,0 +1,53 @@
+\documentclass[a5paper]{scrartcl}
+\parindent0pt
+%%····································································%
+\usepackage {enigma}
+%%····································································%
+%% The first machine will be used for encryption of our plain text.
+\defineenigma {encryption}
+\setupenigma {encryption} {
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+ spacing = yes,
+ verbose = 2,
+}
+%%····································································%
+%% This second machine below will be used to decrypt the string. It is
+%% initialized with exactly the same settings as the first one. The
+%% reason for this is that we can’t reuse the “encryption” machine as
+%% it will already have progressed to some later state after the
+%% encryption. Applying it on the ciphertext would yield a totally
+%% different string. Hence the need for another machine.
+\defineenigma{decryption}
+\setupenigma{decryption}{
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+}
+%%····································································%
+\begin{document}
+
+%%····································································%
+%% Ciphertext in the PDF. Rely on the addressee to decrypt the document
+%% externally.
+\beginencryption
+ Never underestimate the amount of money, time, and effort someone
+ will expend to thwart a security system.
+\endencryption
+
+%%····································································%
+%% Input string generated with:
+%% mtxrun --script t-enigma \
+%% --setup="day_key=B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,\
+%% rotor_setting=ben,\
+%% other_chars=yes"\
+%% --text="Never underestimate the amount of money,\
+%% time, and effort someone will expend to\
+%% thwart a security system."
+\begindecryption
+ aqsnwyxgqarpuzrdktscbslaqmdhyonywxkwhcdgphvuqsspfjwhlszahygjbzmfpcpbniahvfcuradntepxsfchnn
+\enddecryption
+%%····································································%
+\end{document}
+% vim:ft=tex:tw=71:expandtab:ts=2:sw=2
diff --git a/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-plain.tex b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-plain.tex
new file mode 100644
index 00000000000..bd50c93ca4a
--- /dev/null
+++ b/Master/texmf-dist/doc/context/third/enigma/enigma/examples/enigma-example-plain.tex
@@ -0,0 +1,50 @@
+\parindent0pt
+%%····································································%
+\input {enigma}
+%%····································································%
+%% The first machine will be used for encryption of our plain text.
+\defineenigma {encryption}
+\setupenigma {encryption} {
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+ spacing = yes,
+ verbose = 1,
+}
+%%····································································%
+%% This second machine below will be used to decrypt the string.
+\defineenigma{decryption}
+\setupenigma{decryption}{
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+}
+%%····································································%
+%% main
+%%····································································%
+%% Ciphertext in the PDF. Rely on the addressee to decrypt the document
+%% externally.
+%%····································································%
+%% encryption of plain text
+%%····································································%
+\beginencryption
+ Never underestimate the amount of money, time, and effort someone
+ will expend to thwart a security system.
+\endencryption
+
+%%····································································%
+%% decryption of ciphertext
+%%····································································%
+%% Input string generated with:
+%% mtxrun --script t-enigma \
+%% --setup="day_key=B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,\
+%% rotor_setting=ben,\
+%% other_chars=yes"\
+%% --text="Never underestimate the amount of money,\
+%% time, and effort someone will expend to\
+%% thwart a security system."
+\begindecryption
+ aqsnwyxgqarpuzrdktscbslaqmdhyonywxkwhcdgphvuqsspfjwhlszahygjbzmfpcpbniahvfcuradntepxsfchnn
+\enddecryption
+%%·····································································%
+\bye