@kya-os/mcp-i
Version:
The TypeScript MCP framework with identity features built-in
109 lines (108 loc) • 3.94 kB
JavaScript
;
/**
* Deterministic key generation for testing
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateDeterministicKeyPair = generateDeterministicKeyPair;
exports.generateTestIdentity = generateTestIdentity;
exports.getPredefinedTestIdentities = getPredefinedTestIdentities;
exports.generateTestNonce = generateTestNonce;
exports.generateTestSessionId = generateTestSessionId;
const crypto_1 = require("crypto");
const test_1 = require("@kya-os/contracts/test");
const test_environment_1 = require("./test-environment");
/**
* Generate deterministic Ed25519 key pair from seed
*/
function generateDeterministicKeyPair(seed) {
(0, test_environment_1.ensureTestMode)();
try {
// Create deterministic seed by hashing the input
const hash = (0, crypto_1.createHash)("sha256").update(seed).digest();
// For testing, we'll use the hash as a mock private key
// In a real implementation, this would use proper Ed25519 key derivation
const privateKey = hash.toString("base64");
// Generate a mock public key by hashing the private key
const publicKey = (0, crypto_1.createHash)("sha256")
.update(privateKey)
.digest()
.toString("base64");
return {
privateKey,
publicKey,
};
}
catch (error) {
throw new Error(`${test_1.TEST_ERROR_CODES.DETERMINISTIC_KEY_GENERATION_FAILED}: ${error instanceof Error ? error.message : "Unknown error"}`);
}
}
/**
* Generate test identity with deterministic keys
*/
function generateTestIdentity(testName, options = {}) {
(0, test_environment_1.ensureTestMode)();
const seed = options.seed || (0, test_environment_1.getCurrentTestSeed)(testName);
const did = options.did || test_1.TEST_DIDS.AGENT_1;
const kid = options.kid || test_1.TEST_KEY_IDS.KEY_TEST_1;
const { privateKey, publicKey } = generateDeterministicKeyPair(`${seed}-${testName}-${did}-${kid}`);
const now = new Date().toISOString();
return {
did,
kid,
privateKey,
publicKey,
createdAt: now,
lastRotated: now,
};
}
/**
* Get predefined test identities
*/
function getPredefinedTestIdentities() {
(0, test_environment_1.ensureTestMode)();
return {
agent1: generateTestIdentity("agent1", {
did: test_1.TEST_DIDS.AGENT_1,
kid: test_1.TEST_KEY_IDS.KEY_TEST_1,
}),
agent2: generateTestIdentity("agent2", {
did: test_1.TEST_DIDS.AGENT_2,
kid: test_1.TEST_KEY_IDS.KEY_TEST_2,
}),
verifier1: generateTestIdentity("verifier1", {
did: test_1.TEST_DIDS.VERIFIER_1,
kid: test_1.TEST_KEY_IDS.KEY_VERIFIER_1,
}),
};
}
/**
* Generate nonce for testing (deterministic if seed provided)
*/
function generateTestNonce(seed) {
(0, test_environment_1.ensureTestMode)();
if (seed) {
// Deterministic nonce for reproducible tests
return (0, crypto_1.createHash)("sha256")
.update(`nonce-${seed}-${(0, test_environment_1.getCurrentTestSeed)()}`)
.digest()
.subarray(0, 16)
.toString("base64url");
}
// Random nonce for general testing
return (0, crypto_1.randomBytes)(16).toString("base64url");
}
/**
* Generate session ID for testing (deterministic if seed provided)
*/
function generateTestSessionId(seed) {
(0, test_environment_1.ensureTestMode)();
if (seed) {
// Deterministic session ID for reproducible tests
return `sess_test_${(0, crypto_1.createHash)("sha256")
.update(`session-${seed}-${(0, test_environment_1.getCurrentTestSeed)()}`)
.digest("hex")
.substring(0, 16)}`;
}
// Random session ID for general testing
return `sess_test_${(0, crypto_1.randomBytes)(8).toString("hex")}`;
}