import { type CryptoProvider, type BoxKeyPair } from "./crypto-provider.js"; import { type GenomeCommitment } from "./genome.js"; export type { BoxKeyPair }; /** Material presented during handshake — identity + ephemeral key for session. */ export interface HandshakePayload { did: string; genomeCommitment: GenomeCommitment; ephemeralPublicKey: string; } /** An established encrypted channel between two agents. */ export interface Channel { localDid: string; remoteDid: string; localGenomeCommitment: GenomeCommitment; remoteGenomeCommitment: GenomeCommitment; /** The shared session key — used by the heart seed mechanism. */ sessionKey: Uint8Array; /** Encrypt a plaintext message for the remote party. */ encrypt(plaintext: string): EncryptedMessage; /** Decrypt a message from the remote party. */ decrypt(message: EncryptedMessage): string; } export interface EncryptedMessage { nonce: string; ciphertext: string; } /** Generate an ephemeral key pair for a single session — forward secrecy. */ export declare function generateEphemeralKeyPair(provider?: CryptoProvider): BoxKeyPair; /** Build the handshake payload an agent presents to initiate a channel. */ export declare function createHandshakePayload(genomeCommitment: GenomeCommitment, ephemeralKeyPair: BoxKeyPair, provider?: CryptoProvider): HandshakePayload; /** * Establish a channel from two handshake payloads. * * Both sides: * 1. Verify the other's genome commitment signature * 2. Derive a shared session key via key exchange * 3. All subsequent traffic is authenticated-encrypted * * A proxy between A and B cannot decrypt, read, or inject — reduced to a dumb pipe. */ export declare function establishChannel(local: { handshake: HandshakePayload; ephemeralKeyPair: BoxKeyPair; }, remoteHandshake: HandshakePayload, provider?: CryptoProvider): Channel; //# sourceMappingURL=channel.d.ts.map