@li0ard/gost3413
Version:
Cipher modes and padding's according to GOST R 34.13-2015 in pure TypeScript
169 lines (168 loc) • 7.56 kB
TypeScript
import { type ACPKMConstructor, type ACPKMParameters, type CipherFunc } from "./utils";
export { type ACPKMClass, type ACPKMConstructor, type ACPKMParameters, type CipherFunc, KEYSIZE } from "./utils";
export { MGM } from "./mgm";
export declare const isEqual: (a: Uint8Array, b: Uint8Array) => boolean;
/**
* Calculate length of padding bytes needed for specific block size.
*
* @param dataLength Length of input data
* @param blockSize Target block size
*/
export declare const getPadLength: (dataLength: number, blockSize: number) => number;
/**
* Procedure 1 (aka `Процедура 1`)
*
* Just fill in with zeros if necessary
* @param data Input data
* @param blockSize Target block size
*/
export declare const pad1: (data: Uint8Array, blockSize: number) => Uint8Array;
/**
* Procedure 2 (aka `Процедура 2` aka `ISO/IEC 7816-4`)
* @param data Input data
* @param blockSize Target block size
*/
export declare const pad2: (data: Uint8Array, blockSize: number) => Uint8Array;
/**
* Unpadding for Procedure 2
* @param data Input data
* @param blockSize Target block size
*/
export declare const unpad2: (data: Uint8Array, blockSize: number) => Uint8Array;
/**
* Procedure 3 (aka `Процедура 3`)
*
* If length of data matches block size, do nothing; otherwise, use Procedure 2 (`pad2`)
* @param data Input data
* @param blockSize Block size
*/
export declare const pad3: (data: Uint8Array, blockSize: number) => Uint8Array;
/**
* Wrapper for Electronic Codebook (ECB) mode
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
*/
export declare const ecb_encrypt: (encrypter: CipherFunc, blockSize: number, data: Uint8Array) => Uint8Array;
/**
* Wrapper for Electronic Codebook (ECB) mode
* @param decrypter Decrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
*/
export declare const ecb_decrypt: (decrypter: CipherFunc, blockSize: number, data: Uint8Array) => Uint8Array;
/**
* Wrapper for Output Feedback (OFB) mode
*
* For decryption you SHOULD use this function again
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector
*/
export declare const ofb: (encrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* Wrapper for Cipher Block Chaining (CBC) mode
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector
*/
export declare const cbc_encrypt: (encrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* Wrapper for Cipher Block Chaining (CBC) mode
* @param decrypter Decrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector
*/
export declare const cbc_decrypt: (decrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* Wrapper for Cipher Feedback (CFB) mode
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector
*/
export declare const cfb_encrypt: (encrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* Wrapper for Cipher Feedback (CFB) mode
* @param decrypter Decrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector
*/
export declare const cfb_decrypt: (decrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* Wrapper for counter (CTR) mode
*
* For decryption you SHOULD use this function again
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector (Half of block size)
* @param acpkm Optional. Parameters for CTR-ACPKM mode
*/
export declare const ctr: (encrypter: CipherFunc, blockSize: number, data: Uint8Array, iv: Uint8Array, acpkm?: ACPKMParameters) => Uint8Array;
/**
* Wrapper for MAC (CMAC/OMAC1) mode
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
* @param data Input data
*/
export declare const mac: (encrypter: CipherFunc, blockSize: number, data: Uint8Array) => Uint8Array;
/**
* ACPKM key derivation
* @param encrypter Encrypting function, that takes block as input
* @param blockSize Cipher block size
*/
export declare const acpkmDerivation: (encrypter: CipherFunc, blockSize: number) => Uint8Array;
/**
* Wrapper for Counter with Advance Cryptographic Prolongation of Key Material (CTR-ACPKM) mode
*
* For decryption you SHOULD use this function again
* @param cipherClass Cipher class (see `ACPKMConstructor` and `ACPKMClass`)
* @param encrypter Encrypting function, that takes block as input
* @param sectionSize ACPKM section size (N)
* @param blockSize Cipher block size
* @param data Input data
* @param iv Initialization vector (Half of block size)
*/
export declare const ctr_acpkm: (cipherClass: ACPKMConstructor, encrypter: CipherFunc, sectionSize: number, blockSize: number, data: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* ACPKM master key derivation
* @param cipherClass Cipher class (see `ACPKMConstructor` and `ACPKMClass`)
* @param encrypter Encrypting function, that takes block as input
* @param keySectionSize ACPKM key section size (T*)
* @param blockSize Cipher block size
* @param keyMaterialLength Length of key material
*/
export declare const acpkmDerivationMaster: (cipherClass: ACPKMConstructor, encrypter: CipherFunc, keySectionSize: number, blockSize: number, keyMaterialLength: number) => Uint8Array;
/**
* Wrapper for MAC with Advance Cryptographic Prolongation of Key Material (OMAC-ACPKM) mode
* @param cipherClass Cipher class (see `ACPKMConstructor` and `ACPKMClass`)
* @param encrypter Encrypting function, that takes block as input
* @param keySectionSize ACPKM key section size (T*)
* @param sectionSize ACPKM section size (N)
* @param blockSize Cipher block size
* @param data Input data
*/
export declare const omac_acpkm_master: (cipherClass: ACPKMConstructor, encrypter: CipherFunc, keySectionSize: number, sectionSize: number, blockSize: number, data: Uint8Array) => Uint8Array;
/**
* KExp15 key exporting
* @param encrypter_key Encrypting function for key encryption, that takes block as input
* @param encrypter_mac Encrypting function for key authentication, that takes block as input
* @param blockSize Cipher block size
* @param key Key to export
* @param iv Initialization vector (Half of block size)
*/
export declare const kexp15: (encrypter_key: CipherFunc, encrypter_mac: CipherFunc, blockSize: number, key: Uint8Array, iv: Uint8Array) => Uint8Array;
/**
* KImp15 key importing
* @param encrypter_key Encrypting function for key decryption, that takes block as input
* @param encrypter_mac Encrypting function for key authentication, that takes block as input
* @param blockSize Cipher block size
* @param kexp Key to import
* @param iv Initialization vector (Half of block size)
*/
export declare const kimp15: (encrypter_key: CipherFunc, encrypter_mac: CipherFunc, blockSize: number, kexp: Uint8Array, iv: Uint8Array) => Uint8Array;