balkans
v0.1.2
Published
Internet Balkanization Appliance
Downloads
6
Readme
OpenBalkans
Internet Balkanization Appliance Creation Kit
Overview
Internet Balkanization Appliance (IBA) is an implementation of the OpenBalkans protocol, which can manifest as a website, a standalone application, or an actual physical appliance (although there are no known instances of this yet).
From the user's perspective, an IBA is a collection of weblogs. A weblog is a series of posts. Conceptually this is similar to Mastodon, but decentralized (as opposed to federated).
This document describes the OpenBalkans protocol (OpenBP) version 0.
Posts
Container: JSON Web Token (JWT)
Signing: ECDSA using P-256 curve, and SHA-256 (ES256)
- NIST P-256 ≡ ANSI prime256v1 ≡ SEC 2 secp256r1
- This is not confusing at all
- Requires RFC 6979
- Upgrade path: see SafeCurves
Key derivation function (KDF): WarpWallet
ASCII Armor
- Post key: Base58
- Other binary data: RFC 4648 base64url with no padding
Post types
Post types are a strict superset of RFC 2046 Media Types.
Data structure
| Name | Type | Required | Comment | --- | --- | --- | --- | openbp | int | Yes | OpenBalkans protocol version, 0 | pk | string | Yes | Post key | docs | list | Yes | One or more hyperlinks to contents | size | int | Yes | Size of contents, bytes | type | string | Yes | Content-Type, Media Type(contents) | chk | string | Yes | Checksum, SHA-256(contents), base64url encoded | rel | set | No | Relational tags | other | object | No | Reply to other post | other.pk | string | Yes | Other post key (In-Reply-To) | other.chk | string | Yes | Checksum, SHA-256(other post's JWT), base64url encoded
Post key
Post key is a concatenation of the following fields:
- Base58(ObjectId)
- U+002E FULL STOP
- Base58(public key)
We use Satoshi's variant of Base58.
Post keys are considered to be globally unique. Any collisions should be treated as a flood attack.
Hyperlinks
Links in the docs field can be the following:
- HTTP(S) URL
- RFC 2397 Data URL
- RFC 6901 JSON Pointer
"": "jsonpointer", "url": "https://httpbin.org/headers", "pointer": "/headers/User-Agent"
Relational tags
| Rel | Type | Comment | --- | --- | --- | collection | application/json | Collection of posts | self | application/ld+json | User profile | self, userpic | image/jpeg, image/png | User profile picture | upd_pk | application/octet-stream | Updated public key
User Profiles
Posts with 'self' in the rel field are associated with the user account, and aren't a part of any content feed.