Trsst protocol implementation draft
Java JavaScript Objective-C C CSS Shell
Switch branches/tags
Latest commit 338214d Oct 22, 2014 @mmpowers mmpowers Clarified license.

README.md

trsst

What is trsst?

It depends on who you are.

  • For most users, trsst looks like a microblogging social network -- a twitter clone -- where you can follow other people and news feeds.

  • For other users, trsst looks like a stream-style RSS reader with built-in microblog publishing capabilities.

  • And for a few, trsst looks like an extension to the Atom Publishing Protocol where anyone can anonymously create self-signed and/or self-encrypted feeds and entries and publish them to any participating server.

All of these are correct.

Download Alpha v0.2

Current binaries are downloadable here: https://github.com/TrsstProject/trsst/releases

License

All Trsst Project source code is licensed under the Apache License, Version 2.0. http://www.apache.org/licenses/LICENSE-2.0

Frequently Asked Questions

The FAQ is currently kept here: https://github.com/TrsstProject/trsst/wiki/Frequently-Asked-Questions

Development Howto

Requires Java and Maven.

To build:

mvn clean install

To run:

java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar

Usage:

post [<id>] [--status <text>] [--encrypt <pubkey>]
 -a,--attach             Attach the specified file, or - for std input
 -b,--base <url>         Set base URL for this feed
 -c,--content <text>     Specify entry content on command line
 -e,--encrypt <pubkey>   Encrypt entry for specified public key
 -g,--tag <text>         Add a tag
 -i,--icon <url>         Set as this feed's icon or specify url
 -l,--logo <url>         Set as this feed's logo or specify url
 -m,--mail <email>       Set this feed's author email
 -n,--name <text>        Set this feed's author name
 -p,--pass <text>        Specify passphrase on the command line
 -r,--mention <id>       Add a mention
 -s,--status <text>      Specify status update on command line
	--strict             Require SSL certs
	--subtitle <text>    Set this feed's subtitle
 -t,--title <text>       Set this feed's title
 -u,--url <url>          Attach the specified url to the new entry
 -v,--verb <verb>        Specify an activitystreams verb for this entry
	--vanity <prefix>    Generate feed id with specified prefix
	
pull <id>...
 -d,--decrypt <id>   Decrypt entries as specified recipient id
 -h,--host <url>     Set host server for this operation
 
push <url> <id>...
 -d,--decrypt <id>   Decrypt entries as specified recipient id
 -h,--host <url>     Set host server for this operation
 
serve
	--api          Expose client API
	--clear        Turn off SSL
	--gui          Launch embedded GUI
	--port <arg>   Specify port
	--tor          Use TOR (experimental)

Example: start a server.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar serve --port 8181

Services now available at: https://192.168.1.5:8181/feed

Example: create a new empty feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post

Starting temporary service at: http://192.168.1.5:51341
Generating new feed id... 
New feed id created: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:trsst="http://trsst.com/spec/0.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default">
  <updated>2014-03-10T20:34:13.440Z</updated>
  <trsst:sign>
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</trsst:sign>
  <trsst:encrypt>
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</trsst:encrypt>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <ds:Signature>
	<ds:SignedInfo>
	  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
	  <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
	  <ds:Reference URI="">
		<ds:Transforms>
		  <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
		  <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		</ds:Transforms>
		<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
		<ds:DigestValue>
		GK1D1kLSydLFRXCHJnPk2p9LjUQ=</ds:DigestValue>
	  </ds:Reference>
	</ds:SignedInfo>
	<ds:SignatureValue>
	CGjdfB+n6uAjIDQ8UCp+GMyjlP4OazvIwzoHKZ2FL8dRGK7PVfLq/dPaGt2SysHHlmCKNhmvQ2BE
	2+hQAUtQ7g==</ds:SignatureValue>
  </ds:Signature>
</feed>

Example: create a new post on a preexisting feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post --status "First Post" M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1

Starting temporary service at: http://192.168.1.5:51371
Obtaining keys for feed id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
Using existing account id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default" xml:base="http://192.168.1.5:51371/M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1">
  <updated>2014-03-10T20:35:03.379Z</updated>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <sign xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</sign>
  <encrypt xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</encrypt>
  <ds:Signature>
	<ds:SignedInfo>
	  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
	  <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
	  <ds:Reference URI="">
		<ds:Transforms>
		  <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
		  <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		</ds:Transforms>
		<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
		<ds:DigestValue>
		n/4ocrBhhFr/9+uIzmKkGQ0ufbk=</ds:DigestValue>
	  </ds:Reference>
	</ds:SignedInfo>
	<ds:SignatureValue>
	68l6RxoG8ZAs3QvRs3HNeQipHE/QYuRD9jhqfZzoJO2PzfdCJ9DU2/XdDEwFBJzp96fJjW/fmQWI
	VEuQa+GBQw==</ds:SignatureValue>
  </ds:Signature>
  <entry>
	<updated>2014-03-10T20:35:03.379Z</updated>
	<id>
	urn:entry:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1:144adb4ae53</id>
	<published>2014-03-10T20:35:03.379Z</published>
	<title type="text">First Post</title>
	<rights type="text">attribution, no derivatives, revoked if
	deleted</rights>
	<ds:Signature>
	  <ds:SignedInfo>
		<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
		<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
		<ds:Reference URI="">
		  <ds:Transforms>
			<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
			<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		  </ds:Transforms>
		  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
		  <ds:DigestValue>
		  fghpP3mG0nzB5Sj4kyqlNbRGsDY=</ds:DigestValue>
		</ds:Reference>
	  </ds:SignedInfo>
	  <ds:SignatureValue>
	  ys+J0FryCApGD/juC20q9YrbVTIH5wQqmhgvuFmYZdBlhEVpIUg6XaFNbjc4eiAnxMs5r1qACp9n
	  NB1GrL7MuQ==</ds:SignatureValue>
	</ds:Signature>
  </entry>
