From 1ad2f0e3ab6a0f831b12825bcfa8b41291a22fdb Mon Sep 17 00:00:00 2001 From: Valentin Brandl Date: Sat, 13 Oct 2018 13:23:37 +0200 Subject: [PATCH] Initial commit --- .gitignore | 1 + Makefile | 32 + index.md | 10 + school/di-ma.md | 9 + school/di-ma/20181009-graph1.dot | 24 + school/di-ma/20181009_1-intro.md | 56 ++ school/di-ma/20181009_2-kombinatorik.md | 238 ++++++ school/di-ma/20181010-personen.dot | 22 + .../di-ma/20181010_1-binomialkoeffizient.md | 223 +++++ school/intro-crypto.md | 8 + .../intro-crypto/20181011-classification.dot | 28 + school/intro-crypto/20181011_1-intro.md | 26 + .../intro-crypto/20181011_2-klassifikation.md | 59 ++ school/intro-crypto/20181011_situation.dot | 51 ++ .../aufgaben/1/20181011_situation.dot | 51 ++ .../aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf | Bin 0 -> 72178 bytes school/intro-crypto/aufgaben/1/a1.tex | 99 +++ school/intro-crypto/aufgaben/template.tex | 67 ++ school/intro-crypto/uebung/01/01.tex | 248 ++++++ school/intro-crypto/uebung/01/chiffrat.txt | 60 ++ school/intro-crypto/uebung/01/table.txt | 30 + school/intro-crypto/uebung/01/u01/.gitignore | 2 + school/intro-crypto/uebung/01/u01/Cargo.lock | 32 + school/intro-crypto/uebung/01/u01/Cargo.toml | 7 + school/intro-crypto/uebung/01/u01/src/main.rs | 81 ++ .../uebung/01/Übung_1_EK1_WS1819.pdf | Bin 0 -> 77246 bytes school/intro-crypto/uebung/template.tex | 67 ++ school/netsec/20181012_0-intro.md | 65 ++ ...181012_1-kryptographie_und_das_internet.md | 10 + school/netsec1.md | 8 + templates/eisvogel.tex | 805 ++++++++++++++++++ templates/mindoc.html | 122 +++ 32 files changed, 2541 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 index.md create mode 100644 school/di-ma.md create mode 100644 school/di-ma/20181009-graph1.dot create mode 100644 school/di-ma/20181009_1-intro.md create mode 100644 school/di-ma/20181009_2-kombinatorik.md create mode 100644 school/di-ma/20181010-personen.dot create mode 100644 school/di-ma/20181010_1-binomialkoeffizient.md create mode 100644 school/intro-crypto.md create mode 100644 school/intro-crypto/20181011-classification.dot create mode 100644 school/intro-crypto/20181011_1-intro.md create mode 100644 school/intro-crypto/20181011_2-klassifikation.md create mode 100644 school/intro-crypto/20181011_situation.dot create mode 100644 school/intro-crypto/aufgaben/1/20181011_situation.dot create mode 100644 school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf create mode 100644 school/intro-crypto/aufgaben/1/a1.tex create mode 100644 school/intro-crypto/aufgaben/template.tex create mode 100644 school/intro-crypto/uebung/01/01.tex create mode 100644 school/intro-crypto/uebung/01/chiffrat.txt create mode 100644 school/intro-crypto/uebung/01/table.txt create mode 100644 school/intro-crypto/uebung/01/u01/.gitignore create mode 100644 school/intro-crypto/uebung/01/u01/Cargo.lock create mode 100644 school/intro-crypto/uebung/01/u01/Cargo.toml create mode 100644 school/intro-crypto/uebung/01/u01/src/main.rs create mode 100644 school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf create mode 100644 school/intro-crypto/uebung/template.tex create mode 100644 school/netsec/20181012_0-intro.md create mode 100644 school/netsec/20181012_1-kryptographie_und_das_internet.md create mode 100644 school/netsec1.md create mode 100644 templates/eisvogel.tex create mode 100644 templates/mindoc.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d15744a --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +.PHONY: default clean + +MD_SOURCES=$(shell find . -name '*.md' -not -path "./templates/*") +HTML_TARGETS=$(MD_SOURCES:%.md=build/%.html) +PDF_TARGETS=$(MD_SOURCES:%.md=build/%.pdf) + +DOT_SOURCES=$(shell find . -name '*.dot' -not -path "./templates/*") +DOT_TARGETS=$(DOT_SOURCES:%.dot=build/%.png) + +TEX_SOURCES=$(shell find . -not -path "./templates/*" -name '*.tex') +TEX_TARGETS=$(TEX_SOURCES:%.tex=build/%.pdf) + +default: $(DOT_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(TEX_TARGETS) + +build/%.html: %.md + @mkdir -p $$(dirname $@) + pandoc -s --mathjax --template ./templates/mindoc.html --toc --toc-depth=2 -o $@ $< + +build/%.pdf: %.md + @mkdir -p $$(dirname $@) + pandoc --resource-path=$$(dirname $@) --template ./templates/eisvogel.tex --toc --toc-depth=2 -o $@ $< + +build/%.png: %.dot + @mkdir -p $$(dirname $@) + dot -Tpng -o $@ $< + +build/%.pdf: %.tex + @mkdir -p $$(dirname $@) + latexmk -pdf -outdir=$$(dirname $@) $< + +clean: + rm -r build diff --git a/index.md b/index.md new file mode 100644 index 0000000..d9fca51 --- /dev/null +++ b/index.md @@ -0,0 +1,10 @@ +--- +title: My Knowledge Wiki +subtitle: > + Things to know, learn and remember +--- +## University + +- [Diskrete Mathematik](school/di-ma) +- [Einführung in die Kryptographie](school/intro-crypto) +- [Netzsicherheit 1](school/netsec1) diff --git a/school/di-ma.md b/school/di-ma.md new file mode 100644 index 0000000..34e432a --- /dev/null +++ b/school/di-ma.md @@ -0,0 +1,9 @@ +--- +title: Diskrete Mathematik +subtitle: > + Notizen und Mitschrift zur Vorlesung Diskrete Mathematik +--- + +- [2018-10-09 Intro](di-ma/20181009_1-intro) +- [2018-10-09 Kombinatorik](di-ma/20181009_2-kombinatorik) +- [2018-10-10 Binomialkoeffizient](di-ma/20181010_1-binomialkoeffizient) diff --git a/school/di-ma/20181009-graph1.dot b/school/di-ma/20181009-graph1.dot new file mode 100644 index 0000000..81b4dc7 --- /dev/null +++ b/school/di-ma/20181009-graph1.dot @@ -0,0 +1,24 @@ +digraph undirected { + edge [ arrowhead="none" ]; + node [ shape="circle" ]; + { + rank=same; + 2; + 4; + } + { + rank=same; + 3; + } + { + rank=same; + 1; + 5; + } + 1 -> 2; + 3 -> 2; + 3 -> 4; + 2 -> 4; + 4 -> 5; + 5 -> 6; +} diff --git a/school/di-ma/20181009_1-intro.md b/school/di-ma/20181009_1-intro.md new file mode 100644 index 0000000..14a0324 --- /dev/null +++ b/school/di-ma/20181009_1-intro.md @@ -0,0 +1,56 @@ +--- +title: Intro Veranstalting +date: 2018-10-09 +--- + +# Organisatorisches + +## Moodle + +Passwort: `gauss` + +## Übungen + +- Bis zu 10% Bonus für Prüfung +- Bearbeitung von Dienstag bis Dienstag +- Abgabe in Kästen in NA? +- 3er Gruppen erlaubt +- Anmeldung ab 11.10. 12:00 Uhr + +# Themen + +1. Kombinatorik +2. Graphentheorie +3. Zahlentheorie/Algebra + + +## Beispiel zu 1. + +### Gegeben + +$n$ Bälle + +$m$ Urnen + +### Frage + +Wieviele Möglichkeiten gibt es, die Bälle auf die Urnen zu verteilen? + +#### Nebenbedingungen + +1. Bälle/Urnen sind (nicht) Unterscheidbar +2. Mindestens in jeder Urne 1 Ball (surjektiv) +3. Höchstens 1 Ball pro Urne (injektiv) +4. Genau 1 Ball je Urne + +## Beispiel zu 2. + +![Ungerichteter Graph](./20181009-graph1.png) + +### Gegeben + +Ungerichteter Graph G + +### Frage + +Für 2 Knoten aus G. Was ist der kürzeste Weg zwischen den Knoten? diff --git a/school/di-ma/20181009_2-kombinatorik.md b/school/di-ma/20181009_2-kombinatorik.md new file mode 100644 index 0000000..3513c3d --- /dev/null +++ b/school/di-ma/20181009_2-kombinatorik.md @@ -0,0 +1,238 @@ +--- +title: Kombinatorik +date: 2018-10-09 +--- + +# Kombinatorik + +## Elementare Zählprobleme und Grundlegende Regeln + +### Beispiel + +#### Gegeben + +- 3 elementige Menge $M = \{1, 2, 3\}$ + +#### Frage + +Wie viele Möglichkeiten gibt es, 2 Elemente azs M zu ziehen? + +#### Antwort + +It depends + + --- | geordnet | ungeordnet +--- | --- | --- +mit zurücklegen | A:
$(1,1),(1,2),(1,3)$
$(2,1),(2,2),(2,3)$
$(3,1),(3,2),(3,3)$ | D:
$\{1,1\},\{1,2\}\{1,2\}$
$\{2,2\},\{3,2\}$
$\{3,3\}$ +ohne zurücklegen | B:
$(1,2),(1,3)$
$(2,1),(2,3)$
$(3,1),(3,2)$ | C:
$\{1,2\},\{1,3\}$
$\{2,3\}$
+ + +Wie viele Möglichkeiten gibt es allgemein, aus einer $n$-elementingen Menge $k$ elemente zu ziehen? + +## *Zuerst:* Einfache Grundregeln + +### Summenregel + +Seien $S$, $T$ endliche Mengen, disjunkt, d.h. $S \cap T = \emptyset$ (Notation $S \dot\cup T$, disjunkte Vereinigung), +dann gilt + +$$ +| S \dot\cup T | = | S | + | T | +$$ + +Allgemeiner: Gegeben $S_1, S_2, ... S_n$, endliche, disjunkte Mengen, dann gilt + +$$ +| \dot\cup^n_{i=1} S_i | = | S_1 | + | S_2 | + ... + | S_n | = \sum\limits^n_{i=1} | S_i | +$$ + + +### Produktregel + +Seien $S$, $T$ endliche Mengen, dann gilt +$$ +| S \times T | = | S | \cdot | T | +$$ +wobei +$$ +S \times T = \{(s,t) \mid s \in S, t \in T \} +$$ + +Allgemeiner: Gegeben $S_1, S_2, ... S_n$ endliche Mengen, dann gilt + +$$ +\vert S_1 \times S_2 \times ... S_n \vert = \vert S_1 \vert \cdot \vert S_2 \vert \cdot ... \vert S_n \vert +$$ + +#### Beispiel + +$$ +S_1, ..., S_n = \{0, 1\}, n = 64 \\ +\vert S^n \vert = \vert \{0,1\}^{64} \vert = 2^{64} +$$ + +Anzahl der Zustände eines 64-bit Registers. + + +### Gleichheitsregel + +Seien $S$, $T$ endliche Mengen und $f: S \to T$ eine bijektive Abbildung, dann gilt +$$ +\vert S \vert = \vert T \vert +$$ + +(eigentlich: Definition von "gleich groß") + +Allgemeiner: Seien $S$, $T$ endliche Mengen und $f: S \to T$ eine $k$ auf $1$ Abbildung, d.h. $\forall t \in T$ gilt +$\vert\{s \in S \mid f(s) = t \}\vert = \vert f^{-1}(t) \vert = k$ dann gilt +$$ +\vert S \vert = k \cdot \vert T \vert +$$ + +Damit können wir nun die Fälle A - D untersuchen. + +### Fall A + +In Fall A zählen wir $k$-Tupel mit Komponenten aus der $n$-elementigen Menge $M$, d.h. Elemente aus +$M \times M \times ... M = M^k$ + +Aus der Produktregel folgt: Es gibt $\vert M \vert^k = n^k$ Möglichkeiten + + +#### Satz + +Die Anzahl der $k$-Tupel mit Komponenten aus einer $n$-elementigen Menge ist +$$ +n^k\\ +\Box +$$ + + +### Fall B + +Wir ziehen aus einer $n$-elementigen Menge ohne zurücklegen +- Für die erste Komponente haben wir $n$ Möglichkeiten +- Für die zweite Komponente haben wir $n - 1$ Möglichkeiten +- usw. + +D.h. insgesamt haben wir $n(n-1)(n-2)...(n-k+1) = n^{\underline{k}}$ Möglichkeiten ($k$-te absteigende Faktorielle). + +#### Satz + +Die Anzahl der $k$-Tupel mit paarweise verschiedenen Komponenten aus einer $n$-elementigen Menge ist +$$ +n^{\underline{k}} = n\cdot(n-1)\cdot...\cdot(n-k+1) +$$ + +**Wichtiger Spezialfall**: +$$ +n = k +$$ +Dann ist das nichts anderes als die Anzahl der Permutationen von $n$ Elementen + +##### Beispiel + +$$ +n = 3 \\ +M = \{1,2,3\} +$$ + +Mögliche Permutationen: $(123), (132), (213), (231), (312), (321)$ + +$3! = 3\cdot2\cdot1$ Möglichkeiten + +$n! = n\cdot(n-1)\cdot...\cdot2\cdot1$ Möglichkeiten + +**Bemerkung:** Es gilt +$$ +n^{\underline{k}} = \frac{n!}{(n-1)!} +$$ + +### Fall C + +Wir zählen die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge. + +Von fall B zu Fall c durch ignorieren der Reihenfolge. + +Beachte die Abbildung die einem $k$-Tupel mit paarweise verschiedenen Komponenten $(i_1, ..., i_k)$ die $k$-elementige +Teilmenge $\{i_1, ..., i_k\}$ zuordnet. Diese Abbildung ist $k!$ - auf $-1$ da jede $k$-elementige Teilmenge auf $k!$ +Arten angeordnet werden kann. + +Damit folgt (Gleichheitsregel) + +#### Satz + +Die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge ist +$$ +\binom{n}{k} = \frac{n^{\underline{k}}}{k!} = \frac{n!}{k!(n-k)!} +$$ + +$\binom{n}{k}$ ist der Binomialkoeffizient. + + +##### Beispiel + +$$ +n = 3, k = 2 \\ +\binom{3}{2} = \frac{3!}{2! \cdot 1!} = \frac{3\cdot2}{2} = 3 +$$ + +### Fall D + +Hier zählen wir Multimengen. In einer Multimenge können Elemente mehrfach vorkommen, mit Vielfachheit. + +In $k$-elementigen Multimengen addieren sich die Vielfachkeiten zu $k$. + +Wir wollen die Gleichheitsregel anwenden. Dazu folgende Kodierung einer Multimenge: + +- Zwei Symbole `*` und `|` +- Wir schreiben $t$ Sterne `*` falls ein Element $i$ Vielfachkeit $t$ hat +- Übergang von $i$ zu $i-1$ wird gekennzeichnet durch `|` + +#### Beispiel 1 + +$M = \{1,2,3,4,5\}$ und Multimenge $S = \{1,1,1,3,3,4,4,4\}$ wird kodiert als + +``` +*** | | ** | *** | +``` + +#### Beispiel 2 + +$T = \{1,1,5,5\}$ wird kodiert als + +``` +** | | | | ** +``` + + +Jede $k$-elementige Multimenge einer $n$-elementigen Menge entspricht eindeutig einer Sequenz aus $k$ `*` Symbolen und +$n-1$ `|` Symbolen. + +Jede Sequenz von $k$ `*` Symbolen und $n-1$ `|` Symbolen entspricht genau einer $k$-elementigen Multimenge. + +Abbildung Multimenge $\to$ Kodierungssequenz ist bijektiv. + +Wegen der Gleichheitsregel können wir also genausogut die Anzahl der möglichen Kodierungssequenzen zählen. + +Kodierungssequenz hat die Länge $(n-1)+k$ und an $k$ Stellen steht ein `*`. Dann gibt es genau $\binom{n-1+k}{k}$ +solcher Sequenzen. + +#### Satz + +Die Anzahl der $k$-elementigen Multimengen einer $n$-elementigen Menge ist + +$$ +\binom{n-1+k}{k} +$$ + +##### Beispiel + +25 Eissorten. Wie viele mögliche Eisbecher mit 5 Kugeln gibt es? + +**Antwort**: + +$$ +n = 25, k = 5 \\ +\binom{25-1+5}{5} = \binom{29}{5} = 118755 +$$ diff --git a/school/di-ma/20181010-personen.dot b/school/di-ma/20181010-personen.dot new file mode 100644 index 0000000..862ea3a --- /dev/null +++ b/school/di-ma/20181010-personen.dot @@ -0,0 +1,22 @@ +digraph personen { + edge [ arrowhead="none" ]; + node [ shape="circle" ]; + 1; + { + rank=same; + 2; + 3; + } + { + rank=same; + 4; + 5; + } + 1 -> 2; + 1 -> 3; + 1 -> 4; + 1 -> 5; + 4 -> 5; + 5 -> 3; + 2 -> 3; +} diff --git a/school/di-ma/20181010_1-binomialkoeffizient.md b/school/di-ma/20181010_1-binomialkoeffizient.md new file mode 100644 index 0000000..3d5ae8b --- /dev/null +++ b/school/di-ma/20181010_1-binomialkoeffizient.md @@ -0,0 +1,223 @@ +--- +title: Binomialkoeffizient +date: 2018-10-10 +--- + +# Wiederholung + +$n$ Elemente, $k$ mal ziehen: + + --- | geordnet | ungeordnet +:---: | :---: | :---: +mit zurücklegen | $n^k$ | $\binom{n+k-1}{k}$ +ohne zurücklegen | $n^{\underline{k}}$ | $\binom{n}{k} = \frac{n!}{k!\cdot(n-k)!}$ + +## Beispiel a + +**Frage**: Wie viele 10-elementige Teilmengen von der 100-elementigen Menge $M = \{1,2,...100\}$ + +1. gibt es? +2. die entweder die 1 oder die 2 enthalten gibt es? + +### Zu 1) + +$$ +\binom{100}{10} +$$ + +### Zu 2) + +Zwei Teile: + +* Die Anzahl der 10 elementingen Teilmengen, die 1 aber nicht 2 enthalten +* Die Anzahl der 10 elementingen Teilmengen, die 2 aber nicht 1 enthalten + +In beiden Fällen gibt es $\binom{98}{9}$ Möglichkeiten. + +Die Fälle sind disjunkt $\Rightarrow$ es gibt $2 \cdot \binom{98}{9}$ Möglichkeiten + + +## Beispiel b + +Wahl mit 100 Wahlberechtigten und 2 Kandidaten. Jede Stimme hat 4 Möglichkeiten (Kandidat 1, Kandidat 2, enthalten oder +ungültig). + +**Frage**: Wie viele Ergebnisse kann es geben? + +Dies entspricht der Anzahl der 100 elementigen Multimengen einer 4-elementigen Menge + +$$ +\binom{100+4-1}{100} = \binom{103}{100} = 353702 +$$ + + +# Eigenschaften von Binomialkoeffizienten + +**Satz**: Seien $n, k \in \mathbb{N}$ $k \leq n$ dann gilt + +1. $\binom{n}{k} = \binom{n}{n-k}$ +2. $\binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1}$ +3. $\binom{n}{k} = \sum\limits^k_{l=0} \binom{n}{l} \cdot \binom{n}{k-l}$ +4. $(a+b)^n = \sum\limits^n_{k=0} \binom{n}{k} \cdot a^k \cdot b^{n-k}$ + +## Beweis + +Wir wollen kombinatorische Beweise geben. Wir zählen auf beiden Seiten der Gleichung die gleichen Objekte aber auf +verschiedene Weise. + +**zu 1)** Sei $M$ eine $n$-elementige Menge + +* $\binom{n}{k}$ zählt die $k$-elementigen Teilmengen von $M$ +* $\binom{n}{n-k}$ zählt die $(n-k)$-elementigen Teilmengen von $M$ + +Wir betrachten die Abbildung + +$$ +f: \text{Teilmenge von M} \to \text{Teilmenge von M} \\ +f(A) = M \setminus A = \{x \in M \mid x \notin A\} = A^{\mathrm{C}} +$$ + +Es gilt: + +1. $\vert A \vert = k \Rightarrow \vert f(A) \vert = n-k$ +2. $f$ ist bijektiv (die Umkehrabbildung ist $f$ selbst) + +Damit folgt aus dem Gleichheitsprinzip + +$$ +\binom{n}{k} = \binom{n}{n-k} +$$ + +**zu 2)** Sei $M = \{1, ... n\}$ und $\mathbb{T} = \{A \subseteq M \mid \vert A \vert = k\}$ + +Es gilt $\vert\mathbb{T}\vert = \binom{n}{k}$ + +Wir teilen die Menge $\mathbb{T}$ auf in zwei disjunkte Teile + +$$ +\mathbb{T}_1 = \{ A \subseteq M \mid \vert A \vert = k, n \notin A\} \\ +\mathbb{T}_2 = \{ A \subseteq M \mid \vert A \vert = k, n \in A\} +$$ + +Dann gilt (Summenregel) + +$$ +\binom{n}{k} = \vert \mathbb{T} \vert = \vert \mathbb{T}_1 \vert + \vert \mathbb{T}_2 \vert +$$ + +* $\vert \mathbb{T}_1 \vert = \binom{n-1}{k}$, denn Elemente aus $\mathbb{T}_1$ entsprechen $k$-elementigen Teilmengen +aus $M^\prime = \{1,... n-1\}$ +* $\vert \mathbb{T}_2 \vert = \binom{n-1}{k-1}$, denn für jedes $A \in \mathbb{T}_2$, d.h. +$A \subseteq M, \vert A \vert = k$ und $n \in A$ betrachte + +$$ +A^\prime = A \setminus \{n\} +$$ + +$A^\prime$ ist eine $(k-1)$-elementige Teilmenge von $M^\prime = \{1,... n-1\}$ + +**zu 3)** Seien $A$, $B$ Mengen mit $\vert A \vert = n$ und $\vert B \vert = m$ mit $A \cap B = \emptyset$ (disjunkt) + +$\binom{n+m}{k}$ ist die Anzahl der $k$-elementigen Teilmengen von $A \dot\cup B$ ($\vert A \dot\cup B \vert = n + m$). + +Wir teilen die $k$-elementigen Teilmengen von $A \dot\cup B$ in $k+1$ disjunkte Fälle auf + +** hier wäre ein Venn Diagramm. Mach das mal + +**Fall l** (für $l \in \{0,...k\}$) + + +Betrachte die $k$-elementigen Teilmengen $S$ von $A \cup B$, so dass $\vert A \cap S \vert = l$ +($\Leftrightarrow \vert B \cap S \vert = k - l$), d.h. wir betrachten die Anzahl der $l$-elemeniigen Teilmengen von $A$ +und der $(k-l)$-elementigen Teilmenge von $B$. + +Mit der Produktregel ergeben sich $\binom{n}{l} \cdot \binom{m}{k-l}$. + +Mit der Summenformel ergibt sich + +$$ +\binom{n+m}{k} = \sum\limits^k_{l=0} \binom{n}{l} \cdot \binom{m}{k-l} +$$ + +**zu 4)** + +$$ +(a+b)^n = (a+b) \cdot (a+b) \cdot ... (a+b) +$$ + +Beim Ausmultiplizieren "entscheiden" wir uns für jede der $n$ Klammern for $a$ oder $b$. Für einen Term +$a^k\cdot b^{n-k}$ wählen wir aus den $n$ Klammern genau $k$-mal das $a$. Damit haben wir genau $\binom{n}{k}$ +Möglichkeiten den Term $a^k \cdot b^{n-k}$ zu erhalten. + +# Kombinatorische Prinzipien + +## Schubfachprinzip + +**Beispiel**: Wir haben 9 Schubladen und 10 Objekte, die wir auf die Schubladen verteilen wollen. Dann gibt es eine +Schublade, in der mindestens 2 Objekte landen. + +### Satz + +Seien $X$, $Y$ endliche Mengen mit $\vert X \vert \geq \vert Y \vert + 1$ und $f: X \to Y$ eine Abbildung dann + +$$ +\exists y \in Y \text{ so dass } \vert f^{-1}(y) \vert = \vert \{x\in X \mid f(x) = y\} \vert \geq 2 +$$ + +### Beweis + +Statt $A \Rightarrow B$ zeigen wir $\lnot B \Rightarrow \lnot A$ + +Sei $f: X \to Y$ gegeben so dass $\forall y \in Y$ gilt $\vert f^{-1}(y) \vert \leq 1$, dann gilt + +$$ +\vert X \vert = \sum\limits_{y \in Y} \vert f^{-1}(y) \vert \leq \sum\limits_{y \in Y} 1 = \vert Y \vert +$$ + +Allgemeiner gilt: Seien $X$, $Y$ endliche Mengen und $f: X \to Y$ eine Abbildung, dann $\exists y \in Y$ so dass + +$$ +\vert f^{-1}(y) \vert \geq \left\lceil \frac{\vert X \vert}{\vert Y \vert} \right\rceil +$$ + +($\lceil \cdot \rceil$ ist die obere Gaussklammer, das heißt die kleinste natürliche Zahl größer als $x$). + +**Beispiel 1**: *Gegeben*: $n$ Personen $1,...n$ mit Bekanntschaftsrelationen, darstellbar als Graph mit Personen als +Konten und Kanten zwischen Knoten, falls sich die Personen kennen. + +![Personen Graph](./20181010-personen.png) + +* 1 kennt 4 Personen +* 2 kennt 2 Personen +* 3 kennt 3 Personen +* 4 kennt 2 Personen +* 5 kennt 3 Personen + +Es gibt (mindestens) 2 Personen, die die gleiche Anzahl von Personen kennen. Dies gilt **immer**. + +### Satz + +Unter $n$ Personen gibt es immer mindestens 2, die die selbe Anzahl von Personen kennen. + +### Beweis + +Wir wollen das Schubfachprinzip nutzen. Für die Personen $P = \{1, ... n\}$ betrachte die Abbildung +$f: P \to \{0, ... n-1\}$, die jeder dieser Personen die Anzahl der Personen, die sie kennt, zuweist. + +Problem: $\vert P \vert = n = \vert \{1, ... n\} \vert$ + +Betrachte 2 Fälle: + +1. Es gibt eine Person, die niemanden kennt, das heißt $\exists i \in P$ so dass $f(i) = 0$. Dann gilt + $\forall j \in P \neq n - 1$ da "kennen" symmetrisch ist. Damit ist $f(P) \subseteq \{0, ... n-2\}$ und das + Schubfachprinzip ist anwendbar. +2. Es gibt keine Person, die niemanden kennt, dann $f(P) \subseteq \{1, ... n-1\}$ und auch hier ist das + Schubfachprinzip anwendbar. + +$$ +\Box +$$ + +**Beispiel 2**: In Bochum wohnen ca $350000$ Menschen, jeder Mensch hat zwischen $0$ und $150000$ Kopfhaare. + +$\Rightarrow$ es gibt mindestens 2 Menschen in Bochum mit der gleichen Anzahl Haare. diff --git a/school/intro-crypto.md b/school/intro-crypto.md new file mode 100644 index 0000000..8350478 --- /dev/null +++ b/school/intro-crypto.md @@ -0,0 +1,8 @@ +--- +title: Einführung in die Kryptographie +subtitle: > + Notizen und Mitschrift zur Vorlesung Einführung in die Kryptographie +--- + +- [2018-10-11 Intro](intro-crypto/20181011_1-intro) +- [2018-10-11 Klassifikation, Kerckhoffs' Prinzip, Substitutionschiffre](intro-crypto/20181011_2-klassifikation) diff --git a/school/intro-crypto/20181011-classification.dot b/school/intro-crypto/20181011-classification.dot new file mode 100644 index 0000000..0baf07a --- /dev/null +++ b/school/intro-crypto/20181011-classification.dot @@ -0,0 +1,28 @@ +digraph classification { + edge [ arrowhead="none" ]; + 1 [ label="Kryptologie" ]; + 2 [ label="Kryptographie" ]; + 3 [ label="Kryptoanalyse" ]; + 4 [ label="symmetrische\nChiffren" ]; + 5 [ label="asymmetrische\nChiffren" ]; + 6 [ label="Protokolle\n& Sonstiges" ]; + + { + rank=same; + 2; + 3; + } + { + rank=same; + 4; + 5; + 6; + } + + 1 -> 2; + 1 -> 3; + + 2 -> 4; + 2 -> 5; + 2 -> 6; +} diff --git a/school/intro-crypto/20181011_1-intro.md b/school/intro-crypto/20181011_1-intro.md new file mode 100644 index 0000000..b84fc89 --- /dev/null +++ b/school/intro-crypto/20181011_1-intro.md @@ -0,0 +1,26 @@ +--- +title: Intro +date: 2018-10-11 +--- + +# Moodle + +**Kursnummer**: 141022 + +**Passwort** : krypto1819 + +# Klausur + +* 10% Bonus durch Übungen, nur wenn bestanden (>49%) +* Anmeldung im Prüfungsamt + +## Hilfsmittel + +* Taschenrechner +* 1 Seite handschriftlich + +# Übungen + +**Abgabe**: Donnerstag 12:14 Uhr + +Handschriftlich oder LaTeX (Vorlage vorhanden) diff --git a/school/intro-crypto/20181011_2-klassifikation.md b/school/intro-crypto/20181011_2-klassifikation.md new file mode 100644 index 0000000..4a4d757 --- /dev/null +++ b/school/intro-crypto/20181011_2-klassifikation.md @@ -0,0 +1,59 @@ +--- +title: Klassifikation, Grundlagen, Substitutionschiffre +date: 2018-10-11 +--- + +# Klassifikation der "Kryptographie" + +![Klassifikation](./20181011-classification.png) + +## Anwendungen + +* WhatsApp +* Auto +* Mensa Karte +* Medizinische Geräte +* Kreditkarten +* mobile Kommunikation +* IoT +* BitCoin +* Flugzeuge +* E-Mail +* (Schadsoftware) + +# Grundlagen symmetrischer Chiffren + +Einfache Ausgangssituation: + +![Ausgangssituation](./20181011_situation.png) + +* $e \widehat{=}$ Verschlüsselung oder Chiffrierung +* $d \widehat{=}$ Entschlüsselung oder Dechiffrierung +* $x \widehat{=}$ Klartext +* $y \widehat{=}$ Chiffrat +* $k \widehat{=}$ Schlüssel +* $\vert k \vert \widehat{=}$ Schlüsselraum + +## Kerckhoffs' Prinzip + +> Ein Kryptosystem muss auch dann sicher sein, wenn der Angreifer alle Deteils kennt, bis auf den Schlüssel. + +Bei Verletzung der Prinzips: `Security by Obscurity`. + +# Substitutionschiffre + +* operiert auf Buchstaben +* Prinzip: + $$ + A \to l \\ + B \to d \\ + C \to w \\ + ... + $$ + +**Beispiel**: $ABBA \to^e lddl$ + +## Angriffe + +1. Häufigkeitsanalyse (Übung) +2. Vollständige Schlüsselsuche (Bruteforce): $\vert k \vert = 26! \approx 2^{88}$ Möglichkeiten diff --git a/school/intro-crypto/20181011_situation.dot b/school/intro-crypto/20181011_situation.dot new file mode 100644 index 0000000..bfe0f25 --- /dev/null +++ b/school/intro-crypto/20181011_situation.dot @@ -0,0 +1,51 @@ +digraph situation { + rankdir=LR; + a [ label="Alice" shape="none" ]; + b [ label="Bob" shape="none" ]; + o [ label="Oscar" shape="none" ]; + i [ label="unsicherer\nKanal" ]; + e [ label="e" shape="box" ]; + d [ label="d" shape="box" ]; + g [ label="Gen" shape="box"]; + 1 [ style="invisible" shape="point" width=0 ]; + 2 [ style="invisible" shape="point" width=0 ]; + 3 [ style="invisible" shape="point" width=0 ]; + 4 [ style="invisible" shape="point" width=0 ]; + + { + rank=same; + a; + g; + } + + { + rank=same; + e; + 1; + } + + { + rank=same; + d; + 2; + } + + { + rank=same; + i; o; + } + + a -> e [ label="x" ]; + e -> i [ label="y" ]; + i -> d [ label="y" ]; + d -> b [ label="x" ]; + + g -> 1 [ arrowhead="none" ]; + 1 -> e [ label="k" ]; + 1 -> 3 [ arrowhead="none" ]; + 3 -> 4 [ arrowhead="none"; penwidth=10; label="sicherer Kanal\n " ]; + 4 -> 2 [ arrowhead="none" ]; + 2 -> d [ label="k" ]; + + i -> o [ label="y" ]; +} diff --git a/school/intro-crypto/aufgaben/1/20181011_situation.dot b/school/intro-crypto/aufgaben/1/20181011_situation.dot new file mode 100644 index 0000000..bfe0f25 --- /dev/null +++ b/school/intro-crypto/aufgaben/1/20181011_situation.dot @@ -0,0 +1,51 @@ +digraph situation { + rankdir=LR; + a [ label="Alice" shape="none" ]; + b [ label="Bob" shape="none" ]; + o [ label="Oscar" shape="none" ]; + i [ label="unsicherer\nKanal" ]; + e [ label="e" shape="box" ]; + d [ label="d" shape="box" ]; + g [ label="Gen" shape="box"]; + 1 [ style="invisible" shape="point" width=0 ]; + 2 [ style="invisible" shape="point" width=0 ]; + 3 [ style="invisible" shape="point" width=0 ]; + 4 [ style="invisible" shape="point" width=0 ]; + + { + rank=same; + a; + g; + } + + { + rank=same; + e; + 1; + } + + { + rank=same; + d; + 2; + } + + { + rank=same; + i; o; + } + + a -> e [ label="x" ]; + e -> i [ label="y" ]; + i -> d [ label="y" ]; + d -> b [ label="x" ]; + + g -> 1 [ arrowhead="none" ]; + 1 -> e [ label="k" ]; + 1 -> 3 [ arrowhead="none" ]; + 3 -> 4 [ arrowhead="none"; penwidth=10; label="sicherer Kanal\n " ]; + 4 -> 2 [ arrowhead="none" ]; + 2 -> d [ label="k" ]; + + i -> o [ label="y" ]; +} diff --git a/school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf b/school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ae2bb679e585ce7d098e8f93ed562d3be3b63e5 GIT binary patch literal 72178 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"] + +[dependencies] +countmap = "0.2.0" diff --git a/school/intro-crypto/uebung/01/u01/src/main.rs b/school/intro-crypto/uebung/01/u01/src/main.rs new file mode 100644 index 0000000..f694f4b --- /dev/null +++ b/school/intro-crypto/uebung/01/u01/src/main.rs @@ -0,0 +1,81 @@ +extern crate countmap; + +use countmap::CountMap; +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +fn count() { + let args: Vec<_> = std::env::args().collect(); + let file = args.get(1).unwrap(); + let mut map: CountMap = CountMap::new(); + let read = BufReader::new(File::open(file).unwrap()); + for line in read.lines() { + if let Ok(line) = line { + line.chars().filter(|c| c.is_alphabetic()).for_each(|c| { + map.insert_or_increment(c); + }); + } + } + let sum: u32 = map + .iter() + .filter(|(k, _)| k.is_alphabetic()) + .map(|(_, v)| v) + .sum(); + let mut vec: Vec<_> = map.into_iter().collect(); + vec.sort_unstable(); + vec.into_iter().for_each(|(k, v)| { + println!( + "{} &\\text{{:}}& {:3} \\to{{}} {:.2} \\\\", + k, + v, + v as f64 / sum as f64 + ) + }); + println!("sum &\\text{{:}}& {}", sum); +} + +fn main() { + let args: Vec<_> = std::env::args().collect(); + let file = args.get(1).unwrap(); + let read = BufReader::new(File::open(file).unwrap()); + for line in read.lines() { + if let Ok(line) = line { + let s: String = line + .chars() + .map(|c| match c { + 'A' => 'f', + 'B' => 'ä', + 'C' => 'g', + 'D' => 'j', + 'E' => 'ö', + 'F' => 'x', + 'G' => 'n', + 'J' => 'i', + 'K' => 'm', + 'L' => 'c', + 'M' => 'ß', + 'N' => 'v', + 'O' => 'd', + 'P' => 'r', + 'Q' => 'a', + 'R' => 'l', + 'S' => 'e', + 'T' => 'ü', + 'U' => 'h', + 'V' => 'z', + 'W' => 't', + 'X' => 'w', + 'Y' => 'p', + 'Z' => 's', + 'Ä' => 'o', + 'Ö' => 'b', + 'Ü' => 'u', + 'ß' => 'k', + c => c, + }).collect(); + println!("{}", s); + } + } +} diff --git a/school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf b/school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8ac9b578455d03647b7358c958fea025d47dcf93 GIT binary patch literal 77246 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%0Dnz^zbE}abMuE1 zIsUO?V?${W8MDr!ch$9V_(3p!$% zfkqqjO%OzF1revIq;!=GUlBQ*I+zfFjG!%! z>_AZOek})NW#$Bp_3w4rK!*KW9?Rn%@oOHCndSF>faEcO=G(93m{=Z<*T3Zf9=DZW z^Ef#kE%ui@AS=`30`yBB6BB^_PkgL@^o@yylkInTOaK1Hi=oXCCw8 z0sEJ7KmhaOg85q>EBo)d2mS{vKo<5#=J{`Rfq&ow0yrKQnqSH>0h#~IV`qCjb^Tfn z6gmEn{<5?GIlk<`Kl%#<&AdPBa{QqKCU%ZL>=dNE$Bp7wEI_6|~=9_-h0007$`SOBanf9A10 zZjis$Wd%I$Iltwx{aKfd4YZ>DRt^aGV|)S@zslnPDf;(3&c{{u*K#aOf6jeS zsXy$6g^iu__j$>}4q5jYPFZfsi?110#vHripu2=14fv>+#?SdC7Zk3f7kCSGX3)%ZP`BgPGmqh$M(QSv{i<}Z%Vlir6PCk;lfx;);a>05P9X?BbGP?tYE z@5vcuEu#*-yY2(FjiB-! Wir werden kein Blockchain machen, in dieser Vorlesung + + +**Schwerpunkt in Netsec 2**: TLS + + +## Notzizen + +* **Starker Angriff**: Wenig Voraussetzungen +* **Schwacher Angriff**: Viele Voraussetzungen + +**EC**: + +$$ +y^2 = x^3 + \underline{a}x + \underline{b} +$$ + +$b$ ggf nicht geprüft + +## Nachschlagen + +* DNSSEC schwache Schlüssel +* Bleichenbacher +* Chinesischer Restsatz +* Small Subgroup Attack (TLS) +* TLS Attacher +* DOMParator +* Professos +* WS-Attacker diff --git a/school/netsec/20181012_1-kryptographie_und_das_internet.md b/school/netsec/20181012_1-kryptographie_und_das_internet.md new file mode 100644 index 0000000..c1e695b --- /dev/null +++ b/school/netsec/20181012_1-kryptographie_und_das_internet.md @@ -0,0 +1,10 @@ +--- +title: Kryptographie und das Internet +date: 2018-10-12 +--- + +# Kryptographie und das Internet + +**AE**: Authenticated Encryption + +**AEAD**: AE with Additional Data diff --git a/school/netsec1.md b/school/netsec1.md new file mode 100644 index 0000000..4cfa759 --- /dev/null +++ b/school/netsec1.md @@ -0,0 +1,8 @@ +--- +title: Netzsicherheit 1 +--- + +# Netzsicherheit 1 + +- [2018-10-12 Intro](netsec/20181012_0-intro) +- [2018-10-12 Kryptographie und das Internet](netsec/20181012_1-kryptographie_und_das_internet) diff --git a/templates/eisvogel.tex b/templates/eisvogel.tex new file mode 100644 index 0000000..1986732 --- /dev/null +++ b/templates/eisvogel.tex @@ -0,0 +1,805 @@ +%% +% Copyright (c) 2018, Pascal Wagler; +% Copyright (c) 2014--2018, John MacFarlane +% +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions +% are met: +% +% - Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% +% - 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. +% +% - Neither the name of John MacFarlane nor the names of other +% contributors may be used to endorse or promote products derived +% from this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +% "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 OWNER 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. +%% + +%% +% For usage information and examples visit the GitHub page of this template: +% https://github.com/Wandmalfarbe/pandoc-latex-template +%% + +\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames*,table}{xcolor} +$if(dir)$$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$$endif$% +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$else$a4paper,$endif$$if(beamer)$ignorenonframetext,$if(handout)$handout,$endif$$if(aspectratio)$aspectratio=$aspectratio$,$endif$$endif$$for(classoption)$$classoption$$sep$,$endfor$,tablecaptionabove]{$if(book)$scrbook$else$scrartcl$endif$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% +\includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph: +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ +\centering +\begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par +\end{beamercolorbox} +} +\setbeamertemplate{section page}{ +\centering +\begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par +\end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ +\centering +\begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par +\end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$else$ +\usepackage{setspace} +\setstretch{1.2} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provides euro and other symbols +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(colorlinks)$ +\usepackage{xcolor} +\definecolor{default-linkcolor}{HTML}{A50000} +\definecolor{default-filecolor}{HTML}{A50000} +\definecolor{default-citecolor}{HTML}{4077C0} +\definecolor{default-urlcolor}{HTML}{4077C0} +$endif$ +\usepackage{hyperref} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$, + filecolor=$if(filecolor)$$filecolor$$else$default-filecolor$endif$, + citecolor=$if(citecolor)$$citecolor$$else$default-citecolor$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering,$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$else$ +\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering]{geometry} +$endif$ +$if(logo)$ +\usepackage[export]{adjustbox} +\usepackage{graphicx} +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% These lines are needed to make table captions work with longtable: +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(beamer)$ +$else$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ + +% Make use of float-package and set default placement for figures to H +\usepackage{float} +\floatplacement{figure}{H} + +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + $if(mainfont)$ + $else$ + % See issue https://github.com/reutenauer/polyglossia/issues/127 + \renewcommand*\familydefault{\sfdefault} + $endif$ + % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic) + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\providecommand{\institute}[1]{} +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$if(beamer)$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + + + + + +%% +%% added +%% + +% +% No language specified? take American English. +% +$if(lang)$$else$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=english]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + $if(mainfont)$ + $else$ + % See issue https://github.com/reutenauer/polyglossia/issues/127 + \renewcommand*\familydefault{\sfdefault} + $endif$ + % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic) + \usepackage{polyglossia} + \setmainlanguage[]{english} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ + +% +% colors +% +\usepackage[]{xcolor} + +% +% listing colors +% +\definecolor{listing-background}{HTML}{F7F7F7} +\definecolor{listing-rule}{HTML}{B3B2B3} +\definecolor{listing-numbers}{HTML}{B3B2B3} +\definecolor{listing-text-color}{HTML}{000000} +\definecolor{listing-keyword}{HTML}{435489} +\definecolor{listing-identifier}{HTML}{435489} +\definecolor{listing-string}{HTML}{00999A} +\definecolor{listing-comment}{HTML}{8E8E8E} +\definecolor{listing-javadoc-comment}{HTML}{006CA9} + +%\definecolor{listing-background}{rgb}{0.97,0.97,0.97} +%\definecolor{listing-rule}{HTML}{B3B2B3} +%\definecolor{listing-numbers}{HTML}{B3B2B3} +%\definecolor{listing-text-color}{HTML}{000000} +%\definecolor{listing-keyword}{HTML}{D8006B} +%\definecolor{listing-identifier}{HTML}{000000} +%\definecolor{listing-string}{HTML}{006CA9} +%\definecolor{listing-comment}{rgb}{0.25,0.5,0.35} +%\definecolor{listing-javadoc-comment}{HTML}{006CA9} + +% +% for the background color of the title page +% +$if(titlepage)$ +\usepackage{pagecolor} +\usepackage{afterpage} +$endif$ + +% +% TOC depth and +% section numbering depth +% +\setcounter{tocdepth}{3} +$if(numbersections)$ +\setcounter{secnumdepth}{3} +$endif$ + +% +% break urls +% +\PassOptionsToPackage{hyphens}{url} + +% +% When using babel or polyglossia with biblatex, loading csquotes is recommended +% to ensure that quoted texts are typeset according to the rules of your main language. +% +\usepackage{csquotes} + +% +% captions +% +\definecolor{caption-color}{HTML}{777777} +\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption} +\setcapindent{0em} +\captionsetup[longtable]{position=above} + +% +% blockquote +% +\definecolor{blockquote-border}{RGB}{221,221,221} +\definecolor{blockquote-text}{RGB}{119,119,119} +\usepackage{mdframed} +\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote} +\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}% +\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}} + +% +% Source Sans Pro as the de­fault font fam­ily +% Source Code Pro for monospace text +% +% 'default' option sets the default +% font family to Source Sans Pro, not \sfdefault. +% +$if(mainfont)$ +$else$ +\usepackage[default]{sourcesanspro} +\usepackage{sourcecodepro} +$endif$ + +% +% heading color +% +\definecolor{heading-color}{RGB}{40,40,40} +\addtokomafont{section}{\color{heading-color}} +% When using the classes report, scrreprt, book, +% scrbook or memoir, uncomment the following line. +%\addtokomafont{chapter}{\color{heading-color}} + +% +% variables for title and author +% +\usepackage{titling} +\title{$title$} +\author{$for(author)$$author$$sep$, $endfor$} + +% +% tables +% +$if(tables)$ + +\definecolor{table-row-color}{HTML}{F5F5F5} +\definecolor{table-rule-color}{HTML}{999999} + +%\arrayrulecolor{black!40} +\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule +\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule +\renewcommand{\arraystretch}{1.3} % spacing (padding) + +% Reset rownum counter so that each table +% starts with the same row colors. +% https://tex.stackexchange.com/questions/170637/restarting-rowcolors +\let\oldlongtable\longtable +\let\endoldlongtable\endlongtable +\renewenvironment{longtable}{ +\rowcolors{3}{}{table-row-color!100} % row color +\oldlongtable} { +\endoldlongtable +\global\rownum=0\relax} + +% Unfortunately the colored cells extend beyond the edge of the +% table because pandoc uses @-expressions (@{}) like so: +% +% \begin{longtable}[]{@{}ll@{}} +% \end{longtable} +% +% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions +$endif$ + +% +% remove paragraph indention +% +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +\setlength{\emergencystretch}{3em} % prevent overfull lines + +% +% +% Listings +% +% + +$if(listings)$ +\lstdefinestyle{eisvogel_listing_style}{ + language = java, +$if(listings-disable-line-numbers)$ + xleftmargin = 0.6em, + framexleftmargin = 0.4em, +$else$ + numbers = left, + xleftmargin = 2.7em, + framexleftmargin = 2.5em, +$endif$ + backgroundcolor = \color{listing-background}, + basicstyle = \color{listing-text-color}\small\ttfamily{}\linespread{1.15}, % print whole listing small + breaklines = true, + frame = single, + framesep = 0.6mm, + rulecolor = \color{listing-rule}, + frameround = ffff, + tabsize = 4, + numberstyle = \color{listing-numbers}, + aboveskip = 1.0em, + belowcaptionskip = 1.0em, + keywordstyle = \color{listing-keyword}\bfseries, + classoffset = 0, + sensitive = true, + identifierstyle = \color{listing-identifier}, + commentstyle = \color{listing-comment}, + morecomment = [s][\color{listing-javadoc-comment}]{/**}{*/}, + stringstyle = \color{listing-string}, + showstringspaces = false, + escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments + literate = + {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 + {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 + {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 + {€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1 + {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 + {…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1 + {”}{{''}}1 +} +\lstset{style=eisvogel_listing_style} + +\lstdefinelanguage{XML}{ + morestring = [b]", + moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ }, + moredelim = [s][\bfseries\color{listing-keyword}]{}, + moredelim = [l][\bfseries\color{listing-keyword}]{/>}, + moredelim = [l][\bfseries\color{listing-keyword}]{>}, + morecomment = [s]{}, + morecomment = [s]{}, + commentstyle = \color{listing-comment}, + stringstyle = \color{listing-string}, + identifierstyle = \color{listing-identifier} +} +$endif$ + +% +% header and footer +% +$if(disable-header-and-footer)$ +$else$ +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhead{} +\fancyfoot{} +\lhead[$if(header-right)$$header-right$$else$$date$$endif$]{$if(header-left)$$header-left$$else$$title$$endif$} +\chead[$if(header-center)$$header-center$$else$$endif$]{$if(header-center)$$header-center$$else$$endif$} +\rhead[$if(header-left)$$header-left$$else$$title$$endif$]{$if(header-right)$$header-right$$else$$date$$endif$} +\lfoot[$if(footer-right)$$footer-right$$else$\thepage$endif$]{$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$} +\cfoot[$if(footer-center)$$footer-center$$else$$endif$]{$if(footer-center)$$footer-center$$else$$endif$} +\rfoot[$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$]{$if(footer-right)$$footer-right$$else$\thepage$endif$} +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} +$endif$ + +%% +%% end added +%% + +\begin{document} + +%% +%% begin titlepage +%% + +$if(titlepage)$ +\begin{titlepage} +\newgeometry{left=6cm} +$if(titlepage-color)$ +\definecolor{titlepage-color}{HTML}{$titlepage-color$} +\newpagecolor{titlepage-color}\afterpage{\restorepagecolor} +$endif$ +\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}} +\begin{flushleft} +\noindent +\\[-1em] +\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$} +\makebox[0pt][l]{\colorRule[$if(titlepage-rule-color)$$titlepage-rule-color$$else$435488$endif$]{1.3\textwidth}{$if(titlepage-rule-height)$$titlepage-rule-height$$else$4$endif$pt}} +\par +\noindent + +{ \setstretch{1.4} +\vfill +\noindent {\huge \textbf{\textsf{$title$}}} +$if(subtitle)$ +\vskip 1em +{\Large \textsf{$subtitle$}} +$endif$ +\vskip 2em +\noindent +{\Large \textsf{$for(author)$$author$$sep$, $endfor$} +\vfill +} + +$if(logo)$ +\noindent +\includegraphics[width=$if(logo-width)$$logo-width$$else$100$endif$pt, left]{$logo$} +$endif$ + +\textsf{$date$}} +\end{flushleft} +\end{titlepage} +\restoregeometry +$endif$ + +%% +%% end titlepage +%% + +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame} +$if(toc-title)$ +\frametitle{$toc-title$} +$endif$ +\tableofcontents[hideallsubsections] +\end{frame} +$if(toc-own-page)$ +\newpage +$endif$ +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +$if(toc-own-page)$ +\newpage +$endif$ +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +\printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/templates/mindoc.html b/templates/mindoc.html new file mode 100644 index 0000000..06983de --- /dev/null +++ b/templates/mindoc.html @@ -0,0 +1,122 @@ + + + + + + +$if(description)$ + +$endif$ +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ + + + + + + + +$if(quotes)$ + +$endif$ +$if(highlighting-css)$ + +$endif$ +$for(css)$ + +$endfor$ +$if(math)$ +$math$ +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + + +
+
+
+ + + +$for(include-before)$ +$include-before$ +$endfor$ +$if(headnote)$ +
$headnote$
+$endif$ +$if(published)$ +
$published$
+$endif$ +$if(license)$ +
$license$
$endif$ +$if(title)$ +
+

$title$

+$if(subtitle)$ +

$subtitle$

+$endif$ +$if(author)$ +$for(author)$ +$if(author.name)$ +

$author.name$

+$else$ +

$author$

+$endif$ +$if(author.affiliation)$ +
$author.affiliation$
+$endif$ +$if(author.email)$ + +$endif$ +$endfor$ +$endif$ +$if(version)$ +

Version $version$

+$endif$ +$if(date)$ +

$date$

+$endif$ +
+$endif$ +$if(abstract)$ +
+

Abstract

+$abstract$ +
+$endif$ +$if(toc)$ + +$endif$ +$body$ +$for(include-after)$ +$include-after$ +$endfor$ + + + +
+
+
+
+ +
+ + + + + +