From 98d3e2adfab5cf46720f64d75ceb6b3c665dae45 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 28 Apr 2013 16:31:00 +0200 Subject: [PATCH] added CFB-Mode-Encryption --- .../CFB-Mode-Encryption.png | Bin 0 -> 30315 bytes .../CFB-Mode-Encryption.tex | 47 ++++++++++++++++++ tikz/CFB-Mode-Encryption/Makefile | 35 +++++++++++++ tikz/CFB-Mode-Encryption/Readme.md | 3 ++ 4 files changed, 85 insertions(+) create mode 100644 tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.png create mode 100644 tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.tex create mode 100644 tikz/CFB-Mode-Encryption/Makefile create mode 100644 tikz/CFB-Mode-Encryption/Readme.md diff --git a/tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.png b/tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.png new file mode 100644 index 0000000000000000000000000000000000000000..d776c81d595c26f2adb217022962e03743e2be1c GIT binary patch literal 30315 zcmd432UL^WyYBmi2&f3G2-1s!iip(Es|7?rKtPI81qp)m-V>Hfh#;USV5qWai{7NS zC`};{r6VnZ1f>@#p(JOr{`bGnzT=#I_t|CKdmSS~Ajy~SOWrx>^FGgS=Gh$sZRV3a zCm{%8*14r=3_*0@$75W_8Nh#m;t%AHe)GAmbN4v-7kd057W{s~^VU5d2x4M8y1}57 zG%oN*ZeJ}6UlR|MZ@>d@M<^g5K*HJmv5&(8Pe%z4Z>Q81RUQaB3+ZTHyBnCcG#N7C z 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 literal 0 HcmV?d00001 diff --git a/tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.tex b/tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.tex new file mode 100644 index 0000000..d527347 --- /dev/null +++ b/tikz/CFB-Mode-Encryption/CFB-Mode-Encryption.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}) {$M_\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}) {$C_\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] (3, {(\n-\tmp)*3}) -- (3, {(\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/CFB-Mode-Encryption/Makefile b/tikz/CFB-Mode-Encryption/Makefile new file mode 100644 index 0000000..5d82244 --- /dev/null +++ b/tikz/CFB-Mode-Encryption/Makefile @@ -0,0 +1,35 @@ +SOURCE = CFB-Mode-Encryption +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/CFB-Mode-Encryption/Readme.md b/tikz/CFB-Mode-Encryption/Readme.md new file mode 100644 index 0000000..ea0bafd --- /dev/null +++ b/tikz/CFB-Mode-Encryption/Readme.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](CFB-Mode-Encryption.png)