UNPKG

@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
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;