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:

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:

  1. HTTPS-mi kisiat. Oqaaseq PISARIAQARPOQ https:// byte tulleriiarmik aallartittumik. Allat tulleriiat tamarmik — http, ftp, javascript, data, file, allallu — itigartinneqassapput.
  2. Takissusaata killilersugaa. ≤ 2,048 byte (browser-imi URL piffissami nalingisup killiliivia).
  3. NFC + akuersaanngitsumik codepoint-imik misissuineq. title aamma reflection malittarisaq assigissaa — bidi-override / silaqanngitsoq-aalavik / tag-block / BOM / C0 / C1 codepoint-it itigartinneqassapput. Naliliineq Rust-imi crate::handle::contains_hostile_text_codepoint aamma TS-imi workers/api/src/utils/unicode.ts::isHostileCodepoint malitsersuipput (ataqatigiilluni paaqqissaalluni).
  4. Akornusersugaq peqanngilaq, ASCII-mi aqutsisartoqanngilaq. Akornusersuut / DEL / 0x20-mit ataani byte-it URL-imi sumiluunniittut itigartinneqassapput — bidi malittarisartumi matunnertanngitsoq \n/\t injection vektor matusarpaa.
  5. 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.

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:

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:

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

10.2 Inerteqquniarneqartut Atortut

Atortoq Suliarineqarnera
Raw HTML (<div>, <script>, allallu) Tamaat peerneqartoq. HTML allamillu ingerlatassanngilaq.
Assit (![alt](url)) 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:

  1. Markdown parse-erluku pulldown-cmark atorlugu (assigissaat).
  2. AST-imut sangussigit nuna allowlist-imi peqanngitsumik ungalulluku (§10.1).
  3. Atassutimut nuna: URL saqqummiussit takutinneqartumi allatat, klik-erneqarsinnaasumut <a> atortumut pinngitsoq.
  4. AST sungiusarsimasoq taakkua typed intermediate representation-imut (assersuutigalugu, MarkdownNode enum sanasoq sianigissummut variantinik kisiat). Raw HTML tassani IR-mi atortuneqarsinnaanngilaq.
  5. Typed IR-mit render-eriarluni view layer tikilluuk (assersuutigalugu, reactive view atortut, DOM nuna). HTML oqaaseqatigiinik ataqatigiissaareqqitsineq imaluunniit innerHTML peqannginnera.

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


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_alg0x01 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.

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
0x020xFF 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:

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.

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:

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

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:

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:

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:

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:

Tassanngaannaq §15-mi sumiiffeqarsimavoq aalajangersuusermi siunissami PR-it siusinnerusumi naapertorlugu tikiunneqartussaatut tikkuagaq atorlugu pinngivissumi aappassinneqannginnermik atortussaq atortugaq sungiussatsillugu.