'use strict';
+const ALG = {
+ __proto__: null,
+
+ AES_256_GCM: 'aes-256-gcm',
+ CHACHA20_POLY1305: 'chacha20-poly1305',
+ XCHACHA20_POLY1305: 'xchacha20-poly1305',
+};
+
+const KD = {
+ __proto__: null,
+
+ SCRYPT: 'scrypt',
+ SHAKE256: 'shake256',
+ BLAKE2B512: 'blake2b512',
+};
+
/**
* Supported packings/cipher types.
* To be useful, any cipher included here must be Authenticated Encryption with Additional Data (AEAD).
* More preferable versions are numbered higher.
*/
const allVersions = {
+ __proto__: null,
+
1: {
version: 1,
- algorithm: 'aes-256-gcm',
+ algorithm: ALG.AES_256_GCM,
algOptions: {},
versionBytes: 1,
flagsBytes: 1,
ivBytes: 12,
saltBytes: 16,
tagBytes: 16,
+ keyDeriver: KD.SCRYPT,
keyBytes: 32,
},
2: {
version: 2,
- algorithm: 'chacha20-poly1305', // Prefer this over NIST because we stan djb
+ algorithm: ALG.CHACHA20_POLY1305, // Prefer this over NIST because we stan djb
algOptions: {
authTagLength: 16,
},
ivBytes: 12,
saltBytes: 16,
tagBytes: 16,
+ keyDeriver: KD.SCRYPT,
keyBytes: 32,
},
3: {
version: 3,
- algorithm: 'xchacha20-poly1305', // Not yet available...
+ algorithm: ALG.XCHACHA20_POLY1305, // Not yet available, but would prefer even more...
+ algOptions: {
+ authTagLength: 16,
+ },
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 24,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.SCRYPT,
+ keyBytes: 32,
+ },
+ 4: {
+ version: 4,
+ algorithm: ALG.AES_256_GCM,
+ algOptions: {},
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 12,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.SHAKE256,
+ keyBytes: 32,
+ },
+ 5: {
+ version: 5,
+ algorithm: ALG.CHACHA20_POLY1305,
+ algOptions: {
+ authTagLength: 16,
+ },
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 12,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.SHAKE256,
+ keyBytes: 32,
+ },
+ 6: {
+ version: 6,
+ algorithm: ALG.XCHACHA20_POLY1305, // Not yet available, but would prefer even more...
algOptions: {
authTagLength: 16,
},
ivBytes: 24,
saltBytes: 16,
tagBytes: 16,
+ keyDeriver: KD.SHAKE256,
+ keyBytes: 32,
+ },
+ 7: {
+ version: 7,
+ algorithm: ALG.AES_256_GCM,
+ algOptions: {},
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 12,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.BLAKE2B512,
+ keyBytes: 32,
+ },
+ 8: {
+ version: 8,
+ algorithm: ALG.CHACHA20_POLY1305,
+ algOptions: {
+ authTagLength: 16,
+ },
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 12,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.BLAKE2B512,
+ keyBytes: 32,
+ },
+ 9: {
+ version: 9,
+ algorithm: ALG.XCHACHA20_POLY1305, // Not yet available, but would prefer even more...
+ algOptions: {
+ authTagLength: 16,
+ },
+ versionBytes: 1,
+ flagsBytes: 1,
+ ivBytes: 24,
+ saltBytes: 16,
+ tagBytes: 16,
+ keyDeriver: KD.BLAKE2B512,
keyBytes: 32,
},
};
+Object.defineProperties(allVersions, {
+ ALG: {
+ enumerable: false,
+ get: () => ALG,
+ },
+ KD: {
+ enumerable: false,
+ get: () => KD,
+ },
+});
+
module.exports = allVersions;
\ No newline at end of file