UNPKG

acp-ws

Version:

基于 WebSocket 的智能体通信库,提供智能体身份管理和实时通信功能

68 lines (67 loc) 2.36 kB
import { CertAndKeyStore } from './datamanager'; import { createSignedCertificateAsync } from './cert'; import { KEYUTIL, KJUR } from 'jsrsasign'; import { signCert } from './api'; // 解密私钥数据 function decryptPrivateKey(encryptedData, password) { try { const hashPWD = getSha256(password); const privateKeyObj = KEYUTIL.getKey(encryptedData, hashPWD); const privateKeyPEM = KEYUTIL.getPEM(privateKeyObj, 'PKCS8PRV'); return privateKeyPEM; } catch (err) { console.error('私钥解密失败:', err); return null; } } // 加密私钥数据 function encryptPrivateKey(privateKeyPEM, password) { try { const hashPWD = getSha256(password); const prvKeyObj = KEYUTIL.getKey(privateKeyPEM); const encryptedPEM = KEYUTIL.getPEM(prvKeyObj, 'PKCS8PRV', hashPWD); return encryptedPEM; } catch (err) { console.error('私钥加密失败:', err); return null; } } function getSha256(inputStr) { const hash = KJUR.crypto.Util.sha256(inputStr); return hash; } function handleError(error, customMessage) { const errorMessage = error instanceof Error ? error.message : String(error); throw new Error(`${customMessage || '操作失败'}: ${errorMessage}`); } export async function getDecryptKey(aid, password) { const privateKey = await CertAndKeyStore.getPrivateKey(aid); if (!privateKey) { handleError("privateKey 不应为空"); } const decryptedPrivateKey = decryptPrivateKey(privateKey, password); return decryptedPrivateKey; } export async function savePrivateKey(aid, privateKey, password) { const encryptedPrivateKey = encryptPrivateKey(privateKey, password); if (!encryptedPrivateKey) { handleError("encryptedPrivateKey 不应为空"); } await CertAndKeyStore.savePrivateKey(aid, encryptedPrivateKey); } export async function createAid(aid, apiUrl, seedPassword) { const { csrPEM, prvKeyPEM } = await createSignedCertificateAsync(aid); const cert = await signCert(aid, apiUrl, csrPEM); if (cert) { CertAndKeyStore.saveAid(aid); CertAndKeyStore.saveCertificate(aid, cert); CertAndKeyStore.saveCsr(aid, csrPEM); savePrivateKey(aid, prvKeyPEM, seedPassword); return true; } else { return false; } }