import { Http, IsomorphicBuffer } from "@akala/core";
import State from "../state.js";
export type PairMessage = {
    method: PairMethod;
    identifier: string;
    salt: IsomorphicBuffer;
    publicKey: IsomorphicBuffer;
    proof: IsomorphicBuffer;
    encryptedData: IsomorphicBuffer;
    state: PairState;
    error: PairErrorCode;
    retryDelay: number;
    certificate: IsomorphicBuffer;
    signature: IsomorphicBuffer;
    permissions: number;
    fragmentData: IsomorphicBuffer;
    fragmentLast: IsomorphicBuffer;
    flags: number;
};
export declare enum PairMethod {
    Setup = 0,
    SetupWithAuth = 1,
    Verify = 2,
    AddPairing = 3,
    RemovePairing = 4,
    ListPairings = 5
}
export declare enum PairState {
    M1 = 1,
    M2 = 2,
    M3 = 3,
    M4 = 4,
    M5 = 5,
    M6 = 6
}
export declare enum PairErrorCode {
    Unknown = 1,
    Authentication = 2,
    Backoff = 3,
    MaxPeers = 4,
    MaxTries = 5,
    Unavailable = 6,
    Busy = 7
}
export declare enum PairTypeFlags {
    Transient = 2,
    Split = 64
}
export default function pair(this: State, accessoryAddress: string, accessoryFqdn: string, http: Http, pinCode: string): Promise<void>;
export declare const pairMessage: import("@akala/protocol-parser/dist/parsers/tlv/object.js").default<Partial<PairMessage>>;
export type PairSetupM2 = Pick<PairMessage, 'state' | 'publicKey' | 'salt'>;
export type PairSetupM3 = Pick<PairMessage, 'state' | 'proof'>;
export type PairSetupM4 = Pick<PairMessage, 'state' | 'proof' | 'encryptedData'>;
export type PairSetupM5 = Pick<PairMessage, 'state' | 'publicKey' | 'encryptedData'>;
export type PairSetupM6 = Pick<PairMessage, 'state' | 'encryptedData'>;
export type SubPairSetupM6 = Pick<PairMessage, 'identifier' | 'signature' | 'publicKey'>;
export interface PairSetupClientInfo {
    username: string;
    publicKey: IsomorphicBuffer;
    privateKey: IsomorphicBuffer;
}
interface EncryptedData {
    ciphertext: IsomorphicBuffer;
    authTag: IsomorphicBuffer;
}
export interface PairedAccessory {
    publicKey: IsomorphicBuffer;
    identifier: string;
}
/**
 * @group Cryptography
 */
export declare function chacha20_poly1305_encryptAndSeal(key: Buffer, nonce: Buffer, aad: Buffer | null, plaintext: Buffer): EncryptedData;
/**
 * @group Cryptography
 */
export declare function chacha20_poly1305_decryptAndVerify(key: Buffer, nonce: Buffer, aad: Buffer | null, ciphertext: Buffer, authTag: Buffer): Buffer;
export {};
