blob: 16382fe86958aeffbdaa9f7bedbe119f041b4c82 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme:light)">
<meta name="theme-color" content="#121212" media="(prefers-color-scheme:dark)">
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90' font-family='sans-serif' font-weight='bold'>T</text></svg>">
<meta name="Description" content="tesseras-paste: decentralized encrypted pastebin built on tesseras-dht.">
<meta property="og:url" content="https://tesseras.net/tesseras-paste.html">
<meta property="og:title" content="tesseras-paste - Decentralized encrypted pastebin">
<meta property="og:site_name" content="Tesseras">
<meta property="og:description" content="tesseras-paste: decentralized encrypted pastebin built on tesseras-dht.">
<title>tesseras-paste - Decentralized encrypted pastebin</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<p><a href="/">← tesseras.net</a></p>
<h1>tesseras-paste</h1>
<p>A decentralized pastebin built on
<a href="tesseras-dht.html">tesseras-dht</a>. Pastes are encrypted client-side
with XChaCha20-Poly1305, distributed across the DHT, and served over HTTP.
No central server stores your data.</p>
<h2>Features</h2>
<ul>
<li>End-to-end encrypted pastes (XChaCha20-Poly1305)</li>
<li>Decentralized storage via Kademlia DHT</li>
<li>NAT traversal (hole-punching and proxy relay)</li>
<li>HTTP serving with content-key URLs</li>
<li>TTL-based expiry and pinning</li>
<li>Public (unencrypted) paste mode</li>
<li>OpenBSD <code>pledge(2)</code> and <code>unveil(2)</code> sandboxing</li>
<li>DNS SRV bootstrap discovery</li>
</ul>
<h2>Binaries</h2>
<p><strong>tpd</strong> — daemon that runs a DHT node, stores pastes, and serves HTTP.</p>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">usage: tpd [-g] [-n] [-p port] [-d dir] [-s sock] [-w http_port] [-b host:port]
-p port UDP port (0 = random)
-d dir data directory
-s sock Unix socket path
-w port HTTP server port
-g global NAT (public server)
-n no auto-bootstrap (skip DNS SRV)
-b host:port bootstrap peer (repeatable)
-v verbose (debug logging)</pre>
<p><strong>tp</strong> — CLI client that talks to the daemon over a Unix socket.</p>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">usage: tp [-s sock] [-v] <command> [args]
put [-t ttl] [-p] read stdin, store paste (-p = public, no encryption)
get <key> retrieve paste to stdout
del <key> delete paste
pin <key> pin (never expires)
unpin <key> unpin
status show daemon status</pre>
<h2>Quick Start</h2>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap"># Start the daemon
$ tpd -p 4433 -w 9999 -d /var/tesseras-paste
# Store a paste
$ echo "hello" | tp put -p
Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx
# Retrieve it
$ tp get Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx</pre>
<h2>Public Gateway</h2>
<p>A public HTTP gateway is available at
<strong>http://p.tesseras.net/<key></strong>. For example:</p>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">http://p.tesseras.net/Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx</pre>
<p>Note: there may be a short delay when retrieving recently created pastes,
as content needs time to propagate across DHT nodes.</p>
<h2 id="download">Download</h2>
<p>Current version: <strong>0.1.3</strong></p>
<p>Source tarballs and signatures are available at
<a href="https://tesseras.net/pub/tesseras-paste/">tesseras.net/pub/tesseras-paste/</a>.</p>
<h3>Verify with signify</h3>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ signify -Vp tesseras.pub -m tesseras-paste-0.1.3.tar.gz -x tesseras-paste-0.1.3.tar.gz.sig
Signature Verified</pre>
<h3>Verify with SHA256</h3>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ sha256 tesseras-paste-0.1.3.tar.gz
$ cat tesseras-paste-0.1.3.tar.gz.sha256</pre>
<p>Compare the two outputs. They must match.</p>
<h3>Install from crates.io</h3>
<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ cargo install tesseras-paste</pre>
<h2 id="source">Source Code</h2>
<ul>
<li><a href="https://got.tesseras.net/?action=summary&path=tesseras-paste.git">GoT</a> (primary)</li>
<li><a href="https://git.tesseras.net/tesseras-paste/">Git mirror</a></li>
<li><a href="https://crates.io/crates/tesseras-paste">crates.io</a></li>
<li><a href="https://docs.rs/tesseras-paste/latest/tesseras_paste/">docs.rs</a></li>
</ul>
<h2 id="license">License</h2>
<p>ISC — see <a href="https://got.tesseras.net/?action=blob&path=tesseras-paste.git&name=LICENSE">LICENSE</a>.</p>
</body>
</html>
|