</feed>

Example: create an encrypted post on a preexisting feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post --status "Secret Post" M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
-- encrypt MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEQn1eOiToQlurH0gIE0AsBTJNBF1jrOSSIr8i4RSRdvx7dtkD1hre0vgPabJMLH9QktK6AYhl31xkf3xqp_mPxw

Starting temporary service at: http://192.168.1.5:51384
Obtaining keys for feed id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
Using existing account id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default" xml:base="http://192.168.1.5:51371/M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1">
  <updated>2014-03-10T20:37:10.244Z</updated>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <sign xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</sign>
  <encrypt xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</encrypt>
  <ds:Signature>
	<ds:SignedInfo>
	  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
	  <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
	  <ds:Reference URI="">
		<ds:Transforms>
		  <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
		  <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		</ds:Transforms>
		<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
		<ds:DigestValue>
		5KBNuLZ9TTbN0UL65hFSjLN+myE=</ds:DigestValue>
	  </ds:Reference>
	</ds:SignedInfo>
	<ds:SignatureValue>
	aCS1AhKl29Pdlcgs6SRhI6oNhEWpak1/8Ft8CrgwTF/qjh7Bcy3H7UjiBC97YI2bHZcedV5Z0BRf
	htGt6UCGUQ==</ds:SignatureValue>
  </ds:Signature>
  <entry>
	<id>
	urn:entry:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1:144adb69de4</id>
	<updated>2014-03-10T20:37:10.244Z</updated>
	<published>2014-03-10T20:37:10.244Z</published>
	<predecessor xmlns="http://trsst.com/spec/0.1">
	ys+J0FryCApGD/juC20q9YrbVTIH5wQqmhgvuFmYZdBlhEVpIUg6XaFNbjc4eiAnxMs5r1qACp9n
	NB1GrL7MuQ==</predecessor>
	<title type="text">Encrypted content</title>
	<content type="application/xenc+xml">
	  <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
		<CipherData>
		  <CipherValue>
		  BO8MZ3_KSnwnTD3g0apIsP6GnmzF4RrXMhVXV7VgcqBYuITqfAcKwR6s0rjb0BBGRrtxuiiqz6dIDbRGcTSuxVdIgTPcWMvDsixO-I6wnQTT5KXl6_DhoIO_perg9ap0cT-dTi6qS-mKdaN0ADqf3E6vTsgpGTt3h_8mNQCYo9baJbobFgdmzjRi75KIMyXijA</CipherValue>
		</CipherData>
	  </EncryptedData>
	  <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
		<CipherData>
		  <CipherValue>
		  BAr8zcyj6SrI0T70_-U44V4edUxB9jNNaNLfFumWrL-yj_DoOm-DcDy4lwW3SnjqeFb-_at-72bb-mPrmaMnbAk6CVVfHDgg4pRDTriBQiCxwX8VDlCA5ileCdX0qi40c2NTgsEGS7IWwmnHwfIGj5_C7bmeyiIEhB9PiU_v7t-KRXrNPblcNarZ3Gbsu71SJw</CipherValue>
		</CipherData>
	  </EncryptedData>
	  <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
		<CipherData>
		  <CipherValue>
		  nxTxeHPGnONdAEvpWtClWbA7C5SQsAdjFeleXDnMrOPb8YqTuAy_Uc4d39ycT7aoMmZlH1VWPfWyjJq43azenQbtmluNaw1ABxRvI8yWfNJZYb6fIxDQLL4en_bQ9GW5Z2epJuPU0IxU4gj99YZ_hOjyO5jpOnUO7shoTt8CRvRdtoEqI8QGT8-nmJyIg4wNMeLRTEcQ503dekG8ks6TrFGkrYAa5nlDMxrlAe_2etfr1eBDctgHkk18gCFTjO18Ydjx955DzsbZHqmnqok4eom6SNVdkHXWjQMt4bhWgJWFDjnwpaYoiqcms8upDNope6G98sib8vNX6Muw8liEq787xy4LMLbS6fbMPHzHDYV7yZV1xKA4YRKV99mWkENnhmjGrNjMrV5WVmBg_8VU2h4FicGkYtBl3mPD_Q967-CyTJlwdNWmtrECascazcdSROI7fpB0ZDnE9gdNPUlUC6YACXemjYRCY1OFyOwiVBFX8UhqR9CLsb0KzQtC_WOavNpGneZoPEO3hGVyQusawYb4ESZumuDPLSYkm6TTiRBxxlgCgmWu45zBNidOmDy2ARzq_f-aEozbKyzDJEy7hR-jXWbRrxvVUV24eiJd0gV8c7AEJYT6edXnO2PXbEjR3Itl-JOBec4k8Y2dTkUDXvdO1u1hk6uZ_oD1-RizQVo</CipherValue>
		</CipherData>
	  </EncryptedData>
	</content>
	<ds:Signature>
	  <ds:SignedInfo>
		<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
		<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
		<ds:Reference URI="">
		  <ds:Transforms>
			<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
			<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		  </ds:Transforms>
		  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
		  <ds:DigestValue>
		  1Izt6hPxvZExmTWiSPT5QbMuoKs=</ds:DigestValue>
		</ds:Reference>
	  </ds:SignedInfo>
	  <ds:SignatureValue>
	  iUFSwxDvxti1hjDFgmux7NPrk3PEEFAnhNnNqlad2VB42iir2Xl8RPcEZA1Sne7Rc51b376E9Iy0
	  qT5shelegQ==</ds:SignatureValue>
	</ds:Signature>
  </entry>
</feed>