@agentunion/fastaun 0.5.18 → 0.5.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +172 -79
  2. package/_packed_docs/CHANGELOG.md +172 -79
  3. package/_packed_docs/INDEX.md +244 -116
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +98 -69
  5. package/_packed_docs/agent.md/SCHEMA.md +245 -205
  6. package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +11 -11
  7. package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +42 -15
  8. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +4 -4
  9. package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +45 -134
  10. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1072 -1072
  11. package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +5 -20
  12. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +687 -668
  13. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +19 -28
  14. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +443 -0
  15. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.0.md +161 -0
  16. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +658 -0
  17. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2113.0.md +233 -0
  18. package/_packed_docs/protocol/agent.md/SCHEMA.md +4 -0
  19. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +1 -1
  20. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +68 -61
  21. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
  22. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +279 -285
  23. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
  24. package/_packed_docs/sdk/09-group-rpc-manual.md +271 -235
  25. package/_packed_docs/sdk/09-message-rpc-manual.md +47 -6
  26. package/_packed_docs/sdk/09-storage-rpc-manual.md +70 -68
  27. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +63 -34
  28. package/_packed_docs/sdk/INDEX.md +105 -34
  29. package/_packed_docs/sdk/Ownership-SDK/345/256/236/347/216/260/346/214/207/345/215/227.md +169 -0
  30. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/227.md +349 -0
  31. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +922 -0
  32. package/_packed_docs/sdk/Ownership-SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +270 -0
  33. package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +300 -0
  34. package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +382 -0
  35. package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +708 -0
  36. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +476 -0
  37. package/_packed_docs/sdk/Ownership/347/256/241/347/220/206/344/270/223/351/242/230.md +559 -0
  38. package/_packed_docs/sdk/ProtectedHeaders/347/224/250/346/263/225/344/270/223/351/242/230.md +299 -0
  39. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +173 -0
  40. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +211 -0
  41. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/345/256/236/347/216/260/347/247/273/346/244/215/346/214/207/345/215/227.md +331 -0
  42. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +207 -0
  43. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +252 -0
  44. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/345/256/236/346/226/275/350/256/241/345/210/222.md +156 -0
  45. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/346/226/271/346/241/210.md +273 -0
  46. package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/350/257/246/347/273/206/350/256/276/350/256/241.md +211 -0
  47. package/dist/agent-md-schema.d.ts +15 -1
  48. package/dist/agent-md-schema.js +87 -24
  49. package/dist/agent-md-schema.js.map +1 -1
  50. package/dist/agent-md.d.ts +54 -2
  51. package/dist/agent-md.js +637 -53
  52. package/dist/agent-md.js.map +1 -1
  53. package/dist/aid-store.d.ts +38 -59
  54. package/dist/aid-store.js +300 -265
  55. package/dist/aid-store.js.map +1 -1
  56. package/dist/aid.js +30 -11
  57. package/dist/aid.js.map +1 -1
  58. package/dist/auth.d.ts +6 -1
  59. package/dist/auth.js +500 -15
  60. package/dist/auth.js.map +1 -1
  61. package/dist/cert-utils.d.ts +44 -2
  62. package/dist/cert-utils.js +149 -49
  63. package/dist/cert-utils.js.map +1 -1
  64. package/dist/client/delivery.d.ts +11 -1
  65. package/dist/client/delivery.js +321 -62
  66. package/dist/client/delivery.js.map +1 -1
  67. package/dist/client/rpc-pipeline.d.ts +1 -0
  68. package/dist/client/rpc-pipeline.js +142 -82
  69. package/dist/client/rpc-pipeline.js.map +1 -1
  70. package/dist/client/v2-e2ee.d.ts +1 -0
  71. package/dist/client/v2-e2ee.js +166 -96
  72. package/dist/client/v2-e2ee.js.map +1 -1
  73. package/dist/client.d.ts +84 -1
  74. package/dist/client.js +780 -30
  75. package/dist/client.js.map +1 -1
  76. package/dist/errors.js +4 -3
  77. package/dist/errors.js.map +1 -1
  78. package/dist/events.d.ts +9 -3
  79. package/dist/events.js +69 -11
  80. package/dist/events.js.map +1 -1
  81. package/dist/facades.d.ts +83 -3
  82. package/dist/facades.js +100 -6
  83. package/dist/facades.js.map +1 -1
  84. package/dist/index.d.ts +9 -4
  85. package/dist/index.js +3 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/keystore/aid-db.d.ts +5 -0
  88. package/dist/keystore/aid-db.js +57 -0
  89. package/dist/keystore/aid-db.js.map +1 -1
  90. package/dist/keystore/index.d.ts +8 -0
  91. package/dist/keystore/local-identity-store.js +10 -3
  92. package/dist/keystore/local-identity-store.js.map +1 -1
  93. package/dist/keystore/local-token-store.d.ts +6 -1
  94. package/dist/keystore/local-token-store.js +24 -1
  95. package/dist/keystore/local-token-store.js.map +1 -1
  96. package/dist/org-protocol.d.ts +98 -0
  97. package/dist/org-protocol.js +1753 -0
  98. package/dist/org-protocol.js.map +1 -0
  99. package/dist/ownership-proof.d.ts +82 -5
  100. package/dist/ownership-proof.js +327 -31
  101. package/dist/ownership-proof.js.map +1 -1
  102. package/dist/ownership-v21.d.ts +196 -0
  103. package/dist/ownership-v21.js +712 -0
  104. package/dist/ownership-v21.js.map +1 -0
  105. package/dist/ownership-workflow.d.ts +87 -0
  106. package/dist/ownership-workflow.js +1182 -0
  107. package/dist/ownership-workflow.js.map +1 -0
  108. package/dist/seq-tracker.d.ts +1 -0
  109. package/dist/seq-tracker.js +10 -1
  110. package/dist/seq-tracker.js.map +1 -1
  111. package/dist/tools/cross-sdk-agent.d.ts +90 -1
  112. package/dist/tools/cross-sdk-agent.js +441 -7
  113. package/dist/tools/cross-sdk-agent.js.map +1 -1
  114. package/dist/transport.d.ts +8 -0
  115. package/dist/transport.js +118 -4
  116. package/dist/transport.js.map +1 -1
  117. package/dist/v2/e2ee/decrypt.d.ts +1 -0
  118. package/dist/v2/e2ee/decrypt.js +9 -1
  119. package/dist/v2/e2ee/decrypt.js.map +1 -1
  120. package/dist/version.d.ts +1 -1
  121. package/dist/version.js +1 -1
  122. package/package.json +1 -1
