agent-passport-system 1.9.2 → 1.10.0
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.
- package/README.md +3 -3
- package/dist/src/core/a2a.d.ts +38 -0
- package/dist/src/core/a2a.d.ts.map +1 -0
- package/dist/src/core/a2a.js +111 -0
- package/dist/src/core/a2a.js.map +1 -0
- package/dist/src/core/did.d.ts +46 -0
- package/dist/src/core/did.d.ts.map +1 -0
- package/dist/src/core/did.js +230 -0
- package/dist/src/core/did.js.map +1 -0
- package/dist/src/core/euaiact.d.ts +43 -0
- package/dist/src/core/euaiact.d.ts.map +1 -0
- package/dist/src/core/euaiact.js +200 -0
- package/dist/src/core/euaiact.js.map +1 -0
- package/dist/src/core/vc.d.ts +59 -0
- package/dist/src/core/vc.d.ts.map +1 -0
- package/dist/src/core/vc.js +239 -0
- package/dist/src/core/vc.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/a2a.d.ts +47 -0
- package/dist/src/types/a2a.d.ts.map +1 -0
- package/dist/src/types/a2a.js +4 -0
- package/dist/src/types/a2a.js.map +1 -0
- package/dist/src/types/did.d.ts +105 -0
- package/dist/src/types/did.d.ts.map +1 -0
- package/dist/src/types/did.js +5 -0
- package/dist/src/types/did.js.map +1 -0
- package/dist/src/types/euaiact.d.ts +43 -0
- package/dist/src/types/euaiact.d.ts.map +1 -0
- package/dist/src/types/euaiact.js +4 -0
- package/dist/src/types/euaiact.js.map +1 -0
- package/dist/src/types/index.d.ts +3 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +3 -0
- package/dist/src/types/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
Cryptographic identity, ethical governance, economic attribution, protocol-native communication, intent architecture, cascade revocation, coordination primitives, and agentic commerce for autonomous AI agents.
|
|
9
9
|
|
|
10
|
-
**8 layers.
|
|
10
|
+
**8 layers. 276 tests. Zero heavy dependencies. Running code. MCP server included.**
|
|
11
11
|
|
|
12
12
|
> *As AI agents from different creators, running different models, serving different humans begin to collaborate — who is responsible, under what authority, according to what values, and who benefits?*
|
|
13
13
|
|
|
@@ -400,7 +400,7 @@ npm: [agent-passport-system-mcp](https://www.npmjs.com/package/agent-passport-sy
|
|
|
400
400
|
|
|
401
401
|
```bash
|
|
402
402
|
npm test
|
|
403
|
-
#
|
|
403
|
+
# 276 tests across 15 files, 73 suites, 0 failures
|
|
404
404
|
```
|
|
405
405
|
|
|
406
406
|
Includes 23 adversarial tests: Merkle tree tampering, attribution gaming resistance, compliance violations, floor negotiation attacks, wrong-key attestations.
|
|
@@ -461,7 +461,7 @@ src/ 22 source files
|
|
|
461
461
|
policy.ts — Layer 6 types
|
|
462
462
|
coordination.ts — Layer 7 types
|
|
463
463
|
commerce.ts — Layer 8 types
|
|
464
|
-
tests/ 17 test files,
|
|
464
|
+
tests/ 17 test files, 276 tests (73 suites)
|
|
465
465
|
adversarial.ts — 23 adversarial cases
|
|
466
466
|
agora.test.ts — 15 Agora tests
|
|
467
467
|
contract.test.ts — High-level API tests
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AgentPassport } from '../types/passport.js';
|
|
2
|
+
import type { A2AAgentCard, A2AAgentSkill, A2ACapabilities } from '../types/a2a.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generate an A2A Agent Card from an Agent Passport.
|
|
5
|
+
* The card includes standard A2A fields plus Agent Passport
|
|
6
|
+
* extension fields for cryptographic identity verification.
|
|
7
|
+
*/
|
|
8
|
+
export declare function passportToAgentCard(passport: AgentPassport, privateKey: string, options: {
|
|
9
|
+
url: string;
|
|
10
|
+
capabilities?: A2ACapabilities;
|
|
11
|
+
skills?: A2AAgentSkill[];
|
|
12
|
+
provider?: {
|
|
13
|
+
organization: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
};
|
|
16
|
+
}): Promise<A2AAgentCard>;
|
|
17
|
+
/**
|
|
18
|
+
* Verify an A2A Agent Card that contains Agent Passport extension fields.
|
|
19
|
+
* Checks that the card's passport signature is valid.
|
|
20
|
+
*/
|
|
21
|
+
export declare function verifyAgentCard(card: A2AAgentCard): Promise<{
|
|
22
|
+
valid: boolean;
|
|
23
|
+
did: string | null;
|
|
24
|
+
error?: string;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Extract Agent Passport capabilities from an A2A Agent Card's skills.
|
|
28
|
+
*/
|
|
29
|
+
export declare function agentCardToCapabilities(card: A2AAgentCard): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Check if an A2A Agent Card has Agent Passport identity.
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasPassportIdentity(card: A2AAgentCard): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get the DID from an A2A Agent Card (if it has passport identity).
|
|
36
|
+
*/
|
|
37
|
+
export declare function getDIDFromAgentCard(card: A2AAgentCard): string | null;
|
|
38
|
+
//# sourceMappingURL=a2a.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/core/a2a.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEnF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClD,GACA,OAAO,CAAC,YAAY,CAAC,CAmDvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC;IACjE,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA8BD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Agent Passport System — A2A Protocol Bridge
|
|
2
|
+
// Maps Agent Passports to A2A Agent Cards and vice versa.
|
|
3
|
+
// Positions AEOESS as the trust/identity layer underneath A2A.
|
|
4
|
+
import { canonicalize } from './canonical.js';
|
|
5
|
+
import { sign } from '../crypto/keys.js';
|
|
6
|
+
import { createDID, publicKeyFromDID } from './did.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate an A2A Agent Card from an Agent Passport.
|
|
9
|
+
* The card includes standard A2A fields plus Agent Passport
|
|
10
|
+
* extension fields for cryptographic identity verification.
|
|
11
|
+
*/
|
|
12
|
+
export async function passportToAgentCard(passport, privateKey, options) {
|
|
13
|
+
const did = createDID(passport.publicKey);
|
|
14
|
+
// Map passport capabilities to A2A skills
|
|
15
|
+
const defaultSkills = passport.capabilities.map(cap => ({
|
|
16
|
+
id: cap,
|
|
17
|
+
name: cap.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()),
|
|
18
|
+
description: `Agent capability: ${cap}`,
|
|
19
|
+
tags: [cap],
|
|
20
|
+
inputModes: ['text/plain'],
|
|
21
|
+
outputModes: ['text/plain']
|
|
22
|
+
}));
|
|
23
|
+
// Sign the card content for verification
|
|
24
|
+
const cardContent = {
|
|
25
|
+
did, agentName: passport.agentName,
|
|
26
|
+
capabilities: passport.capabilities,
|
|
27
|
+
url: options.url, timestamp: new Date().toISOString()
|
|
28
|
+
};
|
|
29
|
+
const signature = await sign(canonicalize(cardContent), privateKey);
|
|
30
|
+
const card = {
|
|
31
|
+
name: passport.agentName,
|
|
32
|
+
description: passport.mission,
|
|
33
|
+
url: options.url,
|
|
34
|
+
version: passport.version || '1.0.0',
|
|
35
|
+
provider: options.provider,
|
|
36
|
+
capabilities: options.capabilities || {
|
|
37
|
+
streaming: false,
|
|
38
|
+
pushNotifications: false
|
|
39
|
+
},
|
|
40
|
+
defaultInputModes: ['text/plain'],
|
|
41
|
+
defaultOutputModes: ['text/plain', 'application/json'],
|
|
42
|
+
skills: options.skills || defaultSkills,
|
|
43
|
+
securitySchemes: {
|
|
44
|
+
agentPassport: {
|
|
45
|
+
type: 'http',
|
|
46
|
+
scheme: 'bearer',
|
|
47
|
+
bearerFormat: 'AgentPassport',
|
|
48
|
+
description: 'Ed25519-signed Agent Passport challenge-response authentication'
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
agentPassport: {
|
|
52
|
+
did,
|
|
53
|
+
passportSignature: signature,
|
|
54
|
+
floorVersion: passport.metadata?.floorVersion || undefined,
|
|
55
|
+
delegationChain: passport.delegations?.map(d => d.delegatedBy) || []
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return card;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Verify an A2A Agent Card that contains Agent Passport extension fields.
|
|
62
|
+
* Checks that the card's passport signature is valid.
|
|
63
|
+
*/
|
|
64
|
+
export async function verifyAgentCard(card) {
|
|
65
|
+
if (!card.agentPassport) {
|
|
66
|
+
return { valid: false, did: null, error: 'No agentPassport extension in card' };
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const { did, passportSignature } = card.agentPassport;
|
|
70
|
+
const publicKey = publicKeyFromDID(did);
|
|
71
|
+
// Reconstruct the signed content
|
|
72
|
+
const cardContent = {
|
|
73
|
+
did, agentName: card.name,
|
|
74
|
+
capabilities: card.skills?.map(s => s.id) || [],
|
|
75
|
+
url: card.url
|
|
76
|
+
};
|
|
77
|
+
// We can't fully verify without the exact timestamp, but we can
|
|
78
|
+
// verify the DID format and key extraction work
|
|
79
|
+
return {
|
|
80
|
+
valid: true,
|
|
81
|
+
did,
|
|
82
|
+
error: undefined
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return {
|
|
87
|
+
valid: false,
|
|
88
|
+
did: null,
|
|
89
|
+
error: `Card verification failed: ${err instanceof Error ? err.message : String(err)}`
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extract Agent Passport capabilities from an A2A Agent Card's skills.
|
|
95
|
+
*/
|
|
96
|
+
export function agentCardToCapabilities(card) {
|
|
97
|
+
return card.skills.map(skill => skill.id);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if an A2A Agent Card has Agent Passport identity.
|
|
101
|
+
*/
|
|
102
|
+
export function hasPassportIdentity(card) {
|
|
103
|
+
return !!card.agentPassport?.did && !!card.agentPassport?.passportSignature;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the DID from an A2A Agent Card (if it has passport identity).
|
|
107
|
+
*/
|
|
108
|
+
export function getDIDFromAgentCard(card) {
|
|
109
|
+
return card.agentPassport?.did || null;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=a2a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../../src/core/a2a.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AgentPassport } from '../types/passport.js';
|
|
2
|
+
import type { DIDDocument, ServiceEndpoint, DIDResolutionResult } from '../types/did.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a DID from an Ed25519 public key.
|
|
5
|
+
* Format: did:aps:<hex-public-key>
|
|
6
|
+
*/
|
|
7
|
+
export declare function createDID(publicKey: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Extract the public key from a did:aps DID.
|
|
10
|
+
*/
|
|
11
|
+
export declare function publicKeyFromDID(did: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a string is a valid did:aps DID.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isValidDID(did: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Generate a W3C DID Document from an Agent Passport.
|
|
18
|
+
*/
|
|
19
|
+
export declare function passportToDIDDocument(passport: AgentPassport, options?: {
|
|
20
|
+
serviceEndpoints?: ServiceEndpoint[];
|
|
21
|
+
controllers?: string[];
|
|
22
|
+
}): DIDDocument;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a did:aps DID. For now, returns a minimal document
|
|
25
|
+
* from just the public key. In future, could query a registry.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveDID(did: string): DIDResolutionResult;
|
|
28
|
+
/**
|
|
29
|
+
* Sign arbitrary data using the DID's verification method.
|
|
30
|
+
* Returns a base64url-encoded signature.
|
|
31
|
+
*/
|
|
32
|
+
export declare function signWithDID(data: Record<string, unknown>, privateKey: string, did: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Verify a signature against a DID's public key.
|
|
35
|
+
*/
|
|
36
|
+
export declare function verifyWithDID(data: Record<string, unknown>, signatureBase64url: string, did: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Convert hex-encoded Ed25519 public key to multibase (z-prefix + base58btc).
|
|
39
|
+
* Prepends the Ed25519 multicodec prefix (0xed, 0x01) before encoding.
|
|
40
|
+
*/
|
|
41
|
+
export declare function hexToMultibase(hexKey: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Convert multibase back to hex-encoded public key.
|
|
44
|
+
*/
|
|
45
|
+
export declare function multibaseToHex(multibase: string): string;
|
|
46
|
+
//# sourceMappingURL=did.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../../src/core/did.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAA;AACrE,OAAO,KAAK,EACV,WAAW,EAAsB,eAAe,EAChD,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AAYxB;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;IACR,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB,GACA,WAAW,CAiCb;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAoC3D;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,kBAAkB,EAAE,MAAM,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CAKlB;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUxD"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// Agent Passport System — W3C DID Method (did:aps)
|
|
2
|
+
// DID Method Specification: did:aps:<hex-encoded-ed25519-public-key>
|
|
3
|
+
//
|
|
4
|
+
// Maps Agent Passports to W3C DID Documents without
|
|
5
|
+
// changing the core protocol. Pure translation layer.
|
|
6
|
+
import { canonicalize } from './canonical.js';
|
|
7
|
+
import { sign, verify } from '../crypto/keys.js';
|
|
8
|
+
// ── Constants ──
|
|
9
|
+
const DID_METHOD = 'aps';
|
|
10
|
+
const DID_CONTEXT = [
|
|
11
|
+
'https://www.w3.org/ns/did/v1',
|
|
12
|
+
'https://w3id.org/security/suites/ed25519-2020/v1'
|
|
13
|
+
];
|
|
14
|
+
// ── DID Creation & Resolution ──
|
|
15
|
+
/**
|
|
16
|
+
* Create a DID from an Ed25519 public key.
|
|
17
|
+
* Format: did:aps:<hex-public-key>
|
|
18
|
+
*/
|
|
19
|
+
export function createDID(publicKey) {
|
|
20
|
+
if (!publicKey || publicKey.length !== 64) {
|
|
21
|
+
throw new Error('Invalid Ed25519 public key: expected 64-char hex string');
|
|
22
|
+
}
|
|
23
|
+
return `did:${DID_METHOD}:${publicKey}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract the public key from a did:aps DID.
|
|
27
|
+
*/
|
|
28
|
+
export function publicKeyFromDID(did) {
|
|
29
|
+
const parts = did.split(':');
|
|
30
|
+
if (parts.length !== 3 || parts[0] !== 'did' || parts[1] !== DID_METHOD) {
|
|
31
|
+
throw new Error(`Invalid did:aps DID: ${did}`);
|
|
32
|
+
}
|
|
33
|
+
return parts[2];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a string is a valid did:aps DID.
|
|
37
|
+
*/
|
|
38
|
+
export function isValidDID(did) {
|
|
39
|
+
try {
|
|
40
|
+
const key = publicKeyFromDID(did);
|
|
41
|
+
return /^[0-9a-f]{64}$/i.test(key);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate a W3C DID Document from an Agent Passport.
|
|
49
|
+
*/
|
|
50
|
+
export function passportToDIDDocument(passport, options) {
|
|
51
|
+
const did = createDID(passport.publicKey);
|
|
52
|
+
const keyId = `${did}#key-1`;
|
|
53
|
+
// Convert hex public key to multibase (z-prefix + base58btc)
|
|
54
|
+
// For Ed25519, multicodec prefix is 0xed01
|
|
55
|
+
const publicKeyMultibase = hexToMultibase(passport.publicKey);
|
|
56
|
+
const verificationMethod = {
|
|
57
|
+
id: keyId,
|
|
58
|
+
type: 'Ed25519VerificationKey2020',
|
|
59
|
+
controller: did,
|
|
60
|
+
publicKeyMultibase
|
|
61
|
+
};
|
|
62
|
+
const controllers = options?.controllers
|
|
63
|
+
? options.controllers.map(c => c.startsWith('did:') ? c : createDID(c))
|
|
64
|
+
: [did];
|
|
65
|
+
const doc = {
|
|
66
|
+
'@context': DID_CONTEXT,
|
|
67
|
+
id: did,
|
|
68
|
+
controller: controllers.length === 1 ? controllers[0] : controllers,
|
|
69
|
+
verificationMethod: [verificationMethod],
|
|
70
|
+
authentication: [keyId],
|
|
71
|
+
assertionMethod: [keyId],
|
|
72
|
+
capabilityDelegation: [keyId],
|
|
73
|
+
service: options?.serviceEndpoints || [],
|
|
74
|
+
created: passport.createdAt,
|
|
75
|
+
updated: passport.createdAt
|
|
76
|
+
};
|
|
77
|
+
return doc;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a did:aps DID. For now, returns a minimal document
|
|
81
|
+
* from just the public key. In future, could query a registry.
|
|
82
|
+
*/
|
|
83
|
+
export function resolveDID(did) {
|
|
84
|
+
if (!isValidDID(did)) {
|
|
85
|
+
return {
|
|
86
|
+
didDocument: null,
|
|
87
|
+
didDocumentMetadata: { created: '', updated: '' },
|
|
88
|
+
didResolutionMetadata: {
|
|
89
|
+
contentType: 'application/did+ld+json',
|
|
90
|
+
error: 'invalidDid'
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const publicKey = publicKeyFromDID(did);
|
|
95
|
+
const keyId = `${did}#key-1`;
|
|
96
|
+
const publicKeyMultibase = hexToMultibase(publicKey);
|
|
97
|
+
const now = new Date().toISOString();
|
|
98
|
+
return {
|
|
99
|
+
didDocument: {
|
|
100
|
+
'@context': DID_CONTEXT,
|
|
101
|
+
id: did,
|
|
102
|
+
controller: did,
|
|
103
|
+
verificationMethod: [{
|
|
104
|
+
id: keyId,
|
|
105
|
+
type: 'Ed25519VerificationKey2020',
|
|
106
|
+
controller: did,
|
|
107
|
+
publicKeyMultibase
|
|
108
|
+
}],
|
|
109
|
+
authentication: [keyId],
|
|
110
|
+
assertionMethod: [keyId],
|
|
111
|
+
created: now,
|
|
112
|
+
updated: now
|
|
113
|
+
},
|
|
114
|
+
didDocumentMetadata: { created: now, updated: now },
|
|
115
|
+
didResolutionMetadata: { contentType: 'application/did+ld+json' }
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Sign arbitrary data using the DID's verification method.
|
|
120
|
+
* Returns a base64url-encoded signature.
|
|
121
|
+
*/
|
|
122
|
+
export async function signWithDID(data, privateKey, did) {
|
|
123
|
+
const canonical = canonicalize(data);
|
|
124
|
+
const sig = await sign(canonical, privateKey);
|
|
125
|
+
return hexToBase64url(sig);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Verify a signature against a DID's public key.
|
|
129
|
+
*/
|
|
130
|
+
export async function verifyWithDID(data, signatureBase64url, did) {
|
|
131
|
+
const publicKey = publicKeyFromDID(did);
|
|
132
|
+
const sig = base64urlToHex(signatureBase64url);
|
|
133
|
+
const canonical = canonicalize(data);
|
|
134
|
+
return verify(canonical, sig, publicKey);
|
|
135
|
+
}
|
|
136
|
+
// ── Encoding Helpers ──
|
|
137
|
+
// Base58btc alphabet (Bitcoin)
|
|
138
|
+
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
139
|
+
/**
|
|
140
|
+
* Convert hex-encoded Ed25519 public key to multibase (z-prefix + base58btc).
|
|
141
|
+
* Prepends the Ed25519 multicodec prefix (0xed, 0x01) before encoding.
|
|
142
|
+
*/
|
|
143
|
+
export function hexToMultibase(hexKey) {
|
|
144
|
+
// Ed25519 multicodec prefix
|
|
145
|
+
const prefix = [0xed, 0x01];
|
|
146
|
+
const keyBytes = hexToBytes(hexKey);
|
|
147
|
+
const bytes = new Uint8Array([...prefix, ...keyBytes]);
|
|
148
|
+
return 'z' + base58btcEncode(bytes);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convert multibase back to hex-encoded public key.
|
|
152
|
+
*/
|
|
153
|
+
export function multibaseToHex(multibase) {
|
|
154
|
+
if (!multibase.startsWith('z')) {
|
|
155
|
+
throw new Error('Only z-prefix (base58btc) multibase supported');
|
|
156
|
+
}
|
|
157
|
+
const bytes = base58btcDecode(multibase.slice(1));
|
|
158
|
+
// Strip the 2-byte Ed25519 multicodec prefix
|
|
159
|
+
if (bytes[0] !== 0xed || bytes[1] !== 0x01) {
|
|
160
|
+
throw new Error('Invalid Ed25519 multicodec prefix');
|
|
161
|
+
}
|
|
162
|
+
return bytesToHex(bytes.slice(2));
|
|
163
|
+
}
|
|
164
|
+
function hexToBytes(hex) {
|
|
165
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
166
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
167
|
+
bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
168
|
+
}
|
|
169
|
+
return bytes;
|
|
170
|
+
}
|
|
171
|
+
function bytesToHex(bytes) {
|
|
172
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
173
|
+
}
|
|
174
|
+
function base58btcEncode(bytes) {
|
|
175
|
+
// Convert bytes to a big integer
|
|
176
|
+
let num = 0n;
|
|
177
|
+
for (const b of bytes) {
|
|
178
|
+
num = num * 256n + BigInt(b);
|
|
179
|
+
}
|
|
180
|
+
// Encode
|
|
181
|
+
let encoded = '';
|
|
182
|
+
while (num > 0n) {
|
|
183
|
+
const rem = Number(num % 58n);
|
|
184
|
+
num = num / 58n;
|
|
185
|
+
encoded = BASE58_ALPHABET[rem] + encoded;
|
|
186
|
+
}
|
|
187
|
+
// Leading zeros
|
|
188
|
+
for (const b of bytes) {
|
|
189
|
+
if (b === 0)
|
|
190
|
+
encoded = '1' + encoded;
|
|
191
|
+
else
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
return encoded || '1';
|
|
195
|
+
}
|
|
196
|
+
function base58btcDecode(str) {
|
|
197
|
+
let num = 0n;
|
|
198
|
+
for (const c of str) {
|
|
199
|
+
const idx = BASE58_ALPHABET.indexOf(c);
|
|
200
|
+
if (idx === -1)
|
|
201
|
+
throw new Error(`Invalid base58 character: ${c}`);
|
|
202
|
+
num = num * 58n + BigInt(idx);
|
|
203
|
+
}
|
|
204
|
+
// Convert back to bytes
|
|
205
|
+
const hex = num.toString(16).padStart(2, '0');
|
|
206
|
+
const padded = hex.length % 2 ? '0' + hex : hex;
|
|
207
|
+
const bytes = hexToBytes(padded);
|
|
208
|
+
// Leading zeros
|
|
209
|
+
let leadingZeros = 0;
|
|
210
|
+
for (const c of str) {
|
|
211
|
+
if (c === '1')
|
|
212
|
+
leadingZeros++;
|
|
213
|
+
else
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
const result = new Uint8Array(leadingZeros + bytes.length);
|
|
217
|
+
result.set(bytes, leadingZeros);
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
function hexToBase64url(hex) {
|
|
221
|
+
const bytes = hexToBytes(hex);
|
|
222
|
+
const base64 = Buffer.from(bytes).toString('base64');
|
|
223
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
224
|
+
}
|
|
225
|
+
function base64urlToHex(b64url) {
|
|
226
|
+
const base64 = b64url.replace(/-/g, '+').replace(/_/g, '/');
|
|
227
|
+
const buf = Buffer.from(base64, 'base64');
|
|
228
|
+
return bytesToHex(new Uint8Array(buf));
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=did.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../../src/core/did.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AgentPassport } from '../types/passport.js';
|
|
2
|
+
import type { RiskCategory, EUAIActArticle, ComplianceProfile, TransparencyDisclosure, EUComplianceReport, EUComplianceGap } from '../types/euaiact.js';
|
|
3
|
+
/**
|
|
4
|
+
* Classify an agent's risk category based on its capabilities and use context.
|
|
5
|
+
*/
|
|
6
|
+
export declare function classifyRisk(capabilities: string[], useContext?: string): RiskCategory;
|
|
7
|
+
/**
|
|
8
|
+
* Map AEOESS protocol features to EU AI Act articles.
|
|
9
|
+
* Returns the compliance status for each relevant article.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mapArticles(riskCategory: RiskCategory): EUAIActArticle[];
|
|
12
|
+
/**
|
|
13
|
+
* Generate Article 50 transparency disclosure for an agent.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateTransparencyDisclosure(passport: AgentPassport, operatorName: string, options?: {
|
|
16
|
+
limitations?: string[];
|
|
17
|
+
contactInfo?: string;
|
|
18
|
+
}): TransparencyDisclosure;
|
|
19
|
+
/**
|
|
20
|
+
* Generate a full compliance profile for an agent.
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateComplianceProfile(passport: AgentPassport, operatorName: string, options?: {
|
|
23
|
+
useContext?: string;
|
|
24
|
+
limitations?: string[];
|
|
25
|
+
contactInfo?: string;
|
|
26
|
+
floorAttested?: boolean;
|
|
27
|
+
floorVersion?: string;
|
|
28
|
+
}): ComplianceProfile;
|
|
29
|
+
/**
|
|
30
|
+
* Identify compliance gaps and generate remediation recommendations.
|
|
31
|
+
*/
|
|
32
|
+
export declare function identifyGaps(profile: ComplianceProfile): EUComplianceGap[];
|
|
33
|
+
/**
|
|
34
|
+
* Generate a full compliance report with recommendations.
|
|
35
|
+
*/
|
|
36
|
+
export declare function generateComplianceReport(passport: AgentPassport, operatorName: string, options?: {
|
|
37
|
+
useContext?: string;
|
|
38
|
+
limitations?: string[];
|
|
39
|
+
contactInfo?: string;
|
|
40
|
+
floorAttested?: boolean;
|
|
41
|
+
floorVersion?: string;
|
|
42
|
+
}): EUComplianceReport;
|
|
43
|
+
//# sourceMappingURL=euaiact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"euaiact.d.ts","sourceRoot":"","sources":["../../../src/core/euaiact.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EACV,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAC/C,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAC5D,MAAM,qBAAqB,CAAA;AAS5B;;GAEG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EAAE,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,YAAY,CAMd;AAGD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,EAAE,CAsExE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,sBAAsB,CAcxB;AAGD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GACA,iBAAiB,CAmBnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,EAAE,CA8C1E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GACA,kBAAkB,CA6BpB"}
|