import * as jose from 'jose';
/**
 * An output definition as would be passed via createTransaction
 */
export interface DocV1Output {
    type: 'mB:doc1';
    /**
     * The raw original data
     */
    data: Uint8Array;
    /**
     * Array of JWK (private keys)
     */
    signers: jose.JWK[];
    /**
     * Optional data to include
     */
    options: {
        /**
         * Any additional metadata
         */
        meta: any;
        /**
         * A filename
         */
        filename: string;
        /**
         * A mimetype
         */
        mimetype: string;
    };
    /**
     * Optional array of JWK (public keys) or hexadecimal public keys (compressed or uncompressed)
     * To encrypto to additional third parties
     */
    receivers?: jose.JWK[] | string[];
    /**
     * How many PBKDF2 iterations to do (default 200000)
     */
    iterations?: number;
}
/**
 * Info that we can rebuild from both parsing and creating
 */
export interface DocV1Info {
    secret1: Uint8Array;
    secret1Hex: string;
    secret1Base62: string;
    secret2: Uint8Array;
    secret2Hex: string;
    secret2Base62: string;
    data: Uint8Array;
    iterations: number;
    encryptedData: Uint8Array;
    receiverKeyIds: string[];
    PROTOCOL_ID: string;
    safeScriptArray: any[];
    options: {
        meta: any;
        filename: string;
        mimetype: string;
    };
}
export interface DocV1ParseOptions {
    encryptedData: Uint8Array;
    secret1: Uint8Array;
    secret2: Uint8Array;
    receiverKey: CryptoKey;
    verifyKey?: jose.KeyLike | jose.GeneralVerifyGetKey;
}
export declare class DocV1 {
    static PROTOCOL_ID: string;
    readonly createOptions: DocV1Output | null;
    readonly parseOptions: DocV1ParseOptions | null;
    readonly info: DocV1Info;
    private constructor();
    private static calculateSecrets;
    static create(options: DocV1Output): Promise<DocV1>;
    static parse(options: DocV1ParseOptions): Promise<DocV1>;
    toOpReturnScriptHex(): string;
}
