k9crypt
Version:
A special encryption algorithm created for K9Crypt.
47 lines (46 loc) • 1.87 kB
JavaScript
module.exports = {
PAYLOAD_MAGIC: Buffer.from('4b394332', 'hex'),
PAYLOAD_VERSION_V2: 2,
PAYLOAD_VERSION_V3: 3,
PAYLOAD_VERSION_V4: 4,
PAYLOAD_VERSION_V5: 5,
PAYLOAD_CURRENT_VERSION: 5,
CIPHER_AES_256_GCM: 0x00,
CIPHER_CHACHA20_POLY1305: 0x01,
PAYLOAD_FLAGS_NONE: 0,
PAYLOAD_FLAG_BINARY: 1,
PAYLOAD_FLAG_RAW: 2,
PAYLOAD_SUPPORTED_FLAGS: 3,
PAYLOAD_HEADER_SIZE: 18,
PAYLOAD_HEADER_SIZE_V5: 19,
DEFAULT_TIME_STEP_SECONDS: 300,
MAX_TIME_STEP_SECONDS: 86400,
SALT_SIZE: 32,
IV_SIZE: 16,
IV_SIZE_V5: 12,
KEY_SIZE: 32,
TAG_SIZE: 16,
// min 600,000 for PBKDF2-HMAC-SHA512
PBKDF2_ITERATIONS: 600000,
// Fixed binary pepper; avoids string encoding ambiguity on binary secret keys
PEPPER: Buffer.from('6b39637279707470657070657276616c7565313233214023242526272829', 'hex'),
// Fixed binary HMAC key; length matches SHA-512 block size for optimal HMAC performance
HMAC_KEY: Buffer.from('6b396372797074686d61636b657976616c7565343536214023242526272829', 'hex'),
ARGON2_SALT_SIZE: 16,
ARGON2_HASH_LENGTH: 64,
// Argon2id params: OWASP recommended minimum for non-interactive (integrity hashing)
ARGON2_TIME_COST: 3,
ARGON2_MEMORY_COST: 65536,
ARGON2_PARALLELISM: 4,
STREAM_HIGH_WATER_MARK: 512 * 1024,
MAX_BUFFERED_FILE_SIZE: 16 * 1024 * 1024,
MAX_PLAINTEXT_SIZE: 100 * 1024 * 1024,
MAX_CIPHERTEXT_SIZE: 200 * 1024 * 1024,
// salt(32) + 5*iv(80) + min_encrypted(1) + tag(16) + argon2Salt(16) + argon2Hash(64) = 209
MIN_PAYLOAD_SIZE: 209,
// v2 prepends authenticated time metadata: magic(4) + version(1) + flags(1) + step(4) + issuedAt(8)
MIN_V2_PAYLOAD_SIZE: 227,
// v5: header(19) + salt(32) + iv(12) + min_ciphertext(1) + tag(16) + integritySalt(16) + dataHash(64) = 160
MIN_V5_PAYLOAD_SIZE: 160,
MASTER_KEY_SALT: Buffer.from('6b3963727970743a76353a6d61737465722d6b65792d73616c743a7631', 'hex')
};