cipher-collection
Version:
Zero-dependency modular cipher collection including all well-known and often used ciphers
2 lines (1 loc) • 11.6 kB
JavaScript
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n["cipher-collection"]=e()}(this,function(){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},e=Object.assign||function(n){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(n[t]=r[t])}return n},r=function(){return function(n,e){if(Array.isArray(n))return n;if(Symbol.iterator in Object(n))return function(n,e){var r=[],t=!0,o=!1,a=void 0;try{for(var i,c=n[Symbol.iterator]();!(t=(i=c.next()).done)&&(r.push(i.value),!e||r.length!==e);t=!0);}catch(n){o=!0,a=n}finally{try{!t&&c.return&&c.return()}finally{if(o)throw a}}return r}(n,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),t=function(n){if(Array.isArray(n)){for(var e=0,r=Array(n.length);e<n.length;e++)r[e]=n[e];return r}return Array.from(n)},o=function(n,e){if(n.failOnUnknownCharacter)throw Error(e);return""},a="object"===("undefined"==typeof window?"undefined":n(window)),i=function(n,r){r=e({},f,r);var t=d(n);return t!==l.OTHER&&c(t,r.types)?u(n,{type:t,keys:r.keys,decode:r.decode}):o(r,r.errorMessage)||r.omitUnknownCharacter?"":n},c=function(n,e){return!0===e||!!(e.reduce(function(n,e){return n|e})&n)},u=function(n,e){for(var r=p[e.type],t=parseInt(n,36)-(e.type===l.NUMBER?0:10),o=e.type===l.NUMBER?10:26,a=e.decode?function(n,e){if(n<0||e<2)throw Error("Invalid input");return n%=e,Array.from(new Array(e-1),function(n,e){return e+1}).find(function(r){return r*n%e==1})%e||!1}(e.keys[0],o):e.keys[0],i=e.keys[1],c=e.decode?a*(t-i):t*a+i;c<0;)c+=o;return String.fromCharCode(r+c%o)},f={keys:[3,0],types:!0,failOnUnknownCharacter:!0,omitUnknownCharacter:!1,decode:!1},d=function(n){return n>="a"&&n<="z"?l.LOWERCASE:n>="A"&&n<="Z"?l.UPPERCASE:n>="0"&&n<="9"?l.NUMBER:l.OTHER},l={UPPERCASE:1,LOWERCASE:2,NUMBER:4,OTHER:8},p={1:65,2:97,4:48},s=function(n){return{types:!!n.rotateNumbers||[l.LOWERCASE,l.UPPERCASE,l.OTHER],keys:[1,n.rotations%26],failOnUnknownCharacter:!1}},h={rotateNumbers:!1,rotations:13},v={A:".-",B:"-...",C:"-.-.",D:"-..",E:".",F:"..-.",G:"--.",H:"....",I:"..",J:".---",K:"-.-",L:".-..",M:"--",N:"-.",O:"---",P:".--.",Q:"--.-",R:".-.",S:"...",T:"-",U:"..-",V:"...-",W:".--",X:"-..-",Y:"-.--",Z:"--..",1:".----",2:"..---",3:"...--",4:"....-",5:".....",6:"-....",7:"--...",8:"---..",9:"----.",0:"-----"," ":"/",".":".-.-.-",",":"--..--",":":"---...",";":"-.-.-.","?":"..--..","-":"-....-",_:"..--.-","(":"-.--.",")":"-.--.-","'":".----.","=":"-...-","+":".-.-.","/":"-..-.","@":".--.-."},m={separator:" ",failOnUnknownCharacter:!0,omitUnknownCharacter:!1},y={decode:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t=e({},m,t),n.split(t.separator).map(function(n){var e=Object.entries(v).find(function(e){var t=r(e,2);return t[0],t[1]===n});return e?e[0]:(o(t,"Undecodable character "+n),t.omitUnknownCharacter?"":n)}).join("")},encode:function(n){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a=e({},m,a),[].concat(t(n.toUpperCase())).map(function(n){var e=Object.entries(v).find(function(e){return r(e,1)[0]===n});return e?e[1]:(o(a,"Unencodable character "+n),a.omitUnknownCharacter?"":n)}).join(a.separator)}},g=function(n,e){var r=y.encode(n.toUpperCase(),e);return r.length%3&&(r+=e.separator.repeat(3-r.length%3)),r.replace(new RegExp(""+e.separator,"g"),"x").replace(new RegExp(""+C,"g"),"xx")},w=["...","..-","..x",".-.",".--",".-x",".x.",".x-",".xx","-..","-.-","-.x","--.","---","--x","-x.","-x-","-xx","x..","x.-","x.x","x-.","x--","x-x","xx.","xx-"],C="x/x",U={keyAlphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",failOnUnknownCharacter:!0},k={separator:"x"},b={decode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r=e({},U,r);var a=e({},k,{failOnUnknownCharacter:r.failOnUnknownCharacter}),i=[].concat(t(n)).map(function(n){var e=r.keyAlphabet.indexOf(n);return-1!==e?w[e]:o(r,"Undecodable character "+n)}).join("").replace(/x{1,2}$/,"").replace(/xx/g,C);return y.decode(i,a)},encode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r=e({},U,r);var t=e({},k,{failOnUnknownCharacter:r.failOnUnknownCharacter});return g(n,t).match(/.{3}/g).map(function(n){var e=w.indexOf(n);return-1!==e?r.keyAlphabet[e]:o(r,"Unencodable character "+n)}).join("")}},O=function(n){return" "===n?"space":"."===n?"short":"-"===n?"long":"/"===n&&"separator"},x=function(n){return"space"===n?" ":"short"===n?".":"long"===n?"-":"/"},E=function(n){if(!Object.keys(n).length)throw Error("You have no keys set");var e=["space","short","long","separator"];if(Object.keys(n).length!==e.length||Object.keys(n).filter(function(n){return!e.includes(n)}).length)throw Error("Please define your keys: "+e.join(", "))},j={decode:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return E(e),n=[].concat(t(n)).map(function(n){var t=Object.entries(e).find(function(e){var t=r(e,2);return t[0],t[1].includes(n)}),o=!!t&&x(t[0]);if(!o)throw Error("Unknown key "+n);return o}).join(""),[].concat(t(y.decode(n,o))).join("")},encode:function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return E(e),[].concat(t(y.encode(n.toUpperCase(),r))).map(function(n){var r=O(n);if(!r)throw Error("Unknown key "+n);return[].concat(t(e[r]))[function(n,e){if(n>e)throw Error("Min cannot be larger than max");return n=Math.ceil(n),e=Math.floor(e),Math.floor(Math.random()*(e-n))+n}(0,e[r].length)]}).join("")}},S=function(r){return"object"===(void 0===r?"undefined":n(r))?e({},R,r):R},A={customMapping:{0:" "},exponentForm:!1,withSpacing:!0,failOnUnknownCharacter:!0},R={2:"ABC",3:"DEF",4:"GHI",5:"JKL",6:"MNO",7:"PQRS",8:"TUV",9:"WXYZ"},M={decode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r=e({},A,r);var t=S(r.customMapping),o=/[^\d^*# ]/g;if(n.match(o)){if(r.failOnUnknownCharacter)throw Error("Undecodable characters");n.replace(o)}return n.length?(r.exponentForm?n.match(/\d\^\d ?/g):n.match(/(([79])\2{0,4}|([234568])\3{0,2}|([01*#])\4{0,2}) ?/g)).map(function(n){return n=n.replace(/ /g,""),r.exponentForm?t[n[0]][n[2]-1]:t[n[0]][n.length-1]}).join(""):""},encode:function(n){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a=e({},A,a),[].concat(t(n.toUpperCase())).map(function(n){var e=Object.entries(S(a.customMapping)).find(function(e){var t=r(e,2);return t[0],t[1].includes(n)});if(e){var t=e[1].indexOf(n)+1;return a.exponentForm?e[0]+"^"+t:(""+e[0]).repeat(t)}return o(a,"Unencodable character "+n)}).filter(function(n){return n.length}).join(a.withSpacing?" ":"")}},N=function(n){return function(e){var t=r(e,1)[0];return n.includes(t)}},P=function(n){return"include"===n?F:Object.entries(F).map(function(t){var o=r(t,2),a=o[0],i=o[1];return Object.entries(i).reduce(function(t,o){var i,c,u,f=r(o,2),d=f[0],l=f[1];return e({},t,(i={},c="sum"===n?Number(d)+Number(a):Number(d)-Number(a),u=l,c in i?Object.defineProperty(i,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):i[c]=u,i))},{})}).reduce(function(n,r){return e({},n,r)},{})},I=function(n,e){var r=e.mode,t=e.invertedOutput,o=e.connector;return t&&n.reverse(),{include:""+(n=n.map(function(n){return Number(n)}))[0]+o+n[1],sum:""+(n[0]+n[1]),diff:""+(n[0]>n[1]?n[0]-n[1]:n[1]-n[0])}[r]},L=function(n){var e=n.mode;if(!B.includes(e))throw new Error("Unknown mode")},B=["include","sum","diff"],T={mode:"include",connector:"+",separator:" ",invertedOutput:!1,failOnUnknownCharacter:!0},F={697:{1209:"1",1336:"2",1477:"3",1633:"A"},770:{1209:"4",1336:"5",1477:"6",1633:"B"},852:{1209:"7",1336:"8",1477:"9",1633:"C"},941:{1209:"*",1336:"0",1477:"#",1633:"D"}},H={decode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r=e({},T,r),n.split(r.separator).map(function(n){var e=P(r.mode);if(L(r),"include"===r.mode){var t=Object.entries(e).find(N(n));if(!t)return o(r,"Could not decode "+n+" - No row found");var a=Object.entries(t[1]).find(N(n));return a?a[1]:o(r,"Could not decode "+n+" - No cell found")}return e.hasOwnProperty(n)?e[n]:o(r,"Could not decode "+n+" - No matching value")}).join("")},encode:function(n){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a=e({},T,a),L(a),[].concat(t(n)).map(function(n){var e=Object.entries(F).map(function(e){var t=r(e,2),o=t[0],i=t[1],c=Object.entries(i).find(function(e){var t=r(e,2);return t[0],t[1]===n});return!!c&&I([o,c[0]],a)}).find(function(n){return n});return e||o(a,"Invalid input")}).join(a.separator)}},W=a?window.btoa:function(n){return Buffer.from(n).toString("base64")},D=a?window.atob:function(n){return Buffer.from(n,"base64").toString()},K=function(n){return n.toLowerCase()===n},Y={mapping:{},caseSensitive:!0},Z=function(n){return{mapping:G,caseSensitive:n.onlyUpperCase}},G={A:"M",E:"K",I:"D",O:"T",U:"H"},J=function(n,e){if(!X.includes(e.key))throw new Error("Illegal key");return[].concat(t(n)).map(function(n){return i(n,V(e))}).join("")},Q={key:3,failOnUnknownCharacter:!1,omitUnknownCharacter:!1},V=function(n){return{types:[l.LOWERCASE,l.UPPERCASE],keys:[n.key,0],failOnUnknownCharacter:n.failOnUnknownCharacter,omitUnknownCharacter:n.omitUnknownCharacter,errorMessage:"Could not multiply character",decode:n.decode}},X=[3,5,7,9,11,15,17,19,21,23,25],z=function(n,e){if(!q.includes(e.keys[0]))throw new Error("Illegal keys");return[].concat(t(n)).map(function(n){return i(n,$(e))}).join("")},$=function(n){return{types:[l.LOWERCASE,l.UPPERCASE],keys:n.keys,failOnUnknownCharacter:n.failOnUnknownCharacter,omitUnknownCharacter:n.omitUnknownCharacter,errorMessage:"Could not transform character",decode:n.decode}},_={keys:[3,1],failOnUnknownCharacter:!1,omitUnknownCharacter:!1},q=[3,5,7,9,11,15,17,19,21,23,25];return{rot:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r=e({},h,r),[].concat(t(n)).map(function(n){return i(n,s(r))}).join("")},morse:y,fractionatedMorse:b,pollux:j,multiTap:M,dtmf:H,base64:{decode:function(n){return a?decodeURIComponent(D(n).split("").map(function(n){return"%"+("00"+n.charCodeAt(0).toString(16)).slice(-2)}).join("")):D(n)},encode:function(n){return W(a?encodeURIComponent(n).replace(/%([0-9A-F]{2})/g,function(n,e){return String.fromCharCode("0x"+e)}):n)}},wolfenbuetteler:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=e({},Y,t);var o=Object.entries(t.mapping);return n.replace(/./g,function(n){var e=(t.caseSensitive?o:o.map(function(e){var t=r(e,2),o=t[0],a=t[1];return K(n)?[o.toLowerCase(),a.toLowerCase()]:[o.toUpperCase(),a.toUpperCase()]})).find(function(e){var t=r(e,2),o=t[0],a=t[1];return o===n||a===n});return e?e[0]===n?e[1]:e[0]:n})}(n,Z(t))},multiplicative:{encode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r=e({},Q,r),J(n,r)},decode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r=e({},Q,r)).decode=!0,J(n,r)}},affine:{encode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r=e({},_,r),z(n,r)},decode:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r=e({},_,r)).decode=!0,z(n,r)}}}});