X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fversion-parameters.js;h=afa8441bb56243633538ddce8944126c31304978;hb=HEAD;hp=80a09356c28c3a3bb7cc1afbeb2b570d68e133a2;hpb=044615f53bacdc366b44941218d808c549607469;p=squeep-mystery-box diff --git a/lib/version-parameters.js b/lib/version-parameters.js index 80a0935..afa8441 100644 --- a/lib/version-parameters.js +++ b/lib/version-parameters.js @@ -1,25 +1,44 @@ '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, }, @@ -28,11 +47,52 @@ const allVersions = { 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, }, @@ -41,8 +101,60 @@ const allVersions = { 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