qub-mut Protokollimik allatigineqartoq
qub tassaavoq protokoli kryptografiamut piffeqartumik isumaqatigiissutinut: oqaaseqatigiit siunissami ulluni matusernissaanut atugassiaq, ullorlu eqquni, suna oqaatigineqarsimanersoq qaqugulu sukkulluunniit uppernarsaatissiivoq.
Pingasut akuusaartoq atorlugit suliarineqarpoq. drand tassaavoq sianigissummik agguarsimasumik tappiusartoq — saqqummersitsineq ullua peqqissaarniartumi pissutsinit, naapertorlugu allamiup aalajangerneqartumit ajornanngitsumit, atortuunneqarpoq. Naassaanngitsumut tamanut toqqorsivik tassaavoq toqqorsivik tamanut paasissutissaqartitsiviusoq allanngortikkuminaatsoq — qub matusereeruni allanngortinneqartussaanngilaq peerneqartussaanngilluniluunniit. ML-DSA-65 tassaavoq atsiorneq kvantum-kingorna allakkanut — qub tamarmik isumassuissamut paarinut atassuteqartillugu, taakkuami isertuussap nammineq atortuminit qimagujuissanngilaq.
Akuusaartut taakku ataatsimoorlutik oqaatigeqqissaarpaat piffimmik-matuserneqarsimasoq, akornutaanngitsumik, attaveqartoqarluniluunniit — uppernarsaat naluneraneq silarsuup siusinnerusukkut ilanngullugu suliareqqinnissaminut sapinngassusianut akuersaarami atorneqarluartoq.
Allagaq sinnera tassaavoq normativeq atorluarneqarsinnaajumallugu paatsoorneqarsinnaanngitsutut illernarsineq.
qub Protokolimik Erseqqissaaneq
| Naasoq | Naliliineq |
|---|---|
| Versioni | 1.0 (protokoli-versioni 0x01, ilai pusinneqartut versionii 0x01) |
| Ulloq | 2026-05-01 |
| Killiffik | Drafti |
| Misissoreerneqartoq | 2026-05-01 |
Allagaq una tassaavoq normativeq protokoli-erseqqissaaneq qub piffimmik-isumaqatigiissutaasut atorfilersuussiviata. Erseqqissarpai paasissutissat aaqqissuunneqarnerat, atorneqarnerinik malittarisassat, aalajangiussinermut formulit, uppernarsaaneqarnermut pisariaqartut atorluarneqarsinnaasumik suliarineqarsinnaanissaannut.
Sumi atortuunngitsut: protokoli-toqqap inuiaqatigiissimaartoq oqaatsinik atugaqarunngilaq — qub-ip timaata tassaavoq oqaatsinut paasinarsisaanngitsoq / markdown / isumaqatigiissut bytii, qanorlu oqaatsit naapertorlugu saqqummiunneqarnissaat isiginnaartup akisussaaffigaa (qub.social web app, <qub-embed> iframe, MCP-imi atugaqartoq, allallu).
1. Allaaserineq aamma Ileqqut
| Allaaserineq | Isumassuissaq |
|---|---|
u8, u64, i64 |
Naasut nalingisut/naliliineqartut bitiit aalajangersagaqartillugit |
[u8; N] |
Byte-fylki taagineqartumik takinersaani N bytenik |
Vec<u8> |
Byte-fylki allanngorsinnaasumik takinersaaqartoq |
Option<T> |
Naliliineq T-mut, peqanngitsorluunniit |
String |
UTF-8 oqaaseqatigiit, NFC-mik aaqqissuussaq |
| ` | |
SHA3-256(x) |
NIST SHA3-256 hash byte-mit ataqatigiimik x (FIPS 202) |
ceil(x) |
Qulaani naasoq: naasut mikinerpaaq ≥ x |
| CBOR | Concise Binary Object Representation (RFC 8949) |
| big-endian | Bytemik pingaarnerpaaq siulleq |
Naasut tamarmik preimage-mut aalajangersaanermut atatillugit big-endian-mut nalunaaqutigineqarput tukinersaagisaqartumi bytemi (i64 → 8 byte, u8 → 1 byte) allatut nalunaaqutigisaanngippat.
Pissuserivinnerit tamarmik Unix sekundimik UTC-mi allaaserineqarput.
2. Paasissutissat Aaqqissuussaat
2.1 ComposeQub (Pilersitsisup Toqqarvigaata Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Naassaanngitsumut toqqorsivimmi toqqorneqarsimanngitsoq. Pilersitsisup atortugaata appimi.
ComposeQub {
draft_id: [u8; 16], // Sianigissummik, najuminni pilersinneqartumik
created_at: i64, // Unix sekundi UTC
unlock_at: Option<i64>, // Unix sekundi UTC; None pilersinneqartillugu
visibility: u8, // 0x01 = tamanut (MVP-mi naliliineq kisiat)
content_type: u8, // 0x01 = allatat (MVP-mi naliliineq kisiat)
plaintext: Vec<u8>, // UTF-8 qub-ip timaa
sender_label: Option<String>, // Saqqummiussinermut atinik takutitsineq; uppernarsaaneqartumik atorneqanngilaq
status: DraftStatus, // Composing | Sealed | Uploaded | Failed
}
2.2 QubEnvelope (Allakkat Erserititaq)
CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). SealedQub-imi tunisarneqartut. Aaqqissuusserneq una tassaavoq saqqummersitap kingorna timaata akornutaqannginnera uppernarsarsinnaasaat.
QubEnvelope {
version: u8, // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
qub_id: [u8; 32], // Aalajangiussaq (qiviarit §4.1)
content_type: u8, // Imai sumut atatillugu (qiviarit §6)
created_at: i64, // Unix sekundi UTC
unlock_at: i64, // Unix sekundi UTC
outcome_at: Option<i64>, // V1.1 — qaqugu pissutsit eqqortumik aalajangiisut (verdict-uplift-plan §3.1)
sender_label: Option<String>, // Saqqummiussamut; uppernarsaaneqarnatik MVP-mi
reply_to: Option<[u8; 32]>,// Angajulliit qub_id-aat akissummut atatillugu; qub_id preimage-imi peqanngilaq; atsiorneqanngilaq (qiviarit §9.3)
body: Vec<u8>, // Imai nassiussassaq (UTF-8 allakkanut, CBOR isumaqatigiissummut)
body_hash: [u8; 32], // SHA3-256(body) (qiviarit §4.2)
sig_alg: u8, // Atsiorneqarnerup algoritmia (qiviarit §9.2)
author_signature: Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
author_pubkey: Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
cosigner_pubkey: Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
cosigner_signature: Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
}
Tunngavik (qub allataq atsiorneqartumik): version = 0x01, content_type = 0x01, sig_alg = 0x00, Option-iliarineqartut tamarmik peqanngitsut.
v1 aaqqissuussaasut allat: content_type = 0x03 (isumaqatigiissut timaa, qiviarit §6.1); sig_alg = 0x01 (ML-DSA-65) author_signature aamma author_pubkey peqartillugu (qiviarit §9.3); cosigner_pubkey aamma cosigner_signature ataatsimoorlutik peqartillugit atsiorqatigiinneq isumaqatigiissummut (qiviarit §9.7); reply_to angajulliit qub-ip qub_id-aanut inissinneqartoq akissutaasoq qub-it (qiviarit §9.3 atsiorneqarnerup atortulinnut tunngassuteqartut).
2.3 SealedQub (Allat-Tunisarneqarnermut Aaqqissuussaq)
CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). Naassaanngitsumut toqqorsivimmut uploadineqartoq. Una tassaavoq chain-imi pisariusoq.
SealedQub {
version: u8, // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
qub_id: [u8; 32], // QubEnvelope.qub_id assigaa
visibility: u8, // 0x01 = tamanut; v1 isiginnaartut allat nalingisut itigartippaat
unlock_at: i64, // Unix sekundi UTC
outcome_at: Option<i64>, // V1.1 — verdict-watch CTA-mi saqqummiunneqartoq
// saqqummersitsineq sioqqullugu; QubEnvelope.outcome_at assingusoq;
// §4.1 preimage atorlugu qub_id-mut atassuteqartoq.
drand_chain_id: String, // drand piorsaaviup hash-ia (hex-imi oqaaseq)
drand_round: u64, // drand-imi anguinneq target
tlock_ciphertext: Vec<u8>, // tlock-ip allakkat isertut QubEnvelope CBOR byteinik
recipient_pubkey: Option<[u8; 32]>,// Sernigineqartoq; CBOR aaqqissuussamiummi akuersaagaq
// nalingiserneqassanani v1 reference isiginnaartumi
title: Option<String>, // Plaintext-imi qulequtaq isiginnaartumi saqqummiunneqarsinnaasoq
// nikingaalaarpalukkamik saqqummersitsineq sioqqullugu. qub_id-imut
// atassuteqartoq title_hash atorlugu (§4.1). 1..=100 NFC-imi naasoq
// sissimasut, nakuusernissamut allatat peqanngitsoq.
}
2.4 RevealedQub (Isiginnaartup Atortua Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Isiginnaartumi atortugaata appimi. Pilersinneqartoq isertuussap qaffaanneranik aamma uppernarsarneranik kingorna iluatsillugu.
RevealedQub {
qub_id: [u8; 32],
arweave_tx_id: String,
visibility: u8,
content_type: u8,
created_at: i64,
unlock_at: i64,
outcome_at: Option<i64>, // V1.1 — QubEnvelope.outcome_at / SealedQub.outcome_at-mit ingerlatissaq; saqqummersitsivimmi naliliinermut utaqqinerup blokkiata ingerlanninneranut atorpoq (verdict-uplift-plan §5.1)
drand_chain_id: String,
drand_round: u64,
sender_label: Option<String>,
title: Option<String>, // SealedQub.title-mit ingerlatissaq
reply_to: Option<[u8; 32]>,
body: Vec<u8>,
body_hash: [u8; 32],
body_hash_verified: bool,
author_signature: Option<Vec<u8>>,
author_pubkey: Option<Vec<u8>>,
signature_verified: Option<bool>,
cosigner_pubkey: Option<Vec<u8>>,
cosigner_signature: Option<Vec<u8>>,
cosigner_verified: Option<bool>,
}
3. CBOR-imi Aaqqissuussamiut Profiilia
SealedQub aamma QubEnvelope tamarmik nalunaaqutigineqarnerat profile una malillugu PISARIAQARPOQ. Suliarineqarnerit marluk paasissutissat ataatsimoortuni byteinik assigiimmik suliarinittariaqarput.
3.1 Allaaserinermut Malittarisassat
| Malittarisaq | Erseqqissaaneq |
|---|---|
| Najoqqutaq | RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements) |
| Map key-itik ileqqui | Siullermik byte-itik takinerannik allaaserineqartut (mikinersaq sioqqullugu takinersaq), aamma lexicographic-imik (byte-mut byte takissuseqarluni assigiimmut) |
| Naasut allaaserinerat | Mikinersaq: 0–23 byte siullermi; 24–255 2 byte-mi; 256–65535 3 byte-mi; allatullu. |
| Takissusiup allaaserinera | Takinerit aalajangersimasut kisiat. Aalajangersimaartut peqanngitsut array-it, map-it, byte-it allataallu (additional info = 31 inerteqqutaapput). |
| Tag-it | CBOR-imi tag-it peqanngillat (major type 6 inerteqqutaavoq). |
| Floating-point | Float-it peqanngillat (major type 7 naliliineqartut 0xF9–0xFB inerteqqutaapput). |
| Oqaatsit | UTF-8-mik nalunaaqutigineqartut, NFC-mik aaqqissorneqarsimasut (Unicode Normalization Form C). |
| Byte-it oqaatsii | Byte-it iluartumik. CBOR-imi base64-mik allaaserinneq peqanngilaq. |
| Map key-itik assigiimmik | Itigartittariaqarput pulariarneqarnerat malillugu. Parser-it map key assigiimmik nipangiumik akuersaarsinnaanngillat. |
| Naliliineqartut sapinngisaminik | Kisiat true (0xF5), false (0xF4), aamma null (0xF6) akuerineqarput. |
| Naasut sapinginnermut piumassusiisartut | Naasut sapinginnermut piumassusiisartut peqanngitsut CBOR map-mit peerneqartussaapput (null-imik nalunaaqutigineqassanngillat). Peqartut sapinginnermut piumassusiisartut key-it ileqqui malillugit ilanngunneqarput. |
3.2 Misissorneqarsimasut Aaqqissuussamiut Key-itik Ileqquinik
Key-it ileqqui makku normativeqarput. Suliarineqarnerit key-itik ileqquimi tassani allaaseritariaqarpaat. Debug assertion-it pitsaapput release-iliarineqarsimanngitsumi malittarisassat misissorlugit.
QubEnvelope (versioni 0x01, atsiorneqarsimanngitsoq, sapinginnermut peqartussat tamarmik peqanngitsut):
"body" (5 byte allaaserineqartut)
"qub_id" (7 byte allaaserineqartut)
"sig_alg" (8 byte allaaserineqartut)
"version" (8 byte allaaserineqartut)
"reply_to" (9 byte allaaserineqartut) ← peqartillugu kisiat (akissut sineriaqartut)
"body_hash" (10 byte allaaserineqartut)
"unlock_at" (10 byte allaaserineqartut)
"created_at" (11 byte allaaserineqartut)
"outcome_at" (11 byte allaaserineqartut) ← peqartillugu kisiat (V1.1 verdict atortussaq)
"content_type" (13 byte allaaserineqartut)
"sender_label" (13 byte allaaserineqartut) ← peqartillugu kisiat
"author_pubkey" (14 byte allaaserineqartut) ← peqartillugu kisiat
"cosigner_pubkey" (16 byte allaaserineqartut) ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)
"author_signature" (17 byte allaaserineqartut) ← peqartillugu kisiat
"cosigner_signature" (19 byte allaaserineqartut) ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)
QubEnvelope key-itik ileqqui aalajangerneqarnerannut: key-it tamarmik CBOR-imi oqaaseqatigiit. Allaaserineqarnera takinersaa = 1 byte qulequtaq + oqaaseqatigiit takinersaat (oqaaseqatigiit 24 byte-imit mikinerusumik). Siullermik allaaserineqarnerup takinersaata ataaniittut, taava lexicographic-imik takinersaat assigiimmut.
SealedQub (versioni 0x01, tamanut, tigusisaqanngitsoq):
"title" (6 byte allaaserineqartut) ← peqartillugu kisiat
"qub_id" (7 byte allaaserineqartut)
"version" (8 byte allaaserineqartut)
"unlock_at" (10 byte allaaserineqartut)
"outcome_at" (11 byte allaaserineqartut) ← peqartillugu kisiat (V1.1 verdict atortussaq)
"visibility" (11 byte allaaserineqartut)
"drand_round" (12 byte allaaserineqartut)
"drand_chain_id" (15 byte allaaserineqartut)
"recipient_pubkey" (17 byte allaaserineqartut) ← peqartillugu kisiat
"tlock_ciphertext" (17 byte allaaserineqartut)
PactTerms (isumaqatigiissummi timaa, content_type 0x03):
"notes" (6 byte allaaserineqartut) ← peqartillugu kisiat
"terms" (6 byte allaaserineqartut)
"title" (6 byte allaaserineqartut)
"party_a" (8 byte allaaserineqartut)
"party_b" (8 byte allaaserineqartut)
"pact_version" (13 byte allaaserineqartut)
PactTerm (sineriaq terms array-mi):
"key" (4 byte allaaserineqartut)
"value" (6 byte allaaserineqartut)
PartyIdentifier (party_a / party_b map):
"label" (6 byte allaaserineqartut)
"contact" (8 byte allaaserineqartut) ← peqartillugu kisiat
3.3 Byte-mut Allaaserinermut Najoqqutaq
| Suunersoq | CBOR-imi allaaserineq | Assersuut |
|---|---|---|
| SHA3-256 hash (32 byte) | 0x58 0x20 + 32 byte |
body_hash, qub_id |
| Pissuserivigineqarnerit (i64) | Major type 0 (pisut) imaluunniit 1 (pinnaajusoq), mikinersaq | Unix sekundi |
| Versioni (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| Imai sumut atatillugu (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| sig_alg (u8, naliliineq 0) | 0x00 (atausermik byte) |
|
| ML-DSA-65 atsiorneq (3,309 byte) | 0x59 0x0C 0xED + 3,309 byte |
author_signature, cosigner_signature |
| ML-DSA-65 pubkey (1,952 byte) | 0x59 0x07 0xA0 + 1,952 byte |
author_pubkey, cosigner_pubkey |
4. Normativeqarluni Aalajangiussinerit
4.1 qub_id
qub_id tassaavoq qub-imik kisermik aalajangiisoq aamma QubEnvelope-imik SealedQub-imut atassoq. Aalajangiivoq aalajangersimasumik puuata imaagisaanit.
qub_id = SHA3-256(
"QUB_ID_V2" || // tunngaviusoq immikkoorut: ASCII byte [0x51 0x55 0x42 0x5F 0x49 0x44 0x5F 0x56 0x32] (9 byte) + 0x00 ilaateqaalu (1 byte) = 10 byte
version || // u8 (1 byte)
content_type || // u8 (1 byte)
created_at || // i64 big-endian (8 byte)
unlock_at || // i64 big-endian (8 byte)
outcome_at_or_zero || // i64 big-endian (8 byte; 0 outcome_at peqanngippat)
drand_round || // u64 big-endian (8 byte)
body_hash || // [u8; 32] (32 byte)
title_hash // [u8; 32] (32 byte; peqanngippat-malugaq = [0u8; 32])
)
// Preimage tamarmiusoq: 108 byte → 32-byte saqqummiineq
Tunngaviusoq immikkoorut allaaserineqarnera: Oqaaseq "QUB_ID_V2" ASCII byte 9-aapput. Atausermik 0x00 ilaateqaalu naliusersorlugu 10-mik byte-isuunissamut. Suliarineqarnerit byte-it 10 makku PISARIAQARPOQ atortussaat: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].
outcome_at allaaserineqarnera: V1.1 preimage 92 byte-mit 100 byte-mut takinerulersippaa outcome_at sapinginnermut peqartoq atassutsinermut ilaalersitassagaani. outcome_at peqanngippat byte nuller 8-tut allaaserineqartoq; protokolimi uppernarsaasut sumi tamani outcome_at <= 0 itigartittarpaat, taamaalimmat malugaq una naliliineq pissusilisorpat naapittatassanngilaq. Qiviarit §3.2 (wire format) aamma in-tree tasks/verdict-uplift-plan.md verdict atortussaq naasoq una akuersaasaa.
drand_round allaaserineqarnera: V1.2 preimage 100 byte-mit 108 byte-mut takinerulersippaa drand_round (drand-imi anguinneq target, §4.3) atassutsinermut ilaalersillugu, aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa. Tamanna piffimmik-matusernermut anguinneq qub-ip kinaassusianut atassutsivaa: gateway-it ciphertext anguinnermut allamut (assersuutigalugu qaangiukkamut) inisseqqissinnaanngilaa unlock_at takutinneqartumi isumaqartumut allamut. Matusinerup peernera (§8) saniatigut uppernarsarpaa tlock ciphertext suluani anguinneq pisup unlock_round(unlock_at)-imut naapittoq, taamaalimmat matusinerup ulloq takutinneqartoq uppernarsarluinnarpoq anguinneq matusinnermut piffimmut paasaqartoq.
Pissusii:
- QubEnvelope-imi qaffaaneq sumi tamani (timaa, pissuserivigissuserisaat, content type, version) qub_id assingunngitsoq saqqummersitsivoq.
- qub_id isertuussap sioqqullugu suliarineqarpoq. Tamarmik QubEnvelope aamma SealedQub qub_id assigiimmik nalingisut. Isiginnaartoq isertuussap qaffaaneranik kingorna assigiittarinnerinik uppernarsaavoq.
- qub_id
sender_label,author_signature, imaluunniitauthor_pubkey-imut tunngavissaqanngilaq. Tamanna isumaqarpoq imai matumi piffimmi matuneqarsimasut qub_id assigiimmik saqqummersittarput kinaluunniit atsiorpat naapertorlugu. - SealedQub
titleqaffaalersinnaqaat (sumi tamani allat aalajangersimanerinik) qub_id allanngorpoqtitle_hashatorlugu. Gateway-it taava plaintext-imi qulequtaq countdown-imi takutinneqartoq inisseqqissinnaanngilaa qub-ip kinaassusiata atornagu. - SealedQub
outcome_atallangortinneqarpat (sumi tamani allat aalajangersimanerinik),qub_idpreimage atorlugu allanngorpoq. Gateway-it saqqummersitsineq sioqqullugu countdown-imi verdict-on ulloq takutinneqartoq inisseqqissinnaanngilaq qub-ip kinaassusiata atornagu. drand_roundallangortinneqarpat (sumi tamani allat aalajangersimanerinik),qub_idpreimage atorlugu allanngorpoq. Gateway-it piffimmik-matusernermut ciphertext anguinnermut allamut inisseqqissinnaanngilaa qub-ip kinaassusiata atornagu; §8 matusinnermi piffimmi suluata-anguinnera-misissuinermut atatillugu,unlock_attakutinneqartoq tassaavoq anguinneq matusinnermut ilumut piffimmut paasaqartoq.
4.2 body_hash
body_hash = SHA3-256(body)
body tassaavoq raw Vec<u8> imai nassiussassaq. Allataq qub-init, una tassaavoq UTF-8-mik allaaserineqarsimasoq qub-ip timaa.
4.2.1 title_hash
title_hash = SHA3-256(NFC(title).utf8_bytes) title peqarpat
title_hash = [0u8; 32] title peqanngippat
title tassaavoq plaintext-imi qulequtaq isiginnaartumi saqqummersitsineq sioqqullugu takutinneqartoq sapinngisaminik (qiviarit §3.2). NFC-mut aaqqissuussineq hash-imut atatillugu ingerlapput digest-i aalajangersimasunngorlugu codepoint-mut takujumagaagaminik assigiimmik. Sumi tamani-nulleq malugaq sernigineqarpoq peqanngitsumut periarfissaq; isumassuissaq isumassuusiineq itigartinneqarpoq CBOR-imi aaqqissuussamiut killinganni kanonisikersimanngitsumik allaaserineqarnerinut "peqanngitsumut" (aaqqissuussamiut allaaserineqarnera naasoq tamaannarluinnaq peerneqartoq).
4.3 Matusernermut Anguinnermut Allaaserineq
drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds)
| Naliliisut | Tunngavik | Assersuut |
|---|---|---|
unlock_at |
Inuup toqqagaa Unix sekundi UTC | 1735689600 (2025-01-01 00:00:00 UTC) |
chain_genesis_time |
drand piorsaavik info (genesis_time) |
1595431050 |
chain_period_seconds |
drand piorsaavik info (period) |
30 |
ceil() suliaa toqqarpaa drand-imi anguinneq siulleq saqqummersitsivimmi ≥ unlock_at. Tamanna qulakkeerpaa qub matusernerup sioqqullugu isertorneqarsinnaanngitsoq toqqagaq.
Ungasinnerusumi: (unlock_at - chain_genesis_time) chain_period_seconds-mut tukkiinnarpoq agguarneqarsinnaagunarmat, tassanitappoq anguinnertaa eqqortussaq — qub matusersutaasoq nipingarmat anguinnerup saqqummersitsiviani piffimmi.
Uppernarsarneq: unlock_at PISARIAQARPOQ siunissami matuneqartumi siunertaa atorpaa. unlock_at created_at-mit ukiut 10-mit qaangiussisinnaanngilaq (tamanna agguarnersartoq killilernialerlugu drand-imut atatillugu; UI taava PITSAAVOQ mianersoqquluni unlock-it 2 ukiunit qaangiusserumaartut).
5. Wire Format Newtypes
Wire format newtype-it suliarinerinik mappersarneqartoq CBOR byte JSON-imut, raw plaintext, ilaqqilluunniit byte aaqqissuusserneqartut paatsoorneqartumut.
| Suunersoq | Imanik | Suliarineqarpoq | Tigummineqarpoq |
|---|---|---|---|
SealedQubCbor |
SealedQub-imi CBOR-imi aaqqissuussamiut | serialize_sealed_qub() |
Naassaanngitsumut toqqorsivimmut uploadineq, isiginnaartup aaqqissuussinera |
QubEnvelopeCbor |
QubEnvelope-imi CBOR-imi aaqqissuussamiut | serialize_qub_envelope() |
tlock isertinnermut input, tlock isertuussap qaffaaneranik output |
5.1 Pilersinnerinut Malittarisassat
// Production-imi suliarineqartoq — CBOR serialiseringeqartumi kisiat:
let sealed = SealedQubCbor::from_encoded(cbor_bytes);
// Periartumik From<Vec<u8>>-imik suliarineqarsimanngilaq.
// Byte tamatigut wire format suunersuanut isumakuluuteqarunnaanngilatit.
// Raw byte-it tigussussallugit:
let bytes: &[u8] = sealed.as_bytes();
let bytes: Vec<u8> = sealed.into_bytes();
5.2 Suliarineq nalilersuinerni
from_encoded() PITSAAVOQ misissulertarluni input CBOR-imi map qulequtaa aalajangersimasoq atorpat. Aaqqissuussamiut tamarmik uppernarsarneqarnerat parse-eriarluni pivoq, suliarineqarluni pinnani, marloriaammik suliarineqarnissaa pinaveersaarniarlugu.
6. Imaa Suunersoq Allatamiut
| Naliliineq | Suunersoq | Timaata Annerpaaffia | Malugarsiivigineqartoq |
|---|---|---|---|
0x00 |
Sernigineqartoq (akuerinneqanngitsoq) | — | ATORNEQASSANNGILAQ |
0x01 |
Allataq nalingisoq (UTF-8, killilersimasumik Markdown) | 50 KB akilerlugu / 10 KB akeqanngitsoq | Qiviarit §10 saqqummiunnermut malittarisassat. Akeqanngitsumut/akiliisumut agguarsineq upload-imut atorfeqarfia atorlugu qulakkeerneqarpoq; protokoli-mi killiliivik ataasiusoq 50 KB-iuvoq. |
0x02 |
Sernigineqartoq (siunissami) | — | Siunissami imai suunersoraat-mut tunniunneqartoq; v1-mi akuerinneqanngilaq. Isiginnaartut PISARIAQARPOQ itigartittussaat malittarisaq ataani naapertorlugu. |
0x03 |
Isumaqatigiissut (bilateral, CBOR-imi timaa) | 100 KB | Timaa CBOR-imi aaqqissuussamiut PactTerms (§6.1). Atsiorqatigiinneq §9.7 naapertorlugu. |
0x04 |
Naliliineq (pilersitsisup imminik kvalitatigineraa, CBOR-imi timaa) | 8 KB | Timaa CBOR-imi aaqqissuussamiut VerdictBody (§6.2). Atorfilersuuteqarfimmit verdict siunertaa kisiat saqqummiisarpoq. Angajulliusumi atassuteqarneq Arweave-mi Parent-Tx-Id tag-aniipoq, timaaniinnani. Qiviarit verdict-uplift-plan §3.4. |
Isiginnaartut imai paasinarsinnatik akuerinneqanngitsoq itigartittariaqarpaat erseqqissumik atugartumut takutitsinermik kukkunersiisutik. Isiginnaartut imai paasinarsinnagit allatatut saqqummiunissaminik misilersortussaanngillat.
6.1 Isumaqatigiissummi Timaa (content_type = 0x03)
Isumaqatigiissummi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera PactTerms naliliineqartumut:
PactTerms {
pact_version: u8, // 0x01 aaqqissuussamiunut/v1-mut
title: String, // ≤ 200 byte, NFC
terms: Vec<PactTerm>, // ≤ 20 sineriaq
party_a: PartyIdentifier, // pilersitsisoq
party_b: PartyIdentifier, // atsiorqatigiisoq
notes: Option<String>, // ≤ 5,000 byte, NFC; peqanngitsumut peqanngitsoq
}
PactTerm { key: String (≤ 100), value: String (≤ 2,000) } // NFC sineriaalu marluk
PartyIdentifier{ label: String (≤ 100), contact: Option<String (≤ 320)> }
CBOR-imi aaqqissuussamiut key-itik ileqquinut tamarmik map-it pingasunut §3.2-mi tunniunneqarput. Tamarmik nalunaaqutigineqartoq isumaqatigiissummi CBOR 100 KB-imit qaangiussisinnaanngilaq (§6 assertorlugu).
Schema kingumut paasisaq. terms-mi sineriaq siulleq structured/v1 isumaqatigiissummut PISARIAQARPOQ tassaassasoq { key: "pact_schema", value: "structured/v1" }. Sineriaq malugaq peqanngitsoq "ileqquminik" isumaqatigiissutaaput aamma aaqqissuussamiut uppernarsaaneqarnerannik schema-imut paasinninnermilluunniit saqqummersitsinerannik pissarsisitiineqanngitsut.
Aaqqissuusinnermi akuersaarnermut inissianngitsut. structured/v1 isumaqatigiissutit eqqortumik sisamanik akuersaartumut sineriaqartut imaattut key-isigut:
"initiator_standard_terms"
"initiator_capacity_terms"
"counterparty_standard_terms"
"counterparty_capacity_terms"
value tamarmik arfineq-pingasunit aaqqissuusinnermi tuluttut allataasut atuagaq atorlugu (role, kind) naliliisaq, tassani role ∈ { seller, buyer, provider, client } aamma kind ∈ { standard, capacity }. Oqaatsit imminuna protokoli-mi paasissutissat normative-ngorlugit — pingasut tamarmik ML-DSA-65 atsiorneqarnerat byte-it eqqorlugit body_hash-imut paasaqartumik. Localiserneqanngillat; atsiorneqartoq timaa oqaatsit naapertorlugu mikilersuiunngitsoq. Naliliineq sumi tamani allangortinneq schema-imik versioni nutaamik (structured/v2) atorpoq.
Arfineq-pingasut, ujarlernerat (acknowledgement_for(role, kind)), aamma tunngaviligissutaasaa najoqqutaqartoq pilersaarutigineqarpoq reference-mi suliarineqarnertik. Tamarmik suliarineqarnerit PISARIAQARPOQ byte-it eqqortumik akuersaarnermut naliliineqarnermut saqqummiussisinnasut; golden-fixture SHA3-256 body-hash-mut misilernerit role-i sisamat tamarmik atussusiusut aalajangersutsinnut tigussinerinik tigussagaqartillugit.
Isiginnaartumi saqqummiunneqartumi ileqquaa. Akuersaarneq oqaatsit imai imaattut "qulaaniittup allaaserineqartup tunngavigalugu" naatsorsuutiminerit, naatsoq-killip sineriai siulliuvoq akuersaartumi sioqqullugit saqqummiunneqartussat. Isiginnaartumut PISARIAQARPOQ terms array-i CBOR-imi ileqquaa atorlugu saqqummiussisut; allanngortinneq saqqummiunneqartut paasinarsiarneqarnera sequjuvoq.
Atsiorqatigiisup attaveqartussaa. Party B-mi contact mailimi tunngaviusumik tassaagaani, qub upload atorfilersuuteqarfia siunnersuussamik atsiorqatigiinnerlu nassippoq isertuussaminik ulluini tunngavilersuugaq aamma atsiorqatigiinneq imminuna piffimmilluunniit allaffigineqarnerat assingusoq misissoqqullugu (§9.7). Isumaqatigiissutit Party B contact peqanngitsut atsiorqatigiineqarsinnaapput, kisiannili out-of-band aqqutaa atorlugu — atorfilersuuteqarfik atsiorqatigiinnermut piumassuteqartumik itigartippoq, misiliusinnaasumik 15-minuti email-mut misissulinermut malugartussaq atorsinnaaneqartoq.
6.2 Naliliinermi Timaa (content_type = 0x04)
Naliliinermi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera VerdictBody naliliineqartumut:
VerdictBody {
verdict_version: u8, // 0x01 aaqqissuussamiunut/v1-mut
outcome: u8, // 1=Eqqortoq · 2=Ilaa · 3=Kukkussoq · 4=Misilerneqarsinnaanngitsoq
reflection: Option<String>, // ≤ 2,000 byte NFC; "suna allanngorpa, suna ilikkarpiuk"
evidence_url: Option<String>, // ≤ 2,048 byte; HTTPS-mi kisiat; peqanngippat key peqanngilaq
}
CBOR-imi aaqqissuussamiut key-itik tulleriiaa:
"outcome" (8 byte allaaserineqartut)
"reflection" (11 byte allaaserineqartut) ← peqartillugu kisiat
"evidence_url" (13 byte allaaserineqartut) ← peqartillugu kisiat
"verdict_version" (16 byte allaaserineqartut)
Tamarmik nalunaaqutigineqartoq naliliinermi CBOR 8 KB-mit qaangiussisinnaanngilaq (qulaaniittumut registry-mut naapertorpoq).
Inernerup naliliisai. Wire byte siunertaqanngilaq; sisamat Eqqortoq / Ilaa / Kukkussoq / Misilerneqarsinnaanngitsoq siunertat naliliinermut atugassat tamaat inernerinik ataqatigiissaarput. Siunertanut ataasiakkaanut ilisarnaatit ("Naqissusiivunga" / "Naammassisimavara" / "Pilersaarutigineqartutut" / "Pisut nalunaarutigaat" Eqqortoq-mut, allallu) isiginnaartumi saqqummiunnermut tunngassuteqarpoq angajulliusoq qub-imi siunertaa tunngavigalugu aalajangerneqartoq — wire oqaatsinut aamma siunertanut atanngitsumik atassusaarpoq. 1..=4-mit avissaartumi naliliineqartut PISARIAQARPOQ decode-imi itigartittut.
Angajullimut atassuteqarneq. Naliliinermi qub angajulliusumut atassutaa timaaniippanngilaq. Angajulliusoq qub-imi Arweave transaktion-imi ID upload-imi Parent-Tx-Id toqqorsuutaata tag-aani saqqummiunneqarpoq (§7 toqqorsuutaata tag-aata sineriaa). Tamanna timaa imminik ineriartortillugu atsiorneqartumik nammineq nalilersuissummi oqaatsiusumik tigussinerinik tiguppaa; atorsimanermi malugartoq ("suna eqqorpa?") Arweave-mi tag-imi ujartornermut tunngaviusumik aalajangerneqarpoq.
Uppernarsaammi nittartagaq isumannaatsuunnera (normative). evidence_url peqartillugu, uppernarsaasut (matusiartortumi, wire-imi, Worker-ip sineriaani) PISARIAQARPOQ ingerlatsinerit imaattut:
- HTTPS-mi kisiat. Oqaaseq PISARIAQARPOQ
https://byte tulleriiarmik aallartittumik. Allat tulleriiat tamarmik —http,ftp,javascript,data,file, allallu — itigartinneqassapput. - Takissusaata killilersugaa. ≤ 2,048 byte (browser-imi URL piffissami nalingisup killiliivia).
- NFC + akuersaanngitsumik codepoint-imik misissuineq.
titleaammareflectionmalittarisaq assigissaa — bidi-override / silaqanngitsoq-aalavik / tag-block / BOM / C0 / C1 codepoint-it itigartinneqassapput. Naliliineq Rust-imicrate::handle::contains_hostile_text_codepointaamma TS-imiworkers/api/src/utils/unicode.ts::isHostileCodepointmalitsersuipput (ataqatigiilluni paaqqissaalluni). - Akornusersugaq peqanngilaq, ASCII-mi aqutsisartoqanngilaq. Akornusersuut / DEL /
0x20-mit ataani byte-it URL-imi sumiluunniittut itigartinneqassapput — bidi malittarisartumi matunnertanngitsoq\n/\tinjection vektor matusarpaa. - Host-imi sineriaq peqanngitsuussanngilaq.
https://-mit aamma/,?, imaluunniit#siulliup akornanniittut PISARIAQARPOQ peqanngitsuussanngitsut.
Atorfilersuuteqarfik server-ip tungaaniittoq pissarsisaqarsinnaanngilaq. Worker-i URL-imik PISARIAQARPOQ proxy-iunneq, pissarsineq, imaluunniit siusinnerusumik takutitsineq saqqummiisanngitsoq. Protokoli oqaatsimik toqqortuivoq; saqqummiunneqarneq isiginnaartumi rel="nofollow noopener noreferrer" target="_blank"-imik aamma takuneqarsinnaasumik host-imik nittartagaq allaaserneqartumi saniani saqqummiunneqartumik pivoq.
Eqqarsaqatigiinneq. Pilersitsisumit allaaserisaq sapinginnermut eqqarsaqatigiissut ("suna allanngorpa, suna ilikkarpiuk"). title-imut assigiittumik NFC + akuersaanngitsumik codepoint-imik uppernarsaaneq. Peqanngitsoq / akornusersugaqarluinnartoq input pilersinnermi peqanngitsuusinneqarpoq.
Schema versionia. V1 verdict_version = 0x01 kisiat naapertorpaa. Siunissami schema allanngortinneqarnerit byte una qaffapput aamma protokoli versioni nutaaq §12 naapertorlugu tikilluni saqqummerput.
7. Matusinissamut Protokoli
Matusinerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.
1. Atugaq plaintext aamma metadata ComposeQub-imi suliarivoq.
2. Misissuilluni:
a. body peqarpoq.
b. body annertussusii ≤ content_type-mut aamma atugaq tier (qiviarit §6).
c. unlock_at siunissamiipoq.
d. unlock_at ≤ created_at + 10 ukiut.
e. content_type ilisarnaajoq, akuersaartoq.
3. Naatsorsuiniarit body_hash = SHA3-256(body).
4. Inissinniarluni created_at = sapinginnermi Unix sekundi UTC.
5. drand piorsaavik toqqaruk. Nakkutigilluku chain_genesis_time aamma chain_period_seconds, aamma
naatsorsuiniarit drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds).
(Maani, qub_id sioqqullugu, naatsorsorneqarpoq, drand_round qub_id preimage-imut
atassutsivimmat — §4.1, V1.2.)
6. Naatsorsuiniarit qub_id (qiviarit §4.1), drand_round 5-mit ilanngullugu.
7. Pilersiniarluni QubEnvelope sumi tamani naasoqartumi.
8. Nalunaarutigissallugu QubEnvelope canonical CBOR atorlugu → byte B.
Misissorlugu: nalunaaqutigineqartoq tunisarneqarnera profile naapertortikkit (§3).
9. Naatsorsuiniarit C = tlock_encrypt(B, drand_round, drand_chain_public_key).
10. Pilersiniarluni SealedQub tlock_ciphertext = C, qub_id, version,
unlock_at, drand_chain_id, drand_round assertortillugit.
12. Nalunaarutigissallugu SealedQub canonical CBOR atorlugu → SealedQubCbor.
12a. Pilersikkit K = 32 sianigissummik byte (CSPRNG) aamma N = 12 sianigissummik byte (CSPRNG).
Naatsorsuiniarit W = wrap_sealed_qub(SealedQubCbor, qub_id=qub_id, key=K, nonce=N)
§13 naapertorlugu. Byte-it naassaanngitsumut toqqorsivimmut uploadineqartut tassaavoq OuterWrapper CBOR W,
SealedQubCbor naliusaq imminuna ataaseq. K atortumini qimaatissaq URL-imi
killip imaa 16 imminuna.
13. Saqqummiussiniarlugu matusinermi saqqummiussineq. Atugaq aalajangerpoq.
14. Misissuiniartoq upload akuerineqarsinnaanera qub upload atorfilersuuteqarfia atorlugu (bot-mut misissornermut, atorfeqartumut, kingunersuutinut killiit).
15. Aalakoorluku W (OuterWrapper byte) qub upload atorfilersuuteqarfimut; atorfilersuuteqarfik
atsiorpaa aamma naassaanngitsumut toqqorsivimmut uploadineqarpoq. Atorfilersuuteqarfik byte-mut paasinanngitsoq iluani
SealedQubCbor-mut aamma K-mik tigusisoqannginneranik.
16. arweave_tx_id atorfilersuuteqarfimit tigutigissavat. Tunniunnermut nittartagaq pilersiniarluni
`<origin>/c/<arweave_tx_id>#<base64url(K)>` (imaluunniit `<origin>/s/<short_code>#<base64url(K)>`
short code-imik inissinneqartillugu). Browser-it URL fragment server-imut nassiunneqarsinnaanngilat,
K qub.social toqqorsivimmi gateway-imut tamannallu malugineqarsinnaanngitsoq.
Toqqorsivimmi tag-it (out-of-band). qub upload atorfilersuuteqarfia mikitsumik tigussaa toqqorsivimmi transaktionimik tag-it pusinneqarsimasumut nassiussassanut. Content-Type=application/octet-stream normativiusumik PISARIAQARPOQ atorneqartoq. Reference atorfilersuuteqarfik tigussaa pingasunik tag sapinginnermut piumassusiisartut pilersitsisoq saqqummiunneqassasoq toqqarpat: Intent (allowlist atorlugu misissorneqartoq compose intent — assersuutigalugu, quote, reply, commitment), Author (pilersitsisup §9.3 pubkey fingerprint 64-byte mikilersitamut hex), aamma Parent-Tx-Id (angajulliup qub-ip toqqorsivimmi transaktioniata ID akissummut sineriaqartut, 43-byte base64url).
Author tag qub-mut atatillugu opt-in: reference pilersitsisup atortugaa tassanngaannaq atorpaa atugaq erseqqissumik tamanut atimineq matusinermi sapinginnermi pisut. Toggle-imi peqanngippat — default-imi — Author tag-imik allaaserineq pinngilaq aamma qub piorsaavimmi atinnik tunneqarpoq: naassaanngitsumut toqqorsivimmi suunngitsoq uploaditta pilersitsisup handle-iata, email-iata, qub allaata atassuteqassallutik. Toggle-imi peqarpat, Author fingerprint pilersitsisup toqqakkani @handle-mut sineriagineqarpoq §9.5 uppernarsaanermut atassuteqartillugu. Akissummut sineriaqartumut atassuteqarneq aamma Intent kinaassuserinineq pinngilaq. Pusinneqartumi puua (§13) sernigaa timaata ciphertext sineriallaarneq — nakkutiliusumik qub-tut suluit upload taakkua paasinaarsinnaajumallugu bulk-mik isertinaarlugit drand-imi anguinnerat saqqummersikkaangat.
Reference atorfilersuuteqarfik siunissamilluunniit nassiussisanngilaq App-Name, App-Version, imaluunniit Type tag-it: imaammik atausimik-naliliisumik aalajangersinneq qub corpus tamarmiusoq utertinneqartussaq GraphQL-imi misissussamut, taamaattoq pusinneqartumi timi-kisiat illernaqqissaarnernut sungiusarnernut akersutaasoq.
Misissornermut malillugu PISARIAQARPOQ toqqorsivimmi tag atortumut §11 inummi-pingajuanut uppernarsaanernut tunngavissatut atorneqassanngitsoq; body hash / qub_id / atsiorneq tamaat naliusap CBOR-imut paasaqartoq imminuna, tag set-imut peqanngitsoq.
8. Qaffaanissamut Protokoli
Qaffaanerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.
1. Isiginnaartoq tunniunneqarnermut nittartagaq ammaapaa. arweave_tx_id-mik aqqut-iliarit
AAMMA K = base64url_decode(fragment) URL fragmentimit. Fragmenti peqanngippat
aqqutilluunniit ajortillugu → saqqummiussissava "URL-i matua isertorneqarnermut
isumassuissaminik peqanngilaq" aamma unitsillugit; isiginnaartumut PISARIAQARPOQ
toqqorsivimmi gateway-imut attavigeqqaarani K-mik peqanngitsumi, kingumut pusinneqartumi
byte isertorneqarsinnaanngitsumi pissarsiarniarluni siunertaqanngilaq atortumullu
attaveqarnissamik tassanngaannaq saqqummersitsisarmat.
2. Inerteqquniarit denylist. tx_id denylistemiittoq → unitsileqqummik saqqummiussit. Unitsillugu.
3. Tigusisoq OuterWrapper byte naassaanngitsumut toqqorsivimmit (gateway tassanga-aliartiteriinnarluni).
3a. Pusisitsineq: byte-it parse-eriarlugit OuterWrapper-tut (§13), wrapper-mi
`version` byte `0x01` misissorlugu, naatsorsuiniarluni SealedQubCbor =
unwrap_sealed_qub(OuterWrapper, key=K). AEAD-imut uppernarsaaneqarluni naammasinneq
(K kukkupput, ciphertext malugaq, qub_id-as-AAD allaajaq, nonce allaajaq) →
saqqummiussit "URL-imi isertorneqarnermut isumassuissaq qub toqqorneqartumut
naammassinngilaq" aamma unitsillugu. AEAD-imut uppernarsaanerni naammasinnerit
isiginnaartumut paasiuminaapput §13.5 naapertorlugu.
4. Parse-eriarluni SealedQubCbor → SealedQub.
5. Misissulluni: SealedQub.version paasineqartoq (0x01). Version paasineqartumik ajortoq itigartillugu.
6. Pisarit pissuserivigineqarnera < SealedQub.unlock_at → countdown saqqummiussit. Misissuiniaqatigit utaqqillutit.
6a. Anguinnermut-atassutsinermut misissuineq (V1.2). Utertillugu naatsorsuiniarit expected_round =
ceil((SealedQub.unlock_at - chain_genesis_time) / chain_period_seconds).
Itigartillugu SealedQub.drand_round == expected_round AAMMA tlock ciphertext suluani
anguinneq (age/tlock header-imit atuarneqartoq, atsiorneq pisariaqanngitsoq) == expected_round
naammassinngippata. Suluani anguinneq tassaavoq matusinnermut ilumut piffimmut paasaqartoq;
una misissuineq ajorpat pilersitsisoq akornusersuisinnaasoq ciphertext anguinnermut qaangiukkamut
atassutsisinnaavaa countdown siunissami takutillugu, taamaalimmat kinaluunniit byte toqqorneqartut
atuartut unlock_at sioqqullugu isertorsinnaapput. Suliarinerit piorsaaviup kinaassusianik
peqanngitsut (test mock) una misissuineq itigartippaat.
7. Pissuserivigineqarnera ≥ SealedQub.unlock_at-mut:
a. Pisariaqartumik drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut drand-imut tigutiniariarluni.
b. Naatsorsuiniarluni B = tlock_decrypt(SealedQub.tlock_ciphertext, round_signature).
8. Parse-eriarluni B → QubEnvelope.
9. Misissulluni QubEnvelope.version paasineqartoq.
10. Uppernarsuluni: SHA3-256(QubEnvelope.body) == QubEnvelope.body_hash.
Naammassinngippat → akornutaqarnermut kukkunersiut.
11. Uppernarsuluni: QubEnvelope.qub_id == SealedQub.qub_id.
Naammassinngippat → akornutaqarnermut kukkunersiut.
12. Uppernarsuluni: QubEnvelope.unlock_at == SealedQub.unlock_at.
Naammassinngippat → akornutaqarnermut kukkunersiut.
13. Uppernarsuluni: QubEnvelope.content_type paasineqartoq aamma saqqummiunneqarsinnaasoq.
Naliliisaq paasineqartut: 0x01 (allataq), 0x03 (isumaqatigiissut). Paasineqanngitsoq → kukkunersiut saqqummiussit.
14. QubEnvelope.sig_alg != 0x00 → atsiorneqarnera atsiorneqartumut uppernarsiniaruk (qiviarit §9.4).
15. cosigner_pubkey imaluunniit cosigner_signature peqarpat → atsiorqatigiisoq uppernarsiniaruk (qiviarit §9.7).
16. Imai naapertorlugu saqqummiunniartumut atorlugu rendererneqarluni (qiviarit §10 allatamut, §6 isumaqatigiissummut).
17. RevealedQub pilersikkit saqqummiussiniarluni.
9. Pilersitsisup Atsiorneqarnera
9.1 Naapertuusaaq
qub-it naassaanngitsumut toqqorsivimmi sumiiffeqarluinnarput. Pilersitsineq atsiorneqarnerat akornusiitisorneqarsinnaanngitsoq qaqugulluunniit ataqqinassanngittussat, taama pissutigalugu v1.0 atorpoq kingorna-kvantum ML-DSA-65 (FIPS 204) naliusap qaqugulluunniit naluneqarsinnaasup tunngavianik aalajangersaanissaminut qub-ip sumiiffia atussinnaapput.
9.2 Algoritmip Allataa
sig_alg |
Aaqqissuussaq | Isumassuissap Annertussusia | Atsiorneq Annertussusia |
|---|---|---|---|
0x00 |
Atsiorneqarsimanngitsoq | — | — |
0x01 |
ML-DSA-65 (FIPS 204) | 1,952 byte | 3,309 byte |
Isiginnaartut PISARIAQARPOQ paasinarnatik sig_alg naliliineqartut itigartittariaqarpaat.
9.3 Atsiorneqarsimasumut Preimage-mut Suliarineq
sig_input = SHA3-256(
"QUB_AUTHOR_SIG_V1" || // tunngaviusoq immikkoorut (17 byte)
version || // u8 (1 byte)
qub_id || // [u8; 32] (32 byte)
body_hash || // [u8; 32] (32 byte)
unlock_at || // i64 big-endian (8 byte)
0x00 // u8 (1 byte): PISARIAQARPOQ 0x00 v1.0-mut
)
// Preimage tamarmiusoq: 91 byte → 32-byte hash
signature = Sign(author_secret_key, sig_input)
Tunngaviusoq immikkoorut: "QUB_AUTHOR_SIG_V1" ASCII byte 17-iuvoq: [0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31]. Ilaateqaqanngilaq.
Kingulleq byte: preimage-mi 91-isaa byte PISARIAQARPOQ 0x00. Reference-imi suliarinerup tassuninnga ORG_ID_PRESENT_INDIVIDUAL = 0x00 konstantitut saqqummiussivaa crates/qub-core/src/signing.rs-imi; isiginnaartut sig_input uppernarsariniarpaat byte assigiimmik nassiussissut.
Atsiorneqartup sumi tamani — sumi naliusaaffigineqartut sumilu naliusaaffigineqanngitsut. sig_input paasaqartumut sisamanut puuata naasut: version, qub_id, body_hash, unlock_at (aamma aalajangersarsimasoq tunngaviusoq immikkoorut aamma org_id_present byte). Pingasut sisamanit pilersaarutigineqartumut atortulinnik aalajangersimasut: qub_id imaa pilersinneqarpoq version, content_type, created_at, unlock_at, outcome_at, drand_round, aamma body_hash §4.1 preimage atorlugu, taamaalimmat naasut taakku allangortinneqarpata qub_id-mut allatut saqqummiisitsipput atsiorneqarnermilu malugartoqarluni. Naliuvigineqartoq sumi tamani imaattuvoq:
| Naasoq | Atsiorneqarnermut uppernarsaaneqartoq | Qanoq |
|---|---|---|
version |
✓ | sig_input-mut input ataasiussoq |
qub_id |
✓ | Input ataasiussoq |
body_hash |
✓ | Input ataasiussoq |
unlock_at |
✓ | Input ataasiussoq |
content_type |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
created_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
outcome_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
drand_round |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu (V1.2) |
body |
✓ | Aqqut-iliartumik, body_hash = SHA3-256(body) atorlugu |
author_pubkey |
— (immaqimik) | Atsiornermik uppernarsaasoq isumassuissaq pilersitsisuvoq, naapertorlugu |
sender_label |
✗ | Saqqummiussamut-allatat; allanngorsinnaasoq atsiorneqarnerup allangortinneqarnagu |
reply_to |
✗ | Akissummut tikkuussisut; allanngorsinnaasoq atsiorneqarnerup allangortinneqarnagu |
cosigner_pubkey / cosigner_signature |
— | Naapertorlugu atsiorneqarsimasut sig_input assigiimmiut (qiviarit §9.7) |
drand_chain_id, tlock_ciphertext, visibility |
— | Avammut SealedQub naasut, puuata iluani peqanngitsut — namminnerannik atortulinnut aalajangersimaartumi (anguinneq / piorsaavik assigiittariniarneq) atortuneqartut, atsiorneqarnermilli pilersitsisup atorneqaratik. (drand_round maanna aqqut-iliartumik qub_id preimage atorlugu atassutsivoq — qiviarit qulaani.) |
Akornutaqarnerinik naliusaaffigineqarsimanngitsut isumassuissarsinerannut.
- Suliarinneq toqqarvigaata byteanut akileraartussaqartoq
sender_label("Alice" → "Mallory") allangortinneqarsinnaaqaaq atsiorneqarsimasoq atortugaata allangortinneqarnaani.author_pubkeypuuata iluani kinaassusiup tunngaviata tunngavissartaa — isiginnaartumut PISARIAQARPOQ saqqummiunneqartoq kinaassuseqauthor_pubkey-imit aalajangiullugu (§9.5 attestation layer atorlugu)sender_labelupperinnatigu. reply_tonaasoq allangortikkamilluuna atsiorneqarniarnera kingorna allatigutsianngorlugu allangortinneqarsinnaapput. Imatut tunngavikqub_idcontent-addresseqartoq, akornusersisup taavareply_totikkuagaq peqanngitsumut tigussinnaanngilaq, kisiannili akissummut allamut peqartumut nipangiumik aappassinneqarsinnaaqaaq.
Suliarineqarnerit sender_label imaluunniit reply_to atugaq isiginnaartumut saqqummiunissaminnut PISARIAQARPOQ uppernarsaaneqartoq kinaassusiat (pubkey fingerprint, attestation) saqqummiunneqartussatut pingaarnerpaartut, label-imullu pinngitsoq.
9.4 Uppernarsaanermut Periusissaq
1. QubEnvelope-imit sig_alg-mik atuariniaqit.
2. sig_alg == 0x00 → atsiorneqarsimanngitsoq. Uppernarsaqanngilaq. "qub atsiorneqarsimanngitsoq" saqqummiussit.
3. sig_alg paasineqanngippat → itigartittariaqarpoq. "atsiorneqarnermut aaqqissuussaq paasineqanngitsoq" saqqummiussit.
4. author_signature aamma author_pubkey nuussiniaqit. Naliliineq aappa peqanngippat → akornutaqarnermut kukkunersiut.
5. Uutivigit sig_input QubEnvelope-imi naasut atorlugit (formula §9.3 assigaa).
6. Verify(author_pubkey, sig_input, author_signature).
7. Uppernarsaaneq iluatsippat → "atsiorneqarsimasoq [isumassuissap fingerprint-iat]" saqqummiussit.
8. Uppernarsaaneq naammasinngippat → "atsiorneqarsimasup uppernarsaaneqarnera naammasinngilaq" saqqummiussit.
Atsiorneqarnermut uppernarsaaneq akiliuminartumik (ML-DSA-65 immikkut). PITSAAVOQ ingerlanneqartoq misissuinerit tamaat akinerusut (hash, qub_id, unlock_at) iluatsisimanerinit kingorna.
9.5 Kinaassutsimut Uppernarsaanerit
Kinaassutsimut uppernarsaanerit — author_pubkey-mut allaaserineq inungnut paasineqarsinnaasoq imaattumut qub handle, email, social handle, imaluunniit passkey credential — tassaapput isiginnaartup-tungaani sapinginnermut nikilersaaneq atsiorneqarnermut uppernarsaanermut PISARIAQANNGILAQ. Isiginnaartut attestation atortuusugaq saqqummiussumut kinaassusiat aalajangiisinnaasaat, taamaalimmat PISARIAQARPOQ malittarisaq atorlugu:
handle > email > social > fingerprint
Fingerprint-imut tigussaap atorneqartoq tassaavoq mikilersaagaq hex SHA3-256(author_pubkey)-imit; atsiorneqarsimasoq qub-imut tamaviarluni atortarpoq. Isiginnaartut saqqummiussinermut naatsorsorsinnaavaat — reference isiginnaartoq saqqummiisarpoq qub: malillugu byte-it sisamat siulliit aamma kingulliit (qub:<8 hex>…<8 hex>).
Suliarinneq attestation §9.4-mi misissuinerit tamaat suliarisinnaavaat qub API-mut attaverpata, naassaanngitsumut toqqorsivik aamma drand-imit allamiit atassutiusumik, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Attestation aalajangiussigit tassaavoq immikkut sapinginnerpaamik suliareqquneqartoq atsiorneqarnermut uppernarsaaneq iluatsillugu kingusiinnerusukkut.
9.6 Annertussusiisinnermut Sunniineq
| Ed25519 | ML-DSA-65 | |
|---|---|---|
| Atsiorneq | 64 byte | 3,309 byte |
| Pubkey | 32 byte | 1,952 byte |
| Tamarmiusoq qub-mut | 96 byte | 5,261 byte |
| Toqqorsivimmi akiliutiisalisinnerat (~$5/MB) | ~$0.0005 | ~$0.026 |
qub allataq 500–2,000 byte-imik annertutigisoq, ML-DSA-65 ataasiakkaarluni pingajussaq annertussusiisinaqaaq toqqarvigaata. Aki sapilinnerusoq mikiluartoq.
9.7 Atsiorqatigiisup Uppernarsaaneqarnera (Pact Bilateral Isumaqatigiissutit)
Bilateral isumaqatigiissutinut (content_type = 0x03), tullissaasoq atsiorneqarnerup ilaa tamarmik akiliisup assigiimmik aalajangersimanertik uppernarsaavaa.
Puuata naasui:
cosigner_pubkey: atsiorqatigiisup (Party B) ML-DSA-65 pubkey.cosigner_signature: Pilersitsisutut assigiimmutsig_input-imut atsiorneq (§9.3).
Naliliineq marluk PISARIAQARPOQ ataatsimoorlutik peqarpat imaluunniit marlukunnik peqanngitsoq. Ataasiullaaq peqarpat, isiginnaartut PISARIAQARPOQ akornutaqarnermut kukkunersiut saqqummiussissavaat.
Uppernarsaanermut periusissaq:
1. cosigner_pubkey peqanngippat aamma cosigner_signature peqanngippat → atsiorqatigiisoq peqanngilaq. Naammassivoq.
2. Ataasiullaaq peqarpat → akornutaqarnermut kukkunersiut.
3. Uppernarsuluni cosigner_pubkey != author_pubkey (namminneq atsiorqatigiinneq pinaveersaarniarluni).
Naammassinngippat → "atsiorqatigiisup pubkey-ata pilersitsisumiit assingunneqassanngilaq" saqqummiussit.
4. Uutivigit sig_input §9.3-mi formula assigaa atorlugu.
5. Verify(cosigner_pubkey, sig_input, cosigner_signature).
6. Iluatsippoq → "atsiorqatigiinneq [atsiorqatigiisup fingerprint-iat]" saqqummiussit.
7. Naammassinngippoq → "atsiorqatigiinnermut uppernarsaaneq naammasinngilaq" saqqummiussit.
Pissusii:
- Atsiorqatigiisup atsiorpaa
sig_inputpilersitsisutut assigiimmik — tamarmikqub_id,body_hash, aammaunlock_atassigiimmut paasaqartumik aalajangersimaaqaaq. qub_idaalajangiussaa (§4.1) atsiorqatigiisup naasunik peqanngilaq. Atsiorqatigiisoq puuata iluani peqartoq saqqummersisaq qub_id allangortikkussanngilaq.- Isumaqatigiissut pilersitsisup-atsiortikkani kisiat (illuariikkami aalajangersimaartumi), atsiorqatigiisoq-kisiat (immikkuusoq), imaluunniit marluk (tamarmik bilateral uppernarsaaneq) atsiorneqarsinnaaqaaq.
Email-mut atassuteqarnermut matusineq (atorfilersuusiat). Pact pilersinneqartoq Party B-mi email contact peqarpat (§6.1), qub upload atorfilersuuteqarfia PISARIAQARPOQ atsiorqatigiinnermut piumassuteqarnera itigartittariaqarpoq email-mut uppernarsaanermut malugaq sivikitsumik atornagu staging-imi ID-mut imminuna assigiimik email-mut hash-iata contact aatsutsivigineqartumut paasinnitsivoq. Malugaq /api/v1/auth/verify-imit allagaq magic-link-i token staging_id-mik tigussisoq, address uppernarsarneqartoq SHA-256(normalise_email(party_b.contact)) assignaq — tassani normalise_email(addr) local-part-i sungiusarpaa aamma domain-i mikilersitamik kisiat (RFC 5321 §2.3.11 naapertorlugu), aamma SHA-256 taava NIST FIPS 180-4 hash (SHA3-256-mik §4-mi aalajangiineqartumit allamik) — aamma 900 sekundi (15 minuti) tunniunneqarsimasup kingorna naasoq. Atorfilersuusianut akornusersiarnermut matusineq, NOT on-chain qub uppernarsaanermut ilanngullugu — inummut-pingajuaq uppernarsaasoq §11 paarminni naassaanngitsumut toqqorsivik aamma drand-mut kisiat atorpat, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Malugaq atorfilersuuteqarfimi-tungaani kisiat tassuani peqarpoq atsiorneqartumi timaata ilaata peqanngitsoq.
Annertussusiisinnermut sunniineq (ML-DSA-65 pilersitsisoq + atsiorqatigiisoq):
| Akuusaartoq | Annertussusia |
|---|---|
| Pilersitsisup atsiorneqarnera | 3,309 byte |
| Pilersitsisup pubkey | 1,952 byte |
| Atsiorqatigiisup atsiorneqarnera | 3,309 byte |
| Atsiorqatigiisup pubkey | 1,952 byte |
| Crypto akuusaartut tamarmik | 10,522 byte |
| Toqqorsivimmi akiliutiisalisinneq | ~$0.05 |
10. Markdown Saqqummiunneqarnera aamma Sanitiseringi
Kapital una illernarsineqarluni-pingaartuvoq. Isiginnaartoq qub allatat (content_type = 0x01) saqqummiussivaa Markdown-imi killilersimasumik atorlugu.
10.1 Akuersaarsimasut Atortut
- Qulit:
#####tikillugit (#####imaluunniit######peqanngillat) - Atornerneq: kissasoq (
**), tilluartooq (*), kuusisooq (~~) - Allataq: ileqquinik aalajangersimasut (
1.) aamma aalajangersimasaqanngitsut (-,*) - Erseqqissaakkat (
>) - Allakkat: inline span-it (```) aamma pusinneqartut (`````)
- Pissuserivigineqarnermut sineriaq (
---) - Allakkanut killiit (sineriap kingullia marlunnik byte imaluunniit illuariikkami uagut)
- Paragraffit
10.2 Inerteqquniarneqartut Atortut
| Atortoq | Suliarineqarnera |
|---|---|
Raw HTML (<div>, <script>, allallu) |
Tamaat peerneqartoq. HTML allamillu ingerlatassanngilaq. |
Assit () |
Peerneqartoq. Assi syntax-imit peerneqartoq output-imit. |
Atassutit ([text](url)) |
URL saqqummiussaaq nipangiisumi plain text. Auto-link-erneqassanngilaq. Atugartumut atorlugu kliki pissarsinngillat. |
| URL aaqqissuussamiut akornutaqartut | javascript:, data:, vbscript:, file: — peerneqartussaapput. |
| Iframe, embed, object | Peerneqartussaapput. |
| HTML entitii | Decode-erneqartussaaq saqqummiunissamut sianigissummut kisiat. |
10.3 Suliarineqarnera
Suliarinneq PISARIAQARPOQ malittarisaq allowlist parser, blocklist atornagu. Aqqut innersuussinneqartoq:
- Markdown parse-erluku
pulldown-cmarkatorlugu (assigissaat). - AST-imut sangussigit nuna allowlist-imi peqanngitsumik ungalulluku (§10.1).
- Atassutimut nuna: URL saqqummiussit takutinneqartumi allatat, klik-erneqarsinnaasumut
<a>atortumut pinngitsoq. - AST sungiusarsimasoq taakkua typed intermediate representation-imut (assersuutigalugu,
MarkdownNodeenum sanasoq sianigissummut variantinik kisiat). Raw HTML tassani IR-mi atortuneqarsinnaanngilaq. - Typed IR-mit render-eriarluni view layer tikilluuk (assersuutigalugu, reactive view atortut, DOM nuna). HTML oqaaseqatigiinik ataqatigiissaareqqitsineq imaluunniit
innerHTMLpeqannginnera.
Blocklist aqqutigaluit aamarpalupput Markdown atatigut nutaat parser-illu allaattut atortut filterineqarsimanngitsut ataajumakkaagamik. Typed-AST aqqut XSS aaqqissuussamiunut ajornassaaq — variant peqanngitsoq HTML siaruartumik tigussinngitsoq atorsinnaasoq.
10.4 Annertussuseq aamma Aaqqissuussamiut Killiit
- Renderineqarsimasut qule annertunersaq:
####(H4).#####aamma anggorlugu kissasoq allataq render-erneqarput. - Paragraf-it amerlassuserisitassanngilaq (timaa annertussuserisaa §6-mi killiliinerit aaqqissuussamiut atorlugit).
- Allakkat pusinneqartut: syntax highlighting-eqanngilaq MVP-mi. Monospace preformatted allatat-tut render-erneqartoq.
11. Inummi-Pingajuanut Uppernarsaaneq
Inuk pingajussaaq sumiluunniit tamanut qub uppernarsarsinnaavaa qub-mut suleqatigeqqaarani. Uppernarsaanermut periusissaq:
1. arweave_tx_id pisarit (tunniunneqarnermut nittartagamit imaluunniit ilisarisimasaminit).
2. Tigusisoq SealedQubCbor toqqorsivimmi gateway sumi tamani.
3. Misissulluni toqqorsivimmi block inkluderi (block-mi qule, block-mi pissuserivik).
4. Parse-erluku SealedQubCbor → SealedQub.
5. Tigusisoq drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR byte.
7. Parse-erluku → QubEnvelope.
8. Misissulluni SHA3-256(body) == body_hash.
9. Misissulluni QubEnvelope.qub_id == SealedQub.qub_id.
10. Misissulluni QubEnvelope.unlock_at == SealedQub.unlock_at.
11. sig_alg != 0x00 atugaq: misissulluni author_signature (qiviarit §9.4).
12. Misissuinerit tamaat iluatsippoq → qub uppernarsaaneqarpoq.
Uppernarsaaneq sumut uppernartunngorneraat:
| Uppernarsaaneq | Suna aalajangerneqartoq |
|---|---|
| Aalajangersimasaq | Ciphertext piaareerpoq toqqorsivimmi block-mut pissuserivigineqartumi. |
| Akornusersitiineq | Plaintext-imi timaa hash-imi aalajangersarsimasumut naapertortinneqarpoq, taamaalimmat allangortinneqarsimanngitsoq. |
| Piffeqarluni | Imai paasiuminaattup drand-imi anguinneq, taakku toqqagaq matusinnernut piffimmut paasaqartoq (tlock aamma drand isumannaarnermut malugartumut). |
Uppernarsaaneq suna NALI uppernartunngorpaa:
| Uppernarsaaneqanngilaq | Pissutaa |
|---|---|
| Pilersitsineq | sender_label saqqummiussamut. sig_alg ≥ 0x01 peqanngippat, sumi tamani imai matuneqarsimassagaluartoq. |
| Siunertaq | qub uppernarsaavaa imai aamma piffeqartoq, pilersitsisoq qanoq aalajangersimanertik isumarisaanngitsoq. |
| Sapinginnermut-pisup sioqqullugu piffeqarneq | Toqqorsivimmi block-imut inkluderi atortumi upload-imut minutsit kingusinnerusinaqaaq. Aalajangersimasoq pissuserivigineqarpoq block piffia, atugaq "matusineq" inniinnera pinnagu. |
12. Versionerneqarnera
12.1 Protokolip Versionia
SealedQub aamma QubEnvelope tamarmik version naasoq (u8) protokolip pingaarnerpaamik versioniata tikkuussisut.
- Isiginnaartut PISARIAQARPOQ pingaarnerpaarmi version paasineqanngitsut itigartittariaqarpaat erseqqissumik kukkunersiullutik.
- Pingaarnerpaarmi version paasineqartut AJORNANNGILAQ sapinginnermut peqartussat paasineqanngitsut akuersaarsinnaapput piaartumik atortut akuersaartumut killisinerinik akuerineqarpat (sapinginnermut peqartussat aaqqissuussamiut key-itik ileqquinik peqanngitsoq itigartinneqarpoq).
- Imai sumut atatillugit (
content_type) aamma atsiorneqarnermut aaqqissuussat (sig_alg) versioni-matuneqarsimasut: naliliisat nutaat saqqummissaapput tassanngaannaq versionermut protokolimik nutaamik imaluunniit allatamik allatamut erseqqissumik atorneqarsinnaapput.
12.2 Versioneqarluni Oqaluttuassartaq
| Versioni | Naliliineq | Erseqqissaaneq |
|---|---|---|
| v1 | 0x01 |
Tamanut atortut allataq qub (content_type 0x01), isumaqatigiissut bilateral (0x03, structured/v1 schema, ML-DSA-65 pilersitsisup + atsiorqatigiisup), tlock, SHA3-256 |
12.3 Siunissami Akuersaarsinnaaneq
V1-mi isiginnaartoq QubEnvelope CBOR-imi map key sapinginnermut peqartussat paasineqanngitsumik (§3.2 aaqqissuussamiunut peqanngitsut) takukkamigit PITSAAVOQ takuneqaqqaarsoraluni naasut paasineqartut atorlugit suliareqquluni uppernarsaaneq. Tamanna akuerineqarpoq siunissami minor nutaarsiatut (assersuutigalugu, metadata nutaat) pingaarnerpaamik versionerneqarnersaq pinnagu.
12.4 Avammut Pusinneqartumut Versionia
OuterWrapper §13-mi erseqqissarneqartoq nammineq version byte-eqarpoq, immikkut peqaqqaarpoq SealedQub.version aamma QubEnvelope.version allaapaat. Pinerlilernerinik marluk taakku immikkut ineriartorput: kingorna kvantum-isumassugut symmetric-imik allamut taarsisaq wrapper byte allangortippoq protokolip iluani versioniata atornaa, aamma siunissami protokoli-mi ilaaq (assersuutigalugu, puuata naasoq nutaaq) iluani versioniat allangortippaa wrapper byte attorlugu.
OUTER_WRAPPER_VERSION_* |
Naliliineq | Algoritmi | Killiffik |
|---|---|---|---|
OUTER_WRAPPER_VERSION_1 |
0x01 |
AES-256-GCM 12-byte nonce-mik, 16-byte uppernarsaanermut tag, AAD qub_id-mut atassuteqartoq |
v1 default |
| — | 0x02–0xFF |
Sernigineqartoq | Siunissami |
Isiginnaartut PISARIAQARPOQ paasineqanngitsumi wrapper versionit itigartittariaqarpaat erseqqissumik kukkunersiullutik. Protokoli erseqqissumik wrapper-imi versionermi sumiiffia mikitsumik tigussavaa allangorsivimmik aalajangersimasut saqqummeruttoq (assersuutigalugu, NIST-imi paasissutissaq AEAD allamut tulluartumi); 0x02-mut inissiineqarpoq aaqqissuussinerlu assingisuni algoritmi saqqummiussartoq.
13. Avammut Isertorneqarnermut Pusinneq
13.1 Naapertuusaaq
Protokolip iluai (QubEnvelope → tlock → SealedQub) qub matusereersimasoq suliarivaat piffimmik-matusersuagaq: timaa atuarneqarsinnaanngilaq unlock_at aamma drand-imi anguinnermi atsiorneqarnera saqqummeruttutarpat. Matusinerup kingorna, anguinnerup atsiorneqarnera tamanut nalunaarutigineqarpoq aamma SealedQub CBOR-imi aaqqissuussamiut suluat paasiuminaapput, taamaalimmat nakkutilliuneqarsimasoq naassaanngitsumut toqqorsivik indeks-iarsimasoq qub corpus tamarmiusoq bulk-mik isertinnaarsinnaaqaaq.
Avammut isertorneqarnermut pusinneq nutaaliami tassanga matuvoq atassusiarluni allatigutsianngorlugu symmetric AEAD-mik akornutaqalersarnermut canonical SealedQubCbor aamma byte naassaanngitsumut toqqorsivimmut uploadineqartut akornanniippoq. 256-bit isumassuissaq K najugaqarpoq kisiat tunniunneqarnermut URL-imi fragment-iata atorfia aamma inuk atortuini; browser-it URL fragment-it server-imut nassiussisanngillat, taamaalimmat qub.social, toqqorsivimmi gateway tamarmik, aamma CDN tamarmik siusinnerusukkummut sumi tamani malugartumik tappiineqartoq K-mut. qub-it tamarmik naassaanngitsumut toqqorsivimmi taava paasiuminaappoq ciphertext-tut imaata utertinneqarsinnaanngitsoq URL-i pilersitsisoq toqqarsimasaa angeqqaarani.
Tamarmiusoq akeqartoq:
- Enumerationi-mik kappiisaalisarneq default-imi. Pusinneqartut byte naassaanngitsumut toqqorsivimmi byte-mit nalunaaqutsisinnaanngilat assigiimmik nujui ciphertext-imut. Nakkutilliuneqarsimasoq aqqut-iliarneq "GraphQL-imit misissussagaq qub-tut suluit upload, bulk-imik isertortuq tamanut drand atsiorneqarsimasunik" plaintext-imut killinneqassananngitsoq.
- Crypto-shreddingi sungiussamut atorneqarnera. qub.social naammaalluinnarpoq corpus-imini isertorsinnaanngitsoq. Subpoenait ciphertext-imut tikipput, plaintext-imut pinngitsoq.
- Marluusumik akornutaaq inissaarpoq. Default = nittartakkamut-aalajangerneqarsimasumik atorneqarnera (kapital una). Tigussatumut-isertorneqarsimasut iluartumik qub iluartumik (fase-2-mi atortussaq sernigineqarsimasoq, suli allaaserineqanngitsoq) tassanngaannaq aalassartussaapput marluniit tunngaviutut.
13.2 Pusinnerit Tulleriaarnerinik
plaintext timaa ← QubEnvelope.body (§2.2)
↓ aaqqissuussamiut CBOR (§3)
puuata CBOR
↓ tlock isertortuq drand-imi anguinneq (§7 step 10)
tlock_ciphertext (SealedQub iluani) (§2.3)
↓ aaqqissuussamiut CBOR (§3)
SealedQubCbor byte ← iluani wire suliarineq
↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12a, kapital una)
OuterWrapper CBOR byte ← naassaanngitsumut toqqorsivimmut uploadineqartoq (§7 step 15)
Matusinissaq aamma qaffaanissaq protokoli-iluani (§7, §8) allangortinneqarunnaarput pusinneqartumi killinganit; pusinneqartumi attaviginneqarpoq seal() allaffigineqarsimanerani aamma kuiakkani unlock()-imi.
13.3 OuterWrapper Paasissutissat Aaqqissuussaat
struct OuterWrapper {
version: u8, // 0x01, qiviarit §12.4
qub_id: [u8; 32], // sealedQub iluani-imit kopiarisaq; AEAD AAD
nonce: [u8; 12], // 96-bit AEAD nonce
ciphertext: Vec<u8>, // AES-256-GCM(K, nonce, SealedQubCbor, AAD=qub_id) || 16-byte tag
}
Naasut aalajangersaasut.
versionPISARIAQARPOQ0x01v1.0 wrapper byte-mut.qub_idPISARIAQARPOQ SealedQub-imiqub_idnaasoq pussunneqaruni utertinneqaruvasimasoq assertortinniarluni. Pussunneqarnerup ingerlatsineranik tassani toqqaasartuneqanngilaq (AEAD AAD-mut atatillugu byte-mut suliarineq akornusersortinnaarpaa), kisiannili matusinissami toqqap atattumik atassusertimik misissoorpoq: pilersitsisupSealedQubCborpusappagu qub_id iluani wrapper qub_id-mut assingunngippat, §8 step 11 naammasinngilaq.noncePISARIAQARPOQ 96 bit (12 byte), CSPRNG-imit pussunnermi tamarmik nutaaq pilersinneqartoq. Nonce-imik isumassuissaq assigiimmi atoqqilluni AEAD nonce-imik atoqqissimanermut akornutaqarnermik plaintext utertinnermut periarfissiuvoq; suliariniartut PISARIAQARPOQ (key,nonce) marluugarput atausiakkaartumik atussallugit.ciphertextAES-256-GCM-imi output: ciphertext byte 16-byte uppernarsaanermut tag-imut ataqatigiinneqarsimasut.ciphertext.len() == SealedQubCbor.len() + 16eqqortumik.
CBOR-imi allaaserineq. §3 naapertorlugu canonical CBOR, key-itik ileqqui malittarisaq assigaa (byte-itik allaaserineqartut takinersaat siulleq, taava lexicographic). Naasut sisamat:
| Key | Allaaserineqartut byte | Ileqqua |
|---|---|---|
nonce |
6 | 1 |
qub_id |
7 | 2 |
version |
8 | 3 |
ciphertext |
11 | 4 |
OuterWrapper CBOR byte siulleq taamaalimmat takissuseq-aalajangersimasoq map qulequtaa 4-isunut naasoqartumut (0xA4).
13.4 AAD-imut Atassusernera qub_id-mut
Pusinneqartoq qub_id aalajangersarpaa AEAD-imi additional authenticated data tut. Una tassaavoq aalajangersimaartoq akornutsisup pingasunut akornusersisaqarnermut:
| Akornusersaaneq | Akornusersaaneqarnernut |
|---|---|
Ciphertext nuussinniaqit qub_id naasunut allat pusinneqartumi |
AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
| URL fragment qub A-mut naassaanngitsumi-toqqorsivimmi byte qub B-mut akulissuk | AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
Allangortikkit qub_id naasoq pusinneqartumi upload-imi kingorna |
AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
qub_id pusinneqartumi plaintext-imi tigussinnaalersimagaa enumeration kappiisaalinerunik akornusersuinngivippoq — qub_id imminuna SHA3-256 hash §4.1 preimage atorlugu utertinneqarsinnaanngitsuni digest-imi, aamma nakkutilliuneqarsimasoq pusinneqartumi byte-mik kataginnermik pissarsivigineqarsimasoq sumi tamani upload-mi paasisaminik ilisariniqallisaqartumit.
13.5 Pussunissamut aamma Pusiata Qaffaanissamut Algoritmiit
wrap_sealed_qub(SealedQubCbor S, qub_id Q, key K, nonce N):
require K.len() == 32 and N.len() == 12 and Q.len() == 32
C := AES_256_GCM_encrypt(key=K, nonce=N, msg=S, aad=Q)
// C 16-byte uppernarsaanermut tag-imut kingusiinarluni ilanngullugu
return canonical_cbor_encode(OuterWrapper{
version: 0x01,
qub_id: Q,
nonce: N,
ciphertext: C,
})
unwrap_sealed_qub(OuterWrapper bytes W, key K):
require K.len() == 32
O := canonical_cbor_decode(W) as OuterWrapper
require O.version == 0x01 // §12.4
P := AES_256_GCM_decrypt(
key=K, nonce=O.nonce, ciphertext=O.ciphertext, aad=O.qub_id
)
// AEAD-imut naammassinngitsut tamaat → DECRYPT_FAILED, atorsisumut paasineqarsinnaanngitsoq
return P // P SealedQubCbor iluaniipput
Naammasinniaqitanut katigineq. K kukkupput, nonce kukkupput, AAD assingunngitsoq, ciphertext malugaq tamarmik DECRYPT_FAILED kukkunersiummik assigiimmik saqqummiusisarput. Una tassaavoq AEAD-mut aalajangersimaartoq pissusi: naammasinneq sumut paasineqassappat allatigut tunngavissaqarpoq ungasinnerusumi akornusersisup misissornagulu pussunneqarsimasut malugaq nassiullugu pisillugulu nipangatsillugu. Reference-imi suliarineqarnerat PISARIAQARPOQ tamaat AEAD-mut naammassinngitsut atausiaannarluni kukkunersiummut piittussaapput.
13.6 Isumassuissamut Atortut aamma Aalakoorneqarnerat
Pusinissamut isumassuissaq K 256-bit uniformeqartumik sianigissummik tigussaq qub-mut tamaviarluni CSPRNG-imit pilersinneqartoq. Reference suliarineqarnerit pisarput:
- WASM pilersitsisup:
getrandom(WebCryptowasm_jsbackend-imi atorlugu). - Worker server-tungaani matusinermut:
crypto.getRandomValues.
Aalakoorneqarnera: K PISARIAQARPOQ URL-tut-isumannaartumik base64-mik allaaserineqartoq (RFC 4648 §5, ilaateqaqanngitsoq) aamma tunniunneqarnermut URL-imut fragment komponentitut ataqatigiineqassasoq:
delivery_url = <origin>/c/<arweave_tx_id>#<base64url(K)>
Fragmenti server sumiluunniit ingerlatassanngilaq browser malittariusumi. Utertitsineq aqqutit (atorfilersuuteqarfiup-tungaani oqaluttuassartaq indeks, opt-in email auto-send) tunniunneqarnermut URL-imut tamarmik atortuneqarunnaagit — fragmentilu ilanngullugu — inuk-atortugaata sinneranit allamiit default crypto-shreddingi sungiusarmat akilersuni atorpoq aamma PISARIAQARPOQ atugaq erseqqissumik akuersinerinik aalajangersinneqarsoq.
Fragmenti tammartoq. Atugaq URL fragmenti tammarpaa aamma utertitsiniarluni aqqut peqanngippat, qub atuarneqarsinnaanngitsoq. Una tassaavoq pilersaarutigineqartumi akornutsisutik atorlugit angerlassangerneqartoq aamma PISARIAQARPOQ atugartumut matusinermi piffia saqqummiunneqarsimassasoq. MVP-imi matusinermi-piffimmi nalunaaruteqarneq nakussatsippaa erseqqissumik "URL-i toqqorukkit" oqaaseqarluni aamma uppernarsarneqartumi-email-imut utertitsineq aqqut atugaq opt-in atorpat.
13.7 Kapital Una Sumut Sumut
- Pilersitsisup atsiorneqarnera (§9) allangortinneqarsimanngilaq: atsiorneqarnera naatsorsoriarneqartoq
QubEnvelopeiluani aamma utertinneqarpoq pussunneq → tlock qaffaaneq → CBOR parse kingorna. - Tigussatumut-isertorneqartoq iluartumi qub (fase-2-mi atortussaq sernigineqarsimasoq, suli allaaserineqanngitsoq) pusinneqartumi qulaani komposirneqartoq marlumeertumi illernarsineqartumut tunngaviutut; marluk taakku ataatsikkut atortuusinnaaqaaq.
- Isumaqatigiissutit (§6, content_type
0x03) qub allatat pussunneqarput; pusinneqartoq byte-mut paasineqanngitsoq imai sumut atatillugu.
13.8 qub tamanut (pusinneq peerneqarsimasoq)
Avataani pusinneq tassaavoq tunniunnermi killinganni sapinginnermut piumassusiisartoq. Pilersitsisoq qub matusersinnaavaa tamanut, taamaalimmat canonical SealedQubCbor naassaanngitsumut toqqorsivimmut allanneqassaaq tassanngaannaq, OuterWrapper qulequtaqanngitsoq aamma isumassuissaq K peqanngitsoq:
SealedQubCbor bytes ──(public)──▶ uploaded to permanent storage as-is
SealedQubCbor bytes ──(private)─▶ AES-256-GCM(K, …) ▶ OuterWrapper ▶ uploaded
qub tamanut tassaavoq piffimmik-matuneqarsimasoq kisiannili nittartakkamik-matuneqarsimanngitsoq: drand-imi anguinnera saqqummeruttunnagu atuarneqarsinnaanngitsoq (tlock-ip killinga allanngortinneqarsimanngilaq), kisianni matuserneqareerpat kina tamaat arweave_tx_id-mik tigussaqartoq isertorsinnaavaa — URL-imi fragmenti pisariaqanngilaq, K peqanngimmat. Una tassaavoq aalajangersimaarluni akeqartoq killinganut server-ip ingerlatariaqakkaanut: matuserneqarnermut nalunaarummut email-it, allamiunnit embed-it, aamma matuserneqareernerup kingorna SEO pitsaanerusoq tamarmik nittartakkamik pisariaqartippaat server-ip sumiluunniit tigummiunngisaanik isumassuissamik atornagu sulisartumik (§13.6).
Producer-ip eqqumaffigisariaqakkai:
Enumerationi-mik kappiisaalisarneq peqanngilaq. qub tamanut §13.1 enumerationi-mik-kappiisaalisarnermut pissusersiortut pilersitsiviminik peerpaa. Reference upload atorfilersuuteqarfik taakkununnga (taakkununnga kisimik)
Visibility: publicnaassaanngitsumut-toqqorsivimmik tag-imik naqissivoq, taamaalimmat aalajangersimaarluni nassaartuneqarsinnaapput; qub iluartumut taama tag-eqanngillat aamma byte-mit nalunaaqutsisinnaanngitsoq attatippaat.Plaintext-imi qulequtaq matusinermi piffimmi saqqummiineqartoq. §3.2
titlenaasoq tassaavoq plaintext-imiSealedQubCboriluani. Pusinnerup ataani isertorneqarpoq isiginnaartupKtunniunnera tikillugu; pusinneq peqanngippat naassaanngitsumut toqqorsivimmi tamanut-atuarneqarsinnaasoq uploadiniarnermi piffimmiit, matuserneqarnerup sioqqullugu. Pilersitsisup atortui naapertuuttut PISARIAQARPOQ matusinermi piffimmi una saqqummiussisut.Nassaarineqarnera tunngaviusoq. Isiginnaartoq/embed naapertuuttoq killit marluk parse-imikkut immikkoortippai: byte-it
OuterWrapper-tut parse-eriartutK-mik-pusiata-qaffaanissaata aqquta tiguaat; byte-itSealedQubCbor-itut imminuna parse-eriartut tassanngaannaq akuersaarneqarput. Wire-imi flag pisariaqanngilaq, aammaqub_idnittartakkamik atassusinngilaq — imai assigiimmikSealedQubkillinganni byte-mut assigiimmik, qub tamanut imaluunniit iluartumut matuserneqarsimagaluarpalluunniit.
Iluartoq (pusinneqartoq) default-ttuassaaq; tamanut tassaavoq pilersitsisup qub-mut ataasiakkaartumik erseqqissumik toqqagaa.
14. Misilernermut Vektorit
14.1 qub_id Aalajangiineqarnera
Input:
version = 0x01
content_type = 0x01
created_at = 1735689600 (2025-01-01 00:00:00 UTC)
unlock_at = 1736294400 (2025-01-08 00:00:00 UTC)
outcome_at = peqanngitsoq
drand_round = 4695445 (= (1736294400 - 1595431050) / 30, drand mainnet parameter-it §14.2)
body = "Hello, future." (UTF-8, 14 byte)
title = peqanngitsoq
Akornanniittoq:
body_hash = SHA3-256("Hello, future.")
= 76ab8b3f843c6ed4f2d0fd75b9f457b4
ad49dd4450f9c22723ae430e3af3211d
title_hash = [0u8; 32] (title peqanngitsoq — §4.2.1 sentinel)
Tunngaviusoq immikkoorut (10 byte):
[0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00]
Preimage (108 byte — V1.2):
domain_separator || // 10 byte
0x01 || // version
0x01 || // content_type
0x0000000067748580 || // created_at i64 big-endian (1735689600)
0x00000000677DC000 || // unlock_at i64 big-endian (1736294400)
0x0000000000000000 || // outcome_at_or_zero (outcome_at peqanngitsoq)
0x000000000047A595 || // drand_round u64 big-endian (4695445)
body_hash || // 32 byte
title_hash // 32 byte (nuller-tamaasa sentinel; title peqanngitsoq)
Naatsorsuiniaqallartoq output:
qub_id = SHA3-256(preimage)
= 3a9fcb31b750d985c262fada6d4f777f
d6a28be831d941d85c131f5a4bbaf8a4
Suliarinneq PISARIAQARPOQ body_hash aamma qub_id naliliineqartut assigiimmik saqqummiussaat input-imut. Misilernermut vektori una PITSAAVOQ unit test allaaserinissaminut siulleq. Naliliineqartut canonical qulaani naatsorsuiniarsimasut reference suliarineranit aamma PISARIAQARPOQ bit-tut bit-imut nalunaaqutigineqassasut. Preimage-it itsarnisartut aaqqissuussaat (tassanngaannaq aallartittussaq — qub atortussaq atortugaq pisup taakku naliliinerusut tunngavigissanngilai): 92-byte V1.0 qub_id tassaavoq 3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0; 100-byte V1.1 qub_id (outcome_at_or_zero ilanngullugu) tassaavoq b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed. V1.2 drand_round ilanngippaa aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa.
14.2 Matusernermut Anguinnermut Allaaserineq
Input:
unlock_at = 1735689600
chain_genesis_time = 1595431050
chain_period_seconds = 30
Naatsorsorneq:
(1735689600 - 1595431050) / 30 = 4675285.0
ceil(4675285.0) = 4675285
drand_round = 4675285
14.3 Aaqqissuussamiut CBOR-imi Sineriarneqarluni Round-Trip
Suliarinneq PISARIAQARPOQ misissussavoq serialize(parse(serialize(qub))) == serialize(qub) input ajornanngitsut tamaviarluni. Una pissutsinik misilernermut, vektoriiluunniit ataasiusoq pinngitsoq.
14.4 PactTerms CBOR (content_type 0x03)
Input:
pact_version = 1
title = "Scooter deposit"
terms = [
{ key: "Item", value: "Honda Metropolitan scooter" },
{ key: "Price", value: "$100" },
{ key: "Deposit", value: "$10" }
]
party_a = { label: "Alice" }
party_b = { label: "Bob", contact: "bob@example.com" }
notes = peqanngitsoq
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerms):
"notes"(6) < "terms"(6) < "title"(6) < "party_a"(8) < "party_b"(8) < "pact_version"(13)
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerm):
"key"(4) < "value"(6)
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PartyIdentifier):
"label"(6) < "contact"(8)
Aaqqissuussamiut CBOR byte aamma SHA3-256 body_hash reference-imi suliarineranit naatsorsuiniarput. Suliarinneq PISARIAQARPOQ byte-mut assigiimik CBOR saqqummiussissasut input matumut.
Suliarinneq PISARIAQARPOQ aamma misissussavoq serialize(parse(serialize(pact))) == serialize(pact) input ajornanngitsut tamaviarluni PactTerms (pissutsinik misilerneq).
14.5 Avammut Pusinneqartumi Oqaatsit-akornanni Vektorit
Avammut pusinneqartoq (§13) immikkut canonical fixture-eqarpoq crates/qub-core/tests/vectors/wrapper_v1.json-imi. Pissutsit tamarmik (key, nonce, qub_id, sealed_cbor) tuple-itik paasiuminaajunnaartumik hex input-itut aalajangersarpaa aamma expected_wrapper_hex output aalajangersamik aalajangersaarpaa. Marluit reference suliarineqarnerit JSON-imi atausiarluni atortuneqarput:
- Rust:
crates/qub-core/tests/wrapper_vectors.rs(cargo test -p qub-core --test wrapper_vectors). - TypeScript:
workers/api/src/crypto/__tests__/wrapper.test.ts(npm test).
Fixture-i maannakkut pingasunik aalajangersarsimavaa:
| Pissut | Tunngavik |
|---|---|
basic-text-public |
Mikinersaq pissusilitsumi SealedQub suluk; sapinginnermi naasut peqanngitsoq. Aaqqissuussinerup canonical wrapper suluk v1.0-imi nalingiusumi qub-imut aalajangersaa. |
with-recipient-pubkey |
SealedQub recipient_pubkey aalajangersimasoq (Phase 2 aqqut). Iluani CBOR key set allamik, qub_id allamik. |
longer-body |
~4 KiB timaa — multi-byte CBOR takissuseq qulequtaalu iluani puuata aamma avammut ciphertext atortunut. |
Suliarinneq PISARIAQARPOQ byte-mut assigiimik expected_wrapper_hex saqqummiussissasut input toqqorneqartumut. Fixture-i pilersinneqaqqissasoq pisariaqartumut QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors atorlugu aamma aalajangersarsimavoq erseqqissumik aaqqissuussamiunut allanngorsitsineq.
15. Crypto Profilemut Aqutsineq (Siunissami)
Kapital una nalunaarut v1-mut aamma normativeqalersuni siullermik aaqqissuussamiunut allamut qub-imi cryptografiamut akuusaartoq isertoqattaarsimasoq.
15.1 Maannakkut Killiffia
Protokoli v1 eqqortumik atausiusumik algoritmimut atortumut atortussaq:
- Atsiorneqarneq: ML-DSA-65 (
sig_alg = 0x01; 1952-byte pubkey, 3309-byte atsiorneqarneq) aamma atsiorneqanngitsoq (sig_alg = 0x00). §9.2 registri naliliisanik allanik nassuiaanngilaq; v1 uppernarsaasoq PISARIAQARPOQsig_algtamaasa{0x00, 0x01}avataaniittut itigartittariaqarai. Siunissami Ed25519-mik allataareq naatsorsuutigineqarpoq (§15.3) kisianni v1-mi tunniunneqanngilaq. - Piffimmik-matuserneq: drand quicknet kisiat — piorsaaviup hash-iat, pubkey, genesis-piffia aamma piffissaq tassaapput network-imut parameter-it aalajangersimasut reference
DrandTimelockProvider::quicknet()(crates/qub-core/src/tlock.rs) aammaconfig/drand-endpoints.json-imit nassartakkat. - Avammut pusinneqartoq: AES-256-GCM v1 kisiat (§13).
Uppernarsaasut maannakkut isumassuissamik aamma atsiorneqarnermik takinersaak hardcode-iarput algoritmimut atortussamut. Aalakoorneqarluni-sungiussatsineq saqqummiussaq pinngilaq wire-imi format-iata.
15.2 Siunissaminni Suluk
Algoritmi aappassinngneq protokolimut iserpat, uppernarsaasoq taqqaffigineqarpoq CryptoProfile taagisamut (assersuutigalugu, ExqubV1) aalajangersimasunik naliliisanut atortussunut atortunit — sig_algs, drand piorsaaviit, wrapper versionit, content type-it. Profil aalajangerneqarpoq uppernarsarnermi piffimmi, in-band-mi pisarpoq oqaluttuussassanngilaq. Naliliineq tamaat profilemi atortuujungippat itigartinneqarput.
Una qulakkeerpaa ML-DSA-87-mik ilaatittumik imaluunniit Ed25519-mik atorlugu kingumut uppernarsaasut atortullu uppernarsaasut nikilersaaneqarsinnaanngitsoq: v1 uppernarsaasoq v1 uppernarsaasutut pissimaaqissaaq v2 profili saqqummiussinneqareerpat.
15.3 Akornisaaffigineqarluni Pissusii
§15-mik normativetut suluit isumagineqaqquk apuuttortumut una imaattumut:
sig_algbyte aappa (Ed25519 atortunngorlugu, ML-DSA-87, imaluunniit §9 registri-mi naliliineq nutaaq).- Drand piorsaavik aappa atorfimi.
- Avammut pusinneqarnerni versioni aappa.
Tassanngaannaq §15-mi sumiiffeqarsimavoq aalajangersuusermi siunissami PR-it siusinnerusumi naapertorlugu tikiunneqartussaatut tikkuagaq atorlugu pinngivissumi aappassinneqannginnermik atortussaq atortugaq sungiussatsillugu.