From 4aed46f86e0ab444beea0155cea838007441a91a Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 28 Apr 2013 17:34:53 +0200 Subject: [PATCH] added OFB-Mode-Decryption --- tikz/OFB-Mode-Decryption/Makefile | 35 +++++++++++++ .../OFB-Mode-Decryption.png | Bin 0 -> 30510 bytes .../OFB-Mode-Decryption.tex | 47 ++++++++++++++++++ tikz/OFB-Mode-Decryption/Readme.md | 3 ++ 4 files changed, 85 insertions(+) create mode 100644 tikz/OFB-Mode-Decryption/Makefile create mode 100644 tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.png create mode 100644 tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.tex create mode 100644 tikz/OFB-Mode-Decryption/Readme.md diff --git a/tikz/OFB-Mode-Decryption/Makefile b/tikz/OFB-Mode-Decryption/Makefile new file mode 100644 index 0000000..aacc707 --- /dev/null +++ b/tikz/OFB-Mode-Decryption/Makefile @@ -0,0 +1,35 @@ +SOURCE = OFB-Mode-Decryption +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + make + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg + rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg + inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg + rm $(SOURCE)2.svg diff --git a/tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.png b/tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.png new file mode 100644 index 0000000000000000000000000000000000000000..8011235e0187f930d123136fbee899844c836d53 GIT binary patch literal 30510 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 literal 0 HcmV?d00001 diff --git a/tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.tex b/tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.tex new file mode 100644 index 0000000..dd640a1 --- /dev/null +++ b/tikz/OFB-Mode-Decryption/OFB-Mode-Decryption.tex @@ -0,0 +1,47 @@ +\documentclass{article} +\usepackage[pdftex,active,tightpage]{preview} + +\usepackage{tikz} +\usetikzlibrary{calc} + +\begin{document} +\begin{preview} +% thanks to http://tex.stackexchange.com/a/75838/5645 +\tikzset{XOR/.style={fill=black!15,draw,minimum size=13pt,circle,append after command={ + [shorten >=\pgflinewidth, shorten <=\pgflinewidth,] + (\tikzlastnode.north) edge (\tikzlastnode.south) + (\tikzlastnode.east) edge (\tikzlastnode.west) + } + } +} + +\tikzstyle{encrypt}=[draw,fill=black!15,rectangle,minimum size=20pt,inner sep=0pt] +\begin{tikzpicture} + \newcommand{\n}{3} + \foreach \nr in {1, ..., \n}{ + \node (M\nr) at (0,{(\n-\nr)*3}) {$C_\nr$}; + \node (x\nr)[XOR] at (2,{(\n-\nr)*3}) {}; + \node (E\nr)[encrypt] at (2,{(\n-\nr)*3+1}) {$E$}; + \node (K\nr) at (2,{(\n-\nr)*3+2}) {$K$}; + \node (C\nr) at (4,{(\n-\nr)*3}) {$M_\nr$}; + + \draw[->,very thick] (M\nr) -- (x\nr); + \draw[->,very thick] (x\nr) -- (C\nr); + \draw[->,very thick] (K\nr) -- (E\nr); + \draw[->,very thick] (E\nr) -- (x\nr); + } + + \foreach \nr in {2, ..., \n}{ + \pgfmathtruncatemacro{\tmp}{\nr-1} + \draw[->,very thick] (2, {(\n-\tmp)*3+0.5}) -- (1, {(\n-\tmp)*3+0.5}) -- (1, {(\n-\nr)*3+1}) -- (E\nr); + } + + \node (IV) at (0.5,{\n*3-2}) {$IV$}; + \draw[->, very thick] (IV) -- (E1); + + \node (Mx) at (0,-1) {$\vdots$}; + \node (xx) at (2,-1) {$\vdots$}; + \node (Ex) at (4,-1) {$\vdots$}; +\end{tikzpicture} +\end{preview} +\end{document} diff --git a/tikz/OFB-Mode-Decryption/Readme.md b/tikz/OFB-Mode-Decryption/Readme.md new file mode 100644 index 0000000..4b33d6d --- /dev/null +++ b/tikz/OFB-Mode-Decryption/Readme.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](OFB-Mode-Decryption.png)