@mcp-i/core 0.1.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/LICENSE +21 -0
- package/README.md +390 -0
- package/dist/auth/handshake.d.ts +104 -0
- package/dist/auth/handshake.d.ts.map +1 -0
- package/dist/auth/handshake.js +230 -0
- package/dist/auth/handshake.js.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/types.d.ts +31 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +7 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/delegation/audience-validator.d.ts +9 -0
- package/dist/delegation/audience-validator.d.ts.map +1 -0
- package/dist/delegation/audience-validator.js +17 -0
- package/dist/delegation/audience-validator.js.map +1 -0
- package/dist/delegation/bitstring.d.ts +37 -0
- package/dist/delegation/bitstring.d.ts.map +1 -0
- package/dist/delegation/bitstring.js +117 -0
- package/dist/delegation/bitstring.js.map +1 -0
- package/dist/delegation/cascading-revocation.d.ts +45 -0
- package/dist/delegation/cascading-revocation.d.ts.map +1 -0
- package/dist/delegation/cascading-revocation.js +148 -0
- package/dist/delegation/cascading-revocation.js.map +1 -0
- package/dist/delegation/delegation-graph.d.ts +49 -0
- package/dist/delegation/delegation-graph.d.ts.map +1 -0
- package/dist/delegation/delegation-graph.js +99 -0
- package/dist/delegation/delegation-graph.js.map +1 -0
- package/dist/delegation/did-key-resolver.d.ts +64 -0
- package/dist/delegation/did-key-resolver.d.ts.map +1 -0
- package/dist/delegation/did-key-resolver.js +154 -0
- package/dist/delegation/did-key-resolver.js.map +1 -0
- package/dist/delegation/did-web-resolver.d.ts +83 -0
- package/dist/delegation/did-web-resolver.d.ts.map +1 -0
- package/dist/delegation/did-web-resolver.js +218 -0
- package/dist/delegation/did-web-resolver.js.map +1 -0
- package/dist/delegation/index.d.ts +21 -0
- package/dist/delegation/index.d.ts.map +1 -0
- package/dist/delegation/index.js +21 -0
- package/dist/delegation/index.js.map +1 -0
- package/dist/delegation/outbound-headers.d.ts +81 -0
- package/dist/delegation/outbound-headers.d.ts.map +1 -0
- package/dist/delegation/outbound-headers.js +139 -0
- package/dist/delegation/outbound-headers.js.map +1 -0
- package/dist/delegation/outbound-proof.d.ts +43 -0
- package/dist/delegation/outbound-proof.d.ts.map +1 -0
- package/dist/delegation/outbound-proof.js +52 -0
- package/dist/delegation/outbound-proof.js.map +1 -0
- package/dist/delegation/statuslist-manager.d.ts +44 -0
- package/dist/delegation/statuslist-manager.d.ts.map +1 -0
- package/dist/delegation/statuslist-manager.js +126 -0
- package/dist/delegation/statuslist-manager.js.map +1 -0
- package/dist/delegation/storage/memory-graph-storage.d.ts +70 -0
- package/dist/delegation/storage/memory-graph-storage.d.ts.map +1 -0
- package/dist/delegation/storage/memory-graph-storage.js +145 -0
- package/dist/delegation/storage/memory-graph-storage.js.map +1 -0
- package/dist/delegation/storage/memory-statuslist-storage.d.ts +19 -0
- package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +1 -0
- package/dist/delegation/storage/memory-statuslist-storage.js +33 -0
- package/dist/delegation/storage/memory-statuslist-storage.js.map +1 -0
- package/dist/delegation/utils.d.ts +49 -0
- package/dist/delegation/utils.d.ts.map +1 -0
- package/dist/delegation/utils.js +131 -0
- package/dist/delegation/utils.js.map +1 -0
- package/dist/delegation/vc-issuer.d.ts +56 -0
- package/dist/delegation/vc-issuer.d.ts.map +1 -0
- package/dist/delegation/vc-issuer.js +80 -0
- package/dist/delegation/vc-issuer.js.map +1 -0
- package/dist/delegation/vc-verifier.d.ts +112 -0
- package/dist/delegation/vc-verifier.d.ts.map +1 -0
- package/dist/delegation/vc-verifier.js +280 -0
- package/dist/delegation/vc-verifier.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +23 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +82 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +7 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/with-mcpi.d.ts +152 -0
- package/dist/middleware/with-mcpi.d.ts.map +1 -0
- package/dist/middleware/with-mcpi.js +472 -0
- package/dist/middleware/with-mcpi.js.map +1 -0
- package/dist/proof/errors.d.ts +49 -0
- package/dist/proof/errors.d.ts.map +1 -0
- package/dist/proof/errors.js +61 -0
- package/dist/proof/errors.js.map +1 -0
- package/dist/proof/generator.d.ts +65 -0
- package/dist/proof/generator.d.ts.map +1 -0
- package/dist/proof/generator.js +163 -0
- package/dist/proof/generator.js.map +1 -0
- package/dist/proof/index.d.ts +4 -0
- package/dist/proof/index.d.ts.map +1 -0
- package/dist/proof/index.js +4 -0
- package/dist/proof/index.js.map +1 -0
- package/dist/proof/verifier.d.ts +108 -0
- package/dist/proof/verifier.d.ts.map +1 -0
- package/dist/proof/verifier.js +299 -0
- package/dist/proof/verifier.js.map +1 -0
- package/dist/providers/base.d.ts +64 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +19 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/memory.d.ts +33 -0
- package/dist/providers/memory.d.ts.map +1 -0
- package/dist/providers/memory.js +102 -0
- package/dist/providers/memory.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +77 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +251 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/types/protocol.d.ts +320 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +229 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/utils/base58.d.ts +31 -0
- package/dist/utils/base58.d.ts.map +1 -0
- package/dist/utils/base58.js +104 -0
- package/dist/utils/base58.js.map +1 -0
- package/dist/utils/base64.d.ts +13 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +99 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/crypto-service.d.ts +37 -0
- package/dist/utils/crypto-service.d.ts.map +1 -0
- package/dist/utils/crypto-service.js +153 -0
- package/dist/utils/crypto-service.js.map +1 -0
- package/dist/utils/did-helpers.d.ts +156 -0
- package/dist/utils/did-helpers.d.ts.map +1 -0
- package/dist/utils/did-helpers.js +193 -0
- package/dist/utils/did-helpers.js.map +1 -0
- package/dist/utils/ed25519-constants.d.ts +18 -0
- package/dist/utils/ed25519-constants.d.ts.map +1 -0
- package/dist/utils/ed25519-constants.js +21 -0
- package/dist/utils/ed25519-constants.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +105 -0
- package/src/__tests__/integration/full-flow.test.ts +362 -0
- package/src/__tests__/providers/base.test.ts +173 -0
- package/src/__tests__/providers/memory.test.ts +332 -0
- package/src/__tests__/utils/mock-providers.ts +319 -0
- package/src/__tests__/utils/node-crypto-provider.ts +93 -0
- package/src/auth/handshake.ts +411 -0
- package/src/auth/index.ts +11 -0
- package/src/auth/types.ts +40 -0
- package/src/delegation/__tests__/audience-validator.test.ts +110 -0
- package/src/delegation/__tests__/bitstring.test.ts +346 -0
- package/src/delegation/__tests__/cascading-revocation.test.ts +624 -0
- package/src/delegation/__tests__/delegation-graph.test.ts +623 -0
- package/src/delegation/__tests__/did-key-resolver.test.ts +265 -0
- package/src/delegation/__tests__/did-web-resolver.test.ts +467 -0
- package/src/delegation/__tests__/outbound-headers.test.ts +230 -0
- package/src/delegation/__tests__/outbound-proof.test.ts +179 -0
- package/src/delegation/__tests__/statuslist-manager.test.ts +515 -0
- package/src/delegation/__tests__/utils.test.ts +185 -0
- package/src/delegation/__tests__/vc-issuer.test.ts +487 -0
- package/src/delegation/__tests__/vc-verifier.test.ts +1029 -0
- package/src/delegation/audience-validator.ts +24 -0
- package/src/delegation/bitstring.ts +160 -0
- package/src/delegation/cascading-revocation.ts +224 -0
- package/src/delegation/delegation-graph.ts +143 -0
- package/src/delegation/did-key-resolver.ts +181 -0
- package/src/delegation/did-web-resolver.ts +270 -0
- package/src/delegation/index.ts +33 -0
- package/src/delegation/outbound-headers.ts +193 -0
- package/src/delegation/outbound-proof.ts +90 -0
- package/src/delegation/statuslist-manager.ts +219 -0
- package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +366 -0
- package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +228 -0
- package/src/delegation/storage/memory-graph-storage.ts +178 -0
- package/src/delegation/storage/memory-statuslist-storage.ts +42 -0
- package/src/delegation/utils.ts +189 -0
- package/src/delegation/vc-issuer.ts +137 -0
- package/src/delegation/vc-verifier.ts +440 -0
- package/src/index.ts +264 -0
- package/src/logging/__tests__/logger.test.ts +366 -0
- package/src/logging/index.ts +6 -0
- package/src/logging/logger.ts +91 -0
- package/src/middleware/__tests__/with-mcpi.test.ts +504 -0
- package/src/middleware/index.ts +16 -0
- package/src/middleware/with-mcpi.ts +766 -0
- package/src/proof/__tests__/proof-generator.test.ts +483 -0
- package/src/proof/__tests__/verifier.test.ts +488 -0
- package/src/proof/errors.ts +75 -0
- package/src/proof/generator.ts +255 -0
- package/src/proof/index.ts +22 -0
- package/src/proof/verifier.ts +449 -0
- package/src/providers/base.ts +68 -0
- package/src/providers/index.ts +15 -0
- package/src/providers/memory.ts +130 -0
- package/src/session/__tests__/session-manager.test.ts +342 -0
- package/src/session/index.ts +7 -0
- package/src/session/manager.ts +332 -0
- package/src/types/protocol.ts +596 -0
- package/src/utils/__tests__/base58.test.ts +281 -0
- package/src/utils/__tests__/base64.test.ts +239 -0
- package/src/utils/__tests__/crypto-service.test.ts +530 -0
- package/src/utils/__tests__/did-helpers.test.ts +156 -0
- package/src/utils/base58.ts +115 -0
- package/src/utils/base64.ts +116 -0
- package/src/utils/crypto-service.ts +209 -0
- package/src/utils/did-helpers.ts +210 -0
- package/src/utils/ed25519-constants.ts +23 -0
- package/src/utils/index.ts +9 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Generation — Platform-agnostic Protocol Reference
|
|
3
|
+
*
|
|
4
|
+
* Handles JCS canonicalization, SHA-256 digest generation, and Ed25519 JWS
|
|
5
|
+
* signing (compact format) according to MCP-I requirements 5.1, 5.2, 5.3, 5.6.
|
|
6
|
+
*
|
|
7
|
+
* This module is the authoritative proof implementation. All platform adapters
|
|
8
|
+
* (Node.js, Cloudflare Workers) inject a CryptoProvider and delegate here.
|
|
9
|
+
*/
|
|
10
|
+
import type { DetachedProof, SessionContext } from '../types/protocol.js';
|
|
11
|
+
import type { CryptoProvider } from '../providers/base.js';
|
|
12
|
+
export interface ProofAgentIdentity {
|
|
13
|
+
did: string;
|
|
14
|
+
kid: string;
|
|
15
|
+
privateKey: string;
|
|
16
|
+
publicKey: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ToolRequest {
|
|
19
|
+
method: string;
|
|
20
|
+
params?: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface ToolResponse {
|
|
23
|
+
data: unknown;
|
|
24
|
+
meta?: {
|
|
25
|
+
proof?: DetachedProof;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface ProofOptions {
|
|
30
|
+
scopeId?: string;
|
|
31
|
+
delegationRef?: string;
|
|
32
|
+
clientDid?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class ProofGenerator {
|
|
35
|
+
private identity;
|
|
36
|
+
private cryptoProvider;
|
|
37
|
+
constructor(identity: ProofAgentIdentity, cryptoProvider: CryptoProvider);
|
|
38
|
+
/**
|
|
39
|
+
* Generate a detached proof for an MCP tool call.
|
|
40
|
+
*
|
|
41
|
+
* Creates a JWS (JSON Web Signature) that binds the tool request and response
|
|
42
|
+
* to the agent's identity and current session context.
|
|
43
|
+
*
|
|
44
|
+
* @param request - The MCP tool request (method + params)
|
|
45
|
+
* @param response - The tool response data
|
|
46
|
+
* @param session - The current session context from handshake
|
|
47
|
+
* @param options - Optional proof metadata (scopeId, delegationRef, clientDid)
|
|
48
|
+
* @returns Detached proof containing JWS and proof metadata
|
|
49
|
+
* @throws {Error} If JWS generation fails (invalid key, crypto error)
|
|
50
|
+
*/
|
|
51
|
+
generateProof(request: ToolRequest, response: ToolResponse, session: SessionContext, options?: ProofOptions): Promise<DetachedProof>;
|
|
52
|
+
private generateCanonicalHashes;
|
|
53
|
+
private generateSHA256Hash;
|
|
54
|
+
private canonicalizeJSON;
|
|
55
|
+
private generateJWS;
|
|
56
|
+
private formatPrivateKeyAsPEM;
|
|
57
|
+
verifyProof(proof: DetachedProof, request: ToolRequest, response: ToolResponse): Promise<boolean>;
|
|
58
|
+
private base64PublicKeyToJWK;
|
|
59
|
+
}
|
|
60
|
+
export declare function createProofResponse(request: ToolRequest, data: unknown, identity: ProofAgentIdentity, session: SessionContext, cryptoProvider: CryptoProvider, options?: ProofOptions): Promise<ToolResponse>;
|
|
61
|
+
export declare function extractCanonicalData(request: ToolRequest, response: ToolResponse): {
|
|
62
|
+
request: unknown;
|
|
63
|
+
response: unknown;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/proof/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc;IAKxE;;;;;;;;;;;;OAYG;IACG,aAAa,CACjB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;YAoBX,uBAAuB;YAgBvB,kBAAkB;IAMhC,OAAO,CAAC,gBAAgB;YAIV,WAAW;IAuCzB,OAAO,CAAC,qBAAqB;IAqBvB,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC;IAuBnB,OAAO,CAAC,oBAAoB;CAc7B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,YAAY,CAAC,CAMvB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,GACrB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAQA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Generation — Platform-agnostic Protocol Reference
|
|
3
|
+
*
|
|
4
|
+
* Handles JCS canonicalization, SHA-256 digest generation, and Ed25519 JWS
|
|
5
|
+
* signing (compact format) according to MCP-I requirements 5.1, 5.2, 5.3, 5.6.
|
|
6
|
+
*
|
|
7
|
+
* This module is the authoritative proof implementation. All platform adapters
|
|
8
|
+
* (Node.js, Cloudflare Workers) inject a CryptoProvider and delegate here.
|
|
9
|
+
*/
|
|
10
|
+
import { CompactSign, importPKCS8 } from 'jose';
|
|
11
|
+
import { canonicalize } from 'json-canonicalize';
|
|
12
|
+
import { CryptoService } from '../utils/crypto-service.js';
|
|
13
|
+
import { base64ToBytes, base64urlEncodeFromBytes, bytesToBase64 } from '../utils/base64.js';
|
|
14
|
+
import { ED25519_PKCS8_DER_HEADER, ED25519_KEY_SIZE } from '../utils/ed25519-constants.js';
|
|
15
|
+
export class ProofGenerator {
|
|
16
|
+
identity;
|
|
17
|
+
cryptoProvider;
|
|
18
|
+
constructor(identity, cryptoProvider) {
|
|
19
|
+
this.identity = identity;
|
|
20
|
+
this.cryptoProvider = cryptoProvider;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate a detached proof for an MCP tool call.
|
|
24
|
+
*
|
|
25
|
+
* Creates a JWS (JSON Web Signature) that binds the tool request and response
|
|
26
|
+
* to the agent's identity and current session context.
|
|
27
|
+
*
|
|
28
|
+
* @param request - The MCP tool request (method + params)
|
|
29
|
+
* @param response - The tool response data
|
|
30
|
+
* @param session - The current session context from handshake
|
|
31
|
+
* @param options - Optional proof metadata (scopeId, delegationRef, clientDid)
|
|
32
|
+
* @returns Detached proof containing JWS and proof metadata
|
|
33
|
+
* @throws {Error} If JWS generation fails (invalid key, crypto error)
|
|
34
|
+
*/
|
|
35
|
+
async generateProof(request, response, session, options = {}) {
|
|
36
|
+
const hashes = await this.generateCanonicalHashes(request, response);
|
|
37
|
+
const meta = {
|
|
38
|
+
did: this.identity.did,
|
|
39
|
+
kid: this.identity.kid,
|
|
40
|
+
ts: Math.floor(Date.now() / 1000),
|
|
41
|
+
nonce: session.nonce,
|
|
42
|
+
audience: session.audience,
|
|
43
|
+
sessionId: session.sessionId,
|
|
44
|
+
requestHash: hashes.requestHash,
|
|
45
|
+
responseHash: hashes.responseHash,
|
|
46
|
+
...options,
|
|
47
|
+
};
|
|
48
|
+
const jws = await this.generateJWS(meta);
|
|
49
|
+
return { jws, meta };
|
|
50
|
+
}
|
|
51
|
+
async generateCanonicalHashes(request, response) {
|
|
52
|
+
const canonicalRequest = {
|
|
53
|
+
method: request.method,
|
|
54
|
+
...(request.params ? { params: request.params } : {}),
|
|
55
|
+
};
|
|
56
|
+
const canonicalResponse = response.data;
|
|
57
|
+
const requestHash = await this.generateSHA256Hash(canonicalRequest);
|
|
58
|
+
const responseHash = await this.generateSHA256Hash(canonicalResponse);
|
|
59
|
+
return { requestHash, responseHash };
|
|
60
|
+
}
|
|
61
|
+
async generateSHA256Hash(data) {
|
|
62
|
+
const canonicalJson = this.canonicalizeJSON(data);
|
|
63
|
+
const encoded = new TextEncoder().encode(canonicalJson);
|
|
64
|
+
return this.cryptoProvider.hash(encoded);
|
|
65
|
+
}
|
|
66
|
+
canonicalizeJSON(obj) {
|
|
67
|
+
return canonicalize(obj);
|
|
68
|
+
}
|
|
69
|
+
async generateJWS(meta) {
|
|
70
|
+
try {
|
|
71
|
+
const privateKeyPem = this.formatPrivateKeyAsPEM(this.identity.privateKey);
|
|
72
|
+
const privateKey = await importPKCS8(privateKeyPem, 'EdDSA');
|
|
73
|
+
const payload = {
|
|
74
|
+
aud: meta.audience,
|
|
75
|
+
sub: meta.did,
|
|
76
|
+
iss: meta.did,
|
|
77
|
+
requestHash: meta.requestHash,
|
|
78
|
+
responseHash: meta.responseHash,
|
|
79
|
+
ts: meta.ts,
|
|
80
|
+
nonce: meta.nonce,
|
|
81
|
+
sessionId: meta.sessionId,
|
|
82
|
+
...(meta.scopeId && { scopeId: meta.scopeId }),
|
|
83
|
+
...(meta.delegationRef && { delegationRef: meta.delegationRef }),
|
|
84
|
+
...(meta.clientDid && { clientDid: meta.clientDid }),
|
|
85
|
+
};
|
|
86
|
+
// Use canonicalized JSON (RFC 8785) for deterministic payload serialization.
|
|
87
|
+
// This ensures signature verification succeeds regardless of JSON key ordering.
|
|
88
|
+
const canonicalPayload = canonicalize(payload);
|
|
89
|
+
const payloadBytes = new TextEncoder().encode(canonicalPayload);
|
|
90
|
+
const jws = await new CompactSign(payloadBytes)
|
|
91
|
+
.setProtectedHeader({
|
|
92
|
+
alg: 'EdDSA',
|
|
93
|
+
kid: this.identity.kid,
|
|
94
|
+
})
|
|
95
|
+
.sign(privateKey);
|
|
96
|
+
return jws;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw new Error(`Failed to generate JWS: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
formatPrivateKeyAsPEM(base64PrivateKey) {
|
|
103
|
+
const keyData = base64ToBytes(base64PrivateKey);
|
|
104
|
+
// Extract raw 32-byte seed
|
|
105
|
+
const rawKey = keyData.subarray(0, ED25519_KEY_SIZE);
|
|
106
|
+
// Build full PKCS#8 key: header + raw key
|
|
107
|
+
const fullKey = new Uint8Array(ED25519_PKCS8_DER_HEADER.length + rawKey.length);
|
|
108
|
+
fullKey.set(ED25519_PKCS8_DER_HEADER);
|
|
109
|
+
fullKey.set(rawKey, ED25519_PKCS8_DER_HEADER.length);
|
|
110
|
+
const base64Key = bytesToBase64(fullKey);
|
|
111
|
+
const formattedKey = base64Key.match(/.{1,64}/g)?.join('\n') ?? base64Key;
|
|
112
|
+
return ('-----BEGIN PRIVATE KEY-----\n' +
|
|
113
|
+
formattedKey +
|
|
114
|
+
'\n-----END PRIVATE KEY-----');
|
|
115
|
+
}
|
|
116
|
+
async verifyProof(proof, request, response) {
|
|
117
|
+
try {
|
|
118
|
+
const expectedHashes = await this.generateCanonicalHashes(request, response);
|
|
119
|
+
if (proof.meta.requestHash !== expectedHashes.requestHash ||
|
|
120
|
+
proof.meta.responseHash !== expectedHashes.responseHash) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
const publicKeyJwk = this.base64PublicKeyToJWK(this.identity.publicKey);
|
|
124
|
+
const cryptoService = new CryptoService(this.cryptoProvider);
|
|
125
|
+
return cryptoService.verifyJWS(proof.jws, publicKeyJwk, {
|
|
126
|
+
expectedKid: this.identity.kid,
|
|
127
|
+
alg: 'EdDSA',
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
base64PublicKeyToJWK(publicKeyBase64) {
|
|
135
|
+
const publicKeyBytes = base64ToBytes(publicKeyBase64);
|
|
136
|
+
if (publicKeyBytes.length !== ED25519_KEY_SIZE) {
|
|
137
|
+
throw new Error(`Invalid Ed25519 public key length: ${publicKeyBytes.length}`);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
kty: 'OKP',
|
|
141
|
+
crv: 'Ed25519',
|
|
142
|
+
x: base64urlEncodeFromBytes(publicKeyBytes),
|
|
143
|
+
kid: this.identity.kid,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export async function createProofResponse(request, data, identity, session, cryptoProvider, options = {}) {
|
|
148
|
+
const response = { data };
|
|
149
|
+
const proofGenerator = new ProofGenerator(identity, cryptoProvider);
|
|
150
|
+
const proof = await proofGenerator.generateProof(request, response, session, options);
|
|
151
|
+
response.meta = { proof };
|
|
152
|
+
return response;
|
|
153
|
+
}
|
|
154
|
+
export function extractCanonicalData(request, response) {
|
|
155
|
+
return {
|
|
156
|
+
request: {
|
|
157
|
+
method: request.method,
|
|
158
|
+
...(request.params ? { params: request.params } : {}),
|
|
159
|
+
},
|
|
160
|
+
response: response.data,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/proof/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ProofGenerator, createProofResponse, extractCanonicalData, type ProofAgentIdentity, type ToolRequest, type ToolResponse, type ProofOptions, } from './generator.js';
|
|
2
|
+
export { ProofVerifier, type ProofVerifierConfig, type ProofVerificationResult, } from './verifier.js';
|
|
3
|
+
export { ProofVerificationError, PROOF_VERIFICATION_ERROR_CODES, createProofVerificationError, type ProofVerificationErrorCode, } from './errors.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,EAC5B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ProofGenerator, createProofResponse, extractCanonicalData, } from './generator.js';
|
|
2
|
+
export { ProofVerifier, } from './verifier.js';
|
|
3
|
+
export { ProofVerificationError, PROOF_VERIFICATION_ERROR_CODES, createProofVerificationError, } from './errors.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proof/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GAKrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,GAGd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,GAE7B,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofVerifier
|
|
3
|
+
*
|
|
4
|
+
* Centralized proof verification service that validates DetachedProof
|
|
5
|
+
* signatures, enforces nonce replay protection, and checks timestamp skew.
|
|
6
|
+
*/
|
|
7
|
+
import { type Ed25519JWK } from "../utils/crypto-service.js";
|
|
8
|
+
import { CryptoProvider } from "../providers/base.js";
|
|
9
|
+
import { ClockProvider } from "../providers/base.js";
|
|
10
|
+
import { NonceCacheProvider } from "../providers/base.js";
|
|
11
|
+
import { FetchProvider } from "../providers/base.js";
|
|
12
|
+
import { type DetachedProof } from "../types/protocol.js";
|
|
13
|
+
import { type ProofVerificationErrorCode } from "./errors.js";
|
|
14
|
+
export interface ProofVerificationResult {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
reason?: string;
|
|
17
|
+
error?: Error;
|
|
18
|
+
errorCode?: ProofVerificationErrorCode;
|
|
19
|
+
details?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export interface ProofVerifierConfig {
|
|
22
|
+
cryptoProvider: CryptoProvider;
|
|
23
|
+
clockProvider: ClockProvider;
|
|
24
|
+
nonceCacheProvider: NonceCacheProvider;
|
|
25
|
+
fetchProvider: FetchProvider;
|
|
26
|
+
timestampSkewSeconds?: number;
|
|
27
|
+
nonceTtlSeconds?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class ProofVerifier {
|
|
30
|
+
private cryptoService;
|
|
31
|
+
private clock;
|
|
32
|
+
private nonceCache;
|
|
33
|
+
private fetch;
|
|
34
|
+
private timestampSkewSeconds;
|
|
35
|
+
private nonceTtlSeconds;
|
|
36
|
+
constructor(config: ProofVerifierConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Verify a DetachedProof
|
|
39
|
+
* Automatically reconstructs canonical payload from proof.meta for signature verification
|
|
40
|
+
* @param proof - The proof to verify
|
|
41
|
+
* @param publicKeyJwk - Ed25519 public key in JWK format (from DID document)
|
|
42
|
+
* @returns Verification result
|
|
43
|
+
*/
|
|
44
|
+
verifyProof(proof: DetachedProof, publicKeyJwk: Ed25519JWK): Promise<ProofVerificationResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Verify proof with detached payload (for CLI/verifier compatibility)
|
|
47
|
+
* @param proof - The proof to verify
|
|
48
|
+
* @param canonicalPayload - Canonical JSON payload (for detached JWS) as string or Uint8Array
|
|
49
|
+
* @param publicKeyJwk - Ed25519 public key in JWK format
|
|
50
|
+
* @returns Verification result
|
|
51
|
+
*/
|
|
52
|
+
verifyProofDetached(proof: DetachedProof, canonicalPayload: string | Uint8Array, publicKeyJwk: Ed25519JWK): Promise<ProofVerificationResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Shared verification pipeline for proof verification
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
private runVerificationPipeline;
|
|
58
|
+
/**
|
|
59
|
+
* Handle verification errors consistently
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
private handleVerificationError;
|
|
63
|
+
/**
|
|
64
|
+
* Validate proof structure
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
private validateProofStructure;
|
|
68
|
+
/**
|
|
69
|
+
* Validate nonce replay protection
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
private validateNonce;
|
|
73
|
+
/**
|
|
74
|
+
* Validate timestamp skew
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
private validateTimestamp;
|
|
78
|
+
/**
|
|
79
|
+
* Verify JWS signature
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
private verifySignature;
|
|
83
|
+
/**
|
|
84
|
+
* Add nonce to cache to prevent replay (scoped to agent DID)
|
|
85
|
+
* @private
|
|
86
|
+
*/
|
|
87
|
+
private addNonceToCache;
|
|
88
|
+
/**
|
|
89
|
+
* Fetch public key from DID document
|
|
90
|
+
* @param did - DID to resolve
|
|
91
|
+
* @param kid - Key ID (optional, defaults to first verification method)
|
|
92
|
+
* @returns Ed25519 JWK or null if not found
|
|
93
|
+
* @throws {ProofVerificationError} If DID resolution fails with specific error code
|
|
94
|
+
*/
|
|
95
|
+
fetchPublicKeyFromDID(did: string, kid?: string): Promise<Ed25519JWK | null>;
|
|
96
|
+
/**
|
|
97
|
+
* Build canonical payload from proof meta
|
|
98
|
+
*
|
|
99
|
+
* CRITICAL: This must reconstruct the exact JWS payload structure that was originally signed.
|
|
100
|
+
* The original JWS payload uses standard JWT claims (aud, sub, iss) plus custom proof claims,
|
|
101
|
+
* NOT the proof.meta structure directly.
|
|
102
|
+
*
|
|
103
|
+
* @param meta - Proof metadata
|
|
104
|
+
* @returns Canonical JSON string matching the original JWS payload structure
|
|
105
|
+
*/
|
|
106
|
+
buildCanonicalPayload(meta: DetachedProof["meta"]): string;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/proof/verifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,EAAE,mBAAmB;IASvC;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,uBAAuB,CAAC;IAcnC;;;;;;OAMG;IACG,mBAAmB,CACvB,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,GAAG,UAAU,EACrC,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,uBAAuB,CAAC;IAcnC;;;OAGG;YACW,uBAAuB;IAiDrC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;;OAGG;YACW,sBAAsB;IAuBpC;;;OAGG;YACW,aAAa;IAmB3B;;;OAGG;YACW,iBAAiB;IAqB/B;;;OAGG;YACW,eAAe;IAgC7B;;;OAGG;YACW,eAAe;IAQ7B;;;;;;OAMG;IACG,qBAAqB,CACzB,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAuG7B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM;CA0B3D"}
|