@@ -1,27 +1,114 @@
1
- import { createHash } from 'node:crypto';
1
+ import { createCipheriv, createDecipheriv, createHash, pbkdf2Sync, randomBytes, X509Certificate } from 'node:crypto';
2
2
  import { canonicalJson } from './v2/crypto/canonical.js';
3
3
  import { validateAIDFormat } from './validators.js';
4
- import { isStrictBase64, verifySignatureWithCert, certFingerprint } from './cert-utils.js';
4
+ import { isStrictBase64, verifySignatureWithCert, certFingerprint, certCommonName } from './cert-utils.js';
5
5
  import { ValidationError } from './errors.js';
6
6
  export const OWNERSHIP_RELATION_DOMAIN = 'AUN-AID-OWNER-RELATION-V1;';
7
+ export const OWNERSHIP_RELEASE_DOMAIN = 'AUN-AID-OWNER-RELEASE-V1;';
8
+ export const OWNERSHIP_MESSAGE_TYPE = 'aun.ownership.v1';
9
+ export const CERT_ESCROW_VERSION = 1;
10
+ export const CERT_ESCROW_ITERATIONS = 200_000;
11
+ export const CERT_ESCROW_AAD = Buffer.from('AUN-CERT-ESCROW-V1', 'utf8');
7
12
  const PROOF_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
8
13
  const FINGERPRINT_RE = /^sha256:[0-9a-f]{64}$/i;
