/// <reference types="node" />
import { Dict, Optional } from '@guarani/types';
import { KeyObject } from 'crypto';
import { SupportedJsonWebEncryptionKeyWrapAlgorithm } from '../jwe/algorithms/alg/types/supported-jsonwebencryption-keyencryption-algorithm';
import { SupportedJsonWebSignatureAlgorithm } from '../jws/algorithms/types/supported-jsonwebsignature-algorithm';
import { SupportedJsonWebKeyAlgorithm } from './algorithms/types/supported-jsonwebkey-algorithm';
import { JsonWebKeyParams } from './jsonwebkey.params';
import { KeyOperation } from './types/key-operation';
import { PublicKeyUse } from './types/public-key-use';
/**
 * Implementation of {@link https://www.rfc-editor.org/rfc/rfc7517.html#section-4 RFC 7517 Section 4}.
 */
export declare abstract class JsonWebKey implements JsonWebKeyParams {
    /**
     * NodeJS Crypto Key.
     */
    protected readonly cryptoKey: KeyObject;
    /**
     * Type of the JSON Web Key.
     */
    readonly kty: SupportedJsonWebKeyAlgorithm;
    /**
     * Indicates whether a Public JSON Web Key is used for Plaintext Encryption or Signature Verification.
     */
    readonly use?: Optional<PublicKeyUse>;
    /**
     * Operations for which the JSON Web Key are intended to be used.
     */
    readonly key_ops?: Optional<KeyOperation[]>;
    /**
     * Defines the JSON Web Encryption Key Wrap Algorithm or JSON Web Signature Algorithm
     * allowed to use this JSON Web Key.
     */
    readonly alg?: Optional<SupportedJsonWebEncryptionKeyWrapAlgorithm | SupportedJsonWebSignatureAlgorithm>;
    /**
     * Defines the Identifier of the JSON Web Key.
     */
    readonly kid?: Optional<string>;
    /**
     * Defines the URL of the X.509 certificate of the JSON Web Key.
     */
    readonly x5u?: Optional<string>;
    /**
     * Defines a chain of X.509 certificates of the JSON Web Key.
     */
    readonly x5c?: Optional<string[]>;
    /**
     * Defines the SHA-1 Thumbprint of the X.509 certificate of the JSON Web Key.
     */
    readonly x5t?: Optional<string>;
    /**
     * Defines the SHA-256 Thumbprint of the X.509 certificate of the JSON Web Key.
     */
    readonly 'x5t#S256'?: Optional<string>;
    /**
     * Instantiates a new JSON Web Key based on the provided Parameters.
     *
     * @param params Parameters of the JSON Web Key.
     */
    constructor(params?: Optional<JsonWebKeyParams>);
    /**
     * Checks if the provided data conforms to the JSON Web Key Specification.
     *
     * @param data Data to be checked.
     */
    static isJsonWebKey(data: unknown): data is JsonWebKeyParams;
    /**
     * Loads the provided JSON Web Key into a NodeJS Crypto Key.
     *
     * @param params Parameters of the JSON Web Key.
     * @returns NodeJS Crypto Key.
     */
    protected abstract loadCryptoKey(params: JsonWebKeyParams): KeyObject;
    /**
     * Exports the data of the JSON Web Key into a String.
     *
     * @param options Options for exporting the data of the JSON Web Key.
     * @returns Resulting String.
     */
    abstract export(options: Dict): string;
    /**
     * Exports the data of the JSON Web Key into a Buffer.
     *
     * @param options Options for exporing the data of the JSON Web Key.
     * @returns Resulting Buffer.
     */
    abstract export(options: Dict): Buffer;
}
