├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── bower.json ├── config └── eslint.json ├── dist ├── twofish.min.js └── twofish.min.js.map ├── index.html ├── package.json ├── spec ├── cbc-issue-1.js ├── cbc-iv-gt-16.js ├── cbc-iv-random.js ├── cbc-sebnis-issue.js ├── ecb-strings.js ├── ecb-tbl.js ├── ecb-vk.js └── ecb-vt.js └── src └── twofish.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /*global module*/ 2 | (function setUp(module) { 3 | 'use strict'; 4 | 5 | module.exports = function exportingFunction(grunt) { 6 | 7 | var banner = ['/*!', 8 | ' * Twofish (ECB and CBC) javascript implementation v<%= pkg.version %>', 9 | ' *', 10 | ' * Released under the MIT license', 11 | ' * www.opensource.org/licenses/MIT', 12 | ' *', 13 | ' * <%= grunt.template.today("yyyy-mm-dd") %>', 14 | ' */\n\n' 15 | ].join('\n'); 16 | 17 | grunt.initConfig({ 18 | 'pkg': grunt.file.readJSON('package.json'), 19 | 'confs': { 20 | 'dist': 'dist', 21 | 'config': 'config', 22 | 'src': 'src', 23 | 'spec': 'spec' 24 | }, 25 | 'eslint': { 26 | 'options': { 27 | 'config': '<%= confs.config %>/eslint.json' 28 | }, 29 | 'target': [ 30 | 'Gruntfile.js', 31 | '<%= confs.src %>/**/*.js', 32 | '<%= confs.spec %>/**/*.js' 33 | ] 34 | }, 35 | 'uglify': { 36 | 'options': { 37 | 'sourceMap': true, 38 | 'preserveComments': false, 39 | 'report': 'gzip', 40 | 'banner': banner 41 | }, 42 | 'minifyTarget': { 43 | 'files': { 44 | '<%= confs.dist %>/<%= pkg.name %>.min.js': [ 45 | '<%= confs.src %>/<%= pkg.name %>.js' 46 | ] 47 | } 48 | } 49 | }, 50 | 'jasmine': { 51 | 'ecb': { 52 | 'src': '<%= confs.src %>/<%= pkg.name %>.js', 53 | 'options': { 54 | 'specs': '<%= confs.spec %>/**/ecb-*.js' 55 | } 56 | }, 57 | 'cbc': { 58 | 'src': '<%= confs.src %>/<%= pkg.name %>.js', 59 | 'options': { 60 | 'specs': '<%= confs.spec %>/**/cbc-*.js' 61 | } 62 | } 63 | } 64 | }); 65 | 66 | grunt.loadNpmTasks('grunt-eslint'); 67 | 68 | grunt.loadNpmTasks('grunt-contrib-uglify'); 69 | grunt.loadNpmTasks('grunt-contrib-jasmine'); 70 | 71 | grunt.registerTask('default', [ 72 | 'eslint' 73 | ]); 74 | 75 | grunt.registerTask('test', [ 76 | 'eslint', 77 | 'jasmine' 78 | ]); 79 | 80 | grunt.registerTask('prod', [ 81 | 'eslint', 82 | 'uglify' 83 | ]); 84 | }; 85 | }(module)); 86 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Dario Andrei 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Two Fish 2 | ======= 3 | 4 | Twofish (ECB and CBC) javascript implementation. 5 | 6 | References to https://www.schneier.com/twofish.html 7 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twofish", 3 | "version": "0.1.1", 4 | "description": "Javascript Twofish (ECB and CBC) implementation.", 5 | "homepage": "https://github.com/wouldgo/twofish", 6 | "keywords": [ 7 | "security", 8 | "secrets", 9 | "data", 10 | "chiper" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/wouldgo/twofish.git" 15 | }, 16 | "license" : "MIT", 17 | "dependencies" : { 18 | }, 19 | "exportsOverride": { 20 | }, 21 | "authors": [ 22 | { 23 | "name": "Dario Andrei", 24 | "email": "wouldgo84@gmail.com", 25 | "url": "https://github.com/wouldgo" 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /config/eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-cond-assign": 2, 4 | "no-constant-condition": 2, 5 | "comma-dangle": 2, 6 | "no-control-regex": 2, 7 | "no-debugger": 2, 8 | "no-dupe-keys": 2, 9 | "no-empty": 2, 10 | "no-extra-semi": 2, 11 | "no-inner-declarations": 2, 12 | "no-invalid-regexp": 2, 13 | "no-negated-in-lhs": 2, 14 | "no-obj-calls": 2, 15 | "no-regex-spaces": 2, 16 | "no-sparse-arrays": 2, 17 | "no-unreachable": 2, 18 | "use-isnan": 2, 19 | "valid-typeof": 2, 20 | "camelcase": 2, 21 | "eqeqeq": 2, 22 | "no-plusplus": 2, 23 | "no-bitwise": 2, 24 | "block-scoped-var": 2, 25 | "consistent-return": 2, 26 | "curly": [ 27 | 2, 28 | "all" 29 | ], 30 | "default-case": 2, 31 | "dot-notation": 2, 32 | "no-caller": 2, 33 | "no-div-regex": 2, 34 | "no-else-return": 2, 35 | "no-empty-label": 2, 36 | "no-eq-null": 2, 37 | "no-eval": 2, 38 | "no-extend-native": 2, 39 | "no-fallthrough": 2, 40 | "no-floating-decimal": 2, 41 | "no-implied-eval": 2, 42 | "no-labels": 2, 43 | "no-iterator": 2, 44 | "no-lone-blocks": 2, 45 | "no-loop-func": 2, 46 | "no-multi-str": 2, 47 | "no-native-reassign": 2, 48 | "no-new": 2, 49 | "no-new-func": 2, 50 | "no-new-wrappers": 2, 51 | "no-octal": 2, 52 | "no-octal-escape": 2, 53 | "no-proto": 2, 54 | "no-redeclare": 2, 55 | "no-return-assign": 2, 56 | "no-script-url": 2, 57 | "no-self-compare": 2, 58 | "no-sequences": 2, 59 | "no-unused-expressions": 2, 60 | "no-with": 2, 61 | "yoda": 2, 62 | "radix": 2, 63 | "wrap-iife": [ 64 | 2, 65 | "outside" 66 | ], 67 | "strict": [2, "never"], 68 | "strict": 2, 69 | "no-catch-shadow": 2, 70 | "no-delete-var": 2, 71 | "no-label-var": 2, 72 | "no-shadow": 2, 73 | "no-shadow-restricted-names": 2, 74 | "no-undef": 2, 75 | "no-undef-init": 2, 76 | "no-unused-vars": [ 77 | 2, 78 | { 79 | "vars": "all", 80 | "args": "after-used" 81 | } 82 | ], 83 | "no-use-before-define": 2, 84 | "brace-style": [ 85 | 2, 86 | "1tbs" 87 | ], 88 | "consistent-this": [ 89 | 2, 90 | "that" 91 | ], 92 | "new-cap": 2, 93 | "new-parens": 2, 94 | "no-nested-ternary": 2, 95 | "no-array-constructor": 2, 96 | "no-lonely-if": 2, 97 | "no-new-object": 2, 98 | "no-spaced-func": 2, 99 | "semi-spacing": 2, 100 | "no-underscore-dangle": 2, 101 | "no-extra-parens": 2, 102 | "quotes": [ 103 | 2, 104 | "single", 105 | "avoid-escape" 106 | ], 107 | "quote-props": 2, 108 | "semi": [ 109 | 2, 110 | "always" 111 | ], 112 | "space-after-keywords": [ 113 | 2, 114 | "always" 115 | ], 116 | "object-curly-spacing": [ 117 | 2, 118 | "never" 119 | ], 120 | "array-bracket-spacing": [ 121 | 2, 122 | "never" 123 | ], 124 | "computed-property-spacing": [ 125 | 2, 126 | "never" 127 | ], 128 | "space-infix-ops": 2, 129 | "space-return-throw-case": 2, 130 | "space-unary-ops": 2, 131 | "one-var": 2, 132 | "wrap-regex": 2, 133 | 134 | "no-extra-boolean-cast": 1, 135 | "no-console": 1, 136 | "no-alert": 1, 137 | "no-empty-character-class": 1, 138 | "no-ex-assign": 1, 139 | "no-func-assign": 1, 140 | "valid-jsdoc": 1, 141 | "guard-for-in": 1, 142 | "no-warning-comments": [ 143 | 1, 144 | { 145 | "terms": ["todo", "fixme", "xxx"], 146 | "location": "anywhere" 147 | } 148 | ], 149 | "func-style": [ 150 | 1, 151 | "expression" 152 | ], 153 | "no-extra-parens": 1, 154 | "func-names": 1, 155 | 156 | "no-ternary": 0, 157 | "sort-vars": 0 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /dist/twofish.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Twofish (ECB and CBC) javascript implementation v0.1.1 3 | * 4 | * Released under the MIT license 5 | * www.opensource.org/licenses/MIT 6 | * 7 | * 2015-02-06 8 | */ 9 | 10 | 11 | !function(a){"use strict";var b=function(a){this.m=2147483648,this.a=1103515245,this.c=12345,this.state=a?a:Math.floor(Math.random()*(this.m-1))},c=function(){var a=function(a){return Array.isArray(a)||"[object Uint8Array]"===Object.prototype.toString.call(a)?!0:!1},b=function(a,b){var c,d=a.length,e=b.length,f=0;if(d>e){for(c=d-e;c>=0;c-=1)if(a[d-c])return!1}else if(e>d)for(c=e-d;c>=0;c-=1)if(b[e-c])return!1;for(;d>f;f+=1)if(a[f]!==b[f])return!1;return!0};return{isAnArray:a,areEqual:b}};b.prototype.nextInt=function(){return this.state=(this.a*this.state+this.c)%this.m,this.state},b.prototype.nextFloat=function(){return this.nextInt()/(this.m-1)},b.prototype.nextRange=function(a,b){var c=b-a,d=this.nextInt()/this.m;return a+Math.floor(d*c)},b.prototype.choice=function(a){return a[this.nextRange(0,a.length)]},a.twofish=function(a){var d,e=c(),f=new b,g=[],h=new Uint8Array([169,103,179,232,4,253,163,118,154,146,128,120,228,221,209,56,13,198,53,152,24,247,236,108,67,117,55,38,250,19,148,72,242,208,139,48,132,84,223,35,25,91,61,89,243,174,162,130,99,1,131,46,217,81,155,124,166,235,165,190,22,12,227,97,192,140,58,245,115,44,37,11,187,78,137,107,83,106,180,241,225,230,189,69,226,244,182,102,204,149,3,86,212,28,30,215,251,195,142,181,233,207,191,186,234,119,57,175,51,201,98,113,129,121,9,173,36,205,249,216,229,197,185,77,68,8,134,231,161,29,170,237,6,112,178,210,65,123,160,17,49,194,39,144,32,246,96,255,150,92,177,171,158,156,82,27,95,147,10,239,145,133,73,238,45,79,143,59,71,135,109,70,214,62,105,100,42,206,203,47,252,151,5,122,172,127,213,26,75,14,167,90,40,20,63,41,136,60,76,2,184,218,176,23,85,31,138,125,87,199,141,116,183,196,159,114,126,21,34,18,88,7,153,52,110,80,222,104,101,188,219,248,200,168,43,64,220,254,50,164,202,16,33,240,211,93,15,0,111,157,54,66,74,94,193,224]),i=new Uint8Array([117,243,198,244,219,123,251,200,74,211,230,107,69,125,232,75,214,50,216,253,55,113,241,225,48,15,248,27,135,250,6,63,94,186,174,91,138,0,188,157,109,193,177,14,128,93,210,213,160,132,7,20,181,144,44,163,178,115,76,84,146,116,54,81,56,176,189,90,252,96,98,150,108,66,247,16,124,40,39,140,19,149,156,199,36,70,59,112,202,227,133,203,17,208,147,184,166,131,32,255,159,119,195,204,3,111,8,191,64,231,43,226,121,12,170,130,65,58,234,185,228,154,164,151,126,218,122,23,102,148,161,29,61,240,222,179,11,114,167,28,239,209,83,62,143,51,38,95,236,118,42,73,129,136,238,33,196,26,235,217,197,57,153,205,173,49,139,1,24,35,221,31,78,45,249,72,79,242,101,142,120,92,88,25,141,229,152,87,103,127,5,100,175,99,182,254,245,183,60,165,206,233,104,68,224,77,67,105,41,46,172,21,89,168,10,158,110,71,223,52,53,106,207,220,34,201,192,155,137,212,237,171,18,162,13,82,187,2,47,169,215,97,30,180,80,4,246,194,22,37,134,86,85,9,190,145]),j=[h,i],k=16,l=16,m=33686018,n=16843009,o=9,p=0,q=p+k/4,r=q+k/4,s=0,t=0,u=1,v=0,w=0,x=1^v,y=1,z=0,A=0,B=1,C=1^A,D=0,E=1,F=1,G=0,H=1^F,I=0,J=0,K=1,L=1,M=1^K,N=1,O=Math.floor(180.5),P=Math.floor(90.25),Q=333,R=function(a){return a>>1^(0!==(1&a)?O:0)},S=function(a){return a>>2^(0!==(2&a)?O:0)^(0!==(1&a)?P:0)},T=function(a){return a^S(a)},U=function(a){return a^R(a)^S(a)},V=function(){var a,b,c=[[],[],[],[]],d=[],e=[],f=[];for(a=0;256>a;a+=1)b=255&j[0][a],d[0]=b,e[0]=255&T(b),f[0]=255&U(b),b=255&j[1][a],d[1]=b,e[1]=255&T(b),f[1]=255&U(b),c[0][a]=d[u]<<0|e[u]<<8|f[u]<<16|f[u]<<24,c[1][a]=f[z]<<0|f[z]<<8|e[z]<<16|d[z]<<24,c[2][a]=e[E]<<0|f[E]<<8|d[E]<<16|f[E]<<24,c[3][a]=e[J]<<0|d[J]<<8|f[J]<<16|e[J]<<24;return[new Uint32Array(c[0]),new Uint32Array(c[1]),new Uint32Array(c[2]),new Uint32Array(c[3])]}(),W=function(a){return 255&a},X=function(a){return a>>>8&255},Y=function(a){return a>>>16&255},Z=function(a){return a>>>24&255},$=function(a,b){var c=0;switch(b%4){case 0:c=W(a);break;case 1:c=X(a);break;case 2:c=Y(a);break;case 3:c=Z(a)}return c},_=function(a){var b=a>>>24&255,c=255&(b<<1^(0!==(128&b)?Q:0)),d=b>>>1^(0!==(1&b)?Q>>>1:0)^c,e=a<<8^d<<24^c<<16^d<<8^b;return e},ab=function(a,b){for(var c=0;4>c;c+=1)b=_(b);for(b^=a,c=0;4>c;c+=1)b=_(b);return b},bb=function(a,b,c){var d=W(b),e=X(b),f=Y(b),g=Z(b),h=c[0]||0,i=c[1]||0,k=c[2]||0,l=c[3]||0,m=0;switch(3&a){case 1:m=V[0][255&j[v][d]^W(h)]^V[1][255&j[A][e]^X(h)]^V[2][255&j[F][f]^Y(h)]^V[3][255&j[K][g]^Z(h)];break;case 0:d=255&j[y][d]^W(l),e=255&j[D][e]^X(l),f=255&j[I][f]^Y(l),g=255&j[N][g]^Z(l);case 3:d=255&j[x][d]^W(k),e=255&j[C][e]^X(k),f=255&j[H][f]^Y(k),g=255&j[M][g]^Z(k);case 2:m=V[0][255&j[v][255&j[w][d]^W(i)]^W(h)]^V[1][255&j[A][255&j[B][e]^X(i)]^X(h)]^V[2][255&j[F][255&j[G][f]^Y(i)]^Y(h)]^V[3][255&j[K][255&j[L][g]^Z(i)]^Z(h)]}return m},cb=function(a,b,c){var d=a[2*$(b,c)]^a[2*$(b,c+1)+1]^a[512+2*$(b,c+2)]^a[512+2*$(b,c+3)+1];return new Uint32Array([d])[0]},db=function(a,b){var c=[],d=0;if(a&&b&&e.isAnArray(a)&&e.isAnArray(b)&&a.length!==b.length)throw"Buffer length must be equal";for(a=new Uint8Array(a),b=new Uint8Array(b),d=0;dJ||J>8&&16>J||J>16&&24>J||J>24&&32>J){for(P=0;P32){for(c=[],P=0;32>P;P+=1)c.push(a[P]);a=c}for(a=new Uint8Array(a),J=a.length,d=0,f=Q-1;4>d&&J>$;d+=1,f-=1)S[d]=255&a[$++]|(255&a[$++])<<8|(255&a[$++])<<16|(255&a[$++])<<24,T[d]=255&a[$++]|(255&a[$++])<<8|(255&a[$++])<<16|(255&a[$++])<<24,U[f]=ab(S[d],T[d]);for(d=g=0;R/2>d;d+=1,g+=m)h=bb(Q,g,S),i=bb(Q,g+n,T),i=i<<8|i>>>24,h+=i,_[2*d]=h,h+=i,_[2*d+1]=h<>>32-o;for(t=U[0],u=U[1],z=U[2],E=U[3],d=0;256>d;d+=1)switch(k=p=q=s=d,3&Q){case 1:cb[2*d]=V[0][255&j[v][k]^W(t)],cb[2*d+1]=V[1][255&j[A][p]^X(t)],cb[512+2*d]=V[2][255&j[F][q]^Y(t)],cb[512+2*d+1]=V[3][255&j[K][s]^Z(t)];break;case 0:k=255&j[y][k]^W(E),p=255&j[D][p]^X(E),q=255&j[I][q]^Y(E),s=255&j[N][s]^Z(E);case 3:k=255&j[x][k]^W(z),p=255&j[C][p]^X(z),q=255&j[H][q]^Y(z),s=255&j[M][s]^Z(z);case 2:cb[2*d]=V[0][255&j[v][255&j[w][k]^W(u)]^W(t)],cb[2*d+1]=V[1][255&j[A][255&j[B][p]^X(u)]^X(t)],cb[512+2*d]=V[2][255&j[F][255&j[G][q]^Y(u)]^Y(t)],cb[512+2*d+1]=V[3][255&j[K][255&j[L][s]^Z(u)]^Z(t)]}return[cb,_]}throw"key passed is undefined or not an array"},fb=function(a,b,c){if(a&&c&&e.isAnArray(c)&&e.isAnArray(a)){a=new Uint8Array(a);var d,f,g=c[0],h=c[1],i=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,j=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,k=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,m=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,n=r,o=0;for(i^=h[p],j^=h[p+1],k^=h[p+2],m^=h[p+3],o=0;l>o;o+=2)d=cb(g,i,0),f=cb(g,j,3),k^=d+f+h[n++],k=k>>>1|k<<31,m=m<<1|m>>>31,m^=d+2*f+h[n++],d=cb(g,k,0),f=cb(g,m,3),i^=d+f+h[n++],i=i>>>1|i<<31,j=j<<1|j>>>31,j^=d+2*f+h[n++];return k^=h[q],m^=h[q+1],i^=h[q+2],j^=h[q+3],new Uint8Array([k,k>>>8,k>>>16,k>>>24,m,m>>>8,m>>>16,m>>>24,i,i>>>8,i>>>16,i>>>24,j,j>>>8,j>>>16,j>>>24])}throw"input block is not an array or sessionKey is incorrect"},gb=function(a,b,c){if(a&&c&&e.isAnArray(c)&&e.isAnArray(a)){var d,f,g=c[0],h=c[1],i=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,j=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,k=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,m=255&a[b++]|(255&a[b++])<<8|(255&a[b++])<<16|(255&a[b++])<<24,n=r+2*l-1,o=0;for(i^=h[q],j^=h[q+1],k^=h[q+2],m^=h[q+3],o=0;l>o;o+=2)d=cb(g,i,0),f=cb(g,j,3),m^=d+2*f+h[n--],m=m>>>1|m<<31,k=k<<1|k>>>31,k^=d+f+h[n--],d=cb(g,k,0),f=cb(g,m,3),j^=d+2*f+h[n--],j=j>>>1|j<<31,i=i<<1|i>>>31,i^=d+f+h[n--];return k^=h[p],m^=h[p+1],i^=h[p+2],j^=h[p+3],new Uint8Array([k,k>>>8,k>>>16,k>>>24,m,m>>>8,m>>>16,m>>>24,i,i>>>8,i>>>16,i>>>24,j,j>>>8,j>>>16,j>>>24])}throw"input block is not an array or sessionKey is incorrect"},hb=function(a,b){var c,d,f,g=[];if(!e.isAnArray(a)||!e.isAnArray(b))throw"Inputs must be an array";for(a=new Uint8Array(a),b=new Uint8Array(b),a=eb(a),d=0;dp;p+=1){if(l=b.subarray(j,j+k),l.lengtht;t+=1)d=l[t],c.push(void 0!==d?d:0);l=c}for(m=db(l,o),n=fb(m,0,a),q=j;qp;p+=1){if(l=b.subarray(j,j+k),l.lengtht;t+=1)d=l[t],c.push(void 0!==d?d:0);l=c}for(m=gb(l,0,a),n=db(m,o),q=j;qt;t+=1)a.push(f.nextRange(0,256));g=new Uint8Array(a)}else if(a&&e.isAnArray(a)&&a.length>k)g=new Uint8Array(a.slice(0,k));else if(!a||!e.isAnArray(a)||a.length<16||a.length>16)throw"Initlializing vector incorrect"}else for(s=0;k>s;s+=1)g.push(f.nextRange(0,256));return g=new Uint8Array(g),{equalsArray:e.areEqual,encrypt:hb,decrypt:ib,encryptCBC:jb,decryptCBC:kb}}}("undefined"==typeof exports?this:exports); 12 | //# sourceMappingURL=twofish.min.js.map -------------------------------------------------------------------------------- /dist/twofish.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"twofish.min.js","sources":["../src/twofish.js"],"names":["exports","RNG","seed","this","m","a","c","state","Math","floor","random","functionUtils","isAnArray","someVar","Array","isArray","Object","prototype","toString","call","areEqual","first","second","diffLength","firstLength","length","secondLength","arraysEqualLenghtIndex","nextInt","nextFloat","nextRange","start","end","rangeSize","randomUnder1","choice","array","twofish","IV","initialLength","utils","rng","initializingVector","P0","Uint8Array","P1","P","BLOCK_SIZE","ROUNDS","SK_STEP","SK_BUMP","SK_ROTL","INPUT_WHITEN","OUTPUT_WHITEN","ROUND_SUBKEYS","blockSizeIndex","paddingIndex","P_00","P_01","P_02","P_03","P_04","P_10","P_11","P_12","P_13","P_14","P_20","P_21","P_22","P_23","P_24","P_30","P_31","P_32","P_33","P_34","GF256_FDBK_2","GF256_FDBK_4","RS_GF_FDBK","lfsr1","x","lfsr2","mxX","mxY","MDS","i","j","localMDS","m1","mX","mY","Uint32Array","b0","b1","b2","b3","chooseB","N","result","rsRem","b","g2","g3","rsMDSEncode","k0","k1","index","f32","k64Cnt","k32","lB0","lB1","lB2","lB3","k2","k3","fe32","sBox","R","toReturn","xorBuffers","res","makeKey","aKey","nValue","limitedKey","q","A","B","keyLenght","tmpKey","subkeyCnt","k32e","k32o","sBoxKey","offset","subKeys","push","undefined","blockEncrypt","input","inOffset","sessionKey","t0","t1","sKey","x0","x1","x2","x3","k","blockDecrypt","encrypt","userKey","plainText","tmpBlockEncrypt","ct","decrypt","chiperText","tmpBlockDecrypt","cpt","encryptCBC","tmpCBuffer","nVal","position","loops","pos","cBuffer","buffer1","buffer2","vector","secondIndex","subarray","splice","decryptCBC","plain","slice","equalsArray"],"mappings":";;;;;;;;;;CAEC,SAAiBA,GAChB,YAEA,IAAIC,GAAM,SAAaC,GAEnBC,KAAKC,EAAI,WACTD,KAAKE,EAAI,WACTF,KAAKG,EAAI,MAETH,KAAKI,MAAQL,EAAOA,EAAOM,KAAKC,MAAMD,KAAKE,UAAYP,KAAKC,EAAI,KAElEO,EAAgB,WAEd,GAAIC,GAAY,SAAmBC,GAEjC,MAAIC,OAAMC,QAAQF,IACgC,wBAA9CG,OAAOC,UAAUC,SAASC,KAAMN,IAE3B,GAEF,GAEPO,EAAW,SAAkBC,EAAOC,GAEpC,GAEIC,GAFAC,EAAcH,EAAMI,OACpBC,EAAeJ,EAAOG,OAEtBE,EAAyB,CAE7B,IAAIH,EAAcE,GAGhB,IADAH,EAAaC,EAAcE,EACpBH,GAAc,EAAGA,GAAc,EAEpC,GAAIF,EAAMG,EAAcD,GAEtB,OAAO,MAGN,IAAIG,EAAeF,EAGxB,IADAD,EAAaG,EAAeF,EACrBD,GAAc,EAAGA,GAAc,EAEpC,GAAID,EAAOI,EAAeH,GAExB,OAAO,CAKb,MAAgCC,EAAzBG,EAAsCA,GAA0B,EAErE,GAAIN,EAAMM,KAA4BL,EAAOK,GAE3C,OAAO,CAGX,QAAO,EAGT,QACEf,UAAaA,EACbQ,SAAYA,GAIlBnB,GAAIgB,UAAUW,QAAU,WAGtB,MADAzB,MAAKI,OAASJ,KAAKE,EAAIF,KAAKI,MAAQJ,KAAKG,GAAKH,KAAKC,EAC5CD,KAAKI,OAGdN,EAAIgB,UAAUY,UAAY,WAGxB,MAAO1B,MAAKyB,WAAazB,KAAKC,EAAI,IAGpCH,EAAIgB,UAAUa,UAAY,SAAmBC,EAAOC,GAIlD,GAAIC,GAAYD,EAAMD,EAClBG,EAAe/B,KAAKyB,UAAYzB,KAAKC,CACzC,OAAO2B,GAAQvB,KAAKC,MAAMyB,EAAeD,IAG3ChC,EAAIgB,UAAUkB,OAAS,SAAgBC,GAErC,MAAOA,GAAMjC,KAAK2B,UAAU,EAAGM,EAAMX,UAGvCzB,EAAQqC,QAAU,SAAiBC,GAEjC,GAoJIC,GApJAC,EAAQ7B,IACR8B,EAAM,GAAIxC,GACVyC,KAEAC,EAAK,GAAIC,aACT,IAAM,IAAM,IAAM,IAClB,EAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,GAClB,GAAM,IAAM,GAAM,IAClB,GAAM,IAAM,IAAM,IAClB,GAAM,IAAM,GAAM,GAClB,IAAM,GAAM,IAAM,GAClB,IAAM,IAAM,IAAM,GAClB,IAAM,GAAM,IAAM,GAClB,GAAM,GAAM,GAAM,GAClB,IAAM,IAAM,IAAM,IAClB,GAAM,EAAM,IAAM,GAClB,IAAM,GAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,GAAM,GAAM,IAAM,GAClB,IAAM,IAAM,GAAM,IAClB,IAAM,GAAM,GAAM,GAClB,IAAM,GAAM,IAAM,IAClB,GAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,GAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,EAAM,GAClB,IAAM,GAAM,GAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,GAAM,IAClB,GAAM,IAAM,GAAM,IAClB,IAAM,IAAM,EAAM,IAClB,GAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,GAClB,GAAM,EAAM,IAAM,IAClB,IAAM,GAAM,IAAM,IAClB,EAAM,IAAM,IAAM,IAClB,GAAM,IAAM,IAAM,GAClB,GAAM,IAAM,GAAM,IAClB,GAAM,IAAM,GAAM,IAClB,IAAM,GAAM,IAAM,IAClB,IAAM,IAAM,GAAM,GAClB,GAAM,IAAM,GAAM,IAClB,IAAM,IAAM,GAAM,IAClB,GAAM,GAAM,IAAM,GAClB,GAAM,IAAM,IAAM,GAClB,IAAM,GAAM,IAAM,IAClB,GAAM,IAAM,IAAM,GAClB,IAAM,IAAM,EAAM,IAClB,IAAM,IAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,GAAM,GAClB,IAAM,GAAM,GAAM,EAClB,IAAM,IAAM,IAAM,GAClB,GAAM,GAAM,IAAM,IAClB,GAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,GAAM,GAAM,GAClB,GAAM,EAAM,IAAM,GAClB,IAAM,GAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,GAAM,GAClB,IAAM,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"} -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twofish", 3 | "version": "1.0.1", 4 | "description": "Javascript Twofish implementation.", 5 | "homepage": "https://github.com/wouldgo/twofish", 6 | "keywords": [ 7 | "security", 8 | "secrets", 9 | "data", 10 | "chiper" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/wouldgo/twofish.git" 15 | }, 16 | "license": "MIT", 17 | "devDependencies": { 18 | "grunt": "*", 19 | "grunt-contrib-uglify": "*", 20 | "grunt-contrib-jasmine": "*", 21 | "grunt-eslint": "*" 22 | }, 23 | "author": { 24 | "name": "Dario Andrei", 25 | "email": "wouldgo84@gmail.com", 26 | "url": "https://github.com/wouldgo" 27 | }, 28 | "contributors": [], 29 | "main": "src/twofish.js" 30 | } 31 | -------------------------------------------------------------------------------- /spec/cbc-issue-1.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | describe('CBC issue #1', function doTestSuite() { 6 | var IV = [0xb4, 0x6a, 0x02, 0x60, 0xb0, 0xbc, 0x49, 0x22, 0xb5, 0xeb, 0x07, 0x85, 0xa4, 0xb7, 0xcc, 0x9e] 7 | , twF = twofish(IV); 8 | 9 | it('cbc - issue use case', function doTestCase() { 10 | var ct = [0x14, 0x25, 0xe4, 0xbb, 0x3d, 0x59, 0xf5, 0x57, 0x34, 0xaf, 0x26, 0x3a, 0x60, 0x09, 0x79, 0x01] 11 | , key = [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] 12 | , pt = [0x5e, 0xa0, 0x80, 0x00, 0x00, 0x01, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x1c, 0x00] 13 | , cpt = twF.decryptCBC(key, ct); 14 | 15 | expect(pt).toEqual(cpt); 16 | }); 17 | }); 18 | }(describe, it, expect, twofish)); 19 | -------------------------------------------------------------------------------- /spec/cbc-iv-gt-16.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | describe('CBC - Initializing vector passed and less than 16 characters', function doTestSuite() { 6 | 7 | var twF = twofish([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 8 | , testCase = function doTestCase(aKey, aPt) { 9 | 10 | var key = twF.stringToByteArray(aKey) 11 | , pt = twF.stringToByteArray(aPt) 12 | , ct = twF.encryptCBC(key, pt) 13 | , cpt = twF.decryptCBC(key, ct); 14 | 15 | expect(pt).toEqual(cpt); 16 | } 17 | , checkEquality = function checkEquality(aKey, aPt) { 18 | 19 | var key = twF.stringToByteArray(aKey) 20 | , pt = twF.stringToByteArray(aPt) 21 | , ct = twF.encryptCBC(key, pt) 22 | , firstArr = ct.slice(0, 16) 23 | , secondArr = ct.slice(16, 32); 24 | 25 | expect(firstArr).not.toEqual(secondArr); 26 | } 27 | , tests = [ 28 | {'testName': '6 char length key - single simple character', 'key': 'secret', 'pt': 'A'}, 29 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 30 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 31 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 32 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 33 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 34 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 35 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 36 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 37 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 38 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 39 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 40 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 41 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 42 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 43 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 44 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 45 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 46 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 47 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 48 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 49 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 50 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 51 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 52 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 53 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 54 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 55 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 56 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'}, 57 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 58 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 59 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 60 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 61 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 62 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'} 63 | ] 64 | , testsLength = tests.length 65 | , testIndex = 0 66 | , aTest; 67 | 68 | for (; testIndex < testsLength; testIndex += 1) { 69 | 70 | aTest = tests[testIndex]; 71 | if (aTest) { 72 | 73 | it(aTest.testName, testCase.bind(this, aTest.key, aTest.pt)); 74 | if (aTest.testName.indexOf('32 characters') >= 0) { 75 | 76 | it('first 16 not equals to second 16', checkEquality.bind(this, aTest.key, aTest.pt)); 77 | } 78 | } 79 | } 80 | }); 81 | }(describe, it, expect, twofish)); 82 | -------------------------------------------------------------------------------- /spec/cbc-iv-random.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | describe('CBC - random initializing vector', function doTestSuite() { 6 | 7 | var twF = twofish() 8 | , testCase = function doTestCase(aKey, aPt) { 9 | 10 | var key = twF.stringToByteArray(aKey) 11 | , pt = twF.stringToByteArray(aPt) 12 | , ct = twF.encryptCBC(key, pt) 13 | , cpt = twF.decryptCBC(key, ct); 14 | 15 | expect(pt).toEqual(cpt); 16 | } 17 | , checkEquality = function checkEquality(aKey, aPt) { 18 | 19 | var key = twF.stringToByteArray(aKey) 20 | , pt = twF.stringToByteArray(aPt) 21 | , ct = twF.encryptCBC(key, pt) 22 | , firstArr = ct.slice(0, 16) 23 | , secondArr = ct.slice(16, 32); 24 | 25 | expect(firstArr).not.toEqual(secondArr); 26 | } 27 | , tests = [ 28 | {'testName': '6 char length key - single simple character', 'key': 'secret', 'pt': 'A'}, 29 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 30 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 31 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 32 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 33 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 34 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 35 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 36 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 37 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 38 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 39 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 40 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 41 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 42 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 43 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 44 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 45 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 46 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 47 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 48 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 49 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 50 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 51 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 52 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 53 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 54 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 55 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 56 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'}, 57 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 58 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 59 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 60 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 61 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 62 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'} 63 | ] 64 | , testsLength = tests.length 65 | , testIndex = 0 66 | , aTest; 67 | 68 | for (; testIndex < testsLength; testIndex += 1) { 69 | 70 | aTest = tests[testIndex]; 71 | if (aTest) { 72 | 73 | it(aTest.testName, testCase.bind(this, aTest.key, aTest.pt)); 74 | if (aTest.testName.indexOf('32 characters') >= 0) { 75 | 76 | it('first 16 not equals to second 16', checkEquality.bind(this, aTest.key, aTest.pt)); 77 | } 78 | } 79 | } 80 | }); 81 | }(describe, it, expect, twofish)); 82 | -------------------------------------------------------------------------------- /spec/cbc-sebnis-issue.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | describe('CBC SebNis', function doTestSuite() { 6 | var IV = [180, 106, 2, 96, 176, 188, 73, 34, 181, 235, 7, 133, 164, 183, 204, 158] 7 | , key = [73, 65, 63, 72, 65, 74] 8 | , twF = twofish(IV); 9 | 10 | it('cbc - issue use case #1', function doTestCase() { 11 | var pt = 'Paris' 12 | , ptArray = [] 13 | , ct 14 | , cpt 15 | , aSingleChar 16 | , aSingleCharIndex = 0; 17 | 18 | for (; aSingleCharIndex < pt.length; aSingleCharIndex += 1) { 19 | 20 | aSingleChar = pt[aSingleCharIndex]; 21 | if (aSingleChar && 22 | aSingleChar.charCodeAt) { 23 | 24 | ptArray.push(aSingleChar.charCodeAt()); 25 | } 26 | } 27 | 28 | if (ptArray.length === pt.length) { 29 | 30 | ct = twF.encryptCBC(key, ptArray); 31 | cpt = twF.decryptCBC(key, ct); 32 | cpt = cpt.splice(0, pt.length); 33 | 34 | expect(ptArray).toEqual(cpt); 35 | } else { 36 | 37 | expect(false).toEqual(true); 38 | } 39 | }); 40 | 41 | it('cbc - issue use case #2', function doTestCase() { 42 | var pt = 'Berlin' 43 | , ptArray = [] 44 | , ct 45 | , cpt 46 | , aSingleChar 47 | , aSingleCharIndex = 0; 48 | 49 | for (; aSingleCharIndex < pt.length; aSingleCharIndex += 1) { 50 | 51 | aSingleChar = pt[aSingleCharIndex]; 52 | if (aSingleChar && 53 | aSingleChar.charCodeAt) { 54 | 55 | ptArray.push(aSingleChar.charCodeAt()); 56 | } 57 | } 58 | 59 | if (ptArray.length === pt.length) { 60 | 61 | ct = twF.encryptCBC(key, ptArray); 62 | cpt = twF.decryptCBC(key, ct); 63 | cpt = cpt.splice(0, pt.length); 64 | 65 | expect(ptArray).toEqual(cpt); 66 | } else { 67 | 68 | expect(false).toEqual(true); 69 | } 70 | }); 71 | }); 72 | }(describe, it, expect, twofish)); 73 | -------------------------------------------------------------------------------- /spec/ecb-strings.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | describe('ECB - strings', function doTestSuite() { 6 | 7 | var twF = twofish() 8 | , testCase = function doTestCase(aKey, aPt) { 9 | 10 | var key = twF.stringToByteArray(aKey) 11 | , pt = twF.stringToByteArray(aPt) 12 | , ct = twF.encrypt(key, pt) 13 | , cpt = twF.decrypt(key, ct); 14 | 15 | expect(pt).toEqual(cpt); 16 | } 17 | , checkEquality = function checkEquality(aKey, aPt) { 18 | 19 | var key = twF.stringToByteArray(aKey) 20 | , pt = twF.stringToByteArray(aPt) 21 | , ct = twF.encrypt(key, pt) 22 | , firstArr = ct.slice(0, 16) 23 | , secondArr = ct.slice(16, 32); 24 | 25 | expect(firstArr).toEqual(secondArr); 26 | } 27 | , tests = [ 28 | {'testName': '6 char length key - single simple character', 'key': 'secret', 'pt': 'A'}, 29 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 30 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 31 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 32 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 33 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 34 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 35 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 36 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 37 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 38 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 39 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 40 | {'testName': '6 char length key - multiple simple characters', 'key': 'secret', 'pt': 'Super secret message!'}, 41 | {'testName': '6 char length key - single "esotic" character', 'key': 'secret', 'pt': '☭'}, 42 | {'testName': '6 char length key - multiple "esotic" characters', 'key': 'secret', 'pt': '☢€ ☂ ڴ!'}, 43 | {'testName': '8 char length key - single simple character', 'key': 'secret12', 'pt': 'A'}, 44 | {'testName': '8 char length key - multiple simple characters', 'key': 'secret12', 'pt': 'Sunday monday, happy days!'}, 45 | {'testName': '8 char length key - single "esotic" character', 'key': 'secret12', 'pt': '☂'}, 46 | {'testName': '8 char length key - multiple "esotic" characters', 'key': 'secret12', 'pt': '☭☢€ ☂ ڴ'}, 47 | {'testName': '13 char length key - single simple character', 'key': 'anothersecret', 'pt': 'A'}, 48 | {'testName': '13 char length key - multiple simple characters', 'key': 'anothersecret', 'pt': 'Super secret message!'}, 49 | {'testName': '13 char length key - single "esotic" character', 'key': 'anothersecret', 'pt': '☭'}, 50 | {'testName': '13 char length key - multiple "esotic" characters', 'key': 'anothersecret', 'pt': '☢€ ☂ ڴ!'}, 51 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 52 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 53 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 54 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 55 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 56 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'}, 57 | {'testName': '37 char length key - single simple character', 'key': 'A Super secret that can not be stolen', 'pt': 'A'}, 58 | {'testName': '37 char length key - multiple simple characters', 'key': 'A Super secret that can not be stolen', 'pt': 'Sunday monday, happy days!'}, 59 | {'testName': '37 char length key - single "esotic" character', 'key': 'A Super secret that can not be stolen', 'pt': '☂'}, 60 | {'testName': '37 char length key - multiple "esotic" characters', 'key': 'A Super secret that can not be stolen', 'pt': '☭☢€ ☂ ڴ'}, 61 | {'testName': '24 char length key - 32 characters', 'key': 'supasecret11oneoneeleven', 'pt': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'}, 62 | {'testName': '24 char length key - 32 characters (2)', 'key': 'supasecret11oneoneeleven', 'pt': 'ABCDABCDABCDABCDABCDABCDABCDABCD'} 63 | ] 64 | , testsLength = tests.length 65 | , testIndex = 0 66 | , aTest; 67 | 68 | for (; testIndex < testsLength; testIndex += 1) { 69 | 70 | aTest = tests[testIndex]; 71 | if (aTest) { 72 | 73 | it(aTest.testName, testCase.bind(this, aTest.key, aTest.pt)); 74 | if (aTest.testName.indexOf('32 characters') >= 0) { 75 | 76 | it('first 16 not equals to second 16', checkEquality.bind(this, aTest.key, aTest.pt)); 77 | } 78 | } 79 | } 80 | }); 81 | }(describe, it, expect, twofish)); 82 | -------------------------------------------------------------------------------- /spec/ecb-tbl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This testing method was described at Appendix A.2 of Twofish paper: 3 | * https://www.schneier.com/paper-twofish-paper.pdf 4 | */ 5 | /*global describe it expect twofish*/ // Suppressing eslint warnings. 6 | (function doTest(describe, it, expect, twofish){ 7 | 'use strict'; 8 | 9 | var twF = twofish() 10 | , useCaseName 11 | , singleTest = function doTestCase(thisTest) { 12 | var ct = twF.encrypt(thisTest.key, thisTest.pt) 13 | , cpt = twF.decrypt(thisTest.key, ct); 14 | 15 | expect(ct).toEqual(thisTest.ct); 16 | expect(cpt).toEqual(thisTest.pt); 17 | }; 18 | describe('ECB TBL - 128 keysize', function doTestSuite() { 19 | var tests = [ 20 | { 21 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 22 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 23 | 'ct': [0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A] 24 | }, 25 | { 26 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 27 | 'pt': [0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A], 28 | 'ct': [0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19] 29 | }, 30 | { 31 | 'key': [0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A], 32 | 'pt': [0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19], 33 | 'ct': [0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3] 34 | }, 35 | { 36 | 'key': [0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19], 37 | 'pt': [0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3], 38 | 'ct': [0x63, 0x63, 0x97, 0x7D, 0xE8, 0x39, 0x48, 0x62, 0x97, 0xE6, 0x61, 0xC6, 0xC9, 0xD6, 0x68, 0xEB] 39 | }, 40 | { 41 | 'key': [0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3], 42 | 'pt': [0x63, 0x63, 0x97, 0x7D, 0xE8, 0x39, 0x48, 0x62, 0x97, 0xE6, 0x61, 0xC6, 0xC9, 0xD6, 0x68, 0xEB], 43 | 'ct': [0x81, 0x6D, 0x5B, 0xD0, 0xFA, 0xE3, 0x53, 0x42, 0xBF, 0x2A, 0x74, 0x12, 0xC2, 0x46, 0xF7, 0x52] 44 | }, 45 | { 46 | 'key': [0x63, 0x63, 0x97, 0x7D, 0xE8, 0x39, 0x48, 0x62, 0x97, 0xE6, 0x61, 0xC6, 0xC9, 0xD6, 0x68, 0xEB], 47 | 'pt': [0x81, 0x6D, 0x5B, 0xD0, 0xFA, 0xE3, 0x53, 0x42, 0xBF, 0x2A, 0x74, 0x12, 0xC2, 0x46, 0xF7, 0x52], 48 | 'ct': [0x54, 0x49, 0xEC, 0xA0, 0x08, 0xFF, 0x59, 0x21, 0x15, 0x5F, 0x59, 0x8A, 0xF4, 0xCE, 0xD4, 0xD0] 49 | }, 50 | { 51 | 'key': [0x81, 0x6D, 0x5B, 0xD0, 0xFA, 0xE3, 0x53, 0x42, 0xBF, 0x2A, 0x74, 0x12, 0xC2, 0x46, 0xF7, 0x52], 52 | 'pt': [0x54, 0x49, 0xEC, 0xA0, 0x08, 0xFF, 0x59, 0x21, 0x15, 0x5F, 0x59, 0x8A, 0xF4, 0xCE, 0xD4, 0xD0], 53 | 'ct': [0x66, 0x00, 0x52, 0x2E, 0x97, 0xAE, 0xB3, 0x09, 0x4E, 0xD5, 0xF9, 0x2A, 0xFC, 0xBC, 0xDD, 0x10] 54 | }, 55 | { 56 | 'key': [0x54, 0x49, 0xEC, 0xA0, 0x08, 0xFF, 0x59, 0x21, 0x15, 0x5F, 0x59, 0x8A, 0xF4, 0xCE, 0xD4, 0xD0], 57 | 'pt': [0x66, 0x00, 0x52, 0x2E, 0x97, 0xAE, 0xB3, 0x09, 0x4E, 0xD5, 0xF9, 0x2A, 0xFC, 0xBC, 0xDD, 0x10], 58 | 'ct': [0x34, 0xC8, 0xA5, 0xFB, 0x2D, 0x3D, 0x08, 0xA1, 0x70, 0xD1, 0x20, 0xAC, 0x6D, 0x26, 0xDB, 0xFA] 59 | }, 60 | { 61 | 'key': [0x66, 0x00, 0x52, 0x2E, 0x97, 0xAE, 0xB3, 0x09, 0x4E, 0xD5, 0xF9, 0x2A, 0xFC, 0xBC, 0xDD, 0x10], 62 | 'pt': [0x34, 0xC8, 0xA5, 0xFB, 0x2D, 0x3D, 0x08, 0xA1, 0x70, 0xD1, 0x20, 0xAC, 0x6D, 0x26, 0xDB, 0xFA], 63 | 'ct': [0x28, 0x53, 0x0B, 0x35, 0x8C, 0x1B, 0x42, 0xEF, 0x27, 0x7D, 0xE6, 0xD4, 0x40, 0x7F, 0xC5, 0x91] 64 | }, 65 | { 66 | 'key': [0x34, 0xC8, 0xA5, 0xFB, 0x2D, 0x3D, 0x08, 0xA1, 0x70, 0xD1, 0x20, 0xAC, 0x6D, 0x26, 0xDB, 0xFA], 67 | 'pt': [0x28, 0x53, 0x0B, 0x35, 0x8C, 0x1B, 0x42, 0xEF, 0x27, 0x7D, 0xE6, 0xD4, 0x40, 0x7F, 0xC5, 0x91], 68 | 'ct': [0x8A, 0x8A, 0xB9, 0x83, 0x31, 0x0E, 0xD7, 0x8C, 0x8C, 0x0E, 0xCD, 0xE0, 0x30, 0xB8, 0xDC, 0xA4] 69 | } 70 | ] 71 | , testsIndex = 0 72 | , testsLength = tests.length 73 | , aTest 74 | , key 75 | , pt 76 | , ct; 77 | 78 | for (; testsIndex < testsLength; testsIndex += 1) { 79 | 80 | aTest = tests[testsIndex]; 81 | useCaseName = 'ecb 128, I = ' + (testsIndex + 1); 82 | 83 | it(useCaseName, singleTest.bind(this, aTest)); 84 | } 85 | 86 | pt = aTest.pt; 87 | ct = aTest.ct; 88 | for (; testsIndex + 1 < 46; testsIndex += 1) { 89 | key = pt; 90 | pt = ct; 91 | ct = twF.encrypt(key, pt); 92 | } 93 | 94 | aTest = { 95 | 'key': pt, 96 | 'pt': ct, 97 | 'ct': [0x13, 0x7A, 0x24, 0xCA, 0x47, 0xCD, 0x12, 0xBE, 0x81, 0x8D, 0xF4, 0xD2, 0xF4, 0x35, 0x59, 0x60] 98 | }; 99 | it('ecb 128, I = 46', singleTest.bind(this, aTest)); 100 | 101 | aTest = { 102 | 'key': aTest.pt, 103 | 'pt': aTest.ct, 104 | 'ct': [0xBC, 0xA7, 0x24, 0xA5, 0x45, 0x33, 0xC6, 0x98, 0x7E, 0x14, 0xAA, 0x82, 0x79, 0x52, 0xF9, 0x21] 105 | }; 106 | it('ecb 128, I = 47', singleTest.bind(this, aTest)); 107 | 108 | aTest = { 109 | 'key': aTest.pt, 110 | 'pt': aTest.ct, 111 | 'ct': [0x6B, 0x45, 0x92, 0x86, 0xF3, 0xFF, 0xD2, 0x8D, 0x49, 0xF1, 0x5B, 0x15, 0x81, 0xB0, 0x8E, 0x42] 112 | }; 113 | it('ecb 128, I = 48', singleTest.bind(this, aTest)); 114 | 115 | aTest = { 116 | 'key': aTest.pt, 117 | 'pt': aTest.ct, 118 | 'ct': [0x5D, 0x9D, 0x4E, 0xEF, 0xFA, 0x91, 0x51, 0x57, 0x55, 0x24, 0xF1, 0x15, 0x81, 0x5A, 0x12, 0xE0] 119 | }; 120 | it('ecb 128, I = 49', singleTest.bind(this, aTest)); 121 | }); 122 | 123 | describe('ECB TBL - 192 keysize', function doTestSuite() { 124 | var tests = [ 125 | { 126 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 127 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 128 | 'ct': [0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44, 0x53, 0xF8, 0x60, 0x17, 0x8F, 0xC1, 0x91, 0x01] 129 | }, 130 | { 131 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 132 | 'pt': [0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44, 0x53, 0xF8, 0x60, 0x17, 0x8F, 0xC1, 0x91, 0x01], 133 | 'ct': [0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88] 134 | }, 135 | { 136 | 'key': [0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44, 0x53, 0xF8, 0x60, 0x17, 0x8F, 0xC1, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 137 | 'pt': [0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88], 138 | 'ct': [0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2] 139 | }, 140 | { 141 | 'key': [0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88, 0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44], 142 | 'pt': [0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2], 143 | 'ct': [0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65] 144 | }, 145 | { 146 | 'key': [0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2, 0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36], 147 | 'pt': [0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65], 148 | 'ct': [0x7A, 0xFF, 0x7A, 0x70, 0xCA, 0x2F, 0xF2, 0x8A, 0xC3, 0x1D, 0xD8, 0xAE, 0x5D, 0xAA, 0xAB, 0x63] 149 | }, 150 | { 151 | 'key': [0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65, 0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5], 152 | 'pt': [0x7A, 0xFF, 0x7A, 0x70, 0xCA, 0x2F, 0xF2, 0x8A, 0xC3, 0x1D, 0xD8, 0xAE, 0x5D, 0xAA, 0xAB, 0x63], 153 | 'ct': [0xD1, 0x07, 0x9B, 0x78, 0x9F, 0x66, 0x66, 0x49, 0xB6, 0xBD, 0x7D, 0x16, 0x29, 0xF1, 0xF7, 0x7E] 154 | }, 155 | { 156 | 'key': [0x7A, 0xFF, 0x7A, 0x70, 0xCA, 0x2F, 0xF2, 0x8A, 0xC3, 0x1D, 0xD8, 0xAE, 0x5D, 0xAA, 0xAB, 0x63, 0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45], 157 | 'pt': [0xD1, 0x07, 0x9B, 0x78, 0x9F, 0x66, 0x66, 0x49, 0xB6, 0xBD, 0x7D, 0x16, 0x29, 0xF1, 0xF7, 0x7E], 158 | 'ct': [0x3A, 0xF6, 0xF7, 0xCE, 0x5B, 0xD3, 0x5E, 0xF1, 0x8B, 0xEC, 0x6F, 0xA7, 0x87, 0xAB, 0x50, 0x6B] 159 | }, 160 | { 161 | 'key': [0xD1, 0x07, 0x9B, 0x78, 0x9F, 0x66, 0x66, 0x49, 0xB6, 0xBD, 0x7D, 0x16, 0x29, 0xF1, 0xF7, 0x7E, 0x7A, 0xFF, 0x7A, 0x70, 0xCA, 0x2F, 0xF2, 0x8A], 162 | 'pt': [0x3A, 0xF6, 0xF7, 0xCE, 0x5B, 0xD3, 0x5E, 0xF1, 0x8B, 0xEC, 0x6F, 0xA7, 0x87, 0xAB, 0x50, 0x6B], 163 | 'ct': [0xAE, 0x81, 0x09, 0xBF, 0xDA, 0x85, 0xC1, 0xF2, 0xC5, 0x03, 0x8B, 0x34, 0xED, 0x69, 0x1B, 0xFF] 164 | }, 165 | { 166 | 'key': [0x3A, 0xF6, 0xF7, 0xCE, 0x5B, 0xD3, 0x5E, 0xF1, 0x8B, 0xEC, 0x6F, 0xA7, 0x87, 0xAB, 0x50, 0x6B, 0xD1, 0x07, 0x9B, 0x78, 0x9F, 0x66, 0x66, 0x49], 167 | 'pt': [0xAE, 0x81, 0x09, 0xBF, 0xDA, 0x85, 0xC1, 0xF2, 0xC5, 0x03, 0x8B, 0x34, 0xED, 0x69, 0x1B, 0xFF], 168 | 'ct': [0x89, 0x3F, 0xD6, 0x7B, 0x98, 0xC5, 0x50, 0x07, 0x35, 0x71, 0xBD, 0x63, 0x12, 0x63, 0xFC, 0x78] 169 | }, 170 | { 171 | 'key': [0xAE, 0x81, 0x09, 0xBF, 0xDA, 0x85, 0xC1, 0xF2, 0xC5, 0x03, 0x8B, 0x34, 0xED, 0x69, 0x1B, 0xFF, 0x3A, 0xF6, 0xF7, 0xCE, 0x5B, 0xD3, 0x5E, 0xF1], 172 | 'pt': [0x89, 0x3F, 0xD6, 0x7B, 0x98, 0xC5, 0x50, 0x07, 0x35, 0x71, 0xBD, 0x63, 0x12, 0x63, 0xFC, 0x78], 173 | 'ct': [0x16, 0x43, 0x4F, 0xC9, 0xC8, 0x84, 0x1A, 0x63, 0xD5, 0x87, 0x00, 0xB5, 0x57, 0x8E, 0x8F, 0x67] 174 | } 175 | ] 176 | , testsIndex = 0 177 | , testsLength = tests.length 178 | , aTest 179 | , key 180 | , pt 181 | , ct; 182 | 183 | for (; testsIndex < testsLength; testsIndex += 1) { 184 | 185 | aTest = tests[testsIndex]; 186 | useCaseName = 'ecb 192, I = ' + (testsIndex + 1); 187 | 188 | it(useCaseName, singleTest.bind(this, aTest)); 189 | } 190 | 191 | key = aTest.key; 192 | pt = aTest.pt; 193 | ct = aTest.ct; 194 | for (; testsIndex + 1 < 46; testsIndex += 1) { 195 | key = pt.concat(key.slice(0, 8)); 196 | pt = ct; 197 | ct = twF.encrypt(key, pt); 198 | } 199 | 200 | aTest = { 201 | 'key': pt.concat(key.slice(0, 8)), 202 | 'pt': ct, 203 | 'ct': [0xDE, 0xA4, 0xF3, 0xDA, 0x75, 0xEC, 0x7A, 0x8E, 0xAC, 0x38, 0x61, 0xA9, 0x91, 0x24, 0x02, 0xCD] 204 | }; 205 | it('ecb 192, I = 46', singleTest.bind(this, aTest)); 206 | 207 | aTest = { 208 | 'key': aTest.pt.concat(aTest.key.slice(0, 8)), 209 | 'pt': aTest.ct, 210 | 'ct': [0xFB, 0x66, 0x52, 0x2C, 0x33, 0x2F, 0xCC, 0x4C, 0x04, 0x2A, 0xBE, 0x32, 0xFA, 0x9E, 0x90, 0x2F] 211 | }; 212 | it('ecb 192, I = 47', singleTest.bind(this, aTest)); 213 | 214 | aTest = { 215 | 'key': aTest.pt.concat(aTest.key.slice(0, 8)), 216 | 'pt': aTest.ct, 217 | 'ct': [0xF0, 0xAB, 0x73, 0x30, 0x11, 0x25, 0xFA, 0x21, 0xEF, 0x70, 0xBE, 0x53, 0x85, 0xFB, 0x76, 0xB6] 218 | }; 219 | it('ecb 192, I = 48', singleTest.bind(this, aTest)); 220 | 221 | aTest = { 222 | 'key': aTest.pt.concat(aTest.key.slice(0, 8)), 223 | 'pt': aTest.ct, 224 | 'ct': [0xE7, 0x54, 0x49, 0x21, 0x2B, 0xEE, 0xF9, 0xF4, 0xA3, 0x90, 0xBD, 0x86, 0x0A, 0x64, 0x09, 0x41] 225 | }; 226 | it('ecb 192, I = 49', singleTest.bind(this, aTest)); 227 | }); 228 | 229 | describe('ECB TBL - 256 keysize', function doTestSuite() { 230 | var tests = [ 231 | { 232 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 233 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 234 | 'ct': [0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F] 235 | }, 236 | { 237 | 'key': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 238 | 'pt': [0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F], 239 | 'ct': [0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D] 240 | }, 241 | { 242 | 'key': [0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 243 | 'pt': [0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D], 244 | 'ct': [0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6] 245 | }, 246 | { 247 | 'key': [0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F], 248 | 'pt': [0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6], 249 | 'ct': [0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA] 250 | }, 251 | { 252 | 'key': [0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6, 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D], 253 | 'pt': [0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA], 254 | 'ct': [0x30, 0x59, 0xD6, 0xD6, 0x17, 0x53, 0xB9, 0x58, 0xD9, 0x2F, 0x47, 0x81, 0xC8, 0x64, 0x0E, 0x58] 255 | }, 256 | { 257 | 'key': [0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA, 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6], 258 | 'pt': [0x30, 0x59, 0xD6, 0xD6, 0x17, 0x53, 0xB9, 0x58, 0xD9, 0x2F, 0x47, 0x81, 0xC8, 0x64, 0x0E, 0x58], 259 | 'ct': [0xE6, 0x94, 0x65, 0x77, 0x05, 0x05, 0xD7, 0xF8, 0x0E, 0xF6, 0x8C, 0xA3, 0x8A, 0xB3, 0xA3, 0xD6] 260 | }, 261 | { 262 | 'key': [0x30, 0x59, 0xD6, 0xD6, 0x17, 0x53, 0xB9, 0x58, 0xD9, 0x2F, 0x47, 0x81, 0xC8, 0x64, 0x0E, 0x58, 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA], 263 | 'pt': [0xE6, 0x94, 0x65, 0x77, 0x05, 0x05, 0xD7, 0xF8, 0x0E, 0xF6, 0x8C, 0xA3, 0x8A, 0xB3, 0xA3, 0xD6], 264 | 'ct': [0x5A, 0xB6, 0x7A, 0x5F, 0x85, 0x39, 0xA4, 0xA5, 0xFD, 0x9F, 0x03, 0x73, 0xBA, 0x46, 0x34, 0x66] 265 | }, 266 | { 267 | 'key': [0xE6, 0x94, 0x65, 0x77, 0x05, 0x05, 0xD7, 0xF8, 0x0E, 0xF6, 0x8C, 0xA3, 0x8A, 0xB3, 0xA3, 0xD6, 0x30, 0x59, 0xD6, 0xD6, 0x17, 0x53, 0xB9, 0x58, 0xD9, 0x2F, 0x47, 0x81, 0xC8, 0x64, 0x0E, 0x58], 268 | 'pt': [0x5A, 0xB6, 0x7A, 0x5F, 0x85, 0x39, 0xA4, 0xA5, 0xFD, 0x9F, 0x03, 0x73, 0xBA, 0x46, 0x34, 0x66], 269 | 'ct': [0xDC, 0x09, 0x6B, 0xCD, 0x99, 0xFC, 0x72, 0xF7, 0x99, 0x36, 0xD4, 0xC7, 0x48, 0xE7, 0x5A, 0xF7] 270 | }, 271 | { 272 | 'key': [0x5A, 0xB6, 0x7A, 0x5F, 0x85, 0x39, 0xA4, 0xA5, 0xFD, 0x9F, 0x03, 0x73, 0xBA, 0x46, 0x34, 0x66, 0xE6, 0x94, 0x65, 0x77, 0x05, 0x05, 0xD7, 0xF8, 0x0E, 0xF6, 0x8C, 0xA3, 0x8A, 0xB3, 0xA3, 0xD6], 273 | 'pt': [0xDC, 0x09, 0x6B, 0xCD, 0x99, 0xFC, 0x72, 0xF7, 0x99, 0x36, 0xD4, 0xC7, 0x48, 0xE7, 0x5A, 0xF7], 274 | 'ct': [0xC5, 0xA3, 0xE7, 0xCE, 0xE0, 0xF1, 0xB7, 0x26, 0x05, 0x28, 0xA6, 0x8F, 0xB4, 0xEA, 0x05, 0xF2] 275 | }, 276 | { 277 | 'key': [0xDC, 0x09, 0x6B, 0xCD, 0x99, 0xFC, 0x72, 0xF7, 0x99, 0x36, 0xD4, 0xC7, 0x48, 0xE7, 0x5A, 0xF7, 0x5A, 0xB6, 0x7A, 0x5F, 0x85, 0x39, 0xA4, 0xA5, 0xFD, 0x9F, 0x03, 0x73, 0xBA, 0x46, 0x34, 0x66], 278 | 'pt': [0xC5, 0xA3, 0xE7, 0xCE, 0xE0, 0xF1, 0xB7, 0x26, 0x05, 0x28, 0xA6, 0x8F, 0xB4, 0xEA, 0x05, 0xF2], 279 | 'ct': [0x43, 0xD5, 0xCE, 0xC3, 0x27, 0xB2, 0x4A, 0xB9, 0x0A, 0xD3, 0x4A, 0x79, 0xD0, 0x46, 0x91, 0x51] 280 | } 281 | ] 282 | , testsIndex = 0 283 | , testsLength = tests.length 284 | , aTest 285 | , key 286 | , pt 287 | , ct; 288 | 289 | for (; testsIndex < testsLength; testsIndex += 1) { 290 | 291 | aTest = tests[testsIndex]; 292 | useCaseName = 'ecb 256, I = ' + (testsIndex + 1); 293 | 294 | it(useCaseName, singleTest.bind(this, aTest)); 295 | } 296 | 297 | key = aTest.key; 298 | pt = aTest.pt; 299 | ct = aTest.ct; 300 | for (; testsIndex + 1 < 45; testsIndex += 1) { 301 | key = pt.concat(key.slice(0, 16)); 302 | pt = ct; 303 | ct = twF.encrypt(key, pt); 304 | } 305 | 306 | aTest = { 307 | 'key': pt.concat(key.slice(0, 16)), 308 | 'pt': ct, 309 | 'ct': [0xD2, 0xDE, 0xD7, 0x3E, 0x59, 0x31, 0x9A, 0x81, 0x38, 0xE0, 0x33, 0x1F, 0x0E, 0xA1, 0x49, 0xEA] 310 | }; 311 | it('ecb 256, I = 45', singleTest.bind(this, aTest)); 312 | 313 | aTest = { 314 | 'key': aTest.pt.concat(aTest.key.slice(0, 16)), 315 | 'pt': aTest.ct, 316 | 'ct': [0x2E, 0x21, 0x58, 0xBC, 0x3E, 0x5F, 0xC7, 0x14, 0xC1, 0xEE, 0xEC, 0xA0, 0xEA, 0x69, 0x6D, 0x48] 317 | }; 318 | it('ecb 256, I = 46', singleTest.bind(this, aTest)); 319 | 320 | aTest = { 321 | 'key': aTest.pt.concat(aTest.key.slice(0, 16)), 322 | 'pt': aTest.ct, 323 | 'ct': [0x24, 0x8A, 0x7F, 0x35, 0x28, 0xB1, 0x68, 0xAC, 0xFD, 0xD1, 0x38, 0x6E, 0x3F, 0x51, 0xE3, 0x0C] 324 | }; 325 | it('ecb 256, I = 47', singleTest.bind(this, aTest)); 326 | 327 | aTest = { 328 | 'key': aTest.pt.concat(aTest.key.slice(0, 16)), 329 | 'pt': aTest.ct, 330 | 'ct': [0x43, 0x10, 0x58, 0xF4, 0xDB, 0xC7, 0xF7, 0x34, 0xDA, 0x4F, 0x02, 0xF0, 0x4C, 0xC4, 0xF4, 0x59] 331 | }; 332 | it('ecb 256, I = 48', singleTest.bind(this, aTest)); 333 | 334 | aTest = { 335 | 'key': aTest.pt.concat(aTest.key.slice(0, 16)), 336 | 'pt': aTest.ct, 337 | 'ct': [0x37, 0xFE, 0x26, 0xFF, 0x1C, 0xF6, 0x61, 0x75, 0xF5, 0xDD, 0xF4, 0xC3, 0x3B, 0x97, 0xA2, 0x05] 338 | }; 339 | it('ecb 256, I = 49', singleTest.bind(this, aTest)); 340 | }); 341 | }(describe, it, expect, twofish)); 342 | -------------------------------------------------------------------------------- /spec/ecb-vt.js: -------------------------------------------------------------------------------- 1 | /*global describe it expect twofish*/ 2 | (function doTest(describe, it, expect, twofish){ 3 | 'use strict'; 4 | 5 | var twF = twofish() 6 | , useCaseName 7 | , singleTest = function doTestCase(thisKey, thisTest) { 8 | var ct = twF.encrypt(thisKey, thisTest.pt) 9 | , cpt = twF.decrypt(thisKey, thisTest.ct); 10 | 11 | expect(ct).toEqual(thisTest.ct); 12 | expect(cpt).toEqual(thisTest.pt); 13 | }; 14 | 15 | describe('ECB VT - 128 keysize', function doTestSuite() { 16 | 17 | var key = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] 18 | , tests = [ 19 | { 20 | 'pt': [0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 21 | 'ct': [0x73, 0xB9, 0xFF, 0x14, 0xCF, 0x25, 0x89, 0x90, 0x1F, 0xF5, 0x2A, 0x0D, 0x6F, 0x4B, 0x7E, 0xDE] 22 | }, 23 | { 24 | 'pt': [0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 25 | 'ct': [0xF5, 0xA9, 0x15, 0x0B, 0xAB, 0x6D, 0x6A, 0xEB, 0xD6, 0xB4, 0xF9, 0x7D, 0x9E, 0x93, 0xB2, 0x8B] 26 | }, 27 | { 28 | 'pt': [0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 29 | 'ct': [0xC3, 0x0F, 0x8B, 0x22, 0x1F, 0xD6, 0xD3, 0x99, 0x6F, 0x97, 0x3C, 0xDC, 0xDC, 0x6E, 0x30, 0x5C] 30 | }, 31 | { 32 | 'pt': [0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 33 | 'ct': [0xD6, 0xA5, 0x31, 0xFE, 0x82, 0x6C, 0xB0, 0x45, 0x4F, 0x2D, 0x56, 0x7A, 0x20, 0x01, 0x8C, 0xB7] 34 | }, 35 | { 36 | 'pt': [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 37 | 'ct': [0xB6, 0x23, 0x24, 0xBE, 0x42, 0x73, 0x32, 0xA6, 0x08, 0x9C, 0x7B, 0xE4, 0x0D, 0x40, 0x29, 0x2E] 38 | }, 39 | { 40 | 'pt': [0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 41 | 'ct': [0x92, 0x9B, 0x47, 0x89, 0xE9, 0xD6, 0x94, 0x0C, 0x9A, 0x15, 0x88, 0x80, 0xCA, 0x21, 0xC0, 0xE2] 42 | }, 43 | { 44 | 'pt': [0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 45 | 'ct': [0xC1, 0x48, 0x30, 0xDB, 0x50, 0xBA, 0x72, 0x21, 0xB2, 0x7D, 0xC0, 0x33, 0xB0, 0xD8, 0xD3, 0x31] 46 | }, 47 | { 48 | 'pt': [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 49 | 'ct': [0x74, 0x33, 0x42, 0xB0, 0x2E, 0xBE, 0x64, 0x7A, 0xE4, 0x70, 0x92, 0xD4, 0x35, 0xFA, 0x60, 0xF6] 50 | }, 51 | { 52 | 'pt': [0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 53 | 'ct': [0x4F, 0x02, 0xAF, 0x45, 0xC0, 0x93, 0x73, 0xD8, 0x79, 0xCD, 0x01, 0x50, 0x6A, 0x4E, 0x7D, 0x14] 54 | }, 55 | { 56 | 'pt': [0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 57 | 'ct': [0x92, 0xBC, 0x90, 0x85, 0xAB, 0x0B, 0xA8, 0xFF, 0xEC, 0x2E, 0xA6, 0xD3, 0x60, 0x86, 0x48, 0x17] 58 | }, 59 | { 60 | 'pt': [0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 61 | 'ct': [0x67, 0x0A, 0x4E, 0xD1, 0x6E, 0xA1, 0xBD, 0xE2, 0x3E, 0x16, 0xCB, 0x52, 0xDB, 0xD3, 0x1C, 0xB0] 62 | }, 63 | { 64 | 'pt': [0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 65 | 'ct': [0xA5, 0x23, 0x35, 0xAA, 0x9F, 0x42, 0x88, 0x60, 0x84, 0xE2, 0x14, 0x00, 0xDE, 0x48, 0xB6, 0x2F] 66 | }, 67 | { 68 | 'pt': [0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 69 | 'ct': [0xA5, 0xA2, 0x40, 0xEB, 0xFE, 0xD7, 0x9F, 0x38, 0xF3, 0x14, 0x97, 0xEA, 0x4C, 0x9C, 0xFC, 0xDA] 70 | }, 71 | { 72 | 'pt': [0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 73 | 'ct': [0x46, 0xA6, 0x4A, 0x07, 0x12, 0x3E, 0x12, 0x12, 0xFE, 0x9E, 0x2F, 0x30, 0xED, 0xFD, 0x80, 0xFF] 74 | }, 75 | { 76 | 'pt': [0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 77 | 'ct': [0x20, 0xC9, 0xF2, 0x0A, 0x80, 0x45, 0xAE, 0xDE, 0xE9, 0xD6, 0xE1, 0xCD, 0xA9, 0x48, 0x33, 0x9A] 78 | }, 79 | { 80 | 'pt': [0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 81 | 'ct': [0xDF, 0x16, 0x06, 0xEE, 0xF4, 0xFE, 0xE3, 0xF4, 0xFC, 0x9E, 0xC2, 0x6E, 0x2A, 0xB3, 0x88, 0xAB] 82 | }, 83 | { 84 | 'pt': [0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 85 | 'ct': [0x67, 0x58, 0x97, 0x2B, 0x31, 0x71, 0xF0, 0xEA, 0x46, 0x30, 0x45, 0x42, 0x77, 0x63, 0x37, 0xFC] 86 | }, 87 | { 88 | 'pt': [0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 89 | 'ct': [0xEC, 0x9B, 0x59, 0x1D, 0xB8, 0x47, 0x6C, 0x26, 0xC3, 0xCF, 0xDA, 0x61, 0x8C, 0x1D, 0xBB, 0xD8] 90 | }, 91 | { 92 | 'pt': [0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 93 | 'ct': [0x65, 0x15, 0x51, 0xE7, 0x41, 0x35, 0x9E, 0x0A, 0x10, 0xBB, 0x4E, 0xE6, 0xA1, 0xC0, 0x7C, 0x02] 94 | }, 95 | { 96 | 'pt': [0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 97 | 'ct': [0x88, 0xBC, 0x2B, 0xF1, 0xF8, 0xA5, 0x55, 0x62, 0xB9, 0x5F, 0x85, 0x47, 0xC9, 0xA1, 0x9E, 0x56] 98 | }, 99 | { 100 | 'pt': [0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 101 | 'ct': [0x1A, 0x6C, 0xCC, 0xBD, 0x8D, 0x40, 0xAA, 0x14, 0x81, 0x0E, 0xD6, 0x15, 0xA6, 0xA6, 0xE2, 0x4D] 102 | }, 103 | { 104 | 'pt': [0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 105 | 'ct': [0x7B, 0x68, 0xDA, 0x56, 0x8A, 0xBA, 0x5A, 0xE6, 0x9D, 0x93, 0xC9, 0x15, 0xE3, 0x7D, 0xEE, 0x91] 106 | }, 107 | { 108 | 'pt': [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 109 | 'ct': [0xEC, 0x39, 0x22, 0xA7, 0x28, 0xDA, 0x9E, 0x4C, 0x21, 0x2D, 0x91, 0x0E, 0x5C, 0x4A, 0xE6, 0x32] 110 | }, 111 | { 112 | 'pt': [0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 113 | 'ct': [0x5B, 0xAC, 0x94, 0xC9, 0x7A, 0x40, 0x69, 0x40, 0x08, 0x75, 0xA5, 0xAB, 0xC0, 0x7B, 0xCB, 0x17] 114 | }, 115 | { 116 | 'pt': [0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 117 | 'ct': [0xF3, 0xB4, 0x66, 0x29, 0x18, 0x86, 0x4B, 0xA9, 0x4C, 0x1C, 0xF7, 0x9C, 0x73, 0xB1, 0xF2, 0x59] 118 | }, 119 | { 120 | 'pt': [0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 121 | 'ct': [0x6F, 0xBF, 0x5A, 0x9A, 0x93, 0xEF, 0xA6, 0x64, 0x0A, 0xFB, 0x80, 0xD9, 0xA2, 0xD2, 0x2C, 0xF7] 122 | }, 123 | { 124 | 'pt': [0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 125 | 'ct': [0x74, 0x13, 0x9B, 0xD6, 0x45, 0xDE, 0xD7, 0x69, 0x0F, 0x60, 0x64, 0x90, 0xCC, 0xA4, 0x4D, 0xD2] 126 | }, 127 | { 128 | 'pt': [0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 129 | 'ct': [0xB2, 0x0F, 0x45, 0x65, 0x19, 0xD3, 0x53, 0xAF, 0x91, 0xC0, 0x12, 0x79, 0x35, 0x76, 0xF9, 0xB8] 130 | }, 131 | { 132 | 'pt': [0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 133 | 'ct': [0xC0, 0xAD, 0x52, 0xD4, 0xB4, 0xF6, 0x7A, 0x93, 0x33, 0xA5, 0xE4, 0xB1, 0xB1, 0x17, 0x6E, 0xEC] 134 | }, 135 | { 136 | 'pt': [0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 137 | 'ct': [0x79, 0x72, 0x24, 0x71, 0x0F, 0xD0, 0x9F, 0x98, 0x30, 0xB0, 0xF1, 0x60, 0xAE, 0x90, 0x51, 0xE8] 138 | }, 139 | { 140 | 'pt': [0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 141 | 'ct': [0x73, 0x66, 0x9B, 0x64, 0xC2, 0x92, 0xF4, 0x46, 0x1F, 0xAA, 0x3A, 0x3D, 0x09, 0x1D, 0x08, 0xDA] 142 | }, 143 | { 144 | 'pt': [0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 145 | 'ct': [0xEF, 0xE0, 0xE8, 0x93, 0xCE, 0x04, 0x00, 0x89, 0x35, 0xCB, 0x7D, 0x43, 0xA7, 0xDC, 0x9A, 0xDD] 146 | }, 147 | { 148 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 149 | 'ct': [0x3B, 0x0A, 0x2D, 0x3B, 0x23, 0x63, 0x24, 0x22, 0x1F, 0x81, 0xBF, 0xCA, 0xE4, 0x52, 0x17, 0xD8] 150 | }, 151 | { 152 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 153 | 'ct': [0xCE, 0x6F, 0x56, 0x9F, 0xC8, 0x91, 0x27, 0xB1, 0xAE, 0x19, 0x46, 0x6F, 0xA3, 0x6D, 0xD6, 0xE4] 154 | }, 155 | { 156 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 157 | 'ct': [0x60, 0x37, 0xFE, 0x38, 0x89, 0x6C, 0x05, 0x74, 0x5C, 0x58, 0xC2, 0x8C, 0xDF, 0x7F, 0xF3, 0x86] 158 | }, 159 | { 160 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 161 | 'ct': [0x92, 0xF5, 0x81, 0x7D, 0x0B, 0xE3, 0x72, 0x41, 0xF9, 0x29, 0x2F, 0x6F, 0xF9, 0x18, 0xA8, 0xE5] 162 | }, 163 | { 164 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 165 | 'ct': [0x20, 0xC9, 0xA2, 0xA6, 0x84, 0x56, 0x34, 0x95, 0xC2, 0x55, 0xA5, 0x75, 0x1C, 0x1A, 0xC0, 0x1E] 166 | }, 167 | { 168 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 169 | 'ct': [0xAC, 0x6B, 0x6D, 0xB6, 0xD0, 0x69, 0xB6, 0x89, 0x5F, 0x22, 0x83, 0x43, 0x5D, 0x33, 0xBD, 0x43] 170 | }, 171 | 172 | 173 | { 174 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 175 | 'ct': [0xF9, 0x35, 0x4B, 0x12, 0xC2, 0x36, 0x6F, 0x1C, 0xE1, 0x0F, 0x9A, 0x05, 0x50, 0x28, 0x12, 0x67] 176 | }, 177 | 178 | 179 | { 180 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 181 | 'ct': [0x68, 0x4F, 0xDA, 0x9F, 0xCF, 0x3B, 0x3B, 0x56, 0x48, 0xA4, 0x52, 0xCD, 0xA0, 0x7C, 0xF0, 0x02] 182 | }, 183 | 184 | 185 | { 186 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 187 | 'ct': [0x9B, 0xE2, 0x94, 0xC9, 0x7C, 0x2A, 0x96, 0x30, 0x06, 0xA2, 0xBD, 0x45, 0x41, 0xDC, 0x7D, 0xB5] 188 | }, 189 | 190 | 191 | { 192 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 193 | 'ct': [0xA9, 0x84, 0xF6, 0xF7, 0x0E, 0x93, 0xFE, 0x65, 0xC8, 0x79, 0x8C, 0x01, 0xD4, 0xE5, 0xD3, 0x0C] 194 | }, 195 | 196 | 197 | { 198 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 199 | 'ct': [0xE0, 0x6A, 0x6C, 0xE2, 0xD7, 0x4D, 0xB3, 0xD7, 0x8E, 0x8F, 0x5D, 0x99, 0x1C, 0x32, 0x2B, 0x87] 200 | }, 201 | 202 | 203 | { 204 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 205 | 'ct': [0x64, 0x67, 0x71, 0xD1, 0x6B, 0xAE, 0xDA, 0xC3, 0xF8, 0xE9, 0xD0, 0x0C, 0x21, 0x25, 0x18, 0xA2] 206 | }, 207 | 208 | 209 | { 210 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 211 | 'ct': [0x9D, 0x2D, 0x41, 0x0D, 0xC6, 0xF3, 0xBE, 0xC9, 0x13, 0xD6, 0x4B, 0xDB, 0xDE, 0xF3, 0x28, 0x5E] 212 | }, 213 | 214 | 215 | { 216 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 217 | 'ct': [0x68, 0x50, 0xAF, 0xEC, 0xD8, 0x06, 0x4E, 0x77, 0xF4, 0xF6, 0x94, 0x4B, 0xDF, 0x5B, 0x32, 0x4D] 218 | }, 219 | 220 | 221 | { 222 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 223 | 'ct': [0x2E, 0x34, 0x11, 0x42, 0x55, 0x0F, 0x73, 0xF4, 0xC8, 0xE9, 0xDC, 0xCC, 0x59, 0x31, 0xA1, 0x58] 224 | }, 225 | 226 | 227 | { 228 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 229 | 'ct': [0x0C, 0xA5, 0x8E, 0x14, 0x9C, 0x21, 0x20, 0xA8, 0xEB, 0xF9, 0xA7, 0x88, 0x5A, 0x89, 0xAC, 0xBC] 230 | }, 231 | 232 | 233 | { 234 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 235 | 'ct': [0x41, 0xEA, 0xCB, 0x7F, 0x6B, 0x5F, 0x9E, 0x3E, 0x3D, 0x29, 0x9C, 0xA4, 0x16, 0xEA, 0x2C, 0x59] 236 | }, 237 | 238 | 239 | { 240 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 241 | 'ct': [0xC4, 0xD4, 0x55, 0x03, 0x48, 0x4D, 0xBC, 0x83, 0xCB, 0x52, 0xD3, 0xDB, 0x4A, 0xD0, 0xA7, 0xCC] 242 | }, 243 | 244 | 245 | { 246 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 247 | 'ct': [0xCC, 0x52, 0xB1, 0x59, 0xC2, 0xBC, 0xF8, 0x7E, 0xE5, 0xF4, 0x92, 0x6C, 0x6E, 0x7B, 0x77, 0x44] 248 | }, 249 | 250 | 251 | { 252 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 253 | 'ct': [0x7E, 0x8A, 0x40, 0x23, 0xB8, 0x89, 0x0A, 0x2D, 0xBF, 0x0D, 0x54, 0xE3, 0x30, 0xFD, 0xF2, 0xA2] 254 | }, 255 | 256 | 257 | { 258 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 259 | 'ct': [0xB0, 0x5E, 0x77, 0x16, 0x60, 0x49, 0x3D, 0xCE, 0x3A, 0x27, 0x5B, 0x02, 0x52, 0xD3, 0x43, 0xA7] 260 | }, 261 | 262 | 263 | { 264 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 265 | 'ct': [0x83, 0xD0, 0x03, 0x4D, 0x23, 0x1E, 0x17, 0x92, 0x07, 0xF6, 0xA9, 0x7F, 0xB1, 0x45, 0x7F, 0xEB] 266 | }, 267 | 268 | 269 | { 270 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 271 | 'ct': [0x71, 0x32, 0xBF, 0x13, 0x0E, 0x87, 0x32, 0xC4, 0x1F, 0x68, 0x10, 0x7F, 0x49, 0x15, 0x3F, 0xF2] 272 | }, 273 | 274 | 275 | { 276 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 277 | 'ct': [0xB9, 0x30, 0x21, 0x59, 0x3B, 0x9E, 0xA2, 0x58, 0x8F, 0x16, 0xE8, 0x7D, 0x3C, 0x5D, 0xE0, 0xEC] 278 | }, 279 | 280 | 281 | { 282 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 283 | 'ct': [0x26, 0x03, 0x14, 0x49, 0xFB, 0xD6, 0xC8, 0x42, 0x01, 0xB0, 0xBF, 0xB5, 0x3B, 0x2C, 0x23, 0xCA] 284 | }, 285 | 286 | 287 | { 288 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 289 | 'ct': [0xAF, 0xC8, 0xE9, 0xD2, 0xB9, 0xBF, 0xED, 0x9C, 0xE0, 0xB8, 0x98, 0xF2, 0x86, 0x07, 0xDF, 0x4C] 290 | }, 291 | 292 | 293 | { 294 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 295 | 'ct': [0xC5, 0x09, 0x4D, 0xE7, 0xE3, 0x6C, 0xAE, 0xBE, 0x1B, 0x76, 0xEC, 0x3A, 0xC2, 0xC8, 0x75, 0xF5] 296 | }, 297 | 298 | 299 | { 300 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 301 | 'ct': [0x7D, 0xF8, 0x91, 0x0A, 0x2D, 0x25, 0x6F, 0xFB, 0x5D, 0x56, 0xFD, 0x13, 0x58, 0xF1, 0x31, 0xFE] 302 | }, 303 | 304 | 305 | { 306 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 307 | 'ct': [0xD9, 0x3F, 0x84, 0xC1, 0x51, 0x9D, 0x66, 0x27, 0x46, 0x5E, 0x98, 0x46, 0x75, 0xAA, 0x80, 0x0B] 308 | }, 309 | 310 | 311 | { 312 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 313 | 'ct': [0x5F, 0x18, 0x61, 0xF1, 0x52, 0x3C, 0xDA, 0x0C, 0x95, 0x64, 0x4B, 0x0C, 0x4F, 0x2E, 0xE6, 0xD1] 314 | }, 315 | 316 | 317 | { 318 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 319 | 'ct': [0xFC, 0x5C, 0x48, 0x93, 0xAD, 0x14, 0x8E, 0x41, 0x34, 0xEA, 0xEB, 0x3B, 0x1B, 0x19, 0x0E, 0x29] 320 | }, 321 | 322 | 323 | { 324 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 325 | 'ct': [0x80, 0xD1, 0x46, 0x3F, 0x9E, 0x94, 0x16, 0xA1, 0x43, 0xB2, 0xFF, 0x69, 0xDE, 0x62, 0x95, 0x10] 326 | }, 327 | 328 | 329 | { 330 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 331 | 'ct': [0xF1, 0x63, 0x05, 0x40, 0x4A, 0xE6, 0x26, 0x6C, 0x61, 0x9D, 0xC8, 0xAC, 0xA2, 0xD4, 0x92, 0xE1] 332 | }, 333 | 334 | 335 | { 336 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 337 | 'ct': [0x3B, 0x25, 0x54, 0xE4, 0x22, 0xF9, 0xCE, 0xBB, 0x82, 0x71, 0xD7, 0xA4, 0x8C, 0x94, 0xE0, 0x3F] 338 | }, 339 | 340 | 341 | { 342 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 343 | 'ct': [0x18, 0xB0, 0x39, 0xEE, 0xCB, 0x68, 0xA0, 0x5C, 0xBF, 0x8C, 0x65, 0xEE, 0x85, 0xBD, 0xC4, 0xBC] 344 | }, 345 | 346 | 347 | { 348 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 349 | 'ct': [0xBB, 0x26, 0xAB, 0xB1, 0x7A, 0xD5, 0x48, 0x2B, 0x1D, 0xCC, 0x40, 0x18, 0xE7, 0xDB, 0x09, 0x50] 350 | }, 351 | 352 | 353 | { 354 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 355 | 'ct': [0x7E, 0x7A, 0xC0, 0xFD, 0x5B, 0x98, 0x15, 0x7C, 0xEA, 0xD4, 0xBB, 0xAB, 0x64, 0x3B, 0xE4, 0xCA] 356 | }, 357 | 358 | 359 | { 360 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 361 | 'ct': [0xBD, 0x8A, 0x3B, 0x64, 0x84, 0x9E, 0x54, 0xCC, 0x2D, 0x83, 0x79, 0xDC, 0xA9, 0xE4, 0x2F, 0xDD] 362 | }, 363 | 364 | 365 | { 366 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 367 | 'ct': [0x58, 0xC3, 0x88, 0xDF, 0xB4, 0x1F, 0xF3, 0xE1, 0x43, 0x94, 0xC7, 0x3F, 0xD8, 0xAA, 0xC5, 0x6A] 368 | }, 369 | 370 | 371 | { 372 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 373 | 'ct': [0x94, 0x4B, 0x29, 0x5E, 0x23, 0xC5, 0xB2, 0x54, 0x2D, 0xED, 0x57, 0xA1, 0x55, 0xD3, 0x3E, 0xF8] 374 | }, 375 | 376 | 377 | { 378 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 379 | 'ct': [0x06, 0x7B, 0x4D, 0xD0, 0x7D, 0xCA, 0x12, 0x92, 0xCF, 0xF0, 0xD8, 0x0D, 0x75, 0xBD, 0xAC, 0xA5] 380 | }, 381 | 382 | 383 | { 384 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 385 | 'ct': [0x7D, 0x73, 0x44, 0x37, 0x31, 0x96, 0xC5, 0xB3, 0x06, 0x76, 0xF2, 0x70, 0xBF, 0xC9, 0x0B, 0x07] 386 | }, 387 | 388 | 389 | { 390 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 391 | 'ct': [0x98, 0x8C, 0x51, 0x64, 0xA8, 0x22, 0x54, 0xB2, 0x93, 0x26, 0xC9, 0x88, 0x12, 0xA7, 0x16, 0xCE] 392 | }, 393 | 394 | 395 | { 396 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 397 | 'ct': [0x8F, 0xFD, 0x48, 0x78, 0x7C, 0x28, 0x54, 0x2E, 0x04, 0x50, 0xFA, 0xD4, 0xCB, 0xAD, 0x34, 0xD0] 398 | }, 399 | 400 | 401 | { 402 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 403 | 'ct': [0xC5, 0x0E, 0x7C, 0xD7, 0x71, 0x62, 0x89, 0x64, 0xE7, 0x08, 0x42, 0x51, 0x60, 0xFF, 0xB0, 0x2C] 404 | }, 405 | 406 | 407 | { 408 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 409 | 'ct': [0xB2, 0x93, 0xB0, 0x7F, 0x92, 0xD6, 0x8C, 0x18, 0xFE, 0xC1, 0x46, 0x69, 0x96, 0xB7, 0x80, 0x20] 410 | }, 411 | 412 | 413 | { 414 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 415 | 'ct': [0xDE, 0x21, 0xB2, 0xA6, 0xC8, 0xD7, 0xB9, 0x0A, 0x77, 0x14, 0xDB, 0x3E, 0xF5, 0x20, 0x9A, 0x6B] 416 | }, 417 | 418 | 419 | { 420 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 421 | 'ct': [0x47, 0x00, 0xE2, 0x2C, 0x08, 0xFE, 0x95, 0x3C, 0xAB, 0xAC, 0x7E, 0x78, 0xA3, 0xF7, 0x47, 0xA7] 422 | }, 423 | 424 | 425 | { 426 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00], 427 | 'ct': [0x50, 0x4C, 0x1D, 0x7F, 0xAE, 0x3A, 0xB9, 0xA6, 0x23, 0x23, 0xF2, 0x1B, 0xF9, 0xA8, 0x0A, 0x67] 428 | }, 429 | 430 | 431 | { 432 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00], 433 | 'ct': [0x06, 0x4B, 0xA0, 0xE8, 0xAD, 0xDD, 0x8E, 0x9D, 0xF4, 0x49, 0x6E, 0x69, 0x31, 0xAD, 0x25, 0xF4] 434 | }, 435 | 436 | 437 | { 438 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00], 439 | 'ct': [0x51, 0xD0, 0xB1, 0x5C, 0x08, 0xFF, 0x32, 0xF1, 0xDC, 0xE7, 0xB2, 0x83, 0x20, 0x87, 0x55, 0x66] 440 | }, 441 | 442 | 443 | { 444 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], 445 | 'ct': [0x1A, 0x20, 0xEA, 0x3D, 0xB0, 0x71, 0x12, 0x14, 0x60, 0x24, 0x4E, 0xDE, 0x27, 0xDA, 0x7A, 0x39] 446 | }, 447 | 448 | 449 | { 450 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00], 451 | 'ct': [0x00, 0x35, 0xA5, 0xF7, 0x55, 0x7B, 0x1B, 0x00, 0x93, 0x27, 0x10, 0x9D, 0x0C, 0x62, 0xF2, 0x5C] 452 | }, 453 | 454 | 455 | { 456 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00], 457 | 'ct': [0x80, 0x39, 0x39, 0xC1, 0x0E, 0xE1, 0x1B, 0xB2, 0x54, 0xA7, 0x76, 0x8F, 0xAD, 0x05, 0x3D, 0xA4] 458 | }, 459 | 460 | 461 | { 462 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00], 463 | 'ct': [0x35, 0xD4, 0x93, 0x25, 0x5A, 0x87, 0x09, 0x59, 0xC1, 0x2F, 0x26, 0x17, 0x0E, 0x6A, 0x1B, 0x64] 464 | }, 465 | 466 | 467 | { 468 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00], 469 | 'ct': [0xDE, 0x83, 0x81, 0x19, 0x82, 0x15, 0xD4, 0x5B, 0x1B, 0xE7, 0x87, 0xE4, 0xE8, 0x43, 0x85, 0x00] 470 | }, 471 | 472 | 473 | { 474 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00], 475 | 'ct': [0xB2, 0x2E, 0x97, 0x07, 0xE7, 0x38, 0xF7, 0x23, 0xCD, 0x9B, 0x99, 0x38, 0x6C, 0xE0, 0x16, 0x2E] 476 | }, 477 | 478 | 479 | { 480 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00], 481 | 'ct': [0x24, 0xC6, 0x5A, 0xDD, 0xE5, 0xC3, 0xCD, 0x24, 0xB7, 0x5C, 0x34, 0x37, 0x82, 0xE8, 0x7F, 0x6E] 482 | }, 483 | 484 | 485 | { 486 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], 487 | 'ct': [0x00, 0x50, 0xFF, 0x2C, 0x1A, 0x3C, 0x2A, 0xA6, 0x82, 0x07, 0xD3, 0x33, 0xF9, 0x95, 0x6A, 0x72] 488 | }, 489 | 490 | 491 | { 492 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00], 493 | 'ct': [0x16, 0x2F, 0x7B, 0x8D, 0x35, 0xC1, 0xA9, 0x83, 0x05, 0xBA, 0x0F, 0xE2, 0xA9, 0x1F, 0xF2, 0x7A] 494 | }, 495 | 496 | 497 | { 498 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00], 499 | 'ct': [0x22, 0x3D, 0x61, 0x17, 0xFE, 0x48, 0x64, 0xC2, 0xB3, 0xC5, 0x13, 0xEA, 0xC2, 0xA5, 0x26, 0x6A] 500 | }, 501 | 502 | 503 | { 504 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00], 505 | 'ct': [0x3D, 0xBF, 0x64, 0x57, 0x15, 0xED, 0x7A, 0xD1, 0x96, 0x4E, 0x2D, 0xCD, 0xE2, 0xF8, 0x80, 0x6A] 506 | }, 507 | 508 | 509 | { 510 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00], 511 | 'ct': [0x3D, 0xBB, 0x85, 0x50, 0x95, 0x57, 0xBB, 0x00, 0xFE, 0x0F, 0x20, 0x13, 0xA9, 0x0A, 0x57, 0x53] 512 | }, 513 | 514 | 515 | { 516 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00], 517 | 'ct': [0xF2, 0xD7, 0x5E, 0x45, 0xA6, 0x2D, 0x17, 0x58, 0xC7, 0xA5, 0x42, 0xBC, 0x80, 0x5A, 0xC4, 0x82] 518 | }, 519 | 520 | 521 | { 522 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00], 523 | 'ct': [0x77, 0x62, 0x81, 0x53, 0xA6, 0x2D, 0xFD, 0x45, 0x5B, 0x1C, 0x0E, 0x5B, 0x6C, 0xE9, 0x68, 0x8C] 524 | }, 525 | 526 | 527 | { 528 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00], 529 | 'ct': [0x8A, 0xE9, 0xDF, 0x2D, 0x94, 0xF6, 0xE8, 0x5C, 0x86, 0x45, 0x91, 0x32, 0x13, 0x0E, 0x1B, 0xF5] 530 | }, 531 | 532 | 533 | { 534 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00], 535 | 'ct': [0xBB, 0x61, 0x09, 0x90, 0xF4, 0x23, 0x03, 0xF4, 0xEC, 0xCD, 0x79, 0x5E, 0x16, 0x78, 0x0A, 0x13] 536 | }, 537 | 538 | 539 | { 540 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00], 541 | 'ct': [0xA3, 0x83, 0x30, 0xC5, 0xC0, 0xB4, 0x64, 0xFF, 0xD6, 0x98, 0x39, 0x72, 0xCF, 0x95, 0x41, 0xCC] 542 | }, 543 | 544 | 545 | { 546 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00], 547 | 'ct': [0xEF, 0xD1, 0x1C, 0xA9, 0x8F, 0xEB, 0xB6, 0xF1, 0xEC, 0xBE, 0xBB, 0xCB, 0x8B, 0xD5, 0xE3, 0x5B] 548 | }, 549 | 550 | 551 | { 552 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00], 553 | 'ct': [0x3B, 0xC6, 0x74, 0x0B, 0xF1, 0x41, 0xDD, 0x33, 0xD6, 0x5F, 0xDE, 0xAA, 0x10, 0xBF, 0x16, 0x55] 554 | }, 555 | 556 | 557 | { 558 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00], 559 | 'ct': [0xFC, 0xF7, 0xBE, 0x4B, 0x89, 0xB5, 0x45, 0x47, 0xC0, 0xBE, 0xF8, 0x4E, 0xB8, 0x57, 0x34, 0xF6] 560 | }, 561 | 562 | 563 | { 564 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00], 565 | 'ct': [0xCB, 0xF5, 0xEF, 0x38, 0xDD, 0xEB, 0xCA, 0x39, 0xF2, 0xF6, 0xBE, 0xB2, 0xF3, 0x04, 0x2D, 0x96] 566 | }, 567 | 568 | 569 | { 570 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00], 571 | 'ct': [0x11, 0x19, 0xC2, 0x0F, 0x08, 0xD4, 0xEA, 0x77, 0xA1, 0x3C, 0x33, 0x16, 0x78, 0xD4, 0xD7, 0x1F] 572 | }, 573 | 574 | 575 | { 576 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00], 577 | 'ct': [0x5C, 0x82, 0x41, 0xDA, 0x3F, 0xB0, 0xDC, 0x73, 0x28, 0x27, 0x1B, 0x9F, 0xF7, 0x2C, 0x91, 0xBA] 578 | }, 579 | 580 | 581 | { 582 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00], 583 | 'ct': [0x33, 0x7F, 0xCE, 0xE0, 0xAD, 0x0B, 0xDC, 0xA2, 0x4A, 0xF5, 0x41, 0x1B, 0x69, 0xD3, 0x9B, 0x37] 584 | }, 585 | 586 | 587 | { 588 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00], 589 | 'ct': [0xF6, 0xC5, 0x6A, 0x84, 0x1A, 0x31, 0xD5, 0x8A, 0x90, 0xF5, 0x69, 0x3F, 0x87, 0x38, 0x0A, 0x3F] 590 | }, 591 | 592 | 593 | { 594 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00], 595 | 'ct': [0xDD, 0x8C, 0x11, 0xB4, 0x6F, 0x76, 0x8B, 0x7C, 0xB2, 0xEA, 0xEE, 0x7E, 0x34, 0x48, 0xDD, 0x37] 596 | }, 597 | 598 | 599 | { 600 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00], 601 | 'ct': [0xB8, 0xEE, 0x71, 0x82, 0xE5, 0x63, 0x88, 0x8E, 0x4F, 0x99, 0x33, 0x5C, 0xF0, 0x37, 0x25, 0x98] 602 | }, 603 | 604 | 605 | { 606 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00], 607 | 'ct': [0xFC, 0xA9, 0xBA, 0xD5, 0x8D, 0xD9, 0xC7, 0x7B, 0x0B, 0xC0, 0xE6, 0x16, 0xE7, 0xDE, 0x7F, 0x2D] 608 | }, 609 | 610 | 611 | { 612 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00], 613 | 'ct': [0x79, 0x8D, 0xA9, 0x9B, 0xEF, 0xFB, 0xF9, 0x9B, 0x23, 0xA3, 0xC1, 0x5A, 0x31, 0xF6, 0x0C, 0xB1] 614 | }, 615 | 616 | 617 | { 618 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00], 619 | 'ct': [0x01, 0x5C, 0xD8, 0x6F, 0x00, 0x0C, 0x87, 0x94, 0x8B, 0xF3, 0x59, 0x1C, 0x3D, 0xE4, 0x39, 0x1F] 620 | }, 621 | 622 | 623 | { 624 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00], 625 | 'ct': [0xB4, 0x0B, 0x99, 0x45, 0xEE, 0xF7, 0xBC, 0x52, 0xE0, 0xB2, 0x44, 0xED, 0x71, 0xFA, 0xD3, 0xD3] 626 | }, 627 | 628 | 629 | { 630 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00], 631 | 'ct': [0xD9, 0xBB, 0xB2, 0x7B, 0x7D, 0x8A, 0xB2, 0x02, 0x41, 0xE6, 0x0F, 0x04, 0x10, 0x8F, 0x1E, 0x12] 632 | }, 633 | 634 | 635 | { 636 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00], 637 | 'ct': [0x6E, 0xC3, 0xF2, 0x59, 0xB3, 0xFA, 0x96, 0x05, 0x05, 0xCD, 0xE9, 0xD2, 0x0F, 0x9E, 0xB9, 0x05] 638 | }, 639 | 640 | 641 | { 642 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00], 643 | 'ct': [0x01, 0xC1, 0x77, 0x2A, 0xD1, 0x04, 0xA9, 0x88, 0xB2, 0x97, 0x84, 0x47, 0xB9, 0x11, 0x99, 0xF0] 644 | }, 645 | 646 | 647 | { 648 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00], 649 | 'ct': [0xF8, 0xD5, 0xE9, 0x97, 0xA8, 0xDD, 0x1B, 0x5B, 0xBE, 0x79, 0xC9, 0xF3, 0x6B, 0x94, 0xC7, 0x3C] 650 | }, 651 | 652 | 653 | { 654 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00], 655 | 'ct': [0x40, 0x40, 0x05, 0x8B, 0x08, 0xB2, 0x7B, 0x6A, 0x58, 0x5F, 0x18, 0xBF, 0xDB, 0xAE, 0x3E, 0x29] 656 | }, 657 | 658 | 659 | { 660 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00], 661 | 'ct': [0x55, 0x54, 0x7D, 0x09, 0xAC, 0xAF, 0x0C, 0x91, 0x5B, 0x24, 0xE1, 0x5A, 0xBA, 0xB0, 0xC8, 0x27] 662 | }, 663 | 664 | 665 | { 666 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80], 667 | 'ct': [0xFD, 0x7A, 0x0B, 0x33, 0xD3, 0x97, 0xDA, 0x03, 0x5D, 0x14, 0x6D, 0xD5, 0x6C, 0x86, 0x99, 0x60] 668 | }, 669 | 670 | 671 | { 672 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40], 673 | 'ct': [0x80, 0xC3, 0x89, 0x00, 0x31, 0x3E, 0x93, 0x50, 0x21, 0x9E, 0xAE, 0x9A, 0xA7, 0xDA, 0x5E, 0x1B] 674 | }, 675 | 676 | 677 | { 678 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20], 679 | 'ct': [0xF5, 0x0D, 0x84, 0x95, 0xC3, 0xDC, 0xBF, 0xF4, 0xDF, 0xED, 0x07, 0x36, 0xF9, 0x24, 0x75, 0xBB] 680 | }, 681 | 682 | 683 | { 684 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10], 685 | 'ct': [0x58, 0xA0, 0x6D, 0xC5, 0xAD, 0x2D, 0x7C, 0x05, 0x50, 0x77, 0x1D, 0x6E, 0x9D, 0x59, 0xD5, 0x8B] 686 | }, 687 | 688 | 689 | { 690 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08], 691 | 'ct': [0xEE, 0xE3, 0x24, 0x73, 0x3E, 0x64, 0x09, 0x50, 0x0F, 0xC9, 0xF9, 0xD6, 0xDC, 0xA1, 0x85, 0xE0] 692 | }, 693 | 694 | 695 | { 696 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04], 697 | 'ct': [0xF9, 0x7C, 0x41, 0x58, 0x86, 0xD0, 0x5C, 0x12, 0x59, 0x8F, 0x2C, 0x95, 0xF6, 0xB3, 0xEB, 0x16] 698 | }, 699 | { 700 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02], 701 | 'ct': [0xF0, 0xFC, 0x7D, 0x86, 0xD8, 0x14, 0x58, 0x9A, 0x09, 0xD8, 0xEC, 0x13, 0x6F, 0x95, 0xA1, 0x24] 702 | }, 703 | { 704 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01], 705 | 'ct': [0xCA, 0x73, 0x7F, 0xF1, 0xFD, 0x0F, 0xE5, 0xB8, 0xE4, 0x1E, 0x90, 0x35, 0x8A, 0x5F, 0x2C, 0xB1] 706 | } 707 | ] 708 | , testsIndex = 0 709 | , testsLength = tests.length 710 | , aTest; 711 | 712 | for (; testsIndex < testsLength; testsIndex += 1) { 713 | 714 | aTest = tests[testsIndex]; 715 | useCaseName = 'ecb 128 use case: ' + testsIndex; 716 | 717 | it(useCaseName, singleTest.bind(this, key, aTest)); 718 | } 719 | }); 720 | 721 | describe('ECB VT - 192 keysize', function doTestSuite() { 722 | 723 | var key = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] 724 | , tests = [ 725 | { 726 | 'pt': [0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 727 | 'ct': [0x62, 0xEF, 0x19, 0x3E, 0xDB, 0x7D, 0x39, 0x9A, 0xCA, 0x50, 0xEC, 0x1C, 0xBE, 0x53, 0x98, 0xD8] 728 | }, 729 | 730 | 731 | { 732 | 'pt': [0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 733 | 'ct': [0xE7, 0xA5, 0x8D, 0x54, 0x76, 0x88, 0xBA, 0x8B, 0x69, 0xDA, 0x94, 0x9E, 0x38, 0xAA, 0x6F, 0xAD] 734 | }, 735 | 736 | 737 | { 738 | 'pt': [0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 739 | 'ct': [0x71, 0x57, 0x9F, 0x70, 0xA8, 0xED, 0xB2, 0xBA, 0x5C, 0x00, 0xC5, 0x13, 0xE2, 0xD7, 0xDE, 0xEB] 740 | }, 741 | 742 | 743 | { 744 | 'pt': [0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 745 | 'ct': [0xC6, 0x17, 0x1E, 0xF8, 0x92, 0xF8, 0x22, 0x4D, 0xC5, 0xFA, 0xE2, 0x30, 0xAF, 0x62, 0x9F, 0x52] 746 | }, 747 | 748 | 749 | { 750 | 'pt': [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 751 | 'ct': [0xC6, 0xA6, 0x10, 0x53, 0xC4, 0x8D, 0x7E, 0xCD, 0x7D, 0xDD, 0x12, 0xDB, 0x0F, 0x31, 0x6A, 0xD7] 752 | }, 753 | 754 | 755 | { 756 | 'pt': [0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 757 | 'ct': [0xEA, 0x58, 0x33, 0x71, 0x4F, 0x13, 0x24, 0xDA, 0xB7, 0xF5, 0x3C, 0xAC, 0xC6, 0x3F, 0x78, 0x4F] 758 | }, 759 | 760 | 761 | { 762 | 'pt': [0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 763 | 'ct': [0x45, 0x0B, 0xCB, 0x0C, 0x73, 0x51, 0xCB, 0x1C, 0xDA, 0xC5, 0xD0, 0x2E, 0x80, 0xD1, 0x3C, 0x64] 764 | }, 765 | 766 | 767 | { 768 | 'pt': [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 769 | 'ct': [0xC2, 0x67, 0xD3, 0x63, 0x4F, 0x84, 0x21, 0x5F, 0xB7, 0xB4, 0x63, 0x5A, 0xFA, 0x38, 0x5E, 0x52] 770 | }, 771 | 772 | 773 | { 774 | 'pt': [0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 775 | 'ct': [0x6D, 0xB5, 0xB1, 0xB1, 0x56, 0xDA, 0x1C, 0x36, 0xB9, 0xAB, 0x5A, 0xB5, 0x9B, 0x06, 0x3C, 0x29] 776 | }, 777 | 778 | 779 | { 780 | 'pt': [0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 781 | 'ct': [0xED, 0xF2, 0xD9, 0xB1, 0x9F, 0xF7, 0x55, 0x61, 0xE8, 0xFA, 0x6F, 0x41, 0x1C, 0x4A, 0x04, 0x31] 782 | }, 783 | 784 | 785 | { 786 | 'pt': [0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 787 | 'ct': [0xA1, 0x1A, 0xE8, 0x4E, 0x6D, 0x2C, 0x56, 0xDE, 0xD2, 0xB9, 0x49, 0x7F, 0xEC, 0x75, 0x04, 0xA7] 788 | }, 789 | 790 | 791 | { 792 | 'pt': [0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 793 | 'ct': [0xB3, 0xA1, 0xA1, 0xE2, 0x71, 0xBF, 0x94, 0xDA, 0x3A, 0x5E, 0xCF, 0xF1, 0xD4, 0x29, 0x3A, 0x56] 794 | }, 795 | 796 | 797 | { 798 | 'pt': [0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 799 | 'ct': [0x55, 0x77, 0x37, 0x4A, 0xDC, 0xF2, 0xF5, 0x8E, 0xEE, 0xFF, 0xC4, 0x32, 0xC4, 0x2A, 0xEB, 0x76] 800 | }, 801 | 802 | 803 | { 804 | 'pt': [0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 805 | 'ct': [0xCD, 0x9D, 0x35, 0x5C, 0x35, 0x74, 0x34, 0x3B, 0xC7, 0xFB, 0xE6, 0x45, 0xCE, 0x7E, 0xA7, 0x21] 806 | }, 807 | 808 | 809 | { 810 | 'pt': [0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 811 | 'ct': [0x76, 0xEB, 0x4C, 0x04, 0x6F, 0x05, 0x2A, 0xE4, 0xED, 0x41, 0x06, 0x0B, 0xF6, 0x00, 0x67, 0xFB] 812 | }, 813 | 814 | 815 | { 816 | 'pt': [0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 817 | 'ct': [0x12, 0x73, 0xA4, 0xBC, 0x42, 0x0B, 0xCC, 0x9E, 0x29, 0x61, 0x95, 0x67, 0xB1, 0xE6, 0x17, 0x62] 818 | }, 819 | 820 | 821 | { 822 | 'pt': [0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 823 | 'ct': [0x1F, 0x80, 0xE1, 0xCE, 0x3F, 0x12, 0xC9, 0x6F, 0x2E, 0x64, 0x7B, 0xAC, 0xB6, 0xDA, 0x78, 0xD8] 824 | }, 825 | 826 | 827 | { 828 | 'pt': [0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 829 | 'ct': [0x12, 0xD3, 0x4A, 0x78, 0x75, 0xE7, 0x16, 0xB3, 0x7A, 0x7E, 0x25, 0x0D, 0x37, 0xAF, 0xFD, 0xEA] 830 | }, 831 | 832 | 833 | { 834 | 'pt': [0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 835 | 'ct': [0x5A, 0x54, 0xD7, 0x64, 0xEE, 0xFF, 0xC4, 0xB6, 0x41, 0x43, 0xA5, 0x8B, 0x07, 0x15, 0x14, 0xB4] 836 | }, 837 | 838 | 839 | { 840 | 'pt': [0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 841 | 'ct': [0xF4, 0xF1, 0x56, 0x7B, 0xDC, 0x5B, 0x1F, 0x93, 0x8D, 0x5A, 0x21, 0x44, 0x19, 0x09, 0x0F, 0xE0] 842 | }, 843 | 844 | 845 | { 846 | 'pt': [0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 847 | 'ct': [0x6C, 0xB9, 0x1B, 0x93, 0x5A, 0x0F, 0xBF, 0x49, 0x63, 0x6C, 0xDF, 0x64, 0xA1, 0x29, 0x55, 0xB7] 848 | }, 849 | 850 | 851 | { 852 | 'pt': [0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 853 | 'ct': [0xC0, 0x82, 0x15, 0x4A, 0x07, 0xAF, 0x64, 0xFF, 0x6E, 0xCA, 0x81, 0x1B, 0x0E, 0x33, 0x02, 0xE6] 854 | }, 855 | 856 | 857 | { 858 | 'pt': [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 859 | 'ct': [0x49, 0xA7, 0x46, 0xCC, 0x22, 0x5C, 0x1B, 0x60, 0x09, 0xA9, 0x36, 0x49, 0xCD, 0xD9, 0xED, 0xCD] 860 | }, 861 | 862 | 863 | { 864 | 'pt': [0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 865 | 'ct': [0x1C, 0xAD, 0x05, 0x12, 0xE3, 0xCC, 0x51, 0x21, 0x0B, 0x41, 0x1E, 0xE4, 0x52, 0xDF, 0x62, 0xE4] 866 | }, 867 | 868 | 869 | { 870 | 'pt': [0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 871 | 'ct': [0x4F, 0xE9, 0xA0, 0xCF, 0x34, 0xBB, 0xCF, 0xFF, 0x90, 0x6D, 0x84, 0x50, 0x19, 0x7C, 0xC9, 0xD1] 872 | }, 873 | 874 | 875 | { 876 | 'pt': [0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 877 | 'ct': [0x38, 0xDB, 0x8E, 0xF6, 0xC8, 0x99, 0x3F, 0x17, 0xBB, 0x4D, 0x16, 0x14, 0xB9, 0xDE, 0x15, 0xD4] 878 | }, 879 | 880 | 881 | { 882 | 'pt': [0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 883 | 'ct': [0x08, 0xDB, 0x3F, 0x47, 0x6F, 0x55, 0x1D, 0x19, 0xD9, 0x64, 0x3A, 0x9E, 0x13, 0x9E, 0x05, 0x53] 884 | }, 885 | 886 | 887 | { 888 | 'pt': [0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 889 | 'ct': [0xF0, 0xF5, 0x18, 0xF7, 0x37, 0x95, 0xAB, 0x51, 0xBF, 0xB6, 0xE0, 0xAA, 0x99, 0xA0, 0xDA, 0xC7] 890 | }, 891 | 892 | 893 | { 894 | 'pt': [0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 895 | 'ct': [0x91, 0x54, 0x4D, 0x59, 0x7F, 0x67, 0x9E, 0x7D, 0xFE, 0x6D, 0x16, 0xD4, 0x75, 0x80, 0x98, 0x51] 896 | }, 897 | 898 | 899 | { 900 | 'pt': [0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 901 | 'ct': [0xB1, 0xF9, 0x26, 0x01, 0xB6, 0xD8, 0xC6, 0xB8, 0x11, 0x76, 0xA4, 0x6E, 0xE7, 0x34, 0x1D, 0x28] 902 | }, 903 | 904 | 905 | { 906 | 'pt': [0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 907 | 'ct': [0x79, 0x6C, 0x3A, 0x8C, 0xBC, 0x64, 0x50, 0xE5, 0x1F, 0xA6, 0xF8, 0x76, 0x5A, 0xCD, 0x0F, 0x10] 908 | }, 909 | 910 | 911 | { 912 | 'pt': [0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 913 | 'ct': [0x5F, 0x7B, 0xFE, 0x71, 0xBD, 0x2E, 0x81, 0x59, 0x9D, 0xDA, 0x34, 0x11, 0xBC, 0x1C, 0xA5, 0x79] 914 | }, 915 | 916 | 917 | { 918 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 919 | 'ct': [0x2D, 0xF7, 0xD5, 0x76, 0xEC, 0x62, 0x96, 0x10, 0x1C, 0xAB, 0x16, 0x01, 0x20, 0x92, 0xC1, 0x2C] 920 | }, 921 | 922 | 923 | { 924 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 925 | 'ct': [0x20, 0x76, 0x9D, 0xE0, 0x71, 0xFB, 0xE2, 0x2A, 0xE4, 0x9E, 0x7B, 0x3F, 0x5D, 0x64, 0x64, 0x18] 926 | }, 927 | 928 | 929 | { 930 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 931 | 'ct': [0xB6, 0xF5, 0xC0, 0x12, 0xE4, 0xBA, 0x15, 0xDC, 0x86, 0x53, 0x6F, 0x32, 0x8B, 0x13, 0x7F, 0xC0] 932 | }, 933 | 934 | 935 | { 936 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 937 | 'ct': [0x1C, 0x30, 0x31, 0xDD, 0x05, 0xEA, 0xA4, 0xC2, 0x78, 0xB5, 0x5E, 0xF0, 0xE7, 0xE4, 0xC1, 0xF9] 938 | }, 939 | 940 | 941 | { 942 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 943 | 'ct': [0x3D, 0x72, 0xA5, 0x3B, 0xD5, 0x37, 0xD0, 0x4A, 0xC5, 0x9E, 0x0A, 0xF3, 0x6D, 0x10, 0x5E, 0xD9] 944 | }, 945 | 946 | 947 | { 948 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 949 | 'ct': [0xA6, 0xFF, 0xE4, 0x99, 0xA2, 0x05, 0x0C, 0x38, 0xF4, 0xE8, 0x9D, 0xBF, 0x12, 0xB2, 0x74, 0x30] 950 | }, 951 | 952 | 953 | { 954 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 955 | 'ct': [0xBF, 0xBB, 0x2A, 0x53, 0x7B, 0x2C, 0x13, 0x39, 0xD6, 0x23, 0x0F, 0x35, 0xA2, 0x56, 0xF2, 0x89] 956 | }, 957 | 958 | 959 | { 960 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 961 | 'ct': [0x70, 0xE7, 0x97, 0x18, 0xC9, 0x7D, 0xDB, 0x18, 0x74, 0x11, 0x43, 0x6A, 0xC0, 0x72, 0xB1, 0x48] 962 | }, 963 | 964 | 965 | { 966 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 967 | 'ct': [0x13, 0xBB, 0x56, 0x69, 0x90, 0x85, 0x84, 0x2B, 0x81, 0xDB, 0xE8, 0xFA, 0xA8, 0xB2, 0x62, 0x69] 968 | }, 969 | 970 | 971 | { 972 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 973 | 'ct': [0x3E, 0x4D, 0xB7, 0x1B, 0x9C, 0x73, 0x7C, 0x7F, 0x8A, 0xEF, 0x63, 0x2A, 0x5A, 0xDE, 0xF6, 0x1D] 974 | }, 975 | 976 | 977 | { 978 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 979 | 'ct': [0xD7, 0xA2, 0x54, 0xB7, 0x34, 0x1C, 0x76, 0x77, 0xC7, 0x2F, 0x9D, 0xE7, 0x29, 0xA3, 0xBB, 0x78] 980 | }, 981 | 982 | 983 | { 984 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 985 | 'ct': [0x52, 0x7D, 0x14, 0xE5, 0x8B, 0x74, 0x22, 0x46, 0x22, 0xDF, 0x7F, 0x3F, 0xD6, 0x59, 0x32, 0xF5] 986 | }, 987 | 988 | 989 | { 990 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 991 | 'ct': [0x70, 0x87, 0x03, 0x99, 0x3A, 0xD1, 0xDD, 0xE5, 0xC7, 0xF8, 0x71, 0x46, 0x86, 0xF3, 0xAF, 0x32] 992 | }, 993 | 994 | 995 | { 996 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 997 | 'ct': [0xC5, 0x7D, 0x3E, 0xCB, 0x71, 0xA7, 0xDA, 0x47, 0x08, 0xDE, 0x6F, 0x33, 0x8B, 0xC1, 0x3E, 0x09] 998 | }, 999 | 1000 | 1001 | { 1002 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1003 | 'ct': [0xB3, 0x1F, 0xF6, 0x0B, 0xE0, 0xFD, 0xC1, 0x70, 0x01, 0xCA, 0xF8, 0x7F, 0xC7, 0xFC, 0x0B, 0x2D] 1004 | }, 1005 | 1006 | 1007 | { 1008 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1009 | 'ct': [0x01, 0x87, 0x7A, 0xC6, 0x46, 0xA2, 0x83, 0x47, 0x2D, 0xA7, 0x41, 0x82, 0xFD, 0xC1, 0xE2, 0xB5] 1010 | }, 1011 | 1012 | 1013 | { 1014 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1015 | 'ct': [0x3C, 0x67, 0x8B, 0xAD, 0xA3, 0xFB, 0x1B, 0x87, 0x2C, 0x01, 0x8D, 0xC0, 0x35, 0xAE, 0x16, 0xE8] 1016 | }, 1017 | 1018 | 1019 | { 1020 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1021 | 'ct': [0xA2, 0xCB, 0x20, 0x9D, 0xA6, 0xAA, 0x40, 0xE0, 0x43, 0xE6, 0xFB, 0x9D, 0xD2, 0x47, 0x61, 0x00] 1022 | }, 1023 | 1024 | 1025 | { 1026 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1027 | 'ct': [0x4F, 0x94, 0x02, 0xFF, 0x56, 0xD0, 0x4C, 0x8F, 0xB3, 0x7D, 0xBE, 0x1A, 0x31, 0x09, 0xD2, 0xDE] 1028 | }, 1029 | 1030 | 1031 | { 1032 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1033 | 'ct': [0x34, 0x2D, 0xAA, 0xD9, 0x0F, 0x0F, 0x16, 0x99, 0x04, 0x8D, 0x5C, 0xD1, 0x6F, 0xDA, 0x2E, 0xC7] 1034 | }, 1035 | 1036 | 1037 | { 1038 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1039 | 'ct': [0xE6, 0x8C, 0xC8, 0x6C, 0xA4, 0xD9, 0x52, 0xBC, 0x38, 0x90, 0xAE, 0xC0, 0xA7, 0xAA, 0xA4, 0xB5] 1040 | }, 1041 | 1042 | 1043 | { 1044 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1045 | 'ct': [0x02, 0xA8, 0x83, 0x64, 0xBF, 0x94, 0xA6, 0x77, 0x12, 0x4F, 0x67, 0x0A, 0x56, 0x6E, 0x3F, 0x0D] 1046 | }, 1047 | 1048 | 1049 | { 1050 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1051 | 'ct': [0xC9, 0x61, 0xEF, 0x32, 0x5E, 0x2A, 0x32, 0xA4, 0x35, 0x9C, 0xC6, 0x3B, 0xE1, 0xEE, 0x2C, 0x77] 1052 | }, 1053 | 1054 | 1055 | { 1056 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1057 | 'ct': [0x03, 0xBF, 0x43, 0xC9, 0x08, 0x3E, 0x4D, 0x99, 0x19, 0xD1, 0x2F, 0xE5, 0xC0, 0x31, 0x5E, 0x67] 1058 | }, 1059 | 1060 | 1061 | { 1062 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1063 | 'ct': [0xB2, 0x70, 0x63, 0x44, 0x24, 0x70, 0xBE, 0x07, 0xDC, 0xC2, 0x25, 0x6E, 0xC7, 0x1A, 0x4F, 0x1A] 1064 | }, 1065 | 1066 | 1067 | { 1068 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1069 | 'ct': [0x22, 0x2C, 0xC5, 0xA2, 0x90, 0x84, 0xA4, 0xBD, 0xB0, 0x5D, 0x4C, 0x2F, 0xD9, 0x56, 0x48, 0xDF] 1070 | }, 1071 | 1072 | 1073 | { 1074 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1075 | 'ct': [0xE0, 0x86, 0x86, 0xBF, 0xAA, 0x93, 0x6E, 0x18, 0x90, 0xAE, 0xEC, 0x83, 0x4E, 0x3B, 0x47, 0x4A] 1076 | }, 1077 | 1078 | 1079 | { 1080 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1081 | 'ct': [0x10, 0xDC, 0x4F, 0xFC, 0xAC, 0x5F, 0x5A, 0x1F, 0xB6, 0x68, 0x27, 0x7E, 0x8E, 0x75, 0xBE, 0xAB] 1082 | }, 1083 | 1084 | 1085 | { 1086 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1087 | 'ct': [0x03, 0xA9, 0x19, 0x99, 0x78, 0xF9, 0xD6, 0x52, 0xA4, 0xC5, 0x28, 0xFF, 0x86, 0xC3, 0x9C, 0xE9] 1088 | }, 1089 | 1090 | 1091 | { 1092 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1093 | 'ct': [0xDD, 0xF7, 0x18, 0xA1, 0xBE, 0xB3, 0x7C, 0xC1, 0xB0, 0x90, 0x55, 0x20, 0xDB, 0x7C, 0x16, 0x11] 1094 | }, 1095 | 1096 | 1097 | { 1098 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1099 | 'ct': [0x20, 0x72, 0x19, 0x1C, 0x27, 0x7E, 0xE4, 0x0F, 0xD5, 0x57, 0xFF, 0x5F, 0x67, 0xA2, 0xA5, 0x46] 1100 | }, 1101 | 1102 | 1103 | { 1104 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1105 | 'ct': [0x96, 0xB3, 0x60, 0x8C, 0x06, 0x11, 0x2F, 0x61, 0x9B, 0x15, 0x61, 0x05, 0xEB, 0x08, 0x2B, 0xBE] 1106 | }, 1107 | 1108 | 1109 | { 1110 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1111 | 'ct': [0xB5, 0xD9, 0x19, 0xDF, 0xD9, 0x82, 0x8C, 0x4F, 0xF4, 0x42, 0x7E, 0x72, 0xAB, 0xFC, 0x77, 0xB2] 1112 | }, 1113 | 1114 | 1115 | { 1116 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1117 | 'ct': [0x95, 0x70, 0xE7, 0xA9, 0x6D, 0x46, 0x74, 0xC8, 0x00, 0xAF, 0x8D, 0xCD, 0x01, 0xDE, 0xFF, 0x64] 1118 | }, 1119 | 1120 | 1121 | { 1122 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1123 | 'ct': [0x59, 0x72, 0x3D, 0xB6, 0x6E, 0xDB, 0x29, 0xA9, 0xC8, 0x11, 0x75, 0x66, 0x89, 0x03, 0x77, 0x7F] 1124 | }, 1125 | 1126 | 1127 | { 1128 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1129 | 'ct': [0x17, 0x79, 0xBD, 0xFA, 0xC6, 0xDB, 0x72, 0x2B, 0xCA, 0xF4, 0xD3, 0xA8, 0xD9, 0xD2, 0xE7, 0x25] 1130 | }, 1131 | 1132 | 1133 | { 1134 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1135 | 'ct': [0x51, 0x07, 0xB5, 0x0A, 0x15, 0x09, 0x98, 0xC6, 0xEA, 0x01, 0xC1, 0x46, 0x97, 0xFC, 0x0E, 0x53] 1136 | }, 1137 | 1138 | 1139 | { 1140 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1141 | 'ct': [0x36, 0xA6, 0xCA, 0xA0, 0x8B, 0xD5, 0xD2, 0xB3, 0x32, 0xE9, 0x32, 0x3F, 0x7C, 0x2E, 0x76, 0xCA] 1142 | }, 1143 | 1144 | 1145 | { 1146 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1147 | 'ct': [0xD1, 0xCF, 0x37, 0x45, 0x16, 0x67, 0xED, 0xB8, 0xD2, 0xE9, 0x93, 0x4D, 0x39, 0xA2, 0x7A, 0x92] 1148 | }, 1149 | 1150 | 1151 | { 1152 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1153 | 'ct': [0x4E, 0x96, 0x22, 0x7B, 0x0A, 0x01, 0x87, 0x55, 0xFB, 0xE8, 0xAD, 0x5B, 0xF0, 0xE4, 0x21, 0xB0] 1154 | }, 1155 | 1156 | 1157 | { 1158 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1159 | 'ct': [0x32, 0x21, 0xB3, 0xD3, 0xA2, 0x47, 0x45, 0xB4, 0x83, 0xBB, 0xF9, 0x95, 0x09, 0xB3, 0x30, 0xA0] 1160 | }, 1161 | 1162 | 1163 | { 1164 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1165 | 'ct': [0x98, 0xA4, 0xAB, 0x39, 0xB8, 0x4D, 0x21, 0xD3, 0x6A, 0x5D, 0xDC, 0x26, 0x60, 0xBD, 0x68, 0xC5] 1166 | }, 1167 | 1168 | 1169 | { 1170 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1171 | 'ct': [0xE5, 0xC3, 0x51, 0xE1, 0x78, 0x34, 0x65, 0xED, 0xBA, 0x5C, 0xE0, 0x59, 0x2B, 0xC7, 0x7E, 0x8E] 1172 | }, 1173 | 1174 | 1175 | { 1176 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1177 | 'ct': [0x35, 0x48, 0x94, 0x88, 0xEE, 0x33, 0xD0, 0x34, 0x4C, 0x1B, 0xDB, 0x62, 0x63, 0xD2, 0x82, 0x86] 1178 | }, 1179 | 1180 | 1181 | { 1182 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1183 | 'ct': [0x97, 0xEA, 0x89, 0x9F, 0x53, 0xC6, 0x05, 0x36, 0xDA, 0xFE, 0xB1, 0x81, 0x23, 0xFD, 0x6C, 0x5B] 1184 | }, 1185 | 1186 | 1187 | { 1188 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1189 | 'ct': [0x85, 0x11, 0xB1, 0x1C, 0x7D, 0x2D, 0x8F, 0xBF, 0x63, 0x70, 0x2A, 0x7E, 0x3A, 0xAC, 0xA0, 0x8A] 1190 | }, 1191 | 1192 | 1193 | { 1194 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1195 | 'ct': [0xFE, 0x0C, 0x90, 0x59, 0x6E, 0x4F, 0x47, 0xFD, 0x8A, 0x99, 0x27, 0xD8, 0x3F, 0x4D, 0xCA, 0x52] 1196 | }, 1197 | 1198 | 1199 | { 1200 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1201 | 'ct': [0x18, 0x6F, 0xE0, 0x00, 0x68, 0x3C, 0xC1, 0x9F, 0x62, 0x1B, 0xC6, 0xC2, 0xDA, 0x30, 0x0B, 0x71] 1202 | }, 1203 | 1204 | 1205 | { 1206 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00], 1207 | 'ct': [0x82, 0x91, 0xF9, 0x4E, 0xDF, 0x57, 0x8E, 0x8A, 0x70, 0xCD, 0x0C, 0xF8, 0xF3, 0xFB, 0x35, 0x58] 1208 | }, 1209 | 1210 | 1211 | { 1212 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00], 1213 | 'ct': [0x28, 0x91, 0xC8, 0x18, 0x46, 0x94, 0x9C, 0x91, 0x7E, 0x75, 0x7E, 0xBA, 0xE2, 0x0D, 0x34, 0xEE] 1214 | }, 1215 | 1216 | 1217 | { 1218 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00], 1219 | 'ct': [0x76, 0x2D, 0x85, 0xA3, 0x2D, 0xAF, 0x0C, 0x9F, 0x3C, 0xFB, 0x33, 0x88, 0xE8, 0x08, 0xFE, 0xC2] 1220 | }, 1221 | 1222 | 1223 | { 1224 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], 1225 | 'ct': [0xCC, 0x68, 0x07, 0xD2, 0x09, 0xB7, 0x28, 0xC5, 0x59, 0xC3, 0x23, 0x36, 0xFD, 0x8F, 0xB7, 0x1D] 1226 | }, 1227 | 1228 | 1229 | { 1230 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00], 1231 | 'ct': [0xFC, 0xD0, 0x70, 0x57, 0xEF, 0x48, 0x20, 0x15, 0x40, 0x75, 0xA0, 0xDD, 0xCB, 0xFC, 0x0B, 0xBD] 1232 | }, 1233 | 1234 | 1235 | { 1236 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00], 1237 | 'ct': [0xFD, 0xBF, 0xE2, 0xC3, 0xFF, 0xC8, 0x27, 0x92, 0xD3, 0x38, 0x38, 0x8A, 0x1F, 0xC6, 0xD2, 0x2E] 1238 | }, 1239 | 1240 | 1241 | { 1242 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00], 1243 | 'ct': [0x04, 0xD5, 0xF7, 0xCD, 0x68, 0xFC, 0x23, 0x52, 0xBD, 0xDB, 0xC8, 0x2C, 0xFE, 0x35, 0xDA, 0x80] 1244 | }, 1245 | 1246 | 1247 | { 1248 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00], 1249 | 'ct': [0xB1, 0x78, 0x4A, 0x7B, 0xF3, 0x95, 0xFB, 0x52, 0x54, 0x71, 0xEE, 0x3D, 0xC8, 0x97, 0x2F, 0xED] 1250 | }, 1251 | 1252 | 1253 | { 1254 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00], 1255 | 'ct': [0xCB, 0x5D, 0x8A, 0x62, 0xD1, 0x62, 0x20, 0x12, 0x3E, 0xF0, 0x00, 0x58, 0x76, 0xE3, 0x5B, 0x19] 1256 | }, 1257 | 1258 | 1259 | { 1260 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00], 1261 | 'ct': [0x31, 0x12, 0x92, 0xED, 0xE1, 0xF3, 0x0E, 0x9F, 0x22, 0xF1, 0xEE, 0xF8, 0xFD, 0x19, 0xBD, 0x80] 1262 | }, 1263 | 1264 | 1265 | { 1266 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], 1267 | 'ct': [0x38, 0x2B, 0xC5, 0x83, 0xEC, 0x9B, 0x6E, 0x16, 0xE3, 0xDF, 0x21, 0x88, 0xCF, 0x0B, 0xF1, 0xE8] 1268 | }, 1269 | 1270 | 1271 | { 1272 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00], 1273 | 'ct': [0x63, 0x2C, 0x9A, 0xD6, 0x74, 0xBD, 0x1B, 0x8A, 0x15, 0x82, 0x7A, 0x78, 0x9B, 0xD1, 0x33, 0xA7] 1274 | }, 1275 | 1276 | 1277 | { 1278 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00], 1279 | 'ct': [0x0E, 0xE1, 0x75, 0xDF, 0x45, 0xB8, 0x89, 0xCE, 0xD6, 0x97, 0x4E, 0x9C, 0x2B, 0x8F, 0x8A, 0x78] 1280 | }, 1281 | 1282 | 1283 | { 1284 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00], 1285 | 'ct': [0x61, 0x31, 0xA1, 0xA1, 0x8F, 0x00, 0xCF, 0xDA, 0x5B, 0x4A, 0xF4, 0xFB, 0xE5, 0x48, 0x74, 0x45] 1286 | }, 1287 | 1288 | 1289 | { 1290 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00], 1291 | 'ct': [0x0C, 0x87, 0x46, 0x74, 0x74, 0x60, 0xA5, 0x40, 0xE2, 0x30, 0x4B, 0x55, 0xC1, 0x2E, 0xA6, 0x72] 1292 | }, 1293 | 1294 | 1295 | { 1296 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00], 1297 | 'ct': [0xDD, 0x6D, 0x4D, 0x2A, 0xA3, 0xEB, 0x70, 0x2C, 0x59, 0x7E, 0x4E, 0x2D, 0xE5, 0x9B, 0xF4, 0xC9] 1298 | }, 1299 | 1300 | 1301 | { 1302 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00], 1303 | 'ct': [0x77, 0x4E, 0xDF, 0x21, 0x94, 0x59, 0xA4, 0x74, 0x4A, 0xA1, 0xCC, 0xDE, 0x7D, 0x96, 0x9A, 0x60] 1304 | }, 1305 | 1306 | 1307 | { 1308 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00], 1309 | 'ct': [0x1D, 0x7B, 0x34, 0x0C, 0x4C, 0xE6, 0x8A, 0xC9, 0x73, 0x69, 0xFF, 0xF0, 0xFF, 0x99, 0x80, 0xC8] 1310 | }, 1311 | 1312 | 1313 | { 1314 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00], 1315 | 'ct': [0xD1, 0x81, 0x04, 0x61, 0x72, 0x58, 0xAB, 0x02, 0xAA, 0xE0, 0x2E, 0xCC, 0xF5, 0x52, 0xA8, 0x91] 1316 | }, 1317 | 1318 | 1319 | { 1320 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00], 1321 | 'ct': [0x8D, 0xC6, 0x6F, 0x1D, 0x76, 0x48, 0xEB, 0x62, 0xF1, 0xDC, 0xBE, 0xB3, 0xCD, 0x23, 0x79, 0x85] 1322 | }, 1323 | 1324 | 1325 | { 1326 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00], 1327 | 'ct': [0xAB, 0xF0, 0x90, 0x05, 0x4A, 0xBE, 0x05, 0x2E, 0xCE, 0x0B, 0x07, 0xBE, 0x6B, 0x6C, 0xC6, 0xDB] 1328 | }, 1329 | 1330 | 1331 | { 1332 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00], 1333 | 'ct': [0x89, 0x23, 0x9A, 0xAF, 0xE9, 0xBA, 0x86, 0xE5, 0xEC, 0x79, 0x43, 0x97, 0xE0, 0x18, 0x01, 0x11] 1334 | }, 1335 | 1336 | 1337 | { 1338 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00], 1339 | 'ct': [0x6E, 0x1C, 0xDC, 0x04, 0x93, 0x33, 0x21, 0x1B, 0x4D, 0x75, 0x33, 0xE2, 0x15, 0x04, 0xD2, 0x00] 1340 | }, 1341 | 1342 | 1343 | { 1344 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00], 1345 | 'ct': [0xEF, 0xE6, 0x62, 0xAF, 0x24, 0xD9, 0x99, 0x7F, 0xAE, 0x45, 0xCA, 0xD4, 0xF9, 0x2F, 0x30, 0x91] 1346 | }, 1347 | 1348 | 1349 | { 1350 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00], 1351 | 'ct': [0x16, 0xF5, 0x3F, 0x3A, 0x6C, 0xC3, 0xB4, 0xF8, 0x6D, 0xDA, 0x1B, 0x87, 0x92, 0x24, 0x49, 0x01] 1352 | }, 1353 | 1354 | 1355 | { 1356 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00], 1357 | 'ct': [0x04, 0x7C, 0xBA, 0xCD, 0xC5, 0xEA, 0x84, 0x77, 0x1A, 0x61, 0xFE, 0x12, 0x04, 0x81, 0x3D, 0x46] 1358 | }, 1359 | 1360 | 1361 | { 1362 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00], 1363 | 'ct': [0xB4, 0x42, 0xFF, 0x33, 0x18, 0x82, 0x2E, 0xA7, 0xF6, 0x0E, 0x2A, 0x8A, 0x08, 0x2A, 0x04, 0x3A] 1364 | }, 1365 | 1366 | 1367 | { 1368 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00], 1369 | 'ct': [0x97, 0x1D, 0x07, 0xAE, 0xED, 0xBC, 0xA5, 0xB7, 0xBD, 0xCD, 0x03, 0x3F, 0x70, 0x8C, 0x97, 0xDB] 1370 | }, 1371 | 1372 | 1373 | { 1374 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00], 1375 | 'ct': [0xD3, 0x07, 0x26, 0x32, 0x73, 0xE2, 0x50, 0xC0, 0xB9, 0xE0, 0x8F, 0xF2, 0x30, 0x03, 0xB0, 0xD1] 1376 | }, 1377 | 1378 | 1379 | { 1380 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00], 1381 | 'ct': [0x75, 0xF7, 0x00, 0x5C, 0xA9, 0xC6, 0xEE, 0x5A, 0x1F, 0x9A, 0x48, 0x97, 0xFA, 0x67, 0xC6, 0x61] 1382 | }, 1383 | 1384 | 1385 | { 1386 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00], 1387 | 'ct': [0x9B, 0x42, 0x1C, 0x68, 0x87, 0x3D, 0x49, 0xF0, 0x7E, 0x3B, 0x90, 0x25, 0xAD, 0x60, 0x97, 0x87] 1388 | }, 1389 | 1390 | 1391 | { 1392 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00], 1393 | 'ct': [0x5B, 0x18, 0x25, 0x93, 0xB4, 0x7D, 0xC6, 0x74, 0xD8, 0xB1, 0x94, 0x2C, 0xB9, 0x72, 0x24, 0xB2] 1394 | }, 1395 | 1396 | 1397 | { 1398 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00], 1399 | 'ct': [0xA8, 0x96, 0x87, 0x1A, 0x31, 0x57, 0xCC, 0xD1, 0xF5, 0xA7, 0x88, 0xE2, 0x53, 0xA6, 0xB0, 0xFD] 1400 | }, 1401 | 1402 | 1403 | { 1404 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00], 1405 | 'ct': [0x78, 0x9A, 0x3D, 0x2B, 0x2A, 0x70, 0x18, 0x1E, 0xFC, 0xCE, 0x55, 0x29, 0xF2, 0x00, 0xDC, 0x44] 1406 | }, 1407 | 1408 | 1409 | { 1410 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00], 1411 | 'ct': [0x7F, 0x94, 0x62, 0xD2, 0x3D, 0xB6, 0xE9, 0x9A, 0xD0, 0xA5, 0x4E, 0xA8, 0x4D, 0xBD, 0x94, 0xE2] 1412 | }, 1413 | 1414 | 1415 | { 1416 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00], 1417 | 'ct': [0x23, 0xEA, 0xFE, 0x1F, 0x7C, 0xCE, 0x96, 0xB6, 0xBF, 0xE2, 0x48, 0x4E, 0x1D, 0xFC, 0x4A, 0xB9] 1418 | }, 1419 | 1420 | 1421 | { 1422 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00], 1423 | 'ct': [0xA7, 0x6C, 0x32, 0x38, 0x05, 0xF9, 0xC2, 0x52, 0xC8, 0xB8, 0x6C, 0x83, 0x29, 0x4B, 0x99, 0x87] 1424 | }, 1425 | 1426 | 1427 | { 1428 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00], 1429 | 'ct': [0xD8, 0xCA, 0x10, 0x75, 0xB7, 0xA3, 0xF2, 0xCF, 0x2D, 0xAC, 0x09, 0x80, 0xB1, 0xB6, 0x6C, 0xC1] 1430 | }, 1431 | 1432 | 1433 | { 1434 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00], 1435 | 'ct': [0x82, 0x06, 0xD8, 0x9F, 0x2A, 0x07, 0xBA, 0x64, 0x03, 0x64, 0x7F, 0xB8, 0x5A, 0x2F, 0x4D, 0x7D] 1436 | }, 1437 | 1438 | 1439 | { 1440 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00], 1441 | 'ct': [0x3D, 0xE7, 0x57, 0x3C, 0xD4, 0x6D, 0x85, 0x48, 0x83, 0x64, 0x47, 0x2B, 0x03, 0x88, 0x69, 0xF9] 1442 | }, 1443 | 1444 | 1445 | { 1446 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80], 1447 | 'ct': [0x31, 0xC6, 0x24, 0x01, 0xD6, 0xE9, 0xE4, 0x99, 0x5C, 0x09, 0x13, 0x74, 0x7B, 0xFE, 0x7C, 0x7E] 1448 | }, 1449 | 1450 | 1451 | { 1452 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40], 1453 | 'ct': [0xC4, 0x64, 0x72, 0x80, 0x25, 0x91, 0x6B, 0x4E, 0x8D, 0x56, 0xE4, 0xA9, 0xF9, 0x8C, 0x1A, 0x25] 1454 | }, 1455 | 1456 | 1457 | { 1458 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20], 1459 | 'ct': [0x0D, 0x46, 0x43, 0xEE, 0x09, 0xAB, 0xD6, 0xD6, 0x06, 0x21, 0x87, 0x78, 0x9A, 0xE9, 0xA7, 0x7D] 1460 | }, 1461 | 1462 | 1463 | { 1464 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10], 1465 | 'ct': [0x0C, 0x06, 0xEA, 0xC3, 0x04, 0x3A, 0xBE, 0x65, 0x54, 0xC2, 0xDA, 0x42, 0xF2, 0x1E, 0x7B, 0x05] 1466 | }, 1467 | 1468 | 1469 | { 1470 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08], 1471 | 'ct': [0xE2, 0x6C, 0x6B, 0x2C, 0xBE, 0x21, 0x30, 0x72, 0x9A, 0x5B, 0xF9, 0x6E, 0x7C, 0xD2, 0x99, 0x12] 1472 | }, 1473 | 1474 | 1475 | { 1476 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04], 1477 | 'ct': [0x4D, 0xE2, 0xB8, 0xFF, 0xF3, 0x58, 0x8A, 0x5D, 0x4E, 0x62, 0xCA, 0xDB, 0x72, 0x0E, 0x5B, 0xCC] 1478 | }, 1479 | 1480 | 1481 | { 1482 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02], 1483 | 'ct': [0xB9, 0x6D, 0xD4, 0x6C, 0x6A, 0x28, 0x6B, 0xFF, 0x72, 0x16, 0x93, 0xA9, 0x84, 0x91, 0xF5, 0x29] 1484 | }, 1485 | 1486 | 1487 | { 1488 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01], 1489 | 'ct': [0x64, 0xF1, 0xDB, 0xD3, 0xC7, 0x9E, 0xE6, 0x9A, 0xC9, 0xE0, 0xED, 0x5F, 0x55, 0x4F, 0x4A, 0xB6] 1490 | } 1491 | ] 1492 | , testsIndex = 0 1493 | , testsLength = tests.length 1494 | , aTest; 1495 | 1496 | for (; testsIndex < testsLength; testsIndex += 1) { 1497 | 1498 | aTest = tests[testsIndex]; 1499 | useCaseName = 'ecb 192 use case: ' + testsIndex; 1500 | 1501 | it(useCaseName, singleTest.bind(this, key, aTest)); 1502 | } 1503 | }); 1504 | 1505 | describe('ECB VT - 256 keysize', function doTestSuite() { 1506 | 1507 | var key = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] 1508 | , tests = [ 1509 | { 1510 | 'pt': [0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1511 | 'ct': [0x23, 0xA3, 0x85, 0xF6, 0x17, 0xF3, 0x13, 0xDA, 0xC0, 0x5B, 0xCB, 0x7E, 0xAB, 0xD6, 0x18, 0x07] 1512 | }, 1513 | 1514 | 1515 | { 1516 | 'pt': [0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1517 | 'ct': [0x35, 0xBE, 0x2B, 0x47, 0x38, 0x60, 0x2A, 0x1D, 0xA3, 0xDE, 0x5C, 0x9E, 0x7E, 0x87, 0x19, 0x23] 1518 | }, 1519 | 1520 | 1521 | { 1522 | 'pt': [0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1523 | 'ct': [0x03, 0xE8, 0xBB, 0x7A, 0x56, 0x8E, 0x95, 0xBA, 0x79, 0x2D, 0xCE, 0x77, 0xD5, 0x52, 0x3C, 0x2B] 1524 | }, 1525 | 1526 | 1527 | { 1528 | 'pt': [0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1529 | 'ct': [0xD3, 0xAC, 0xBE, 0x92, 0xC4, 0x82, 0xD2, 0xE8, 0x06, 0xFD, 0x83, 0x7E, 0x41, 0xDB, 0xB2, 0x88] 1530 | }, 1531 | 1532 | 1533 | { 1534 | 'pt': [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1535 | 'ct': [0xDC, 0x3B, 0x1C, 0x37, 0xC6, 0x9B, 0x40, 0x59, 0xEA, 0xAD, 0xF0, 0x3F, 0xCD, 0x01, 0x6E, 0xB4] 1536 | }, 1537 | 1538 | 1539 | { 1540 | 'pt': [0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1541 | 'ct': [0x3C, 0x9D, 0x9B, 0xD9, 0x04, 0xE0, 0xE6, 0x91, 0x60, 0x89, 0xA4, 0xBA, 0xC3, 0x5E, 0x53, 0x68] 1542 | }, 1543 | 1544 | 1545 | { 1546 | 'pt': [0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1547 | 'ct': [0xC4, 0x7D, 0xA0, 0x45, 0x70, 0x1B, 0x93, 0xA3, 0x88, 0xE7, 0x6F, 0xCB, 0xCD, 0x34, 0x9F, 0x22] 1548 | }, 1549 | 1550 | 1551 | { 1552 | 'pt': [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1553 | 'ct': [0x52, 0xF2, 0x64, 0xB1, 0x96, 0x92, 0x5A, 0x34, 0x5C, 0xA5, 0xAD, 0xC5, 0x7C, 0x23, 0x4B, 0x96] 1554 | }, 1555 | 1556 | 1557 | { 1558 | 'pt': [0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1559 | 'ct': [0xC9, 0x23, 0x75, 0x4C, 0x5A, 0xD2, 0xE3, 0xF8, 0x42, 0xD0, 0x17, 0x05, 0xA7, 0x16, 0xBE, 0x8A] 1560 | }, 1561 | 1562 | 1563 | { 1564 | 'pt': [0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1565 | 'ct': [0x63, 0x00, 0x75, 0xC7, 0x56, 0x3C, 0xDB, 0xAC, 0xDF, 0xEA, 0xDB, 0x78, 0x1C, 0xC9, 0x46, 0x7C] 1566 | }, 1567 | 1568 | 1569 | { 1570 | 'pt': [0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1571 | 'ct': [0xCB, 0x4F, 0x69, 0xBC, 0xC7, 0x6A, 0x24, 0x99, 0xC6, 0xFC, 0xFB, 0xBE, 0x4C, 0xEB, 0x8C, 0xFB] 1572 | }, 1573 | 1574 | 1575 | { 1576 | 'pt': [0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1577 | 'ct': [0x04, 0x42, 0xF1, 0x5E, 0xA2, 0xBD, 0x6D, 0x9E, 0xB7, 0x73, 0xF9, 0xB9, 0x98, 0x04, 0xDF, 0x56] 1578 | }, 1579 | 1580 | 1581 | { 1582 | 'pt': [0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1583 | 'ct': [0x9C, 0xE6, 0x89, 0x6C, 0x15, 0xC3, 0xCC, 0x00, 0xE2, 0xAA, 0x19, 0x44, 0xD7, 0x11, 0x7B, 0x98] 1584 | }, 1585 | 1586 | 1587 | { 1588 | 'pt': [0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1589 | 'ct': [0xE9, 0x34, 0x06, 0x67, 0x40, 0x02, 0x36, 0x16, 0xB3, 0x49, 0xF4, 0x55, 0x82, 0x44, 0x26, 0x47] 1590 | }, 1591 | 1592 | 1593 | { 1594 | 'pt': [0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1595 | 'ct': [0xD0, 0x8E, 0xF3, 0x7A, 0x59, 0xD9, 0x4E, 0xD6, 0x45, 0xB1, 0xD1, 0xB1, 0x60, 0xE3, 0xE8, 0x16] 1596 | }, 1597 | 1598 | 1599 | { 1600 | 'pt': [0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1601 | 'ct': [0xE9, 0x18, 0x91, 0xCA, 0xC1, 0x7F, 0xE4, 0x93, 0xC7, 0x16, 0x7C, 0x6C, 0xB5, 0x9D, 0xCB, 0x69] 1602 | }, 1603 | 1604 | 1605 | { 1606 | 'pt': [0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1607 | 'ct': [0xB2, 0x7A, 0x42, 0xD2, 0xC8, 0x70, 0xDC, 0x96, 0xBC, 0x6C, 0x55, 0x12, 0x18, 0xC4, 0x4C, 0xC4] 1608 | }, 1609 | 1610 | 1611 | { 1612 | 'pt': [0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1613 | 'ct': [0xCE, 0x8D, 0x23, 0xE6, 0x4E, 0x6B, 0xC1, 0x82, 0x08, 0xCE, 0xEB, 0x28, 0x2E, 0x38, 0x73, 0x26] 1614 | }, 1615 | 1616 | 1617 | { 1618 | 'pt': [0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1619 | 'ct': [0x36, 0xF7, 0x66, 0x78, 0xA2, 0x7F, 0x2F, 0x5A, 0x43, 0x60, 0x73, 0xD5, 0xAD, 0xA4, 0xAB, 0x3B] 1620 | }, 1621 | 1622 | 1623 | { 1624 | 'pt': [0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1625 | 'ct': [0xD0, 0xEA, 0xA3, 0x6F, 0x9A, 0x64, 0x89, 0x05, 0xB2, 0x77, 0xF0, 0xBD, 0x24, 0xB1, 0xA3, 0x39] 1626 | }, 1627 | 1628 | 1629 | { 1630 | 'pt': [0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1631 | 'ct': [0x82, 0xBE, 0x0E, 0x36, 0x73, 0xE7, 0x87, 0x2B, 0xF7, 0x9B, 0xBE, 0x2A, 0x45, 0xF4, 0xBD, 0x93] 1632 | }, 1633 | 1634 | 1635 | { 1636 | 'pt': [0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1637 | 'ct': [0x01, 0x3C, 0xAE, 0x39, 0x86, 0x08, 0x3F, 0x8D, 0x32, 0x12, 0x73, 0xD6, 0x8C, 0xA9, 0x78, 0x4D] 1638 | }, 1639 | 1640 | 1641 | { 1642 | 'pt': [0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1643 | 'ct': [0x0A, 0x7F, 0xCF, 0x71, 0xDA, 0xC0, 0x23, 0x71, 0x81, 0x53, 0xFF, 0xB7, 0x61, 0xBA, 0xEB, 0xEF] 1644 | }, 1645 | 1646 | 1647 | { 1648 | 'pt': [0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1649 | 'ct': [0xC7, 0x84, 0xC5, 0xEA, 0x8C, 0xE3, 0x89, 0x7F, 0x15, 0x33, 0x36, 0x04, 0x7D, 0x2F, 0xE3, 0xE0] 1650 | }, 1651 | 1652 | 1653 | { 1654 | 'pt': [0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1655 | 'ct': [0xFE, 0x77, 0x6B, 0x44, 0x76, 0xA4, 0xF0, 0x29, 0xE5, 0xEA, 0x92, 0x93, 0xE3, 0xC1, 0xBC, 0xA1] 1656 | }, 1657 | 1658 | 1659 | { 1660 | 'pt': [0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1661 | 'ct': [0x30, 0x2A, 0x5F, 0x9A, 0x73, 0xB0, 0x7D, 0x83, 0x69, 0x9E, 0xB9, 0xDE, 0x1D, 0x86, 0xDB, 0x7B] 1662 | }, 1663 | 1664 | 1665 | { 1666 | 'pt': [0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1667 | 'ct': [0xE6, 0xC4, 0x3F, 0x6F, 0x62, 0xF1, 0xEE, 0xE0, 0xBD, 0xB3, 0x48, 0x4F, 0x32, 0x50, 0x53, 0xB6] 1668 | }, 1669 | 1670 | 1671 | { 1672 | 'pt': [0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1673 | 'ct': [0xC5, 0x57, 0x95, 0x56, 0xF7, 0x10, 0xEA, 0xCF, 0xAD, 0x93, 0x19, 0xAA, 0x85, 0xB8, 0x9F, 0x6F] 1674 | }, 1675 | 1676 | 1677 | { 1678 | 'pt': [0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1679 | 'ct': [0x96, 0xC8, 0x8E, 0x46, 0xC1, 0xC2, 0xBA, 0x0B, 0x58, 0x3F, 0x30, 0xFE, 0x02, 0x48, 0xA7, 0x94] 1680 | }, 1681 | 1682 | 1683 | { 1684 | 'pt': [0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1685 | 'ct': [0x28, 0x7D, 0x27, 0xFB, 0x1C, 0xA4, 0x08, 0x21, 0x29, 0x4B, 0x1A, 0xFC, 0x86, 0x8F, 0x3A, 0x6F] 1686 | }, 1687 | 1688 | 1689 | { 1690 | 'pt': [0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1691 | 'ct': [0xF4, 0x60, 0x2D, 0xF7, 0x6A, 0x24, 0x01, 0x0D, 0xE5, 0xA1, 0x35, 0x30, 0x43, 0xCF, 0x17, 0x8E] 1692 | }, 1693 | 1694 | 1695 | { 1696 | 'pt': [0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1697 | 'ct': [0x47, 0xF9, 0x8A, 0xA9, 0xDF, 0x5E, 0x73, 0x14, 0xD3, 0xD5, 0x57, 0x1E, 0xF6, 0xB9, 0x52, 0x84] 1698 | }, 1699 | 1700 | 1701 | { 1702 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1703 | 'ct': [0x77, 0xCB, 0xF7, 0xDC, 0xA6, 0x0F, 0x91, 0x3F, 0xD9, 0xC8, 0x2A, 0xC6, 0x52, 0x12, 0xEB, 0xB2] 1704 | }, 1705 | 1706 | 1707 | { 1708 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1709 | 'ct': [0xBE, 0xB1, 0xC2, 0xBC, 0x4B, 0x5C, 0x36, 0x3F, 0xCF, 0x5A, 0x04, 0x66, 0x88, 0x30, 0x79, 0xA9] 1710 | }, 1711 | 1712 | 1713 | { 1714 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1715 | 'ct': [0x2A, 0xB8, 0xB9, 0x25, 0x4A, 0xDB, 0xDC, 0xE1, 0x7F, 0x0A, 0x71, 0x98, 0x15, 0xDE, 0xFF, 0x7E] 1716 | }, 1717 | 1718 | 1719 | { 1720 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1721 | 'ct': [0x75, 0xA3, 0x0C, 0xEA, 0xA0, 0x3A, 0xF6, 0x6E, 0x44, 0xA8, 0x5D, 0xC6, 0x6D, 0xEB, 0x20, 0xC9] 1722 | }, 1723 | 1724 | 1725 | { 1726 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1727 | 'ct': [0xC3, 0x7E, 0x64, 0xCE, 0x86, 0xB6, 0x15, 0x57, 0x3C, 0x4C, 0x42, 0xBB, 0xE7, 0x1D, 0xAC, 0xD8] 1728 | }, 1729 | 1730 | 1731 | { 1732 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1733 | 'ct': [0x28, 0x4C, 0xB5, 0x02, 0x59, 0xA9, 0x6C, 0xCE, 0xD1, 0xC1, 0xC6, 0x4D, 0x8B, 0x60, 0x30, 0x24] 1734 | }, 1735 | 1736 | 1737 | { 1738 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1739 | 'ct': [0xBE, 0x34, 0x6B, 0x07, 0x86, 0x94, 0x25, 0xCB, 0xCA, 0x54, 0xF9, 0x3D, 0x7A, 0x1F, 0x40, 0x35] 1740 | }, 1741 | 1742 | 1743 | { 1744 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1745 | 'ct': [0x60, 0xEE, 0x20, 0x23, 0xB0, 0x30, 0x33, 0xA9, 0x72, 0xE2, 0x8E, 0x4A, 0x21, 0xC7, 0x00, 0x5F] 1746 | }, 1747 | 1748 | 1749 | { 1750 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1751 | 'ct': [0x4E, 0x1F, 0xD4, 0xBC, 0x99, 0xAE, 0xA3, 0xBC, 0xC6, 0xB9, 0x06, 0x6E, 0xC6, 0x32, 0x9D, 0x43] 1752 | }, 1753 | 1754 | 1755 | { 1756 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1757 | 'ct': [0x07, 0x9B, 0xDF, 0x2D, 0xAD, 0x2C, 0xE6, 0xFB, 0x7D, 0x21, 0xBB, 0xD7, 0x6A, 0x7A, 0xBF, 0x48] 1758 | }, 1759 | 1760 | 1761 | { 1762 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1763 | 'ct': [0x6B, 0x93, 0x3D, 0x99, 0x14, 0x16, 0x9C, 0x2A, 0x70, 0x4E, 0x52, 0xEC, 0x6D, 0x7E, 0x4E, 0x1D] 1764 | }, 1765 | 1766 | 1767 | { 1768 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1769 | 'ct': [0xFD, 0x85, 0x4A, 0x50, 0x37, 0x2E, 0x5D, 0x30, 0x13, 0x67, 0xD8, 0xE9, 0x8C, 0xC8, 0x80, 0x28] 1770 | }, 1771 | 1772 | 1773 | { 1774 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1775 | 'ct': [0x8C, 0xE9, 0x4A, 0x2C, 0x43, 0xB0, 0x18, 0x25, 0xCE, 0x5F, 0x27, 0x11, 0x35, 0x48, 0x1B, 0xB2] 1776 | }, 1777 | 1778 | 1779 | { 1780 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1781 | 'ct': [0x73, 0xA4, 0x3C, 0x71, 0x38, 0x98, 0xBA, 0x7D, 0x7D, 0x2B, 0x6B, 0xC8, 0x67, 0x3A, 0x7A, 0xAA] 1782 | }, 1783 | 1784 | 1785 | { 1786 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1787 | 'ct': [0x13, 0x87, 0x3C, 0xFB, 0xDE, 0xD4, 0x82, 0xC0, 0xB7, 0xB4, 0x35, 0x02, 0x5A, 0x9F, 0x1C, 0xF4] 1788 | }, 1789 | 1790 | 1791 | { 1792 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1793 | 'ct': [0x3F, 0x16, 0x8C, 0xD7, 0x82, 0x89, 0x6F, 0x22, 0xC5, 0x6A, 0x92, 0xA0, 0x9E, 0xA7, 0xE1, 0x62] 1794 | }, 1795 | 1796 | 1797 | { 1798 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1799 | 'ct': [0xBC, 0xDF, 0x1C, 0x86, 0x86, 0xE6, 0x88, 0x10, 0xFE, 0x90, 0xB1, 0x6E, 0xCA, 0xB4, 0x61, 0x47] 1800 | }, 1801 | 1802 | 1803 | { 1804 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1805 | 'ct': [0x95, 0xC1, 0x8E, 0xBA, 0x59, 0xE3, 0xCB, 0x63, 0x59, 0xDE, 0x7C, 0xCE, 0x9E, 0x87, 0x51, 0xF9] 1806 | }, 1807 | 1808 | 1809 | { 1810 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1811 | 'ct': [0x03, 0xCF, 0xEA, 0x7D, 0x36, 0xD5, 0x65, 0x52, 0xCD, 0xEF, 0x80, 0x62, 0x15, 0xEA, 0x75, 0x96] 1812 | }, 1813 | 1814 | 1815 | { 1816 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1817 | 'ct': [0xCC, 0x18, 0x9A, 0x2E, 0x8F, 0x52, 0x9E, 0xB1, 0x39, 0xDC, 0xA2, 0x03, 0x31, 0x09, 0xF4, 0x0B] 1818 | }, 1819 | 1820 | 1821 | { 1822 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1823 | 'ct': [0x45, 0x39, 0x12, 0x53, 0x21, 0x44, 0xCE, 0xD5, 0x4B, 0x7D, 0x40, 0x49, 0xBC, 0x8B, 0x8C, 0xF2] 1824 | }, 1825 | 1826 | 1827 | { 1828 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1829 | 'ct': [0xC6, 0xDB, 0xBF, 0x40, 0x5A, 0x05, 0x6A, 0x80, 0xCA, 0x78, 0x82, 0x67, 0x53, 0x8F, 0xE8, 0xF0] 1830 | }, 1831 | 1832 | 1833 | { 1834 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1835 | 'ct': [0x2E, 0xB5, 0xE2, 0x72, 0x87, 0x4C, 0xE2, 0x44, 0xA3, 0x28, 0xBA, 0x64, 0x10, 0x48, 0x0B, 0x4C] 1836 | }, 1837 | 1838 | 1839 | { 1840 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1841 | 'ct': [0x26, 0x3B, 0xFB, 0x61, 0x1C, 0xBD, 0x9D, 0x9C, 0x7F, 0xF6, 0xB1, 0xA9, 0xE3, 0x27, 0x66, 0x96] 1842 | }, 1843 | 1844 | 1845 | { 1846 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1847 | 'ct': [0x9C, 0xC3, 0xEB, 0x61, 0xA9, 0x90, 0x7F, 0x5F, 0x22, 0x25, 0x12, 0x39, 0xA9, 0xEB, 0x38, 0xED] 1848 | }, 1849 | 1850 | 1851 | { 1852 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1853 | 'ct': [0x72, 0x6A, 0x3E, 0xE9, 0x22, 0xED, 0xFE, 0x52, 0x20, 0x6C, 0x21, 0x91, 0xE1, 0xF0, 0x45, 0xF4] 1854 | }, 1855 | 1856 | 1857 | { 1858 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1859 | 'ct': [0x13, 0x44, 0xC1, 0xE0, 0x4A, 0x9D, 0x97, 0x66, 0x8A, 0x24, 0x0D, 0x82, 0x39, 0x6A, 0xC0, 0x21] 1860 | }, 1861 | 1862 | 1863 | { 1864 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1865 | 'ct': [0x90, 0x67, 0xBA, 0xA4, 0x4C, 0x26, 0x4E, 0x9A, 0x2A, 0xEC, 0x29, 0x23, 0x90, 0xA6, 0xF4, 0x92] 1866 | }, 1867 | 1868 | 1869 | { 1870 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1871 | 'ct': [0x11, 0x76, 0x62, 0x1B, 0xD2, 0x4D, 0x35, 0x67, 0x0B, 0x08, 0xD6, 0xA0, 0x65, 0x80, 0x6B, 0x02] 1872 | }, 1873 | 1874 | 1875 | { 1876 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1877 | 'ct': [0xDF, 0x0D, 0x31, 0xD1, 0x4D, 0x81, 0xFD, 0x08, 0x6E, 0x8E, 0x32, 0x47, 0x99, 0x19, 0xFD, 0xBC] 1878 | }, 1879 | 1880 | 1881 | { 1882 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1883 | 'ct': [0x44, 0xBA, 0xD8, 0x0B, 0x0B, 0xA0, 0x1E, 0x97, 0x1A, 0xDC, 0x41, 0x39, 0xD6, 0xDE, 0x0C, 0x36] 1884 | }, 1885 | 1886 | 1887 | { 1888 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1889 | 'ct': [0x76, 0xC5, 0x91, 0x31, 0xEF, 0xFA, 0xE1, 0x40, 0x58, 0xD9, 0x9E, 0x22, 0x69, 0x8B, 0x60, 0x2D] 1890 | }, 1891 | 1892 | 1893 | { 1894 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1895 | 'ct': [0x76, 0x04, 0xD9, 0xF3, 0x11, 0x0F, 0x84, 0x40, 0x91, 0x7A, 0xBC, 0xEA, 0x49, 0x71, 0x0A, 0xDA] 1896 | }, 1897 | 1898 | 1899 | { 1900 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1901 | 'ct': [0x45, 0x84, 0xFC, 0xBB, 0x48, 0x71, 0x71, 0x17, 0x6C, 0x43, 0x18, 0x08, 0x2E, 0xFE, 0xFD, 0xF7] 1902 | }, 1903 | 1904 | 1905 | { 1906 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1907 | 'ct': [0x01, 0x9D, 0x3B, 0x42, 0xFA, 0x31, 0xA9, 0xF9, 0x17, 0x57, 0x59, 0xE6, 0xC3, 0x19, 0x3A, 0x07] 1908 | }, 1909 | 1910 | 1911 | { 1912 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1913 | 'ct': [0xC3, 0x24, 0xFF, 0x5F, 0x71, 0xA9, 0x74, 0xF1, 0x3F, 0x5D, 0x83, 0x22, 0x64, 0x41, 0xE3, 0xBD] 1914 | }, 1915 | 1916 | 1917 | { 1918 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1919 | 'ct': [0xD9, 0xDF, 0x41, 0x40, 0x8D, 0xFF, 0x80, 0xDE, 0x7C, 0x95, 0x71, 0x70, 0x6B, 0x39, 0x03, 0x8F] 1920 | }, 1921 | 1922 | 1923 | { 1924 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1925 | 'ct': [0xFB, 0xB9, 0x9A, 0x52, 0x4A, 0xC2, 0x3D, 0x74, 0x04, 0x7D, 0x81, 0x4E, 0xC0, 0xAE, 0xDB, 0xE2] 1926 | }, 1927 | 1928 | 1929 | { 1930 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1931 | 'ct': [0x87, 0x7C, 0x85, 0x5E, 0x25, 0x34, 0x5F, 0x6C, 0x7D, 0xB4, 0x23, 0x7E, 0xCF, 0x64, 0xC8, 0x74] 1932 | }, 1933 | 1934 | 1935 | { 1936 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1937 | 'ct': [0x20, 0x65, 0x00, 0xF8, 0x22, 0xC1, 0x30, 0x5F, 0x9D, 0x61, 0xF4, 0x9F, 0xC5, 0x7A, 0xFB, 0xF2] 1938 | }, 1939 | 1940 | 1941 | { 1942 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1943 | 'ct': [0xC7, 0x53, 0x8D, 0x97, 0xA7, 0x88, 0x44, 0xC3, 0xC0, 0x07, 0x40, 0x86, 0x5E, 0x26, 0x75, 0x5B] 1944 | }, 1945 | 1946 | 1947 | { 1948 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1949 | 'ct': [0xFA, 0xDB, 0xC4, 0xA6, 0xE4, 0x56, 0x40, 0x41, 0xAD, 0xA0, 0x94, 0xC6, 0x03, 0xCA, 0xBA, 0xA4] 1950 | }, 1951 | 1952 | 1953 | { 1954 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1955 | 'ct': [0x04, 0xC4, 0x82, 0xE0, 0x70, 0x7D, 0xE6, 0xDC, 0x19, 0x17, 0x72, 0x7D, 0x00, 0xC4, 0xFA, 0x6B] 1956 | }, 1957 | 1958 | 1959 | { 1960 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1961 | 'ct': [0xEE, 0x36, 0xB8, 0x99, 0x6A, 0xFF, 0x98, 0xBE, 0xA6, 0xE2, 0x11, 0x5B, 0x9D, 0x17, 0x33, 0x21] 1962 | }, 1963 | 1964 | 1965 | { 1966 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1967 | 'ct': [0xDB, 0xA4, 0xA5, 0xF3, 0x8B, 0x10, 0x49, 0x85, 0xD7, 0x96, 0xEC, 0xDD, 0xD8, 0x12, 0xB6, 0x05] 1968 | }, 1969 | 1970 | 1971 | { 1972 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1973 | 'ct': [0x1D, 0xC0, 0xF9, 0x10, 0xCD, 0x5A, 0xF1, 0xE5, 0x73, 0x41, 0x69, 0x45, 0x9E, 0x17, 0x01, 0x92] 1974 | }, 1975 | 1976 | 1977 | { 1978 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1979 | 'ct': [0xC3, 0xB7, 0xD6, 0x91, 0x40, 0x52, 0x50, 0x3D, 0x37, 0x7B, 0x01, 0xDB, 0x4E, 0x3A, 0x63, 0x0D] 1980 | }, 1981 | 1982 | 1983 | { 1984 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1985 | 'ct': [0x54, 0xD8, 0x07, 0x50, 0x66, 0x02, 0xEC, 0xF7, 0xD6, 0xB8, 0xC4, 0xD9, 0x23, 0x31, 0x77, 0x38] 1986 | }, 1987 | 1988 | 1989 | { 1990 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00], 1991 | 'ct': [0xAC, 0xE4, 0x94, 0x91, 0x43, 0xD4, 0xD1, 0x44, 0x1A, 0xA8, 0x54, 0x33, 0x1E, 0x7F, 0x51, 0x1B] 1992 | }, 1993 | 1994 | 1995 | { 1996 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00], 1997 | 'ct': [0xF7, 0xBA, 0x14, 0x0A, 0xED, 0x47, 0x56, 0xB2, 0x67, 0x89, 0x49, 0x8A, 0x17, 0xEB, 0xF6, 0x2D] 1998 | }, 1999 | 2000 | 2001 | { 2002 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00], 2003 | 'ct': [0xF2, 0x3E, 0x08, 0xB8, 0x1A, 0xCB, 0x75, 0xFE, 0x23, 0x26, 0xA9, 0x4E, 0xCC, 0x59, 0x68, 0xAC] 2004 | }, 2005 | 2006 | 2007 | { 2008 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00], 2009 | 'ct': [0x4C, 0xF2, 0x6F, 0x08, 0x86, 0x04, 0x36, 0x8B, 0x17, 0xDD, 0xC0, 0x9F, 0xF9, 0xD0, 0x14, 0x6D] 2010 | }, 2011 | 2012 | 2013 | { 2014 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00], 2015 | 'ct': [0xE9, 0x3A, 0xEB, 0x7A, 0xD7, 0x6A, 0x6A, 0xD0, 0xAF, 0x40, 0x92, 0xF3, 0x63, 0x42, 0x1F, 0x1B] 2016 | }, 2017 | 2018 | 2019 | { 2020 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00], 2021 | 'ct': [0x3D, 0x23, 0x4C, 0x0F, 0x78, 0xEC, 0xBE, 0xFC, 0xCD, 0xCE, 0x1E, 0xA6, 0xEC, 0x98, 0xC1, 0x45] 2022 | }, 2023 | 2024 | 2025 | { 2026 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00], 2027 | 'ct': [0xBA, 0x30, 0x0B, 0x02, 0x34, 0xF0, 0xC9, 0x61, 0x25, 0xD3, 0x31, 0x23, 0xCD, 0xD7, 0xD6, 0xA4] 2028 | }, 2029 | 2030 | 2031 | { 2032 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00], 2033 | 'ct': [0x1C, 0xF1, 0xA1, 0x60, 0xFA, 0xD7, 0xE7, 0x44, 0xF0, 0x8B, 0xA1, 0x45, 0x4A, 0x99, 0x92, 0x11] 2034 | }, 2035 | 2036 | 2037 | { 2038 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00], 2039 | 'ct': [0x59, 0xA9, 0xE8, 0xC1, 0x4A, 0xCB, 0xCE, 0xC2, 0x35, 0x52, 0x94, 0x25, 0xCF, 0x86, 0x99, 0x8E] 2040 | }, 2041 | 2042 | 2043 | { 2044 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00], 2045 | 'ct': [0x22, 0xD2, 0x9C, 0xFE, 0xF3, 0xA6, 0xDC, 0x0E, 0xC6, 0x7A, 0x9E, 0xA8, 0x52, 0x3D, 0x61, 0x58] 2046 | }, 2047 | 2048 | 2049 | { 2050 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], 2051 | 'ct': [0x51, 0x39, 0x71, 0xF9, 0x79, 0xFC, 0x90, 0x6F, 0xAD, 0xD9, 0x82, 0xD7, 0xF0, 0x8E, 0x4F, 0x05] 2052 | }, 2053 | 2054 | 2055 | { 2056 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00], 2057 | 'ct': [0x6A, 0x95, 0xC0, 0x7D, 0x7F, 0xAC, 0xF2, 0xCD, 0x36, 0xDF, 0x36, 0x21, 0x16, 0xA2, 0xDD, 0x5F] 2058 | }, 2059 | 2060 | 2061 | { 2062 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00], 2063 | 'ct': [0xCD, 0x62, 0xAD, 0x57, 0x39, 0x3A, 0x38, 0x60, 0x74, 0x36, 0xFA, 0xF0, 0x98, 0x5C, 0x2D, 0x50] 2064 | }, 2065 | 2066 | 2067 | { 2068 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00], 2069 | 'ct': [0x52, 0x09, 0xAD, 0xE1, 0x37, 0xB9, 0x3B, 0xA0, 0x96, 0x35, 0x28, 0xE3, 0xE1, 0xA4, 0x0F, 0x2A] 2070 | }, 2071 | 2072 | 2073 | { 2074 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00], 2075 | 'ct': [0x54, 0x5B, 0xDE, 0x9D, 0x1C, 0x11, 0x23, 0x9E, 0xD7, 0x0D, 0x93, 0x06, 0x0F, 0x24, 0xE3, 0x97] 2076 | }, 2077 | 2078 | 2079 | { 2080 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00], 2081 | 'ct': [0x72, 0x06, 0x22, 0xF5, 0x19, 0x45, 0x78, 0xB3, 0xC2, 0x4B, 0x5D, 0xDD, 0xC7, 0xE3, 0x03, 0x27] 2082 | }, 2083 | 2084 | 2085 | { 2086 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00], 2087 | 'ct': [0x9E, 0x12, 0x33, 0x8B, 0xF4, 0x84, 0x10, 0x62, 0x49, 0x75, 0x4E, 0xAA, 0x6C, 0x44, 0x11, 0x92] 2088 | }, 2089 | 2090 | 2091 | { 2092 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00], 2093 | 'ct': [0xF1, 0x33, 0x03, 0xDC, 0x75, 0x9C, 0xA6, 0x50, 0x97, 0xEC, 0x87, 0xF8, 0xD8, 0x54, 0x16, 0x3C] 2094 | }, 2095 | 2096 | 2097 | { 2098 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00], 2099 | 'ct': [0x4A, 0x2A, 0x6E, 0xB6, 0x84, 0x57, 0x23, 0xC1, 0xC7, 0x90, 0xD6, 0x93, 0xB5, 0x96, 0xCD, 0xE3] 2100 | }, 2101 | 2102 | 2103 | { 2104 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00], 2105 | 'ct': [0xEF, 0x3D, 0x7C, 0x67, 0x41, 0x7C, 0xA1, 0xFE, 0xEF, 0x03, 0xEF, 0x71, 0x44, 0x1B, 0xDD, 0xFE] 2106 | }, 2107 | 2108 | 2109 | { 2110 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00], 2111 | 'ct': [0x21, 0x4F, 0xB3, 0x8A, 0x75, 0x11, 0xA8, 0x7C, 0xF1, 0x60, 0xF5, 0x9C, 0xCA, 0x2B, 0x8E, 0x33] 2112 | }, 2113 | 2114 | 2115 | { 2116 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00], 2117 | 'ct': [0xDC, 0xFF, 0xDB, 0x5E, 0x44, 0x57, 0x4D, 0x0D, 0x59, 0x3A, 0x70, 0xAD, 0xA4, 0xC7, 0x94, 0x74] 2118 | }, 2119 | 2120 | 2121 | { 2122 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00], 2123 | 'ct': [0xAC, 0x9D, 0x55, 0xD4, 0xA4, 0xFB, 0xB8, 0x0C, 0x9B, 0x79, 0xC9, 0x07, 0x7B, 0xA3, 0x81, 0xB1] 2124 | }, 2125 | 2126 | 2127 | { 2128 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00], 2129 | 'ct': [0x05, 0xC6, 0xD6, 0x1B, 0x75, 0x31, 0x29, 0x24, 0xE0, 0xBC, 0xED, 0xCB, 0x4B, 0x8D, 0x55, 0xDD] 2130 | }, 2131 | 2132 | 2133 | { 2134 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00], 2135 | 'ct': [0xE6, 0x50, 0xCB, 0x44, 0x5A, 0xF4, 0x8A, 0x77, 0xE8, 0xDB, 0x6E, 0x2E, 0xFB, 0xCE, 0x6F, 0xA7] 2136 | }, 2137 | 2138 | 2139 | { 2140 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00], 2141 | 'ct': [0x4C, 0x99, 0x02, 0xE8, 0x92, 0x53, 0xD7, 0xA1, 0x72, 0xBA, 0xBF, 0xA8, 0x7D, 0xB9, 0x48, 0x16] 2142 | }, 2143 | 2144 | 2145 | { 2146 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00], 2147 | 'ct': [0x5A, 0xF4, 0xF5, 0xE8, 0x49, 0x1E, 0xE7, 0xF8, 0x7E, 0xB8, 0x09, 0xD8, 0x2A, 0xEC, 0x12, 0xDB] 2148 | }, 2149 | 2150 | 2151 | { 2152 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00], 2153 | 'ct': [0x1C, 0x11, 0x73, 0x0D, 0x62, 0xBC, 0xA6, 0xF8, 0x47, 0xB1, 0x45, 0x7B, 0x52, 0x87, 0xBD, 0x12] 2154 | }, 2155 | 2156 | 2157 | { 2158 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00], 2159 | 'ct': [0xBE, 0xF6, 0x5A, 0x32, 0xFF, 0x73, 0x83, 0xCF, 0xDB, 0x5A, 0x90, 0xC2, 0xF3, 0xB9, 0x38, 0x37] 2160 | }, 2161 | 2162 | 2163 | { 2164 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00], 2165 | 'ct': [0x2F, 0x3A, 0xA6, 0x8F, 0xFE, 0x3B, 0x99, 0xDC, 0x92, 0x62, 0x17, 0x82, 0xF3, 0xF9, 0xED, 0x67] 2166 | }, 2167 | 2168 | 2169 | { 2170 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00], 2171 | 'ct': [0x18, 0xBD, 0x59, 0x8B, 0xFA, 0x2C, 0x77, 0xE2, 0x1D, 0xBD, 0x59, 0x4E, 0xE0, 0xE5, 0xCD, 0xCB] 2172 | }, 2173 | 2174 | 2175 | { 2176 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00], 2177 | 'ct': [0x24, 0x8C, 0xF5, 0x33, 0x01, 0x6A, 0x6A, 0xB1, 0xF8, 0x4F, 0x85, 0xB2, 0xC5, 0xCD, 0x41, 0xA7] 2178 | }, 2179 | 2180 | 2181 | { 2182 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00], 2183 | 'ct': [0xA3, 0xB1, 0x2F, 0x57, 0x83, 0x53, 0x51, 0x4C, 0xCC, 0x50, 0x0A, 0xDD, 0x6C, 0x49, 0x5A, 0x6C] 2184 | }, 2185 | 2186 | 2187 | { 2188 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00], 2189 | 'ct': [0xEE, 0x2D, 0xC0, 0x99, 0xB3, 0x7D, 0x20, 0x0B, 0x4D, 0x39, 0x30, 0xA6, 0xDE, 0x07, 0x20, 0x8E] 2190 | }, 2191 | 2192 | 2193 | { 2194 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00], 2195 | 'ct': [0x41, 0x2C, 0x9F, 0x19, 0x8D, 0x58, 0xA0, 0xF0, 0x1F, 0x66, 0xDF, 0x07, 0xCF, 0x21, 0x16, 0x36] 2196 | }, 2197 | 2198 | 2199 | { 2200 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00], 2201 | 'ct': [0x5B, 0x35, 0x32, 0xBA, 0x46, 0x71, 0x6B, 0x02, 0xE7, 0x61, 0x33, 0x9D, 0xBA, 0xFB, 0xAA, 0xB0] 2202 | }, 2203 | 2204 | 2205 | { 2206 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00], 2207 | 'ct': [0x01, 0x48, 0x18, 0x7C, 0xA7, 0x2E, 0xC4, 0x6B, 0x52, 0x2E, 0x4F, 0xE7, 0xE1, 0x26, 0x15, 0x22] 2208 | }, 2209 | 2210 | 2211 | { 2212 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00], 2213 | 'ct': [0x84, 0xC5, 0x29, 0xCC, 0x4E, 0x23, 0x68, 0x3A, 0xB9, 0x0A, 0x24, 0xA6, 0x69, 0x06, 0x62, 0xED] 2214 | }, 2215 | 2216 | 2217 | { 2218 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00], 2219 | 'ct': [0x0D, 0x1E, 0xF0, 0x48, 0x15, 0x93, 0xA3, 0xD9, 0x5F, 0x03, 0x61, 0xC7, 0x76, 0xD9, 0xA4, 0xD2] 2220 | }, 2221 | 2222 | 2223 | { 2224 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00], 2225 | 'ct': [0xD6, 0x22, 0x17, 0x1C, 0x73, 0x72, 0x6D, 0xB6, 0x62, 0x0F, 0xFD, 0xA6, 0x54, 0x0D, 0x51, 0x0E] 2226 | }, 2227 | 2228 | 2229 | { 2230 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80], 2231 | 'ct': [0xF2, 0x18, 0xD9, 0x2A, 0xED, 0x36, 0x3C, 0x68, 0x29, 0xF7, 0xFA, 0x3B, 0xA3, 0x46, 0xE0, 0xFB] 2232 | }, 2233 | 2234 | 2235 | { 2236 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40], 2237 | 'ct': [0x40, 0xCD, 0x83, 0xA5, 0xF0, 0xBF, 0xD0, 0xE1, 0xD7, 0xFE, 0x14, 0x29, 0x9C, 0xEC, 0xFB, 0x7C] 2238 | }, 2239 | 2240 | 2241 | { 2242 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20], 2243 | 'ct': [0x51, 0x2F, 0x02, 0x21, 0x57, 0xAE, 0xF0, 0x01, 0x5E, 0x93, 0xF3, 0x73, 0x79, 0x11, 0xA3, 0x5E] 2244 | }, 2245 | 2246 | 2247 | { 2248 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10], 2249 | 'ct': [0xC7, 0xA5, 0xA8, 0x83, 0x56, 0x15, 0x2E, 0x95, 0xF3, 0x67, 0x39, 0xAB, 0x5E, 0xF9, 0xF6, 0x3F] 2250 | }, 2251 | 2252 | 2253 | { 2254 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08], 2255 | 'ct': [0x8F, 0xD0, 0xF1, 0x5E, 0x25, 0x04, 0xA8, 0xF4, 0xFD, 0x75, 0x1C, 0xA7, 0x79, 0x9F, 0xFB, 0x1D] 2256 | }, 2257 | 2258 | 2259 | { 2260 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04], 2261 | 'ct': [0x01, 0x37, 0xC8, 0x72, 0x57, 0xA8, 0xCB, 0xD1, 0x8C, 0x21, 0x8A, 0x86, 0x7B, 0x3A, 0xB5, 0xF8] 2262 | }, 2263 | 2264 | 2265 | { 2266 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02], 2267 | 'ct': [0x3D, 0xB0, 0xF1, 0x67, 0x4F, 0x18, 0x7D, 0xF1, 0xCB, 0x03, 0x6D, 0xB3, 0x3A, 0x05, 0xA0, 0xD7] 2268 | }, 2269 | 2270 | 2271 | { 2272 | 'pt': [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01], 2273 | 'ct': [0x23, 0xD1, 0x24, 0x7E, 0xFF, 0x4C, 0xA8, 0xCB, 0xB3, 0x78, 0xDF, 0x11, 0x83, 0x69, 0x82, 0x1E] 2274 | } 2275 | ] 2276 | , testsIndex = 0 2277 | , testsLength = tests.length 2278 | , aTest; 2279 | 2280 | for (; testsIndex < testsLength; testsIndex += 1) { 2281 | 2282 | aTest = tests[testsIndex]; 2283 | useCaseName = 'ecb 256 use case: ' + testsIndex; 2284 | 2285 | it(useCaseName, singleTest.bind(this, key, aTest)); 2286 | } 2287 | }); 2288 | 2289 | }(describe, it, expect, twofish)); 2290 | -------------------------------------------------------------------------------- /src/twofish.js: -------------------------------------------------------------------------------- 1 | /*globals exports*/ 2 | 3 | (function twofish(exports) { 4 | 'use strict'; 5 | 6 | var RNG = function RNG(seed) { 7 | 8 | this.m = 0x80000000; // 2**31; 9 | this.a = 1103515245; 10 | this.c = 12345; 11 | 12 | this.state = seed ? seed : Math.floor(Math.random() * (this.m - 1)); 13 | } 14 | , functionUtils = function functionUtils() { 15 | 16 | var isAnArray = function isAnArray(someVar) { 17 | 18 | if (Array.isArray(someVar) || 19 | Object.prototype.toString.call( someVar ) === '[object Uint8Array]') { 20 | 21 | return true; 22 | } 23 | return false; 24 | } 25 | , areEqual = function areEqual(first, second) { 26 | 27 | var firstLength = first.length 28 | , secondLength = second.length 29 | , diffLength 30 | , arraysEqualLenghtIndex = 0; 31 | 32 | if (firstLength > secondLength) { 33 | 34 | diffLength = firstLength - secondLength; 35 | for (; diffLength >= 0; diffLength -= 1) { 36 | 37 | if (first[firstLength - diffLength]) { 38 | 39 | return false; 40 | } 41 | } 42 | } else if (secondLength > firstLength) { 43 | 44 | diffLength = secondLength - firstLength; 45 | for (; diffLength >= 0; diffLength -= 1) { 46 | 47 | if (second[secondLength - diffLength]) { 48 | 49 | return false; 50 | } 51 | } 52 | } 53 | 54 | for (; arraysEqualLenghtIndex < firstLength; arraysEqualLenghtIndex += 1) { 55 | 56 | if (first[arraysEqualLenghtIndex] !== second[arraysEqualLenghtIndex]) { 57 | 58 | return false; 59 | } 60 | } 61 | return true; 62 | } 63 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding 64 | , UTF8ArrToStr = function UTF8ArrToStr(aBytes) { 65 | 66 | var sView = '' 67 | , nPart 68 | , nLen = aBytes.length 69 | , nIdx = 0; 70 | for (; nIdx < nLen; nIdx += 1) { 71 | 72 | nPart = aBytes[nIdx]; 73 | /*eslint-disable no-plusplus, no-nested-ternary, no-bitwise*/ 74 | sView += String.fromCharCode( 75 | nPart > 251 && nPart < 254 && nIdx + 5 < nLen ? /* six bytes */ 76 | /* (nPart - 252 << 32) is not possible in ECMAScript! So...: */ 77 | (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 78 | : nPart > 247 && nPart < 252 && nIdx + 4 < nLen ? /* five bytes */ 79 | (nPart - 248 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 80 | : nPart > 239 && nPart < 248 && nIdx + 3 < nLen ? /* four bytes */ 81 | (nPart - 240 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 82 | : nPart > 223 && nPart < 240 && nIdx + 2 < nLen ? /* three bytes */ 83 | (nPart - 224 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 84 | : nPart > 191 && nPart < 224 && nIdx + 1 < nLen ? /* two bytes */ 85 | (nPart - 192 << 6) + aBytes[++nIdx] - 128 86 | : /* nPart < 127 ? */ /* one byte */ 87 | nPart 88 | ); 89 | /*eslint-enable no-plusplus, no-nested-ternary, no-bitwise*/ 90 | } 91 | 92 | return sView; 93 | } 94 | , strToUTF8Arr = function strToUTF8Arr(sDOMStr) { 95 | 96 | var aBytes 97 | , nChr 98 | , nStrLen = sDOMStr.length 99 | , nArrLen = 0 100 | , nMapIdx = 0 101 | , nIdx = 0 102 | , nChrIdx = 0 103 | , paddingValue 104 | , paddingIndex; 105 | 106 | /* mapping... */ 107 | for (; nMapIdx < nStrLen; nMapIdx += 1) { 108 | 109 | nChr = sDOMStr.charCodeAt(nMapIdx); 110 | /*eslint-disable no-nested-ternary*/ 111 | nArrLen += nChr < 0x80 ? 1 : nChr < 0x800 ? 2 : nChr < 0x10000 ? 3 : nChr < 0x200000 ? 4 : nChr < 0x4000000 ? 5 : 6; 112 | /*eslint-enable no-nested-ternary*/ 113 | } 114 | 115 | aBytes = []; 116 | 117 | /* transcription... */ 118 | for (; nIdx < nArrLen; nChrIdx += 1) { 119 | 120 | nChr = sDOMStr.charCodeAt(nChrIdx); 121 | /*eslint-disable no-plusplus, no-bitwise*/ 122 | if (nChr < 128) { 123 | 124 | /* one byte */ 125 | aBytes[nIdx++] = nChr; 126 | } else if (nChr < 0x800) { 127 | 128 | /* two bytes */ 129 | aBytes[nIdx++] = 192 + (nChr >>> 6); 130 | aBytes[nIdx++] = 128 + (nChr & 63); 131 | } else if (nChr < 0x10000) { 132 | 133 | /* three bytes */ 134 | aBytes[nIdx++] = 224 + (nChr >>> 12); 135 | aBytes[nIdx++] = 128 + (nChr >>> 6 & 63); 136 | aBytes[nIdx++] = 128 + (nChr & 63); 137 | } else if (nChr < 0x200000) { 138 | 139 | /* four bytes */ 140 | aBytes[nIdx++] = 240 + (nChr >>> 18); 141 | aBytes[nIdx++] = 128 + (nChr >>> 12 & 63); 142 | aBytes[nIdx++] = 128 + (nChr >>> 6 & 63); 143 | aBytes[nIdx++] = 128 + (nChr & 63); 144 | } else if (nChr < 0x4000000) { 145 | 146 | /* five bytes */ 147 | aBytes[nIdx++] = 248 + (nChr >>> 24); 148 | aBytes[nIdx++] = 128 + (nChr >>> 18 & 63); 149 | aBytes[nIdx++] = 128 + (nChr >>> 12 & 63); 150 | aBytes[nIdx++] = 128 + (nChr >>> 6 & 63); 151 | aBytes[nIdx++] = 128 + (nChr & 63); 152 | } else { 153 | 154 | /* six bytes */ 155 | aBytes[nIdx++] = 252 + nChr / 1073741824; 156 | aBytes[nIdx++] = 128 + (nChr >>> 24 & 63); 157 | aBytes[nIdx++] = 128 + (nChr >>> 18 & 63); 158 | aBytes[nIdx++] = 128 + (nChr >>> 12 & 63); 159 | aBytes[nIdx++] = 128 + (nChr >>> 6 & 63); 160 | aBytes[nIdx++] = 128 + (nChr & 63); 161 | } 162 | /*eslint-enable no-plusplus, no-bitwise*/ 163 | } 164 | 165 | paddingValue = aBytes.length % 16; 166 | if (paddingValue !== 0) { 167 | 168 | for (paddingIndex = 0; paddingIndex < 16 - paddingValue; paddingIndex += 1) { 169 | 170 | aBytes.push(0); 171 | } 172 | } 173 | return aBytes; 174 | }; 175 | 176 | return { 177 | 'isAnArray': isAnArray, 178 | 'areEqual': areEqual, 179 | 'UTF8ArrToStr': UTF8ArrToStr, 180 | 'strToUTF8Arr': strToUTF8Arr 181 | }; 182 | }; 183 | 184 | RNG.prototype.nextInt = function nextInt() { 185 | 186 | this.state = (this.a * this.state + this.c) % this.m; 187 | return this.state; 188 | }; 189 | 190 | RNG.prototype.nextFloat = function nextFloat() { 191 | 192 | // returns in range [0,1] 193 | return this.nextInt() / (this.m - 1); 194 | }; 195 | 196 | RNG.prototype.nextRange = function nextRange(start, end) { 197 | 198 | // returns in range [start, end): including start, excluding end 199 | // can't modulo nextInt because of weak randomness in lower bits 200 | var rangeSize = end - start 201 | , randomUnder1 = this.nextInt() / this.m; 202 | return start + Math.floor(randomUnder1 * rangeSize); 203 | }; 204 | 205 | RNG.prototype.choice = function choice(array) { 206 | 207 | return array[this.nextRange(0, array.length)]; 208 | }; 209 | 210 | /* eslint-disable no-shadow */ 211 | exports.twofish = function twofish(IV) { 212 | /* eslint-enable no-shadow */ 213 | 214 | /* eslint-disable no-bitwise*/ 215 | var utils = functionUtils() 216 | , rng = new RNG() 217 | , initializingVector = [] 218 | // S-boxes 219 | , P0 = new Uint8Array([ 220 | 0xA9, 0x67, 0xB3, 0xE8, 221 | 0x04, 0xFD, 0xA3, 0x76, 222 | 0x9A, 0x92, 0x80, 0x78, 223 | 0xE4, 0xDD, 0xD1, 0x38, 224 | 0x0D, 0xC6, 0x35, 0x98, 225 | 0x18, 0xF7, 0xEC, 0x6C, 226 | 0x43, 0x75, 0x37, 0x26, 227 | 0xFA, 0x13, 0x94, 0x48, 228 | 0xF2, 0xD0, 0x8B, 0x30, 229 | 0x84, 0x54, 0xDF, 0x23, 230 | 0x19, 0x5B, 0x3D, 0x59, 231 | 0xF3, 0xAE, 0xA2, 0x82, 232 | 0x63, 0x01, 0x83, 0x2E, 233 | 0xD9, 0x51, 0x9B, 0x7C, 234 | 0xA6, 0xEB, 0xA5, 0xBE, 235 | 0x16, 0x0C, 0xE3, 0x61, 236 | 0xC0, 0x8C, 0x3A, 0xF5, 237 | 0x73, 0x2C, 0x25, 0x0B, 238 | 0xBB, 0x4E, 0x89, 0x6B, 239 | 0x53, 0x6A, 0xB4, 0xF1, 240 | 0xE1, 0xE6, 0xBD, 0x45, 241 | 0xE2, 0xF4, 0xB6, 0x66, 242 | 0xCC, 0x95, 0x03, 0x56, 243 | 0xD4, 0x1C, 0x1E, 0xD7, 244 | 0xFB, 0xC3, 0x8E, 0xB5, 245 | 0xE9, 0xCF, 0xBF, 0xBA, 246 | 0xEA, 0x77, 0x39, 0xAF, 247 | 0x33, 0xC9, 0x62, 0x71, 248 | 0x81, 0x79, 0x09, 0xAD, 249 | 0x24, 0xCD, 0xF9, 0xD8, 250 | 0xE5, 0xC5, 0xB9, 0x4D, 251 | 0x44, 0x08, 0x86, 0xE7, 252 | 0xA1, 0x1D, 0xAA, 0xED, 253 | 0x06, 0x70, 0xB2, 0xD2, 254 | 0x41, 0x7B, 0xA0, 0x11, 255 | 0x31, 0xC2, 0x27, 0x90, 256 | 0x20, 0xF6, 0x60, 0xFF, 257 | 0x96, 0x5C, 0xB1, 0xAB, 258 | 0x9E, 0x9C, 0x52, 0x1B, 259 | 0x5F, 0x93, 0x0A, 0xEF, 260 | 0x91, 0x85, 0x49, 0xEE, 261 | 0x2D, 0x4F, 0x8F, 0x3B, 262 | 0x47, 0x87, 0x6D, 0x46, 263 | 0xD6, 0x3E, 0x69, 0x64, 264 | 0x2A, 0xCE, 0xCB, 0x2F, 265 | 0xFC, 0x97, 0x05, 0x7A, 266 | 0xAC, 0x7F, 0xD5, 0x1A, 267 | 0x4B, 0x0E, 0xA7, 0x5A, 268 | 0x28, 0x14, 0x3F, 0x29, 269 | 0x88, 0x3C, 0x4C, 0x02, 270 | 0xB8, 0xDA, 0xB0, 0x17, 271 | 0x55, 0x1F, 0x8A, 0x7D, 272 | 0x57, 0xC7, 0x8D, 0x74, 273 | 0xB7, 0xC4, 0x9F, 0x72, 274 | 0x7E, 0x15, 0x22, 0x12, 275 | 0x58, 0x07, 0x99, 0x34, 276 | 0x6E, 0x50, 0xDE, 0x68, 277 | 0x65, 0xBC, 0xDB, 0xF8, 278 | 0xC8, 0xA8, 0x2B, 0x40, 279 | 0xDC, 0xFE, 0x32, 0xA4, 280 | 0xCA, 0x10, 0x21, 0xF0, 281 | 0xD3, 0x5D, 0x0F, 0x00, 282 | 0x6F, 0x9D, 0x36, 0x42, 283 | 0x4A, 0x5E, 0xC1, 0xE0 284 | ]) 285 | , P1 = new Uint8Array([ 286 | 0x75, 0xF3, 0xC6, 0xF4, 287 | 0xDB, 0x7B, 0xFB, 0xC8, 288 | 0x4A, 0xD3, 0xE6, 0x6B, 289 | 0x45, 0x7D, 0xE8, 0x4B, 290 | 0xD6, 0x32, 0xD8, 0xFD, 291 | 0x37, 0x71, 0xF1, 0xE1, 292 | 0x30, 0x0F, 0xF8, 0x1B, 293 | 0x87, 0xFA, 0x06, 0x3F, 294 | 0x5E, 0xBA, 0xAE, 0x5B, 295 | 0x8A, 0x00, 0xBC, 0x9D, 296 | 0x6D, 0xC1, 0xB1, 0x0E, 297 | 0x80, 0x5D, 0xD2, 0xD5, 298 | 0xA0, 0x84, 0x07, 0x14, 299 | 0xB5, 0x90, 0x2C, 0xA3, 300 | 0xB2, 0x73, 0x4C, 0x54, 301 | 0x92, 0x74, 0x36, 0x51, 302 | 0x38, 0xB0, 0xBD, 0x5A, 303 | 0xFC, 0x60, 0x62, 0x96, 304 | 0x6C, 0x42, 0xF7, 0x10, 305 | 0x7C, 0x28, 0x27, 0x8C, 306 | 0x13, 0x95, 0x9C, 0xC7, 307 | 0x24, 0x46, 0x3B, 0x70, 308 | 0xCA, 0xE3, 0x85, 0xCB, 309 | 0x11, 0xD0, 0x93, 0xB8, 310 | 0xA6, 0x83, 0x20, 0xFF, 311 | 0x9F, 0x77, 0xC3, 0xCC, 312 | 0x03, 0x6F, 0x08, 0xBF, 313 | 0x40, 0xE7, 0x2B, 0xE2, 314 | 0x79, 0x0C, 0xAA, 0x82, 315 | 0x41, 0x3A, 0xEA, 0xB9, 316 | 0xE4, 0x9A, 0xA4, 0x97, 317 | 0x7E, 0xDA, 0x7A, 0x17, 318 | 0x66, 0x94, 0xA1, 0x1D, 319 | 0x3D, 0xF0, 0xDE, 0xB3, 320 | 0x0B, 0x72, 0xA7, 0x1C, 321 | 0xEF, 0xD1, 0x53, 0x3E, 322 | 0x8F, 0x33, 0x26, 0x5F, 323 | 0xEC, 0x76, 0x2A, 0x49, 324 | 0x81, 0x88, 0xEE, 0x21, 325 | 0xC4, 0x1A, 0xEB, 0xD9, 326 | 0xC5, 0x39, 0x99, 0xCD, 327 | 0xAD, 0x31, 0x8B, 0x01, 328 | 0x18, 0x23, 0xDD, 0x1F, 329 | 0x4E, 0x2D, 0xF9, 0x48, 330 | 0x4F, 0xF2, 0x65, 0x8E, 331 | 0x78, 0x5C, 0x58, 0x19, 332 | 0x8D, 0xE5, 0x98, 0x57, 333 | 0x67, 0x7F, 0x05, 0x64, 334 | 0xAF, 0x63, 0xB6, 0xFE, 335 | 0xF5, 0xB7, 0x3C, 0xA5, 336 | 0xCE, 0xE9, 0x68, 0x44, 337 | 0xE0, 0x4D, 0x43, 0x69, 338 | 0x29, 0x2E, 0xAC, 0x15, 339 | 0x59, 0xA8, 0x0A, 0x9E, 340 | 0x6E, 0x47, 0xDF, 0x34, 341 | 0x35, 0x6A, 0xCF, 0xDC, 342 | 0x22, 0xC9, 0xC0, 0x9B, 343 | 0x89, 0xD4, 0xED, 0xAB, 344 | 0x12, 0xA2, 0x0D, 0x52, 345 | 0xBB, 0x02, 0x2F, 0xA9, 346 | 0xD7, 0x61, 0x1E, 0xB4, 347 | 0x50, 0x04, 0xF6, 0xC2, 348 | 0x16, 0x25, 0x86, 0x56, 349 | 0x55, 0x09, 0xBE, 0x91 350 | ]) 351 | , P = [P0, P1] 352 | , BLOCK_SIZE = 16 353 | , ROUNDS = 16 354 | , SK_STEP = 0x02020202 355 | , SK_BUMP = 0x01010101 356 | , SK_ROTL = 9 357 | , INPUT_WHITEN = 0 358 | , OUTPUT_WHITEN = INPUT_WHITEN + BLOCK_SIZE / 4 359 | , ROUND_SUBKEYS = OUTPUT_WHITEN + BLOCK_SIZE / 4 // 2*(# rounds) 360 | 361 | , blockSizeIndex = 0 362 | , paddingIndex = 0 363 | , initialLength 364 | 365 | // Fixed p0/p1 permutations used in S-box lookup. 366 | // Change the following constant definitions, then S-boxes will automatically get changed. 367 | , P_00 = 1 368 | , P_01 = 0 369 | , P_02 = 0 370 | , P_03 = P_01 ^ 1 371 | , P_04 = 1 372 | 373 | , P_10 = 0 374 | , P_11 = 0 375 | , P_12 = 1 376 | , P_13 = P_11 ^ 1 377 | , P_14 = 0 378 | 379 | , P_20 = 1 380 | , P_21 = 1 381 | , P_22 = 0 382 | , P_23 = P_21 ^ 1 383 | , P_24 = 0 384 | 385 | , P_30 = 0 386 | , P_31 = 1 387 | , P_32 = 1 388 | , P_33 = P_31 ^ 1 389 | , P_34 = 1 390 | 391 | , GF256_FDBK_2 = Math.floor(0x169 / 2) 392 | , GF256_FDBK_4 = Math.floor(0x169 / 4) 393 | , RS_GF_FDBK = 0x14D 394 | 395 | , lfsr1 = function lfsr1(x) { 396 | 397 | return x >> 1 ^ ((x & 0x01) !== 0 ? GF256_FDBK_2 : 0); 398 | } 399 | , lfsr2 = function lfsr2(x) { 400 | 401 | return x >> 2 ^ ((x & 0x02) !== 0 ? GF256_FDBK_2 : 0) ^ ((x & 0x01) !== 0 ? GF256_FDBK_4 : 0); 402 | } 403 | , mxX = function mxX(x) { 404 | 405 | return x ^ lfsr2(x); 406 | } 407 | , mxY = function mxY(x) { 408 | 409 | return x ^ lfsr1(x) ^ lfsr2(x); 410 | } 411 | , MDS = (function calcMDS() { 412 | 413 | var localMDS = [[], [], [], []] 414 | , m1 = [] 415 | , mX = [] 416 | , mY = [] 417 | , i 418 | , j; 419 | for (i = 0; i < 256; i += 1) { 420 | 421 | j = P[0][i] & 0xFF; 422 | m1[0] = j; 423 | mX[0] = mxX(j) & 0xFF; 424 | mY[0] = mxY(j) & 0xFF; 425 | 426 | j = P[1][i] & 0xFF; 427 | m1[1] = j; 428 | mX[1] = mxX(j) & 0xFF; 429 | mY[1] = mxY(j) & 0xFF; 430 | 431 | localMDS[0][i] = m1[P_00] << 0 | mX[P_00] << 8 | mY[P_00] << 16 | mY[P_00] << 24; 432 | localMDS[1][i] = mY[P_10] << 0 | mY[P_10] << 8 | mX[P_10] << 16 | m1[P_10] << 24; 433 | localMDS[2][i] = mX[P_20] << 0 | mY[P_20] << 8 | m1[P_20] << 16 | mY[P_20] << 24; 434 | localMDS[3][i] = mX[P_30] << 0 | m1[P_30] << 8 | mY[P_30] << 16 | mX[P_30] << 24; 435 | } 436 | 437 | return [new Uint32Array(localMDS[0]), new Uint32Array(localMDS[1]), new Uint32Array(localMDS[2]), new Uint32Array(localMDS[3])]; 438 | }()) 439 | , b0 = function b0(x) { 440 | 441 | return x & 0xFF; 442 | } 443 | , b1 = function b1(x) { 444 | 445 | return x >>> 8 & 0xFF; 446 | } 447 | , b2 = function b2(x) { 448 | 449 | return x >>> 16 & 0xFF; 450 | } 451 | , b3 = function b3(x) { 452 | 453 | return x >>> 24 & 0xFF; 454 | } 455 | , chooseB = function chooseB(x, N) { 456 | 457 | var result = 0; 458 | switch (N % 4) { 459 | 460 | case 0: 461 | result = b0(x); 462 | break; 463 | 464 | case 1: 465 | result = b1(x); 466 | break; 467 | 468 | case 2: 469 | result = b2(x); 470 | break; 471 | 472 | case 3: 473 | result = b3(x); 474 | break; 475 | 476 | default: 477 | } 478 | return result; 479 | } 480 | , rsRem = function rsRem(x) { 481 | 482 | var b = x >>> 24 & 0xFF 483 | , g2 = (b << 1 ^ ((b & 0x80) !== 0 ? RS_GF_FDBK : 0)) & 0xFF 484 | , g3 = b >>> 1 ^ ((b & 0x01) !== 0 ? RS_GF_FDBK >>> 1 : 0 ) ^ g2 485 | , result = x << 8 ^ g3 << 24 ^ g2 << 16 ^ g3 << 8 ^ b; 486 | return result; 487 | } 488 | , rsMDSEncode = function rsMDSEncode(k0, k1) { 489 | 490 | var index = 0; 491 | for (; index < 4; index += 1) { 492 | 493 | k1 = rsRem(k1); 494 | } 495 | k1 ^= k0; 496 | for (index = 0; index < 4; index += 1) { 497 | 498 | k1 = rsRem(k1); 499 | } 500 | return k1; 501 | } 502 | , f32 = function f32(k64Cnt, x, k32 ) { 503 | 504 | var lB0 = b0(x) 505 | , lB1 = b1(x) 506 | , lB2 = b2(x) 507 | , lB3 = b3(x) 508 | , k0 = k32[0] || 0 509 | , k1 = k32[1] || 0 510 | , k2 = k32[2] || 0 511 | , k3 = k32[3] || 0 512 | , result = 0; 513 | 514 | switch (k64Cnt & 3) { 515 | case 1: 516 | result = MDS[0][P[P_01][lB0] & 0xFF ^ b0(k0)] ^ 517 | MDS[1][P[P_11][lB1] & 0xFF ^ b1(k0)] ^ 518 | MDS[2][P[P_21][lB2] & 0xFF ^ b2(k0)] ^ 519 | MDS[3][P[P_31][lB3] & 0xFF ^ b3(k0)]; 520 | break; 521 | 522 | case 0: // same as 4 523 | lB0 = P[P_04][lB0] & 0xFF ^ b0(k3); 524 | lB1 = P[P_14][lB1] & 0xFF ^ b1(k3); 525 | lB2 = P[P_24][lB2] & 0xFF ^ b2(k3); 526 | lB3 = P[P_34][lB3] & 0xFF ^ b3(k3); 527 | /* falls through */ 528 | 529 | case 3: 530 | lB0 = P[P_03][lB0] & 0xFF ^ b0(k2); 531 | lB1 = P[P_13][lB1] & 0xFF ^ b1(k2); 532 | lB2 = P[P_23][lB2] & 0xFF ^ b2(k2); 533 | lB3 = P[P_33][lB3] & 0xFF ^ b3(k2); 534 | /* falls through */ 535 | 536 | case 2: 537 | result = MDS[0][P[P_01][P[P_02][lB0] & 0xFF ^ b0(k1)] & 0xFF ^ b0(k0)] ^ 538 | MDS[1][P[P_11][P[P_12][lB1] & 0xFF ^ b1(k1)] & 0xFF ^ b1(k0)] ^ 539 | MDS[2][P[P_21][P[P_22][lB2] & 0xFF ^ b2(k1)] & 0xFF ^ b2(k0)] ^ 540 | MDS[3][P[P_31][P[P_32][lB3] & 0xFF ^ b3(k1)] & 0xFF ^ b3(k0)]; 541 | break; 542 | 543 | default: 544 | } 545 | 546 | return result; 547 | } 548 | , fe32 = function fe32(sBox, x, R) { 549 | 550 | var toReturn = sBox[2 * chooseB(x, R)] ^ 551 | sBox[2 * chooseB(x, R + 1) + 1] ^ 552 | sBox[0x200 + 2 * chooseB(x, R + 2)] ^ 553 | sBox[0x200 + 2 * chooseB(x, R + 3) + 1]; 554 | 555 | return new Uint32Array([toReturn])[0]; 556 | } 557 | , xorBuffers = function xorBuffers(a, b) { 558 | 559 | var res = [] 560 | , index = 0; 561 | 562 | if (a && 563 | b && 564 | utils.isAnArray(a) && 565 | utils.isAnArray(b) && 566 | a.length !== b.length) { 567 | 568 | throw 'Buffer length must be equal'; 569 | } 570 | a = new Uint8Array(a); 571 | b = new Uint8Array(b); 572 | 573 | for (index = 0; index < a.length; index += 1) { 574 | 575 | res[index] = (a[index] ^ b[index]) & 0xFF; 576 | } 577 | 578 | return new Uint8Array(res); 579 | } 580 | , makeKey = function makeKey(aKey) { 581 | 582 | if (aKey && 583 | utils.isAnArray(aKey)) { 584 | 585 | var keyLenght = aKey.length 586 | , tmpKey = [] 587 | , index = 0 588 | , nValue 589 | , limitedKey 590 | , k64Cnt = keyLenght / 8 591 | , subkeyCnt = ROUND_SUBKEYS + 2 * ROUNDS 592 | , k32e = [] 593 | , k32o = [] 594 | , sBoxKey = [] 595 | , i 596 | , j 597 | , offset = 0 598 | , q 599 | , A 600 | , B 601 | , subKeys = [] 602 | , lB0 603 | , lB1 604 | , lB2 605 | , lB3 606 | , sBox = [] 607 | , k0 608 | , k1 609 | , k2 610 | , k3; 611 | if (keyLenght < 8 || 612 | keyLenght > 8 && keyLenght < 16 || 613 | keyLenght > 16 && keyLenght < 24 || 614 | keyLenght > 24 && keyLenght < 32) { 615 | 616 | for (index = 0; index < aKey.length + (8 - aKey.length); index += 1) { 617 | 618 | nValue = aKey[index]; 619 | if (nValue !== undefined) { 620 | 621 | tmpKey.push(nValue); 622 | } else { 623 | 624 | tmpKey.push(0x00); 625 | } 626 | } 627 | aKey = tmpKey; 628 | } else if (keyLenght > 32) { 629 | 630 | limitedKey = []; 631 | for (index = 0; index < 32; index += 1) { 632 | 633 | limitedKey.push(aKey[index]); 634 | } 635 | aKey = limitedKey; 636 | } 637 | aKey = new Uint8Array(aKey); 638 | keyLenght = aKey.length; 639 | for (i = 0, j = k64Cnt - 1; i < 4 && offset < keyLenght; i += 1, j -= 1) { 640 | 641 | /*eslint-disable no-plusplus*/ 642 | k32e[i] = aKey[offset++] & 0xFF | (aKey[offset++] & 0xFF) << 8 | (aKey[offset++] & 0xFF) << 16 | (aKey[offset++] & 0xFF) << 24; 643 | k32o[i] = aKey[offset++] & 0xFF | (aKey[offset++] & 0xFF) << 8 | (aKey[offset++] & 0xFF) << 16 | (aKey[offset++] & 0xFF) << 24; 644 | /*eslint-enable no-plusplus*/ 645 | sBoxKey[j] = rsMDSEncode(k32e[i], k32o[i]); 646 | } 647 | for (i = q = 0; i < subkeyCnt / 2; i += 1, q += SK_STEP) { 648 | 649 | A = f32(k64Cnt, q, k32e); 650 | B = f32(k64Cnt, q + SK_BUMP, k32o); 651 | B = B << 8 | B >>> 24; 652 | A += B; 653 | subKeys[2 * i] = A; 654 | A += B; 655 | subKeys[2 * i + 1] = A << SK_ROTL | A >>> 32 - SK_ROTL; 656 | } 657 | k0 = sBoxKey[0]; 658 | k1 = sBoxKey[1]; 659 | k2 = sBoxKey[2]; 660 | k3 = sBoxKey[3]; 661 | for (i = 0; i < 256; i += 1) { 662 | 663 | lB0 = lB1 = lB2 = lB3 = i; 664 | switch (k64Cnt & 3) { 665 | 666 | case 1: 667 | sBox[2 * i] = MDS[0][P[P_01][lB0] & 0xFF ^ b0(k0)]; 668 | sBox[2 * i + 1] = MDS[1][P[P_11][lB1] & 0xFF ^ b1(k0)]; 669 | sBox[0x200 + 2 * i] = MDS[2][P[P_21][lB2] & 0xFF ^ b2(k0)]; 670 | sBox[0x200 + 2 * i + 1] = MDS[3][P[P_31][lB3] & 0xFF ^ b3(k0)]; 671 | break; 672 | 673 | case 0: 674 | lB0 = P[P_04][lB0] & 0xFF ^ b0(k3); 675 | lB1 = P[P_14][lB1] & 0xFF ^ b1(k3); 676 | lB2 = P[P_24][lB2] & 0xFF ^ b2(k3); 677 | lB3 = P[P_34][lB3] & 0xFF ^ b3(k3); 678 | /* falls through */ 679 | 680 | case 3: 681 | lB0 = P[P_03][lB0] & 0xFF ^ b0(k2); 682 | lB1 = P[P_13][lB1] & 0xFF ^ b1(k2); 683 | lB2 = P[P_23][lB2] & 0xFF ^ b2(k2); 684 | lB3 = P[P_33][lB3] & 0xFF ^ b3(k2); 685 | /* falls through */ 686 | 687 | case 2: 688 | sBox[2 * i] = MDS[0][P[P_01][P[P_02][lB0] & 0xFF ^ b0(k1)] & 0xFF ^ b0(k0)]; 689 | sBox[2 * i + 1] = MDS[1][P[P_11][P[P_12][lB1] & 0xFF ^ b1(k1)] & 0xFF ^ b1(k0)]; 690 | sBox[0x200 + 2 * i] = MDS[2][P[P_21][P[P_22][lB2] & 0xFF ^ b2(k1)] & 0xFF ^ b2(k0)]; 691 | sBox[0x200 + 2 * i + 1] = MDS[3][P[P_31][P[P_32][lB3] & 0xFF ^ b3(k1)] & 0xFF ^ b3(k0)]; 692 | break; 693 | 694 | default: 695 | } 696 | } 697 | 698 | return [sBox, subKeys]; 699 | } 700 | 701 | throw 'key passed is undefined or not an array'; 702 | } 703 | , blockEncrypt = function blockEncrypt(input, inOffset, sessionKey) { 704 | 705 | if (input && 706 | sessionKey && 707 | utils.isAnArray(sessionKey) && 708 | utils.isAnArray(input)) { 709 | 710 | input = new Uint8Array(input); 711 | var sBox = sessionKey[0] 712 | , sKey = sessionKey[1] 713 | 714 | /*eslint-disable no-plusplus*/ 715 | , x0 = input[inOffset++] & 0xFF | 716 | (input[inOffset++] & 0xFF) << 8 | 717 | (input[inOffset++] & 0xFF) << 16 | 718 | (input[inOffset++] & 0xFF) << 24 719 | 720 | , x1 = input[inOffset++] & 0xFF | 721 | (input[inOffset++] & 0xFF) << 8 | 722 | (input[inOffset++] & 0xFF) << 16 | 723 | (input[inOffset++] & 0xFF) << 24 724 | 725 | , x2 = input[inOffset++] & 0xFF | 726 | (input[inOffset++] & 0xFF) << 8 | 727 | (input[inOffset++] & 0xFF) << 16 | 728 | (input[inOffset++] & 0xFF) << 24 729 | 730 | , x3 = input[inOffset++] & 0xFF | 731 | (input[inOffset++] & 0xFF) << 8 | 732 | (input[inOffset++] & 0xFF) << 16 | 733 | (input[inOffset++] & 0xFF) << 24 734 | /*eslint-enable no-plusplus*/ 735 | 736 | , t0 737 | , t1 738 | , k = ROUND_SUBKEYS 739 | , R = 0; 740 | 741 | x0 ^= sKey[INPUT_WHITEN]; 742 | x1 ^= sKey[INPUT_WHITEN + 1]; 743 | x2 ^= sKey[INPUT_WHITEN + 2]; 744 | x3 ^= sKey[INPUT_WHITEN + 3]; 745 | for (R = 0; R < ROUNDS; R += 2) { 746 | 747 | t0 = fe32(sBox, x0, 0); 748 | t1 = fe32(sBox, x1, 3); 749 | /*eslint-disable no-plusplus*/ 750 | x2 ^= t0 + t1 + sKey[k++]; 751 | /*eslint-enable no-plusplus*/ 752 | x2 = x2 >>> 1 | x2 << 31; 753 | x3 = x3 << 1 | x3 >>> 31; 754 | /*eslint-disable no-plusplus*/ 755 | x3 ^= t0 + 2 * t1 + sKey[k++]; 756 | /*eslint-enable no-plusplus*/ 757 | 758 | t0 = fe32(sBox, x2, 0); 759 | t1 = fe32(sBox, x3, 3); 760 | /*eslint-disable no-plusplus*/ 761 | x0 ^= t0 + t1 + sKey[k++]; 762 | /*eslint-enable no-plusplus*/ 763 | x0 = x0 >>> 1 | x0 << 31; 764 | x1 = x1 << 1 | x1 >>> 31; 765 | /*eslint-disable no-plusplus*/ 766 | x1 ^= t0 + 2 * t1 + sKey[k++]; 767 | /*eslint-enable no-plusplus*/ 768 | } 769 | 770 | x2 ^= sKey[OUTPUT_WHITEN]; 771 | x3 ^= sKey[OUTPUT_WHITEN + 1]; 772 | x0 ^= sKey[OUTPUT_WHITEN + 2]; 773 | x1 ^= sKey[OUTPUT_WHITEN + 3]; 774 | 775 | return new Uint8Array([x2, x2 >>> 8, x2 >>> 16, x2 >>> 24, 776 | x3, x3 >>> 8, x3 >>> 16, x3 >>> 24, 777 | x0, x0 >>> 8, x0 >>> 16, x0 >>> 24, 778 | x1, x1 >>> 8, x1 >>> 16, x1 >>> 24]); 779 | } 780 | 781 | throw 'input block is not an array or sessionKey is incorrect'; 782 | } 783 | , blockDecrypt = function blockDecrypt(input, inOffset, sessionKey) { 784 | 785 | if (input && 786 | sessionKey && 787 | utils.isAnArray(sessionKey) && 788 | utils.isAnArray(input)) { 789 | 790 | var sBox = sessionKey[0] 791 | , sKey = sessionKey[1] 792 | 793 | /*eslint-disable no-plusplus*/ 794 | , x2 = input[inOffset++] & 0xFF | 795 | (input[inOffset++] & 0xFF) << 8 | 796 | (input[inOffset++] & 0xFF) << 16 | 797 | (input[inOffset++] & 0xFF) << 24 798 | 799 | , x3 = input[inOffset++] & 0xFF | 800 | (input[inOffset++] & 0xFF) << 8 | 801 | (input[inOffset++] & 0xFF) << 16 | 802 | (input[inOffset++] & 0xFF) << 24 803 | 804 | , x0 = input[inOffset++] & 0xFF | 805 | (input[inOffset++] & 0xFF) << 8 | 806 | (input[inOffset++] & 0xFF) << 16 | 807 | (input[inOffset++] & 0xFF) << 24 808 | 809 | , x1 = input[inOffset++] & 0xFF | 810 | (input[inOffset++] & 0xFF) << 8 | 811 | (input[inOffset++] & 0xFF) << 16 | 812 | (input[inOffset++] & 0xFF) << 24 813 | /*eslint-enable no-plusplus*/ 814 | 815 | , k = ROUND_SUBKEYS + 2 * ROUNDS - 1 816 | , t0 817 | , t1 818 | , R = 0; 819 | 820 | x2 ^= sKey[OUTPUT_WHITEN]; 821 | x3 ^= sKey[OUTPUT_WHITEN + 1]; 822 | x0 ^= sKey[OUTPUT_WHITEN + 2]; 823 | x1 ^= sKey[OUTPUT_WHITEN + 3]; 824 | for (R = 0; R < ROUNDS; R += 2) { 825 | 826 | t0 = fe32(sBox, x2, 0); 827 | t1 = fe32(sBox, x3, 3); 828 | /*eslint-disable no-plusplus*/ 829 | x1 ^= t0 + 2 * t1 + sKey[k--]; 830 | /*eslint-enable no-plusplus*/ 831 | x1 = x1 >>> 1 | x1 << 31; 832 | x0 = x0 << 1 | x0 >>> 31; 833 | /*eslint-disable no-plusplus*/ 834 | x0 ^= t0 + t1 + sKey[k--]; 835 | /*eslint-enable no-plusplus*/ 836 | 837 | t0 = fe32(sBox, x0, 0); 838 | t1 = fe32(sBox, x1, 3); 839 | /*eslint-disable no-plusplus*/ 840 | x3 ^= t0 + 2 * t1 + sKey[k--]; 841 | /*eslint-enable no-plusplus*/ 842 | x3 = x3 >>> 1 | x3 << 31; 843 | x2 = x2 << 1 | x2 >>> 31; 844 | /*eslint-disable no-plusplus*/ 845 | x2 ^= t0 + t1 + sKey[k--]; 846 | /*eslint-enable no-plusplus*/ 847 | } 848 | 849 | x0 ^= sKey[INPUT_WHITEN]; 850 | x1 ^= sKey[INPUT_WHITEN + 1]; 851 | x2 ^= sKey[INPUT_WHITEN + 2]; 852 | x3 ^= sKey[INPUT_WHITEN + 3]; 853 | 854 | return new Uint8Array([x0, x0 >>> 8, x0 >>> 16, x0 >>> 24, 855 | x1, x1 >>> 8, x1 >>> 16, x1 >>> 24, 856 | x2, x2 >>> 8, x2 >>> 16, x2 >>> 24, 857 | x3, x3 >>> 8, x3 >>> 16, x3 >>> 24]); 858 | } 859 | 860 | throw 'input block is not an array or sessionKey is incorrect'; 861 | } 862 | , encrypt = function encrypt(userKey, plainText) { 863 | var i 864 | , offset 865 | , ct = [] 866 | , tmpBlockEncrypt; 867 | 868 | if (utils.isAnArray(userKey) && 869 | utils.isAnArray(plainText)) { 870 | 871 | userKey = new Uint8Array(userKey); 872 | plainText = new Uint8Array(plainText); 873 | } else { 874 | 875 | throw 'Inputs must be an array'; 876 | } 877 | 878 | userKey = makeKey(userKey); 879 | 880 | for (offset = 0; offset < plainText.length; offset += 16) { 881 | 882 | tmpBlockEncrypt = blockEncrypt(plainText, offset, userKey); 883 | for (i = 0; i < tmpBlockEncrypt.length; i += 1) { 884 | 885 | ct.push(tmpBlockEncrypt[i]); 886 | } 887 | } 888 | 889 | return ct; 890 | } 891 | , decrypt = function decrypt(userKey, chiperText) { 892 | var i 893 | , offset 894 | , cpt = [] 895 | , tmpBlockDecrypt; 896 | 897 | if (utils.isAnArray(userKey) && 898 | utils.isAnArray(chiperText)) { 899 | 900 | userKey = new Uint8Array(userKey); 901 | chiperText = new Uint8Array(chiperText); 902 | } else { 903 | 904 | throw 'Inputs must be an array'; 905 | } 906 | userKey = makeKey(userKey); 907 | 908 | for (offset = 0; offset < chiperText.length; offset += 16) { 909 | 910 | tmpBlockDecrypt = blockDecrypt(chiperText, offset, userKey); 911 | for (i = 0; i < tmpBlockDecrypt.length; i += 1) { 912 | 913 | cpt.push(tmpBlockDecrypt[i]); 914 | } 915 | } 916 | 917 | return cpt; 918 | } 919 | , encryptCBC = function encryptCBC(userKey, plainText) { 920 | if (utils.isAnArray(userKey) && 921 | utils.isAnArray(plainText)) { 922 | 923 | userKey = new Uint8Array(userKey); 924 | plainText = new Uint8Array(plainText); 925 | } else { 926 | 927 | throw 'Inputs must be an array'; 928 | } 929 | userKey = makeKey(userKey); 930 | 931 | var result = [] 932 | , loops = plainText.length / BLOCK_SIZE 933 | , pos = 0 934 | , cBuffer = [] 935 | , buffer1 = [] 936 | , buffer2 = [] 937 | , vector = initializingVector 938 | , index = 0 939 | , secondIndex = 0 940 | , tmpCBuffer 941 | , nVal 942 | , position; 943 | 944 | for (; index < loops; index += 1) { 945 | 946 | cBuffer = plainText.subarray(pos, pos + BLOCK_SIZE); 947 | if (cBuffer.length < BLOCK_SIZE) { 948 | 949 | tmpCBuffer = []; 950 | for (paddingIndex = 0; paddingIndex < BLOCK_SIZE; paddingIndex += 1) { 951 | 952 | nVal = cBuffer[paddingIndex]; 953 | if (nVal !== undefined) { 954 | 955 | tmpCBuffer.push(nVal); 956 | } else { 957 | 958 | tmpCBuffer.push(0x00); 959 | } 960 | } 961 | cBuffer = tmpCBuffer; 962 | } 963 | buffer1 = xorBuffers(cBuffer, vector); 964 | buffer2 = blockEncrypt(buffer1, 0, userKey); 965 | 966 | for (secondIndex = pos; secondIndex < buffer2.length + pos; secondIndex += 1) { 967 | 968 | position = secondIndex - pos; 969 | if (buffer2[position] !== undefined) { 970 | 971 | result.splice(secondIndex, 0, buffer2[position]); 972 | } 973 | } 974 | vector = buffer2; 975 | pos += BLOCK_SIZE; 976 | } 977 | 978 | return result; 979 | } 980 | , decryptCBC = function decryptCBC(userKey, chiperText) { 981 | if (utils.isAnArray(userKey) && 982 | utils.isAnArray(chiperText)) { 983 | 984 | userKey = new Uint8Array(userKey); 985 | chiperText = new Uint8Array(chiperText); 986 | } else { 987 | 988 | throw 'Inputs must be an array'; 989 | } 990 | userKey = makeKey(userKey); 991 | 992 | var result = [] 993 | , loops = chiperText.length / BLOCK_SIZE 994 | , pos = 0 995 | , cBuffer = [] 996 | , buffer1 = [] 997 | , plain = [] 998 | , vector = initializingVector 999 | , index = 0 1000 | , secondIndex = 0 1001 | , tmpCBuffer 1002 | , nVal 1003 | , position; 1004 | 1005 | for (; index < loops; index += 1) { 1006 | 1007 | cBuffer = chiperText.subarray(pos, pos + BLOCK_SIZE); 1008 | if (cBuffer.length < BLOCK_SIZE) { 1009 | 1010 | tmpCBuffer = []; 1011 | for (paddingIndex = 0; paddingIndex < BLOCK_SIZE; paddingIndex += 1) { 1012 | 1013 | nVal = cBuffer[paddingIndex]; 1014 | if (nVal !== undefined) { 1015 | 1016 | tmpCBuffer.push(nVal); 1017 | } else { 1018 | 1019 | tmpCBuffer.push(0x00); 1020 | } 1021 | } 1022 | cBuffer = tmpCBuffer; 1023 | } 1024 | buffer1 = blockDecrypt(cBuffer, 0, userKey); 1025 | plain = xorBuffers(buffer1, vector); 1026 | 1027 | for (secondIndex = pos; secondIndex < plain.length + pos; secondIndex += 1) { 1028 | 1029 | position = secondIndex - pos; 1030 | if (plain[position] !== undefined) { 1031 | 1032 | result.splice(secondIndex, 0, plain[position]); 1033 | } 1034 | } 1035 | plain = []; 1036 | vector = cBuffer; 1037 | 1038 | pos += BLOCK_SIZE; 1039 | } 1040 | 1041 | return result; 1042 | }; 1043 | 1044 | if (!IV) { 1045 | 1046 | for (blockSizeIndex = 0; blockSizeIndex < BLOCK_SIZE; blockSizeIndex += 1) { 1047 | 1048 | initializingVector.push(rng.nextRange(0, 256)); 1049 | } 1050 | } else if (IV && 1051 | utils.isAnArray(IV) && 1052 | IV.length === BLOCK_SIZE) { 1053 | 1054 | initializingVector = new Uint8Array(IV); 1055 | } else if (IV && 1056 | utils.isAnArray(IV) && 1057 | IV.length < BLOCK_SIZE) { 1058 | 1059 | initialLength = IV.length; 1060 | for (paddingIndex = 0; paddingIndex < BLOCK_SIZE - initialLength; paddingIndex += 1) { 1061 | 1062 | IV.push(rng.nextRange(0, 256)); 1063 | } 1064 | initializingVector = new Uint8Array(IV); 1065 | } else if (IV && 1066 | utils.isAnArray(IV) && 1067 | IV.length > BLOCK_SIZE) { 1068 | 1069 | initializingVector = new Uint8Array(IV.slice(0, BLOCK_SIZE)); 1070 | } else if (!IV || 1071 | !utils.isAnArray(IV) || 1072 | (IV.length < 16 || IV.length > 16)) { 1073 | 1074 | throw 'Initlializing vector incorrect'; 1075 | } 1076 | /* eslint-enable no-bitwise*/ 1077 | initializingVector = new Uint8Array(initializingVector); 1078 | 1079 | return { 1080 | 1081 | 'equalsArray': utils.areEqual, 1082 | 'byteArrayToString': utils.UTF8ArrToStr, 1083 | 'stringToByteArray': utils.strToUTF8Arr, 1084 | 'encrypt': encrypt, 1085 | 'decrypt': decrypt, 1086 | 'encryptCBC': encryptCBC, 1087 | 'decryptCBC': decryptCBC 1088 | }; 1089 | }; 1090 | 1091 | }(typeof exports === 'undefined' ? this : exports)); 1092 | --------------------------------------------------------------------------------