14
+ function encryptEscrowBytes(plaintext, password) {
15
+ if (!plaintext.length)
16
+ throw new ValidationError('certificate escrow plaintext is empty');
17
+ const secret = String(password ?? '').trim() || randomBytes(24).toString('base64url');
18
+ const salt = randomBytes(16);
19
+ const nonce = randomBytes(12);
20
+ const key = pbkdf2Sync(Buffer.from(secret, 'utf8'), salt, CERT_ESCROW_ITERATIONS, 32, 'sha256');
21
+ const cipher = createCipheriv('aes-256-gcm', key, nonce);
22
+ cipher.setAAD(CERT_ESCROW_AAD);
23
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]);
24
+ return {
25
+ envelope: { version: CERT_ESCROW_VERSION, alg: 'AES-256-GCM', kdf: 'PBKDF2-SHA256', iterations: CERT_ESCROW_ITERATIONS, salt: salt.toString('base64'), nonce: nonce.toString('base64'), ciphertext: ciphertext.toString('base64'), sha256: createHash('sha256').update(plaintext).digest('hex') },
26
+ password: secret,
27
+ };
28
+ }
29
+ function decryptEscrowBytes(envelope, password) {
30
+ if (!envelope || envelope.version !== CERT_ESCROW_VERSION || envelope.alg !== 'AES-256-GCM' || envelope.kdf !== 'PBKDF2-SHA256' || envelope.iterations !== CERT_ESCROW_ITERATIONS)
31
+ throw new ValidationError('unsupported certificate escrow envelope');
32
+ const salt = Buffer.from(String(envelope.salt ?? ''), 'base64');
33
+ const nonce = Buffer.from(String(envelope.nonce ?? ''), 'base64');
34
+ const ciphertext = Buffer.from(String(envelope.ciphertext ?? ''), 'base64');
35
+ if (salt.length !== 16 || nonce.length !== 12 || ciphertext.length <= 16)
36
+ throw new ValidationError('invalid certificate escrow fields');
37
+ const key = pbkdf2Sync(Buffer.from(String(password ?? ''), 'utf8'), salt, CERT_ESCROW_ITERATIONS, 32, 'sha256');
38
+ const tag = ciphertext.subarray(ciphertext.length - 16);
39
+ const cipher = createDecipheriv('aes-256-gcm', key, nonce);
40
+ cipher.setAAD(CERT_ESCROW_AAD);
41
+ cipher.setAuthTag(tag);
42
+ let plaintext;
43
+ try {
44
+ plaintext = Buffer.concat([cipher.update(ciphertext.subarray(0, -16)), cipher.final()]);
45
+ }
46
+ catch (error) {
47
+ throw new ValidationError(`certificate escrow decryption failed: ${String(error)}`);
48
+ }
49
+ if (createHash('sha256').update(plaintext).digest('hex') !== String(envelope.sha256 ?? '').toLowerCase())
50
+ throw new ValidationError('certificate escrow hash mismatch');
51
+ return plaintext;
52
+ }
53
+ export function encryptCertificate(certPem, password) {
54
+ return encryptEscrowBytes(Buffer.from(String(certPem ?? ''), 'utf8'), password);
55
+ }
56
+ export function decryptCertificate(envelope, password) {
57
+ return decryptEscrowBytes(envelope, password).toString('utf8');
58
+ }
59
+ export function encryptIdentity(identity, password) {
60
+ if (!identity || typeof identity !== 'object' || Array.isArray(identity))
61
+ throw new ValidationError('identity escrow package must be an object');
62
+ if (!String(identity.aid ?? '').trim() || !String(identity.private_key_pem ?? '').trim() || !String(identity.cert ?? '').trim())
63
+ throw new ValidationError('identity escrow package is incomplete');
64
+ return encryptEscrowBytes(Buffer.from(JSON.stringify(identity), 'utf8'), password);
65
+ }
66
+ export function decryptIdentity(envelope, password) {
67
+ let value;
68
+ try {
69
+ value = JSON.parse(decryptEscrowBytes(envelope, password).toString('utf8'));
70
+ }
71
+ catch (error) {
72
+ throw new ValidationError(`certificate escrow identity package is invalid JSON: ${String(error)}`);
73
+ }
74
+ if (!value || typeof value !== 'object' || Array.isArray(value))
75
+ throw new ValidationError('certificate escrow identity package must be an object');
76
+ const result = value;
77
+ if (!String(result.aid ?? '').trim() || !String(result.private_key_pem ?? '').trim() || !String(result.cert ?? '').trim())
78
+ throw new ValidationError('certificate escrow identity package is incomplete');
79
+ return result;
80
+ }
9
81
  export class OwnershipStatement {
10
82
  proofId;
11
83
  subjectAid;
12
84
  ownerAid;
13
85
  canonicalFact;
14
86
  canonicalStatement;
15
- factHash;
16
- statementHash;
17
- constructor(proofId, subjectAid, ownerAid) {
87
+ signerAid;
88
+ role;
89
+ extensions;
90
+ version;
91
+ signedAt;
92
+ constructor(proofId, subjectAid, ownerAid, signerAid = '', role = '', extensions, version = 1, signedAt = 0) {
18
93
  this.proofId = proofId;
19
94
  this.subjectAid = subjectAid;
20
95
  this.ownerAid = ownerAid;
96
+ this.signerAid = signerAid;
97
+ this.role = role;
98
+ this.extensions = extensions && Object.keys(extensions).length ? { ...extensions } : undefined;
99
+ this.version = version;
100
+ this.signedAt = signedAt;
21
101
  this.canonicalFact = canonicalJson({ subject_aid: subjectAid, owner_aid: ownerAid });
22
- this.canonicalStatement = canonicalJson({ proof_id: proofId, subject_aid: subjectAid, owner_aid: ownerAid });
23
- this.factHash = createHash('sha256').update(this.canonicalFact).digest('hex');
24
- this.statementHash = createHash('sha256').update(`${OWNERSHIP_RELATION_DOMAIN}${new TextDecoder().decode(this.canonicalStatement)}`, 'utf8').digest('hex');
102
+ const statement = { proof_id: proofId, subject_aid: subjectAid, owner_aid: ownerAid };
103
+ if (version === 2) {
104
+ statement.version = 2;
105
+ statement.signer_aid = signerAid;
106
+ statement.role = role;
107
+ if (this.extensions)
108
+ statement.extensions = this.extensions;
109
+ statement.signed_at = signedAt;
110
+ }
111
+ this.canonicalStatement = canonicalJson(statement);
25
112
  }
26
113
  static create(proofId, subjectAid, ownerAid) {
27
114
  const id = String(proofId ?? '').trim();
@@ -38,6 +125,44 @@ export class OwnershipStatement {
38
125
  }
39
126
  return new OwnershipStatement(id, subject, owner);
40
127
  }
128
+ static createSigned(proofId, subjectAid, ownerAid, options) {
129
+ const base = OwnershipStatement.create(proofId, subjectAid, ownerAid);
130
+ const signerAid = validateAIDFormat(options.signerAid, 'signer_aid');
131
+ const role = options.role;
132
+ const expected = role === 'subject' ? base.subjectAid : role === 'owner' ? base.ownerAid : '';
133
+ if (!expected)
134
+ throw new ValidationError('ownership signer role must be subject or owner');
135
+ if (signerAid !== expected)
136
+ throw new ValidationError('ownership signer does not match role');
137
+ if (options.extensions !== undefined && (!options.extensions || typeof options.extensions !== 'object' || Array.isArray(options.extensions))) {
138
+ throw new ValidationError('ownership extensions must be an object');
139
+ }
140
+ const signedAt = options.signedAt ?? Math.floor(Date.now() / 1000);
141
+ if (!Number.isSafeInteger(signedAt) || signedAt <= 0)
142
+ throw new ValidationError('signed_at must be a positive integer');
143
+ return new OwnershipStatement(base.proofId, base.subjectAid, base.ownerAid, signerAid, role, options.extensions, 2, signedAt);
144
+ }
145
+ static fromMapping(value) {
146
+ const version = Number(value.version ?? 1) || 1;
147
+ if (version === 2) {
148
+ if (!Number.isSafeInteger(value.signed_at) || Number(value.signed_at) <= 0)
149
+ throw new ValidationError('signed_at must be a positive integer');
150
+ return OwnershipStatement.createSigned(String(value.proof_id ?? ''), String(value.subject_aid ?? ''), String(value.owner_aid ?? ''), { signerAid: String(value.signer_aid ?? ''), role: String(value.role ?? ''), extensions: value.extensions, signedAt: value.signed_at });
151
+ }
152
+ return OwnershipStatement.create(String(value.proof_id ?? ''), String(value.subject_aid ?? ''), String(value.owner_aid ?? ''));
153
+ }
154
+ toMapping() {
155
+ const value = { proof_id: this.proofId, subject_aid: this.subjectAid, owner_aid: this.ownerAid };
156
+ if (this.version === 2) {
157
+ value.version = 2;
158
+ value.signer_aid = this.signerAid;
159
+ value.role = this.role;
160
+ if (this.extensions)
161
+ value.extensions = { ...this.extensions };
162
+ value.signed_at = this.signedAt;
163
+ }
164
+ return value;
165
+ }
41
166
  get signingBytes() {
42
167
  const prefix = new TextEncoder().encode(OWNERSHIP_RELATION_DOMAIN);
43
168
  const result = new Uint8Array(prefix.length + this.canonicalStatement.length);
@@ -46,11 +171,47 @@ export class OwnershipStatement {
46
171
  return result;
47
172
  }
48
173
  }
174
+ export function isOwnershipPayload(value) {
175
+ return !!value && typeof value === 'object' && !Array.isArray(value)
176
+ && String(value.type ?? '').trim() === OWNERSHIP_MESSAGE_TYPE;
177
+ }
178
+ export function ownershipMessageBody(message) {
179
+ if (!message || typeof message !== 'object' || Array.isArray(message))
180
+ return null;
181
+ const record = message;
182
+ if (record.payload && typeof record.payload === 'object' && !Array.isArray(record.payload)) {
183
+ return record.payload;
184
+ }
185
+ return isOwnershipPayload(record) ? record : null;
186
+ }
187
+ export function buildOwnershipMessage(action, options) {
188
+ const payload = {
189
+ type: OWNERSHIP_MESSAGE_TYPE,
190
+ action: String(action ?? '').trim(),
191
+ request_id: String(options.requestId ?? '').trim(),
192
+ proof_id: String(options.proofId ?? '').trim(),
193
+ subject_aid: String(options.subjectAid ?? '').trim().toLowerCase(),
194
+ owner_aid: String(options.ownerAid ?? '').trim().toLowerCase(),
195
+ };
196
+ for (const [key, value] of Object.entries(options)) {
197
+ if (!['requestId', 'proofId', 'subjectAid', 'ownerAid'].includes(key) && value !== undefined) {
198
+ payload[key] = value;
199
+ }
200
+ }
201
+ return payload;
202
+ }
49
203
  export function validateOwnershipFrontmatter(frontmatter, expectedAid) {
50
204
  const ownerPresent = Object.prototype.hasOwnProperty.call(frontmatter, 'owner');
51
205
  const proofPresent = Object.prototype.hasOwnProperty.call(frontmatter, 'ownership_proof');
52
- if (ownerPresent !== proofPresent)
53
- throw new ValidationError('owner and ownership_proof must appear together');
206
+ const releasePresent = Object.prototype.hasOwnProperty.call(frontmatter, 'ownership_release');
207
+ if (releasePresent) {
208
+ if (ownerPresent || proofPresent)
209
+ throw new ValidationError('ownership_release cannot be combined with owner or ownership_proof');
210
+ validateOwnershipRelease(frontmatter.ownership_release, String(frontmatter.aid ?? expectedAid ?? ''));
211
+ return;
212
+ }
213
+ if (proofPresent && !ownerPresent)
214
+ throw new ValidationError('ownership_proof requires owner');
54
215
  const typeValue = String(frontmatter.type ?? '').trim().toLowerCase();
55
216
  if (typeValue === 'human' && (ownerPresent || proofPresent))
56
217
  throw new ValidationError('human AID cannot specify owner');
@@ -62,28 +223,102 @@ export function validateOwnershipFrontmatter(frontmatter, expectedAid) {
62
223
  throw new ValidationError('owner and subject AID must be lowercase');
63
224
  if (expectedAid && aid !== expectedAid.trim().toLowerCase())
64
225
  throw new ValidationError('ownership subject AID does not match expected AID');
226
+ if (!proofPresent)
227
+ return;
65
228
  if (!frontmatter.ownership_proof || typeof frontmatter.ownership_proof !== 'object' || Array.isArray(frontmatter.ownership_proof))
66
229
  throw new ValidationError('ownership_proof must be an object');
67
230
  const raw = frontmatter.ownership_proof;
68
- const allowed = new Set(['proof_id', 'subject_aid', 'owner_aid', 'fact_hash', 'statement_hash', 'subject_signature', 'owner_signature']);
231
+ const allowed = new Set(['proof_id', 'subject_aid', 'owner_aid', 'subject_signature', 'owner_signature']);
69
232
  if (Object.keys(raw).some((key) => !allowed.has(key)))
70
233
  throw new ValidationError('ownership_proof contains unknown fields');
71
- const statement = OwnershipStatement.create(String(raw.proof_id ?? ''), String(raw.subject_aid ?? ''), String(raw.owner_aid ?? ''));
234
+ if (raw.subject_aid !== undefined && raw.subject_aid !== aid || raw.owner_aid !== undefined && raw.owner_aid !== owner)
235
+ throw new ValidationError('ownership_proof does not match agent.md owner');
236
+ if (!('proof_id' in raw) && Object.keys(raw).every((key) => ['subject_aid', 'owner_aid'].includes(key)))
237
+ return;
238
+ const statement = OwnershipStatement.create(String(raw.proof_id ?? ''), String(raw.subject_aid ?? aid), String(raw.owner_aid ?? owner));
72
239
  if (statement.subjectAid !== aid || statement.ownerAid !== owner)
73
240
  throw new ValidationError('ownership_proof does not match agent.md owner');
74
- if (raw.fact_hash !== undefined && String(raw.fact_hash).toLowerCase() !== statement.factHash)
75
- throw new ValidationError('fact_hash mismatch');
76
- if (raw.statement_hash !== undefined && String(raw.statement_hash).toLowerCase() !== statement.statementHash)
77
- throw new ValidationError('statement_hash mismatch');
78
- const subjectSignature = raw.subject_signature;
79
- if (!subjectSignature || typeof subjectSignature !== 'object' || Object.keys(subjectSignature).some((key) => !['cert_fingerprint', 'signature'].includes(key)) || !validSignature(subjectSignature))
80
- throw new ValidationError('subject_signature is invalid');
241
+ if ('subject_signature' in raw) {
242
+ const subjectSignature = raw.subject_signature;
243
+ if (!subjectSignature || typeof subjectSignature !== 'object' || Array.isArray(subjectSignature) || Object.keys(subjectSignature).some((key) => !['cert_fingerprint', 'signature', 'signer_aid', 'role', 'statement'].includes(key)) || !validSignature(subjectSignature))
244
+ throw new ValidationError('subject_signature is invalid');
245
+ validateNestedSignature(subjectSignature, statement, aid, 'subject', 'subject_signature');
246
+ }
81
247
  if (aid === owner) {
82
248
  if (raw.owner_signature !== undefined)
83
249
  throw new ValidationError('self-owner proof must not contain owner_signature');
84
250
  }
85
- else if (!raw.owner_signature || !validSignature(raw.owner_signature)) {
86
- throw new ValidationError('owner_signature is required');
251
+ else if ('owner_signature' in raw) {
252
+ if (!raw.owner_signature || typeof raw.owner_signature !== 'object' || Array.isArray(raw.owner_signature) || !validSignature(raw.owner_signature))
253
+ throw new ValidationError('owner_signature is invalid');
254
+ if (Object.keys(raw.owner_signature).some((key) => !['cert_fingerprint', 'signature', 'signer_aid', 'role', 'statement'].includes(key)))
255
+ throw new ValidationError('owner_signature contains unknown fields');
256
+ validateNestedSignature(raw.owner_signature, statement, owner, 'owner', 'owner_signature');
257
+ }
258
+ }
259
+ export function createOwnershipReleaseStatement(proofId, subjectAid, ownerAid, signedAt = Math.floor(Date.now() / 1000)) {
260
+ const relation = OwnershipStatement.create(proofId, subjectAid, ownerAid);
261
+ if (!Number.isSafeInteger(signedAt) || signedAt <= 0)
262
+ throw new ValidationError('signed_at must be a positive integer');
263
+ return { version: 1, action: 'release', proof_id: relation.proofId, subject_aid: relation.subjectAid, owner_aid: relation.ownerAid, signer_aid: relation.ownerAid, role: 'owner', signed_at: signedAt };
264
+ }
265
+ function parseOwnershipReleaseStatement(value) {
266
+ if (!value || typeof value !== 'object' || Array.isArray(value))
267
+ throw new ValidationError('ownership_release statement is invalid');
268
+ const raw = value;
269
+ const allowed = new Set(['version', 'action', 'proof_id', 'subject_aid', 'owner_aid', 'signer_aid', 'role', 'signed_at']);
270
+ if (Object.keys(raw).some((key) => !allowed.has(key)))
271
+ throw new ValidationError('ownership_release statement contains unknown fields');
272
+ const statement = createOwnershipReleaseStatement(String(raw.proof_id ?? ''), String(raw.subject_aid ?? ''), String(raw.owner_aid ?? ''), Number(raw.signed_at));
273
+ if (raw.version !== 1 || raw.action !== 'release' || String(raw.signer_aid ?? '').trim().toLowerCase() !== statement.owner_aid || raw.role !== 'owner')
274
+ throw new ValidationError('ownership_release statement is invalid');
275
+ return statement;
276
+ }
277
+ function ownershipReleaseBytes(statement) {
278
+ const prefix = new TextEncoder().encode(OWNERSHIP_RELEASE_DOMAIN);
279
+ const canonical = canonicalJson(statement);
280
+ const result = new Uint8Array(prefix.length + canonical.length);
281
+ result.set(prefix);
282
+ result.set(canonical, prefix.length);
283
+ return result;
284
+ }
285
+ function validateOwnershipRelease(value, expectedSubject) {
286
+ if (!value || typeof value !== 'object' || Array.isArray(value))
287
+ throw new ValidationError('ownership_release must be an object');
288
+ const release = value;
289
+ if (Object.keys(release).some((key) => !['cert_fingerprint', 'signature', 'signer_aid', 'role', 'statement'].includes(key)))
290
+ throw new ValidationError('ownership_release contains unknown fields');
291
+ const signature = release;
292
+ if (!validSignature(signature) || !signature.statement)
293
+ throw new ValidationError('ownership_release signature is invalid');
294
+ const statement = parseOwnershipReleaseStatement(signature.statement);
295
+ if (expectedSubject && statement.subject_aid !== expectedSubject.trim().toLowerCase())
296
+ throw new ValidationError('ownership_release subject does not match agent.md AID');
297
+ if (signature.signer_aid && signature.signer_aid.trim().toLowerCase() !== statement.owner_aid)
298
+ throw new ValidationError('ownership_release signer does not match owner');
299
+ if (signature.role && signature.role !== 'owner')
300
+ throw new ValidationError('ownership_release role must be owner');
301
+ signature.statement = statement;
302
+ return signature;
303
+ }
304
+ export function signOwnershipRelease(aid, statement) {
305
+ const signed = aid.sign(Buffer.from(ownershipReleaseBytes(statement)));
306
+ if (!signed.ok || !signed.data)
307
+ throw new ValidationError(signed.error?.message ?? 'ownership release signature failed');
308
+ if (!FINGERPRINT_RE.test(aid.certFingerprint))
309
+ throw new ValidationError('certificate fingerprint is unavailable');
310
+ return { cert_fingerprint: aid.certFingerprint, signature: signed.data.signature, signer_aid: statement.owner_aid, role: 'owner', statement };
311
+ }
312
+ export function verifyOwnershipRelease(certPem, value) {
313
+ try {
314
+ const release = validateOwnershipRelease(value, '');
315
+ const statement = release.statement;
316
+ return certFingerprint(certPem).toLowerCase() === release.cert_fingerprint.toLowerCase()
317
+ && certCommonName(certPem).toLowerCase() === statement.owner_aid
318
+ && verifySignatureWithCert(certPem, Buffer.from(release.signature, 'base64'), Buffer.from(ownershipReleaseBytes(statement)));
319
+ }
320
+ catch {
321
+ return false;
87
322
  }
88
323
  }
89
324
  export function validateOwnershipProof(proof, expectedSubject, expectedOwner) {
@@ -98,12 +333,9 @@ export function validateOwnershipProof(proof, expectedSubject, expectedOwner) {
98
333
  }
99
334
  if (proof.statement.subjectAid !== subject || proof.statement.ownerAid !== owner)
100
335
  throw new ValidationError('ownership proof statement does not match owner or subject');
101
- if (proof.fact_hash && proof.fact_hash.toLowerCase() !== proof.statement.factHash)
102
- throw new ValidationError('fact_hash mismatch');
103
- if (proof.statement_hash && proof.statement_hash.toLowerCase() !== proof.statement.statementHash)
104
- throw new ValidationError('statement_hash mismatch');
105
336
  if (!validSignature(proof.subject_signature))
106
337
  throw new ValidationError('subject_signature is invalid');
338
+ validateNestedSignature(proof.subject_signature, proof.statement, subject, 'subject', 'subject_signature');
107
339
  if (subject === owner) {
108
340
  if (proof.owner_signature)
109
341
  throw new ValidationError('self-owner proof must not contain owner_signature');
@@ -111,30 +343,94 @@ export function validateOwnershipProof(proof, expectedSubject, expectedOwner) {
111
343
  else if (!proof.owner_signature || !validSignature(proof.owner_signature)) {
112
344
  throw new ValidationError('owner_signature is required');
113
345
  }
346
+ else {
347
+ validateNestedSignature(proof.owner_signature, proof.statement, owner, 'owner', 'owner_signature');
348
+ }
349
+ }
350
+ function validateNestedSignature(signature, relation, expectedSigner, expectedRole, name) {
351
+ if (signature.statement === undefined)
352
+ return;
353
+ if (!signature.statement || typeof signature.statement !== 'object' || Array.isArray(signature.statement))
354
+ throw new ValidationError(`${name} statement is invalid`);
355
+ const statement = OwnershipStatement.fromMapping(signature.statement);
356
+ if (statement.version !== 2 || statement.proofId !== relation.proofId || statement.subjectAid !== relation.subjectAid || statement.ownerAid !== relation.ownerAid)
357
+ throw new ValidationError(`${name} statement does not match ownership relation`);
358
+ if (statement.signerAid !== expectedSigner || statement.role !== expectedRole)
359
+ throw new ValidationError(`${name} statement signer does not match role`);
360
+ if (signature.signer_aid && signature.signer_aid !== statement.signerAid)
361
+ throw new ValidationError(`${name} signer_aid mismatch`);
362
+ if (signature.role && signature.role !== statement.role)
363
+ throw new ValidationError(`${name} role mismatch`);
114
364
  }
115
365
  function validSignature(signature) {
116
366
  return !!signature && FINGERPRINT_RE.test(String(signature?.cert_fingerprint ?? '').trim()) && isStrictBase64(String(signature?.signature ?? ''));
117
367
  }
118
368
  export function signOwnershipStatement(aid, statement) {
119
- const result = aid.sign(statement.signingBytes);
369
+ const result = aid.sign(Buffer.from(statement.signingBytes));
120
370
  if (!result.ok || !result.data)
121
371
  throw new ValidationError(result.error?.message ?? 'ownership signature failed');
122
372
  if (!FINGERPRINT_RE.test(aid.certFingerprint))
123
373
  throw new ValidationError('certificate fingerprint is unavailable');
124
- return { cert_fingerprint: aid.certFingerprint, signature: result.data.signature };
374
+ return {
375
+ cert_fingerprint: aid.certFingerprint,
376
+ signature: result.data.signature,
377
+ ...(statement.version === 2 ? { signer_aid: statement.signerAid, role: statement.role, statement: statement.toMapping() } : {}),
378
+ };
125
379
  }
126
380
  export function verifyOwnershipSignature(certPem, statement, signature) {
127
381
  if (!validSignature(signature))
128
382
  return false;
129
- if (!certFingerprint(certPem).toLowerCase().includes(signature.cert_fingerprint.toLowerCase().replace('sha256:', '')))
383
+ try {
384
+ const signedStatement = signature.statement ? OwnershipStatement.fromMapping(signature.statement) : statement;
385
+ if (signedStatement.version !== 2 || signedStatement.proofId !== statement.proofId || signedStatement.subjectAid !== statement.subjectAid || signedStatement.ownerAid !== statement.ownerAid)
386
+ return false;
387
+ if (signature.signer_aid && signature.signer_aid !== signedStatement.signerAid || signature.role && signature.role !== signedStatement.role)
388
+ return false;
389
+ if (certFingerprint(certPem).toLowerCase() !== signature.cert_fingerprint.toLowerCase() || certCommonName(certPem).toLowerCase() !== signedStatement.signerAid)
390
+ return false;
391
+ const cert = new X509Certificate(certPem);
392
+ const signedAt = signedStatement.signedAt * 1000;
393
+ if (signedAt < new Date(cert.validFrom).getTime() || signedAt > new Date(cert.validTo).getTime())
394
+ return false;
395
+ return verifySignatureWithCert(certPem, Buffer.from(signature.signature, 'base64'), Buffer.from(signedStatement.signingBytes));
396
+ }
397
+ catch {
130
398
  return false;
131
- return verifySignatureWithCert(certPem, Buffer.from(signature.signature, 'base64'), Buffer.from(statement.signingBytes));
399
+ }
132
400
  }
133
401
  export function verifyOwnershipProof(proof, subjectCertPem, ownerCertPem) {
134
402
  validateOwnershipProof(proof, proof.statement.subjectAid, proof.statement.ownerAid);
135
- if (!verifyOwnershipSignature(subjectCertPem, proof.statement, proof.subject_signature))
403
+ if (certCommonName(subjectCertPem).toLowerCase() !== proof.statement.subjectAid.toLowerCase() || !verifyOwnershipSignature(subjectCertPem, proof.statement, proof.subject_signature))
136
404
  return false;
137
405
  return proof.statement.subjectAid === proof.statement.ownerAid
138
- || (!!ownerCertPem && !!proof.owner_signature && verifyOwnershipSignature(ownerCertPem, proof.statement, proof.owner_signature));
406
+ || (!!ownerCertPem && !!proof.owner_signature && certCommonName(ownerCertPem).toLowerCase() === proof.statement.ownerAid.toLowerCase() && verifyOwnershipSignature(ownerCertPem, proof.statement, proof.owner_signature));
407
+ }
408
+ export function verifyOwnershipFrontmatterStatus(frontmatter, subjectCertPem, ownerCertPem) {
409
+ try {
410
+ validateOwnershipFrontmatter(frontmatter);
411
+ if (!Object.prototype.hasOwnProperty.call(frontmatter, 'owner')) {
412
+ if (frontmatter.ownership_release !== undefined)
413
+ return ownerCertPem && verifyOwnershipRelease(ownerCertPem, frontmatter.ownership_release) ? 'released' : 'invalid';
414
+ return 'unbound';
415
+ }
416
+ const raw = (frontmatter.ownership_proof ?? {});
417
+ const subjectSignature = raw.subject_signature;
418
+ const ownerSignature = raw.owner_signature;
419
+ if (!subjectSignature && !ownerSignature)
420
+ return 'incomplete';
421
+ const statement = OwnershipStatement.create(String(raw.proof_id ?? ''), String(raw.subject_aid ?? frontmatter.aid), String(raw.owner_aid ?? frontmatter.owner));
422
+ if (subjectSignature && (!subjectCertPem || !verifyOwnershipSignature(subjectCertPem, statement, subjectSignature)))
423
+ return 'invalid';
424
+ if (ownerSignature && (!ownerCertPem || !verifyOwnershipSignature(ownerCertPem, statement, ownerSignature)))
425
+ return 'invalid';
426
+ return subjectSignature && (statement.subjectAid === statement.ownerAid || ownerSignature) ? 'complete' : 'incomplete';
427
+ }
428
+ catch {
429
+ return 'invalid';
430
+ }
431
+ }
432
+ export function verifyOwnershipFrontmatter(frontmatter, subjectCertPem, ownerCertPem) {
433
+ const status = verifyOwnershipFrontmatterStatus(frontmatter, subjectCertPem, ownerCertPem);
434
+ return status === 'unbound' || status === 'complete' || status === 'released';
139
435
  }
140
436
  //# sourceMappingURL=ownership-proof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ownership-proof.js","sourceRoot":"","sources":["../src/ownership-proof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ownership-proof.js","sourceRoot":"","sources":["../src/ownership-proof.ts"],"names":[],"mappings":"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"}