import ProtectedHeaders from "./ProtectedHeaders";
import UnprotectedHeaders from "./UnprotectedHeaders";
import type { SignAlg } from "../types";
import { KeyObject } from "crypto";
export default class Token {
    /**
     * Protected headers of the token
     * @var {object}
    */
    private protectedHeader;
    /**
     * Unprotected headers of the token
     * @var {object}
     */
    private header;
    /**
     * The claim of the token (aka payload)
     * @var {string}
     */
    private claim;
    /**
     * The signature of the token
     * @var {Buffer}
     */
    private signature;
    constructor(_claim: string | object);
    /**
     * Set the protected headers of the token.
     *
     * @param {ProtectedHeaders} headers The protected headers of the token.
     *
     * @returns {void}
     */
    setProtectedHeaders(headers: ProtectedHeaders): void;
    /**
     * Set the unprotected headers of the token.
     *
     * @param {UnprotectedHeaders} headers The unprotected headers of the token.
     *
     * @returns {void}
     */
    setUnprotectedHeaders(headers: UnprotectedHeaders): void;
    /**
     * Method to use a detached signature for this token.
     * This will require you to pass a `sigD` header value (validation not yet implemented), and will
     * also remove the claim from the token in accordance with the detached signature requirements.
     *
     * @param {Object}   sigD  The detached signature object
     *
     * @returns {void}
     */
    setDetachedSignature(sigD: Object): void;
    /**
     * Method to get the hased value to be signed.
     *
     * @param   {SignAlg}  alg  The algorithm to use to sign the token.
     *
     * @returns {Buffer}        The hashed value to be signed.
     */
    getHash(alg: SignAlg): Buffer;
    /**
     * Set the signature of the token.
     *
     * @param {Buffer} signature The signature of the token.
     *
     * @returns
     */
    setSignature(alg: SignAlg, signature: Buffer): void;
    /**
     * Sign the token using the specified algorithm and key.
     *
     * @param   {SignAlg}    alg  Algorithm to use to sign the token
     * @param   {KeyObject}  key  Key to use to sign the token
     *
     * @return  {string}          Base64url encoded signature
     */
    sign(alg: SignAlg, key: KeyObject): string;
    /**
     * Export the token to a string using in compact serialization.
     *
     * @return  {string}    The token in compact serialization.
     */
    toString(): string;
    /**
     * Export the token to an object.
     *
     * @return  {object}    The token in object form.
     */
    toObject(): object;
}
