bit-shift-cipher
bit-shift vernam cipher for nodejs and the browser
the cipher cannot be cracked assuming the following:
- The key is used only once
- The key is not in anyway compromised
the following would not be advisable:
- sending the ciphertext and key together over the same encrypted/unencrypted connection.
- encrypting the key with another encryption algorithm and sending the ciphertext and key together over the same encrypted/unencrypted connection.
demo: https://angeal185.github.io/bit-shift-cipher/
Installation
npm
$ npm install bit-shift-cipher --save
bower
$ bower install bit-shift-cipher
git
$ git clone git@github.com:angeal185/bit-shift-cipher.git
nodejs
const bitShift = ;
browser
API
//default options min: 0 // {integer} min shift max: 255 // {integer} max shift out: 'string' // {string/array/uint8} ~ default decrypt encoding string/array/uint8 padding: 22 // {array/boolean} ~ prepend/append random padding. false to disable reverse: false // reverse ciphertext iterations: 0 // rounds for ciphertext encrypt/decrypt (0-255) const conf = out: 'uint8'bsc = conf /* encrypt */ /** * sync ~ encrypt data * @param {string/byteArray/uint8Array} plain ~ data to be encrypted * @param * @param **/bsc /** * callback ~ encrypt data * @param {string/byteArray/uint8Array} plain ~ data to be encrypted * @param * @param **/ bsc /** * promise ~ encrypt data * @param {string/byteArray/uint8Array} plain ~ data to be encrypted * @param **/bsc /* decrypt */ /** * sync ~ decrypt data * @param {string/byteArray/uint8Array} plain ~ data to be decrypted * @param {string/byteArray/uint8Array} key ~ encryption key * @param * @param **/ bsc /** * callback ~ decrypt data * @param {string/byteArray/uint8Array} plain ~ data to be decrypted * @param {string/byteArray/uint8Array} key ~ encryption key * @param * @param **/ bsc /** * promise ~ decrypt data * @param {string/byteArray/uint8Array} plain ~ data to be encrypted * @param {string/byteArray/uint8Array} key ~ encryption key * @param **/ bsc /* encrypt with hmac and sign */ /** * callback ~ encrypt and sign * @param {string/byteArray/uint8Array} plain ~ data to encrypt * @param {string/byteArray/uint8Array} hkey ~ hmac key * @param * @param * @param **/ bsc /** * promise ~ encrypt and sign * @param {string/byteArray/uint8Array} plain ~ data to encrypt * @param {string/byteArray/uint8Array} hkey ~ hmac key * @param * @param **/ bsc /* verify hmac and decrypt */ /** * callback ~ verify and decrypt * @param {string/byteArray/uint8Array} ctext ~ data to decrypt * @param {string/byteArray/uint8Array} key ~ decrypt key * @param {string/byteArray/uint8Array} hmac ~ hmac signature * @param {string/byteArray/uint8Array} hkey ~ hmac key * @param * @param * @param **/ bsc /** * promise ~ verify and decrypt * @param {string/byteArray/uint8Array} ctext ~ data to decrypt * @param {string/byteArray/uint8Array} key ~ decrypt key * @param {string/byteArray/uint8Array} hmac ~ hmac signature * @param {string/byteArray/uint8Array} hkey ~ hmac key * @param * @param **/ bsc /* encrypt and sign with ecdsa */ /** * callback ~ encrypt and sign * @param {string/byteArray/uint8Array} plain ~ data to encrypt * @param * @param * @param * @param **/ bsc /** * promise ~ encrypt and sign * @param {string/byteArray/uint8Array} plain ~ data to encrypt * @param * @param * @param **/ bsc /* verify ecdsa and decrypt */ /** * callback ~ verify and decrypt * @param {string/byteArray/uint8Array} ctext ~ data to decrypt * @param {string/byteArray/uint8Array} key ~ decrypt key * @param {string/byteArray/uint8Array} sig ~ ecdsa signature * @param * @param * @param * @param **/ bsc /** * promise ~ verify and decrypt * @param {string/byteArray/uint8Array} ctext ~ data to decrypt * @param {string/byteArray/uint8Array} key ~ decrypt key * @param {string/byteArray/uint8Array} sig ~ ecdsa signature * @param * @param * @param **/ bsc /* hmac */ /** * callback ~ generate hmac key * @param * @param * @param **/ bschmac /** * promise ~ generate hmac key * @param * @param **/ bschmac /** * callback ~ sign encrypted data * @param {string/byteArray/uint8Array} key ~ hmac key * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param * @param **/ bschmac /** * promise ~ sign encrypted data * @param {string/byteArray/uint8Array} key ~ hmac key * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param **/ bschmac /** * callback ~ verify encrypted data * @param {string/byteArray/uint8Array} key ~ hmac key * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param {string/byteArray/uint8Array} sig ~ hmac signature * @param * @param **/ bschmac /** * promise ~ verify encrypted data * @param {string/byteArray/uint8Array} key ~ hmac key * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param {string/byteArray/uint8Array} sig ~ hmac signature * @param * @param **/ bschmac /* ecdsa */ /** * callback ~ generate ecdsa keypair * @param * @param **/ bscecdsa /** * promise ~ generate ecdsa keypair * @param **/ bscecdsa /** * callback ~ sign encrypted data * @param * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param * @param **/ bscecdsa /** * promise ~ sign encrypted data * @param * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param **/ bscecdsa /** * callback ~ verify signature * @param * @param {string/byteArray/uint8Array} sig ~ ecdsa signature * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param * @param **/ bscecdsa /** * promise ~ verify signature * @param * @param {string/byteArray/uint8Array} sig ~ ecdsa signature * @param {string/byteArray/uint8Array} ctext ~ encrypted data * @param * @param **/ bscecdsa /* utils */ bscutils // Uint8Array to stringbscutils // string to Uint8Arraybscutils // byteArray to binarybscutils // binary to byteArraybscutils // uint8Array to byteArraybscutils // hex to Uint8Arraybscutils // uint8Array to hex bscutils // prng singlebscutils // prng filled Uint8Array bscutils // check Uint8Arraybscutils // check arraybscutils // check stringbscutils // check if equal bscutils // add random padding to Uint8Array ~ [1,2]bscutils // remove padding from Uint8Array ~ [1,2] /* demo */ const conf = min: 0 max: 255 out: 'string'bsc = confutils = bscutilsDigest = 'hex'Hash = '256'Curve = '521'cl = consolelogce = consoleerror; // enc/dec synclet sync = bsc;sync = bsc;; // enc/dec callback// encrypt databsc // enc/dec promise// encrypt databsc // enc/dec with hmac callback// generate key if neededbschmac // enc/dec hmac promise //generate key if neededbschmac //hmac callback //generate keybschmac //hmac promise //generate keybschmac // ecdsa jwk gen callbackbscecdsa // ecdsa jwk gen promisebscecdsa // enc/dec with ecdsa callbackbscecdsa // enc/dec with ecdsa promisebscecdsa