/// <reference types="node" />
import Network from './Network';
import Packet from './packets/Packet';
declare type WireMsgHeader = {
    magic?: number;
    type: number;
    length: number;
    checksum?: number;
};
declare type WireMsg = {
    header: WireMsgHeader;
    packet: Buffer;
};
/** Wire protocol msg framer */
declare class Framer {
    private network;
    static readonly MSG_HEADER_LENGTH = 16;
    static readonly ENCRYPTED_MSG_HEADER_LENGTH = 4;
    static readonly ENCRYPTED_MSG_PAYLOAD_HEADER_LENGTH = 8;
    static readonly ENCRYPTION_KEY_LENGTH = 32;
    static readonly ENCRYPTION_IV_LENGTH = 16;
    constructor(network: Network);
    /**
     * Frame a packet with a header to be used as a wire msg
     */
    frame: (packet: Packet, encryptionKey?: Buffer | undefined) => Promise<Buffer>;
    /**
     * Unframe a wire msg or an encrypted wire msg
     */
    unframe: (msg: Buffer, encryptionKey?: Buffer | undefined) => WireMsg;
    /**
     * Parse the length of a wire msg or an encrypted wire msg
     */
    parseLength: (data: Buffer, encrypted: boolean) => number;
    /**
     * Parse the header of a wire msg or an encrypted wire msg payload
     */
    parseHeader: (msg: Buffer, encrypted: boolean) => WireMsgHeader;
    encrypt: (plaintext: Buffer, key: Buffer) => Promise<Buffer>;
    decrypt: (ciphertext: Buffer, key: Buffer) => Buffer;
}
export default Framer;
export { WireMsgHeader };
