blob: b67ee0d55367088299f72f0181d739655d26d912 [file] [log] [blame]
interface RsaOaepParams {
name: "RSA-OAEP";
}
interface AesCtrParams {
name: "AES-CTR";
counter: NjsStringOrBuffer;
length: number;
}
interface AesCbcParams {
name: "AES-CBC";
iv: NjsStringOrBuffer;
}
interface AesGcmParams {
name: "AES-GCM";
iv: NjsStringOrBuffer;
additionalData?: NjsStringOrBuffer;
tagLength?: number;
}
type CipherAlgorithm =
| RsaOaepParams
| AesCtrParams
| AesCbcParams
| AesCbcParams;
type HashVariants = "SHA-256" | "SHA-384" | "SHA-512" | "SHA-1";
interface RsaHashedImportParams {
name: "RSASSA-PKCS1-v1_5" | "RSA-PSS" | "RSA-OAEP";
hash: HashVariants;
}
interface EcKeyImportParams {
name: "ECDSA";
namedCurve: "P-256" | "P-384" | "P-521";
}
interface HmacImportParams {
name: "HMAC";
hash: HashVariants;
}
type AesVariants = "AES-CTR" | "AES-CBC" | "AES-GCM";
interface AesImportParams {
name: AesVariants;
}
type ImportAlgorithm =
| RsaHashedImportParams
| EcKeyImportParams
| HmacImportParams
| AesImportParams
| AesVariants
| "PBKDF2"
| "HKDF";
interface HkdfParams {
name: "HKDF";
hash: HashVariants;
salt: NjsStringOrBuffer;
info: NjsStringOrBuffer;
}
interface Pbkdf2Params {
name: "PBKDF2";
hash: HashVariants;
salt: NjsStringOrBuffer;
interations: number;
}
type DeriveAlgorithm =
| HkdfParams
| Pbkdf2Params;
interface HmacKeyGenParams {
name: "HMAC";
hash: HashVariants;
}
interface AesKeyGenParams {
name: AesVariants;
length: number;
}
type DeriveKeyAlgorithm =
| HmacKeyGenParams
| AesKeyGenParams;
interface RsaPssParams {
name: "RSA-PSS";
saltLength: number;
}
interface EcdsaParams {
name: "ECDSA";
hash: HashVariants;
}
type SignOrVerifyAlgorithm =
| RsaPssParams
| EcdsaParams
| { name: "HMAC"; }
| { name: "RSASSA-PKCS1-v1_5"; }
| "HMAC"
| "RSASSA-PKCS1-v1_5";
interface CryptoKey {
}
interface SubtleCrypto {
/**
* Decrypts encrypted data.
*
* @param algorithm Object specifying the algorithm to be used,
* and any extra parameters as required.
* @param key CryptoKey containing the key to be used for decryption.
* @param data Data to be decrypted.
*/
decrypt(algorithm: CipherAlgorithm,
key: CryptoKey,
data: NjsStringOrBuffer): Promise<ArrayBuffer>;
/**
* Derives an array of bits from a base key.
*
* @param algorithm Object defining the derivation algorithm to use.
* @param baseKey CryptoKey representing the input to the derivation algorithm.
* @param length Number representing the number of bits to derive.
*/
deriveBits(algorithm: DeriveAlgorithm,
baseKey: CryptoKey,
length: number): Promise<ArrayBuffer>;
/**
* Derives a secret key from a master key.
*
* @param algorithm Object defining the derivation algorithm to use.
* @param baseKey CryptoKey representing the input to the derivation algorithm.
* @param derivedKeyAlgorithm Object defining the algorithm the
* derived key will be used for.
* @param extractable Unsupported.
* @param usage Array indicating what can be done with the key.
* Possible array values: "encrypt", "decrypt", "sign", "verify",
* "deriveKey", "deriveBits", "wrapKey", "unwrapKey".
*/
deriveKey(algorithm: DeriveAlgorithm,
baseKey: CryptoKey,
derivedKeyAlgorithm: DeriveKeyAlgorithm,
extractable: boolean,
usage: Array<string>): Promise<CryptoKey>;
/**
* Generates a digest of the given data.
*
* @param algorithm String defining the hash function to use.
*/
digest(algorithm: HashVariants,
data: NjsStringOrBuffer): Promise<ArrayBuffer>;
/**
* Encrypts data.
*
* @param algorithm Object specifying the algorithm to be used,
* and any extra parameters as required.
* @param key CryptoKey containing the key to be used for encryption.
* @param data Data to be encrypted.
*/
encrypt(algorithm: CipherAlgorithm,
key: CryptoKey,
data: NjsStringOrBuffer): Promise<ArrayBuffer>;
/**
* Imports a key.
*
* @param format String describing the data format of the key to import.
* @param keyData Object containing the key in the given format.
* @param algorithm Dictionary object defining the type of key to import
* and providing extra algorithm-specific parameters.
* @param extractable Unsupported.
* @param usage Array indicating what can be done with the key.
* Possible array values: "encrypt", "decrypt", "sign", "verify",
* "deriveKey", "deriveBits", "wrapKey", "unwrapKey".
*/
importKey(format: "raw" | "pkcs8" | "spki",
keyData: NjsStringOrBuffer,
algorithm: ImportAlgorithm,
extractable: boolean,
usage: Array<string>): Promise<CryptoKey>;
/**
* Generates a digital signature.
*
* @param algorithm String or object that specifies the signature
* algorithm to use and its parameters.
* @param key CryptoKey containing the key to be used for signing.
* @param data Data to be signed.
*/
sign(algorithm: SignOrVerifyAlgorithm,
key: CryptoKey,
data: NjsStringOrBuffer): Promise<ArrayBuffer>;
/**
* Verifies a digital signature.
*
* @param algorithm String or object that specifies the signature
* algorithm to use and its parameters.
* @param key CryptoKey containing the key to be used for verifying.
* @param signature Signature to verify.
* @param data Data to be verified.
*/
verify(algorithm: SignOrVerifyAlgorithm,
key: CryptoKey,
signature: NjsStringOrBuffer,
data: NjsStringOrBuffer): Promise<boolean>;
}
interface Crypto {
readonly subtle: SubtleCrypto;
getRandomValues(ta:TypedArray): TypedArray;
}
declare const crypto: Crypto;