diff --git a/papers/graphics/rosenpass-wp-hashing-tree-rgb.pdf b/papers/graphics/rosenpass-wp-hashing-tree-rgb.pdf
new file mode 100644
index 0000000..553ec7c
Binary files /dev/null and b/papers/graphics/rosenpass-wp-hashing-tree-rgb.pdf differ
diff --git a/papers/graphics/rosenpass-wp-hashing-tree-rgb.svg b/papers/graphics/rosenpass-wp-hashing-tree-rgb.svg
new file mode 100644
index 0000000..7228f23
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-hashing-tree-rgb.svg
@@ -0,0 +1,2341 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-hashing-tree.pdf b/papers/graphics/rosenpass-wp-hashing-tree.pdf
new file mode 100644
index 0000000..0507572
Binary files /dev/null and b/papers/graphics/rosenpass-wp-hashing-tree.pdf differ
diff --git a/papers/graphics/rosenpass-wp-hashing-tree.png b/papers/graphics/rosenpass-wp-hashing-tree.png
new file mode 100644
index 0000000..ca7777a
Binary files /dev/null and b/papers/graphics/rosenpass-wp-hashing-tree.png differ
diff --git a/papers/graphics/rosenpass-wp-hashing-tree.svg b/papers/graphics/rosenpass-wp-hashing-tree.svg
new file mode 100644
index 0000000..e241d0f
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-hashing-tree.svg
@@ -0,0 +1,2534 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.pdf b/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.pdf
new file mode 100644
index 0000000..3a16207
Binary files /dev/null and b/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.pdf differ
diff --git a/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.svg b/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.svg
new file mode 100644
index 0000000..4e3ed23
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-key-exchange-protocol-rgb.svg
@@ -0,0 +1,191 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-key-exchange-protocol.pdf b/papers/graphics/rosenpass-wp-key-exchange-protocol.pdf
new file mode 100644
index 0000000..e793bb3
Binary files /dev/null and b/papers/graphics/rosenpass-wp-key-exchange-protocol.pdf differ
diff --git a/papers/graphics/rosenpass-wp-key-exchange-protocol.png b/papers/graphics/rosenpass-wp-key-exchange-protocol.png
new file mode 100644
index 0000000..6c5b3af
Binary files /dev/null and b/papers/graphics/rosenpass-wp-key-exchange-protocol.png differ
diff --git a/papers/graphics/rosenpass-wp-key-exchange-protocol.svg b/papers/graphics/rosenpass-wp-key-exchange-protocol.svg
new file mode 100644
index 0000000..3a3d271
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-key-exchange-protocol.svg
@@ -0,0 +1,194 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-message-handling-code-rgb.pdf b/papers/graphics/rosenpass-wp-message-handling-code-rgb.pdf
new file mode 100644
index 0000000..43ecdb5
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-handling-code-rgb.pdf differ
diff --git a/papers/graphics/rosenpass-wp-message-handling-code-rgb.svg b/papers/graphics/rosenpass-wp-message-handling-code-rgb.svg
new file mode 100644
index 0000000..101ff23
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-message-handling-code-rgb.svg
@@ -0,0 +1,1009 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-message-handling-code.pdf b/papers/graphics/rosenpass-wp-message-handling-code.pdf
new file mode 100644
index 0000000..e9d93fc
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-handling-code.pdf differ
diff --git a/papers/graphics/rosenpass-wp-message-handling-code.png b/papers/graphics/rosenpass-wp-message-handling-code.png
new file mode 100644
index 0000000..82b7f5c
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-handling-code.png differ
diff --git a/papers/graphics/rosenpass-wp-message-handling-code.svg b/papers/graphics/rosenpass-wp-message-handling-code.svg
new file mode 100644
index 0000000..b4c8398
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-message-handling-code.svg
@@ -0,0 +1,1004 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-message-types-rgb.pdf b/papers/graphics/rosenpass-wp-message-types-rgb.pdf
new file mode 100644
index 0000000..ea9e7c3
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-types-rgb.pdf differ
diff --git a/papers/graphics/rosenpass-wp-message-types-rgb.svg b/papers/graphics/rosenpass-wp-message-types-rgb.svg
new file mode 100644
index 0000000..87d0fa8
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-message-types-rgb.svg
@@ -0,0 +1,393 @@
+
+
+
diff --git a/papers/graphics/rosenpass-wp-message-types.pdf b/papers/graphics/rosenpass-wp-message-types.pdf
new file mode 100644
index 0000000..3423351
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-types.pdf differ
diff --git a/papers/graphics/rosenpass-wp-message-types.png b/papers/graphics/rosenpass-wp-message-types.png
new file mode 100644
index 0000000..04fbe27
Binary files /dev/null and b/papers/graphics/rosenpass-wp-message-types.png differ
diff --git a/papers/graphics/rosenpass-wp-message-types.svg b/papers/graphics/rosenpass-wp-message-types.svg
new file mode 100644
index 0000000..0199599
--- /dev/null
+++ b/papers/graphics/rosenpass-wp-message-types.svg
@@ -0,0 +1,402 @@
+
+
+
diff --git a/papers/prftree.d2 b/papers/prftree.d2
new file mode 100644
index 0000000..0ee5fc0
--- /dev/null
+++ b/papers/prftree.d2
@@ -0,0 +1,218 @@
+root: 0 { shape: text }
+PROTOCOL: "PROTOCOL" { shape: text }
+
+protocol_comment: 'PROTOCOL = "rosenpass 1 rosenpass.eu aead=chachapoly1305 dprf=blake2s ekem=lightsaber skem=mceliece460896 xaead=xchachapoly1305"' { shape: text}
+
+ck_init: '"chaining key init"' { shape: text }
+ck_ext: '"chaining key extract"' { shape: text }
+
+mac: '"mac"' { shape: text }
+mac_param: MAC_WIRE_DATA { shape: text }
+cookie: '"cookie"' { shape: text }
+cookie_param: COOKIE_WIRE_DATA { shape: text }
+peer_id: '"peer_id"' { shape: text }
+peer_id_p1: spkm { shape: text}
+peer_id_p2: spkt { shape: text}
+
+root -> PROTOCOL
+
+PROTOCOL -> mac -> mac_param
+PROTOCOL -> cookie -> cookie_param
+PROTOCOL -> peer_id -> peer_id_p1 -> peer_id_p2
+PROTOCOL -> ck_init
+PROTOCOL -> ck_ext
+
+mix: '"mix"' { shape: text }
+user: '"user"' { shape: text }
+rp_eu: '"rosenpass.eu"' { shape: text }
+wg_psk: '"wireguard psk"' { shape: text }
+hs_enc: '"handshake encryption"' { shape: text }
+ini_enc: '"initiator session encryption"' { shape: text }
+res_enc: '"responder session encryption"' { shape: text }
+
+ck_ext -> mix
+ck_ext -> user -> rp_eu -> wg_psk
+ck_ext -> hs_enc
+ck_ext -> ini_enc
+ck_ext -> res_enc
+
+# ck_init -> InitHello.start
+
+InitHello {
+ start -> d0 \
+ -> m1 -> d1 \
+ -> m2 -> d2
+
+ d2 -> encaps_spkr.m1
+ encaps_spkr.d3 -> encrypt_ltk.m1
+ encaps_spkr.d3 -> encrypt_ltk.key
+ encrypt_ltk.d1 -> encrypt_auth.m1
+ encrypt_ltk.d1 -> encrypt_auth.key
+
+ m1: "mix" { shape: text }
+ m2: "mix" { shape: text }
+
+ start: '"chaining key init"' { shape: text }
+ d0: "spkr" { shape: circle }
+ d1: "sidi" { shape: circle }
+ d2: "epki" { shape: circle }
+
+ encaps_spkr {
+ m1 -> d1 \
+ -> m2 -> d2 \
+ -> m3 -> d3 \
+
+ m1: "mix" { shape: text }
+ m2: "mix" { shape: text }
+ m3: "mix" { shape: text }
+
+ d1: "spkr" { shape: circle }
+ d2: "sctr" { shape: circle }
+ d3: "sptr" { shape: circle }
+ }
+
+ encrypt_ltk {
+ m1 -> d1
+
+ encrypt: 'Aead::enc(peer_id(spkr, spki))'
+ key -> encrypt: {
+ target-arrowhead.label: key
+ }
+ data -> encrypt: {
+ target-arrowhead.label: data
+ }
+ encrypt -> d1: {
+ source-arrowhead.label: output
+ }
+
+ m1: "mix" { shape: text }
+ key: '"handshake encryption"' { shape: text }
+ data: 'ref from "peer id" branch after spkt' { shape: text }
+ d1: "ct" { shape: diamond }
+ }
+
+ encrypt_auth {
+ m1 -> d1
+
+ encrypt: 'Aead::enc(empty())'
+ key -> encrypt: {
+ target-arrowhead.label: key
+ }
+ encrypt -> d1: {
+ source-arrowhead.label: output
+ }
+
+ m1: "mix" { shape: text }
+ key: '"handshake encryption"' { shape: text }
+ d1: "ct" { shape: diamond }
+ }
+}
+
+RespHello {
+ start -> d0 -> m1 -> d1
+ d1 -> encaps_epki.m1
+ encaps_epki.d3 -> encaps_spki.m1
+ encaps_spki.d3 -> m2 -> d2
+ d2 -> encrypt_auth.m1
+
+ store_biscuit -> d2
+ "pidi" -> store_biscuit {
+ target-arrowhead.label: "field=peerid"
+ }
+ encaps_spki.d3 -> store_biscuit {
+ target-arrowhead.label: "field=ck"
+ }
+
+
+ m1: "mix" { shape: text }
+ m2: "mix" { shape: text }
+
+ start: '(state from InitHello)' { shape: text }
+ d0: "sidr" { shape: circle }
+ d1: "sidi" { shape: circle }
+ d2: "biscuit" { shape: diamond }
+
+ store_biscuit: "store_biscuit()"
+
+ encaps_epki {
+ m1 -> d1 \
+ -> m2 -> d2 \
+ -> m3 -> d3 \
+
+ m1: "mix" { shape: text }
+ m2: "mix" { shape: text }
+ m3: "mix" { shape: text }
+
+ d1: "epki" { shape: circle }
+ d2: "ecti" { shape: circle }
+ d3: "epti" { shape: circle }
+ }
+
+ encaps_spki {
+ m1 -> d1 \
+ -> m2 -> d2 \
+ -> m3 -> d3 \
+
+ m1: "mix" { shape: text }
+ m2: "mix" { shape: text }
+ m3: "mix" { shape: text }
+
+ d1: "spki" { shape: circle }
+ d2: "scti" { shape: circle }
+ d3: "spti" { shape: circle }
+ }
+
+ encrypt_auth {
+ m1 -> d1
+
+ encrypt: 'Aead::enc(empty())'
+ key -> encrypt: {
+ target-arrowhead.label: key
+ }
+ encrypt -> d1: {
+ source-arrowhead.label: output
+ }
+
+ m1: "mix" { shape: text }
+ key: '"handshake encryption"' { shape: text }
+ d1: "ct" { shape: diamond }
+ }
+}
+
+InitConf {
+ start -> d0 -> m1 -> d1 -> encrypt_auth.m1
+
+ encrypt_auth.d1 -> ol1 -> o1
+ encrypt_auth.d1 -> ol2 -> o2
+ encrypt_auth.d1 -> ol3 -> o3
+
+ m1: "mix" { shape: text }
+
+ start: '(state from RespHello)' { shape: text }
+ d0: "sidi" { shape: circle }
+ d1: "sidr" { shape: circle }
+
+ ol1: '"wireguard psk"' { shape: text }
+ ol2: '"initiator session encryption"' { shape: text }
+ ol3: '"responder session encryption"' { shape: text}
+ o2: "" { shape: page }
+ o1: "" { shape: step }
+ o2: "" { shape: step }
+ o3: "" { shape: step }
+
+ encrypt_auth {
+ m1 -> d1
+
+ encrypt: 'Aead::enc(empty())'
+ key -> encrypt: {
+ target-arrowhead.label: key
+ }
+ encrypt -> d1: {
+ source-arrowhead.label: output
+ }
+
+ m1: "mix" { shape: text }
+ key: '"handshake encryption"' { shape: text }
+ d1: "ct" { shape: diamond }
+ }
+}
diff --git a/papers/prftree.svg b/papers/prftree.svg
new file mode 100644
index 0000000..1f55670
--- /dev/null
+++ b/papers/prftree.svg
@@ -0,0 +1,823 @@
+
+
diff --git a/papers/sequencing.d2 b/papers/sequencing.d2
new file mode 100644
index 0000000..5f19b6b
--- /dev/null
+++ b/papers/sequencing.d2
@@ -0,0 +1,81 @@
+Protocol: {
+ shape: sequence_diagram
+ ini: "Initiator"
+ res: "Responder"
+ ini -> res: "InitHello"
+ res -> ini: "RespHello"
+ ini -> res: "InitConf"
+ res -> ini: "EmptyData"
+}
+
+Envelope: "Envelope" {
+ shape: class
+ type: "1"
+ '': 3
+ payload: variable
+ mac: 16
+ cookie: 16
+}
+
+Envelope.payload -> InitHello
+InitHello: "InitHello (type=0x81)" {
+ shape: class
+ sidi: 4
+ epki: 800
+ sctr: 188
+ peerid: 32 + 16 = 48
+ auth: 16
+}
+
+Envelope.payload -> RespHello
+RespHello: "RespHello (type=0x82)" {
+ shape: class
+ sidr: 4
+ sidi: 4
+ ecti: 768
+ scti: 188
+ biscuit: 76 + 24 + 16 = 116
+ auth: 16
+}
+
+Envelope.payload -> InitConf
+InitConf: "InitConf (type=0x83)" {
+ shape: class
+ sidi: 4
+ sidr: 4
+ biscuit: 76 + 24 +16 = 116
+ auth: 16
+}
+
+Envelope.payload -> EmptyData
+EmptyData: "EmptyData (type=0x84)" {
+ shape: class
+ sidx: 4
+ ctr: 8
+ auth: 16
+}
+
+Envelope.payload -> Data
+Data: "Data (type=0x85)" {
+ shape: class
+ sidx: 4
+ ctr: 8
+ data: variable + 16
+}
+
+Envelope.payload -> CookieReply
+CookieReply: "CookieReply (type=0x86)" {
+ shape: class
+ sidx: 4
+ nonce: 24
+ cookie: 16 + 16 = 32
+}
+
+RespHello.biscuit -> Biscuit
+InitConf.biscuit -> Biscuit
+Biscuit: "Biscuit" {
+ shape: class
+ peerid: 32
+ no: 12
+ ck: 32
+}
diff --git a/papers/sequencing.svg b/papers/sequencing.svg
new file mode 100644
index 0000000..090d70b
--- /dev/null
+++ b/papers/sequencing.svg
@@ -0,0 +1,133 @@
+
+