social-kit / test / vectors / pair.json
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
  "_doc": "Pairwise/self channel derivations (pair.ts): static-static DH of the suite X keys -> channel id, gossip topic, mailbox room id, wrap ctx, sender tags — byte-exact, symmetric for both members. sealed: AES-GCM wires produced by the TS impl (random IVs; the port must open() them).",
  "deterministic": {
    "social_salt": "ardegazu.ro/social/v1",
    "seeds": {
      "A": "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8",
      "B": "ICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8"
    },
    "pair_AB": {
      "id": "wCD3e8iCWOC34whg2NCqCDu0OvQdGS0-etrYMbRjkjs",
      "topic": "soc/1/pE1HWzzHK3Pz3pHOC7z9ghUdEgTn5PAva2s5i_-aGbI",
      "mailboxRoomId": "zibYT_3BJ8GXliCY47H-se0M7upWW5d_roSYdN7z2FU",
      "ctx": "pair|v1|wCD3e8iCWOC34whg2NCqCDu0OvQdGS0-etrYMbRjkjs",
      "tag_of_A": "MYOm3-Gkvvcmltae",
      "tag_of_B": "x7V1YUsLKWtjIafA"
    },
    "self_A": {
      "id": "s6vOPXqIhPFgBr2lK2wnEIzeFUhVEx_x7VW1-zxd79o",
      "topic": "soc/1/6OjUAMGa4L7PvEx66Gorlx_j-T5IWeZBHM_ExSbjlPw",
      "mailboxRoomId": "XFU0lzBi7A1-8xd4_tFNcNW8M-mJA2S4vOLtSdXopSk",
      "ctx": "self|v1|s6vOPXqIhPFgBr2lK2wnEIzeFUhVEx_x7VW1-zxd79o",
      "tag_of_A": "fn1v3onv3aSGD3kd"
    },
    "notes": [
      "pair ikm = HKDF(X25519(myXpriv, friendXpub), SOCIAL_SALT, 'friend-pair|v1|<minPub>|<maxPub>') — pubs sorted, so both sides derive identically",
      "self ikm = HKDF(seed, SOCIAL_SALT, 'self-room|v1')",
      "one extra indirection first: ikm' = HKDF(ikm, SOCIAL_SALT, '<kind>|ikm'); then id/topic/mailbox/tag/msg keys derive from ikm'",
      "topic = 'soc/1/' + hkdfId(ikm', SOCIAL_SALT, '<kind>|topic'); ctx = '<kind>|v1|' + id",
      "tagOf(pub) = hkdfId(ikm', SOCIAL_SALT, '<kind>|tag|<pub>').slice(0,16)",
      "seal: AES-GCM(hkdfAesKey(ikm', SOCIAL_SALT, '<kind>|msg|<pub>'), iv random 12B, AAD utf8('soc|v1|<id>|<senderPub>')); wire JSON {v:1,s:tag,iv:b64,ct:b64} (STANDARD b64, not b64url)"
    ]
  },
  "sealed": {
    "pair_wire_from_A": {
      "wire": "{\"v\":1,\"s\":\"MYOm3-Gkvvcmltae\",\"iv\":\"xPi7Oqu7nL6Bi6SN\",\"ct\":\"Pcg8z8wjFKUGC7EhSyCDZ8OuTQHNoTihbA7czYBrN4QHKdt09YNMoxA5iJ+oYuVL29Cj\"}",
      "payload": {
        "k": "hello",
        "n": 1,
        "msg": "hei ✨"
      },
      "from_seed": "A"
    },
    "self_wire": {
      "wire": "{\"v\":1,\"s\":\"fn1v3onv3aSGD3kd\",\"iv\":\"FC/iz2JVZEzvtGj3\",\"ct\":\"p8CrjVF/zM0YDb32TdjSC4KT2Cb4ghJ/MTzbx+r5UGDutY/CnMw=\"}",
      "payload": [
        "state",
        2,
        {
          "x": true
        }
      ],
      "from_seed": "A"
    }
  }
}

static mirror of HEAD · about · clone: git clone https://git.ardegazu.ro/social-kit.git