/**
 * @author Rich Miles
 * @date December 05, 2022
 *
 * This code provides an implementation of the Fernet symmetric encryption algorithm
 * using the Web Crypto API.
 *
 * @warning This code is provided as is, without any warranty or guarantees. Use at your own risk.
 *
 * @example
 * // Create a new Fernet instance using a secret key
 * const fernet = await Fernet.create("-lf4DsgLkOaE1GbtIQKNGU1NPQByMDKP2a6Enl9rclE=");
 *
 * // Encrypt a message
 * const encryptedToken = await fernet.encrypt("Hello world!");
 *
 * // Decrypt the encrypted message
 * const decryptedMessage = await fernet.decrypt(encryptedToken);
 *
 * // Print the decrypted message
 * console.log(decryptedMessage); // Hello world!
 */
/**
 * Fernet is a simple and secure way to encrypt and decrypt messages using symmetric encryption.
 */
export default class Fernet {
    private signingKey;
    private encryptionKey;
    /**
     * Create a new Fernet instance with the provided signing and encryption keys.
     * @param signingKey - A CryptoKey to use for signing messages.
     * @param encryptionKey - A CryptoKey to use for encrypting and decrypting messages.
     */
    private constructor();
    /**
     * Generate signing and encryption keys from a secret key.
     * @param secretKeyBuffer - A Uint8Array containing the secret key to use.
     * @returns A tuple containing the signing and encryption keys.
     */
    private static initializeKeys;
    /**
     * Create a new Fernet instance with a secret key.
     * @param secretKey_b64 - A base64-encoded string representation of the secret key to use.
     * If null, a new secret key will be generated.
     * @returns A new Fernet instance.
    */
    static create(secretKey_b64: string | null): Promise<Fernet>;
    /**
Encrypt a message into a Fernet token.
@param plainText - The message to encrypt.
@returns A base64-encoded Fernet token.
*/
    encrypt(plainText: string): Promise<string>;
    /**
     * Decrypt a Fernet token and return the plain text message.
     * @param token_b64 - A base64-encoded Fernet token.
     * @returns The decrypted message as a string.
     */
    decrypt(token_b64: string): Promise<string>;
}
