Skip to content

Instantly share code, notes, and snippets.

@YellowAfterlife
Created January 21, 2015 20:03
Show Gist options
  • Save YellowAfterlife/6c28e241f4d2a4daaff6 to your computer and use it in GitHub Desktop.
Save YellowAfterlife/6c28e241f4d2a4daaff6 to your computer and use it in GitHub Desktop.
var HxOverrides = function() { };
HxOverrides.cca = function(s,index) {
var x = s.charCodeAt(index);
if(x != x) return undefined;
return x;
};
var Main = function() { };
Main.utf2ints = function(v,r) {
if(r == null) r = []; else r.splice(0,r.length);
var i = -1;
var l = v.length;
var c;
while(++i < l) {
c = HxOverrides.cca(v,i);
r.push(c & 255);
r.push(c >> 8 & 255);
}
return r;
};
var org = {};
org.ascrypt = {};
org.ascrypt.AES = function() { };
org.ascrypt.AES.encrypt = function(key,bytes,mode,iv) {
if(mode == null) mode = "ecb";
var kl = key.length;
if((kl != 16?kl != 24:false)?kl != 32:false) throw org.ascrypt.AES.ERROR_KEY;
if(bytes.length % 16 != 0) throw org.ascrypt.AES.ERROR_BLOCK;
var k = key.slice();
var b = bytes.slice();
org.ascrypt.AES.isrtab = [];
org.ascrypt.AES.isbox = [];
org.ascrypt.AES.xtime = [];
var _g = 0;
while(_g < 256) {
var i = _g++;
org.ascrypt.AES.isbox[org.ascrypt.AES.sbox[i]] = i;
}
var _g1 = 0;
while(_g1 < 16) {
var j = _g1++;
org.ascrypt.AES.isrtab[org.ascrypt.AES.srtab[j]] = j;
}
var _g2 = 0;
while(_g2 < 128) {
var k1 = _g2++;
org.ascrypt.AES.xtime[k1] = k1 << 1;
org.ascrypt.AES.xtime[128 + k1] = k1 << 1 ^ 27;
}
var kl1 = k.length;
var ks = 0;
var rcon = 1;
switch(kl1) {
case 16:
ks = 176;
break;
case 24:
ks = 208;
break;
case 32:
ks = 240;
break;
}
var i1 = kl1;
while(i1 < ks) {
var t = k.slice(i1 - 4,i1);
if(i1 % kl1 == 0) {
t = [org.ascrypt.AES.sbox[t[1]] ^ rcon,org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]],org.ascrypt.AES.sbox[t[0]]];
if((rcon <<= 1) >= 256) rcon ^= 283;
} else if(kl1 > 24?i1 % kl1 == 16:false) t = [org.ascrypt.AES.sbox[t[0]],org.ascrypt.AES.sbox[t[1]],org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]]];
var j1 = 0;
while(j1 < 4) {
k[i1 + j1] = k[i1 + j1 - kl1] ^ t[j1];
j1++;
}
i1 += 4;
}
var _g3 = mode.toLowerCase();
switch(_g3) {
case org.ascrypt.common.OperationMode.ECB:
var tmp;
var encrypt = org.ascrypt.AES.ie;
var r = [];
var l = b.length;
var i2 = 0;
while(i2 < l) {
r = r.concat(encrypt(k,b.slice(i2,i2 + 16)));
i2 += 16;
}
tmp = r;
return tmp;
case org.ascrypt.common.OperationMode.CBC:
var tmp1;
var encrypt1 = org.ascrypt.AES.ie;
var iv1 = iv.slice();
var r1 = [];
var l1 = b.length;
var i3 = 0;
while(i3 < l1) {
var _g4 = 0;
while(_g4 < 16) {
var j2 = _g4++;
b[i3 + j2] ^= iv1[j2];
}
r1 = r1.concat(encrypt1(k,b.slice(i3,i3 + 16)));
iv1 = r1.slice(i3,i3 + 16);
i3 += 16;
}
tmp1 = r1;
return tmp1;
case org.ascrypt.common.OperationMode.CTR:
var tmp2;
var encrypt2 = org.ascrypt.AES.ie;
var iv2 = iv.slice();
var bl = b.length;
var e = [];
var x = iv2.slice();
var i4 = 0;
while(i4 < bl) {
e = encrypt2(k,x);
var _g5 = 0;
while(_g5 < 16) {
var j3 = _g5++;
b[i4 + j3] ^= e[j3];
}
var l2 = 15;
while(l2 >= 0) {
--l2;
x[l2]++;
if(x[l2] != 0) break;
}
i4 += 16;
}
tmp2 = b;
return tmp2;
case org.ascrypt.common.OperationMode.NONE:
var tmp3;
var b1 = b.slice();
var i5 = 16;
var l3 = k.length;
var r2 = k.slice(0,16);
var _g6 = 0;
while(_g6 < 16) {
var i6 = _g6++;
b1[i6] ^= r2[i6];
}
while(i5 < l3 - 16) {
var b2 = org.ascrypt.AES.sbox;
var _g7 = 0;
while(_g7 < 16) {
var i7 = _g7++;
b1[i7] = b2[b1[i7]];
}
var t1 = org.ascrypt.AES.srtab;
var h = b1.slice();
var _g8 = 0;
while(_g8 < 16) {
var i8 = _g8++;
b1[i8] = h[t1[i8]];
}
var i9 = 0;
while(i9 < 16) {
var s0 = b1[i9];
var s1 = b1[i9 + 1];
var s2 = b1[i9 + 2];
var s3 = b1[i9 + 3];
var h1 = s0 ^ s1 ^ s2 ^ s3;
b1[i9] ^= h1 ^ org.ascrypt.AES.xtime[s0 ^ s1];
b1[i9 + 1] ^= h1 ^ org.ascrypt.AES.xtime[s1 ^ s2];
b1[i9 + 2] ^= h1 ^ org.ascrypt.AES.xtime[s2 ^ s3];
b1[i9 + 3] ^= h1 ^ org.ascrypt.AES.xtime[s3 ^ s0];
i9 += 4;
}
var r3 = k.slice(i5,i5 + 16);
var _g9 = 0;
while(_g9 < 16) {
var i10 = _g9++;
b1[i10] ^= r3[i10];
}
i5 += 16;
}
var b3 = org.ascrypt.AES.sbox;
var _g10 = 0;
while(_g10 < 16) {
var i11 = _g10++;
b1[i11] = b3[b1[i11]];
}
var t2 = org.ascrypt.AES.srtab;
var h2 = b1.slice();
var _g11 = 0;
while(_g11 < 16) {
var i12 = _g11++;
b1[i12] = h2[t2[i12]];
}
var r4 = k.slice(i5,i5 + 16);
var _g12 = 0;
while(_g12 < 16) {
var i13 = _g12++;
b1[i13] ^= r4[i13];
}
tmp3 = b1;
return tmp3;
default:
throw org.ascrypt.AES.ERROR_MODE;
}
};
org.ascrypt.AES.decrypt = function(key,bytes,mode,iv) {
if(mode == null) mode = "ecb";
var kl = key.length;
if((kl != 16?kl != 24:false)?kl != 32:false) throw org.ascrypt.AES.ERROR_KEY;
if(bytes.length % 16 != 0) throw org.ascrypt.AES.ERROR_BLOCK;
var k = key.slice();
var b = bytes.slice();
org.ascrypt.AES.isrtab = [];
org.ascrypt.AES.isbox = [];
org.ascrypt.AES.xtime = [];
var _g = 0;
while(_g < 256) {
var i = _g++;
org.ascrypt.AES.isbox[org.ascrypt.AES.sbox[i]] = i;
}
var _g1 = 0;
while(_g1 < 16) {
var j = _g1++;
org.ascrypt.AES.isrtab[org.ascrypt.AES.srtab[j]] = j;
}
var _g2 = 0;
while(_g2 < 128) {
var k1 = _g2++;
org.ascrypt.AES.xtime[k1] = k1 << 1;
org.ascrypt.AES.xtime[128 + k1] = k1 << 1 ^ 27;
}
var kl1 = k.length;
var ks = 0;
var rcon = 1;
switch(kl1) {
case 16:
ks = 176;
break;
case 24:
ks = 208;
break;
case 32:
ks = 240;
break;
}
var i1 = kl1;
while(i1 < ks) {
var t = k.slice(i1 - 4,i1);
if(i1 % kl1 == 0) {
t = [org.ascrypt.AES.sbox[t[1]] ^ rcon,org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]],org.ascrypt.AES.sbox[t[0]]];
if((rcon <<= 1) >= 256) rcon ^= 283;
} else if(kl1 > 24?i1 % kl1 == 16:false) t = [org.ascrypt.AES.sbox[t[0]],org.ascrypt.AES.sbox[t[1]],org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]]];
var j1 = 0;
while(j1 < 4) {
k[i1 + j1] = k[i1 + j1 - kl1] ^ t[j1];
j1++;
}
i1 += 4;
}
var _g3 = mode.toLowerCase();
switch(_g3) {
case org.ascrypt.common.OperationMode.ECB:
var tmp;
var decrypt = org.ascrypt.AES.id;
var r = [];
var l = b.length;
var i2 = 0;
while(i2 < l) {
r = r.concat(decrypt(k,b.slice(i2,i2 + 16)));
i2 += 16;
}
tmp = r;
return tmp;
case org.ascrypt.common.OperationMode.CBC:
var tmp1;
var decrypt1 = org.ascrypt.AES.id;
var iv1 = iv.slice();
var l1 = b.length;
var t1;
var r1 = [];
var i3 = 0;
while(i3 < l1) {
t1 = b.slice(i3,i3 + 16);
r1 = r1.concat(decrypt1(k,t1));
var _g4 = 0;
while(_g4 < 16) {
var j2 = _g4++;
r1[i3 + j2] ^= iv1[j2];
}
iv1 = t1.slice(0,16);
i3 += 16;
}
tmp1 = r1;
return tmp1;
case org.ascrypt.common.OperationMode.CTR:
var tmp2;
var encrypt = org.ascrypt.AES.ie;
var iv2 = iv.slice();
var bl = b.length;
var e = [];
var x = iv2.slice();
var i4 = 0;
while(i4 < bl) {
e = encrypt(k,x);
var _g5 = 0;
while(_g5 < 16) {
var j3 = _g5++;
b[i4 + j3] ^= e[j3];
}
var l2 = 15;
while(l2 >= 0) {
--l2;
x[l2]++;
if(x[l2] != 0) break;
}
i4 += 16;
}
tmp2 = b;
return tmp2;
case org.ascrypt.common.OperationMode.NONE:
var tmp3;
var b1 = b.slice();
var l3 = k.length;
var i5 = l3 - 32;
var r2 = k.slice(l3 - 16,l3);
var _g6 = 0;
while(_g6 < 16) {
var i6 = _g6++;
b1[i6] ^= r2[i6];
}
var t2 = org.ascrypt.AES.isrtab;
var h = b1.slice();
var _g7 = 0;
while(_g7 < 16) {
var i7 = _g7++;
b1[i7] = h[t2[i7]];
}
var b2 = org.ascrypt.AES.isbox;
var _g8 = 0;
while(_g8 < 16) {
var i8 = _g8++;
b1[i8] = b2[b1[i8]];
}
while(i5 >= 16) {
var r3 = k.slice(i5,i5 + 16);
var _g9 = 0;
while(_g9 < 16) {
var i9 = _g9++;
b1[i9] ^= r3[i9];
}
var i10 = 0;
while(i10 < 16) {
var s0 = b1[i10];
var s1 = b1[i10 + 1];
var s2 = b1[i10 + 2];
var s3 = b1[i10 + 3];
var h1 = s0 ^ s1 ^ s2 ^ s3;
var xh = org.ascrypt.AES.xtime[h1];
var h11 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s0 ^ s2]] ^ h1;
var h2 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s1 ^ s3]] ^ h1;
b1[i10] ^= h11 ^ org.ascrypt.AES.xtime[s0 ^ s1];
b1[i10 + 1] ^= h2 ^ org.ascrypt.AES.xtime[s1 ^ s2];
b1[i10 + 2] ^= h11 ^ org.ascrypt.AES.xtime[s2 ^ s3];
b1[i10 + 3] ^= h2 ^ org.ascrypt.AES.xtime[s3 ^ s0];
i10 += 4;
}
var t3 = org.ascrypt.AES.isrtab;
var h3 = b1.slice();
var _g10 = 0;
while(_g10 < 16) {
var i11 = _g10++;
b1[i11] = h3[t3[i11]];
}
var b3 = org.ascrypt.AES.isbox;
var _g11 = 0;
while(_g11 < 16) {
var i12 = _g11++;
b1[i12] = b3[b1[i12]];
}
i5 -= 16;
}
var r4 = k.slice(0,16);
var _g12 = 0;
while(_g12 < 16) {
var i13 = _g12++;
b1[i13] ^= r4[i13];
}
tmp3 = b1;
return tmp3;
default:
throw org.ascrypt.AES.ERROR_MODE;
}
};
org.ascrypt.AES.init = function() {
org.ascrypt.AES.isrtab = [];
org.ascrypt.AES.isbox = [];
org.ascrypt.AES.xtime = [];
var _g = 0;
while(_g < 256) {
var i = _g++;
org.ascrypt.AES.isbox[org.ascrypt.AES.sbox[i]] = i;
}
var _g1 = 0;
while(_g1 < 16) {
var j = _g1++;
org.ascrypt.AES.isrtab[org.ascrypt.AES.srtab[j]] = j;
}
var _g2 = 0;
while(_g2 < 128) {
var k = _g2++;
org.ascrypt.AES.xtime[k] = k << 1;
org.ascrypt.AES.xtime[128 + k] = k << 1 ^ 27;
}
};
org.ascrypt.AES.sb = function(s,b) {
var _g = 0;
while(_g < 16) {
var i = _g++;
s[i] = b[s[i]];
}
};
org.ascrypt.AES.ark = function(s,r) {
var _g = 0;
while(_g < 16) {
var i = _g++;
s[i] ^= r[i];
}
};
org.ascrypt.AES.sr = function(s,t) {
var h = s.slice();
var _g = 0;
while(_g < 16) {
var i = _g++;
s[i] = h[t[i]];
}
};
org.ascrypt.AES.ek = function(k) {
var kl = k.length;
var ks = 0;
var rcon = 1;
switch(kl) {
case 16:
ks = 176;
break;
case 24:
ks = 208;
break;
case 32:
ks = 240;
break;
}
var i = kl;
while(i < ks) {
var t = k.slice(i - 4,i);
if(i % kl == 0) {
t = [org.ascrypt.AES.sbox[t[1]] ^ rcon,org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]],org.ascrypt.AES.sbox[t[0]]];
if((rcon <<= 1) >= 256) rcon ^= 283;
} else if(kl > 24?i % kl == 16:false) t = [org.ascrypt.AES.sbox[t[0]],org.ascrypt.AES.sbox[t[1]],org.ascrypt.AES.sbox[t[2]],org.ascrypt.AES.sbox[t[3]]];
var j = 0;
while(j < 4) {
k[i + j] = k[i + j - kl] ^ t[j];
j++;
}
i += 4;
}
};
org.ascrypt.AES.ie = function(k,ob) {
var b = ob.slice();
var i = 16;
var l = k.length;
var r = k.slice(0,16);
var _g = 0;
while(_g < 16) {
var i1 = _g++;
b[i1] ^= r[i1];
}
while(i < l - 16) {
var b1 = org.ascrypt.AES.sbox;
var _g1 = 0;
while(_g1 < 16) {
var i2 = _g1++;
b[i2] = b1[b[i2]];
}
var t = org.ascrypt.AES.srtab;
var h = b.slice();
var _g2 = 0;
while(_g2 < 16) {
var i3 = _g2++;
b[i3] = h[t[i3]];
}
var i4 = 0;
while(i4 < 16) {
var s0 = b[i4];
var s1 = b[i4 + 1];
var s2 = b[i4 + 2];
var s3 = b[i4 + 3];
var h1 = s0 ^ s1 ^ s2 ^ s3;
b[i4] ^= h1 ^ org.ascrypt.AES.xtime[s0 ^ s1];
b[i4 + 1] ^= h1 ^ org.ascrypt.AES.xtime[s1 ^ s2];
b[i4 + 2] ^= h1 ^ org.ascrypt.AES.xtime[s2 ^ s3];
b[i4 + 3] ^= h1 ^ org.ascrypt.AES.xtime[s3 ^ s0];
i4 += 4;
}
var r1 = k.slice(i,i + 16);
var _g3 = 0;
while(_g3 < 16) {
var i5 = _g3++;
b[i5] ^= r1[i5];
}
i += 16;
}
var b2 = org.ascrypt.AES.sbox;
var _g4 = 0;
while(_g4 < 16) {
var i6 = _g4++;
b[i6] = b2[b[i6]];
}
var t1 = org.ascrypt.AES.srtab;
var h2 = b.slice();
var _g5 = 0;
while(_g5 < 16) {
var i7 = _g5++;
b[i7] = h2[t1[i7]];
}
var r2 = k.slice(i,i + 16);
var _g6 = 0;
while(_g6 < 16) {
var i8 = _g6++;
b[i8] ^= r2[i8];
}
return b;
};
org.ascrypt.AES.id = function(k,ob) {
var b = ob.slice();
var l = k.length;
var i = l - 32;
var r = k.slice(l - 16,l);
var _g = 0;
while(_g < 16) {
var i1 = _g++;
b[i1] ^= r[i1];
}
var t = org.ascrypt.AES.isrtab;
var h = b.slice();
var _g1 = 0;
while(_g1 < 16) {
var i2 = _g1++;
b[i2] = h[t[i2]];
}
var b1 = org.ascrypt.AES.isbox;
var _g2 = 0;
while(_g2 < 16) {
var i3 = _g2++;
b[i3] = b1[b[i3]];
}
while(i >= 16) {
var r1 = k.slice(i,i + 16);
var _g3 = 0;
while(_g3 < 16) {
var i4 = _g3++;
b[i4] ^= r1[i4];
}
var i5 = 0;
while(i5 < 16) {
var s0 = b[i5];
var s1 = b[i5 + 1];
var s2 = b[i5 + 2];
var s3 = b[i5 + 3];
var h1 = s0 ^ s1 ^ s2 ^ s3;
var xh = org.ascrypt.AES.xtime[h1];
var h11 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s0 ^ s2]] ^ h1;
var h2 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s1 ^ s3]] ^ h1;
b[i5] ^= h11 ^ org.ascrypt.AES.xtime[s0 ^ s1];
b[i5 + 1] ^= h2 ^ org.ascrypt.AES.xtime[s1 ^ s2];
b[i5 + 2] ^= h11 ^ org.ascrypt.AES.xtime[s2 ^ s3];
b[i5 + 3] ^= h2 ^ org.ascrypt.AES.xtime[s3 ^ s0];
i5 += 4;
}
var t1 = org.ascrypt.AES.isrtab;
var h3 = b.slice();
var _g4 = 0;
while(_g4 < 16) {
var i6 = _g4++;
b[i6] = h3[t1[i6]];
}
var b2 = org.ascrypt.AES.isbox;
var _g5 = 0;
while(_g5 < 16) {
var i7 = _g5++;
b[i7] = b2[b[i7]];
}
i -= 16;
}
var r2 = k.slice(0,16);
var _g6 = 0;
while(_g6 < 16) {
var i8 = _g6++;
b[i8] ^= r2[i8];
}
return b;
};
org.ascrypt.AES.mc = function(s) {
var i = 0;
while(i < 16) {
var s0 = s[i];
var s1 = s[i + 1];
var s2 = s[i + 2];
var s3 = s[i + 3];
var h = s0 ^ s1 ^ s2 ^ s3;
s[i] ^= h ^ org.ascrypt.AES.xtime[s0 ^ s1];
s[i + 1] ^= h ^ org.ascrypt.AES.xtime[s1 ^ s2];
s[i + 2] ^= h ^ org.ascrypt.AES.xtime[s2 ^ s3];
s[i + 3] ^= h ^ org.ascrypt.AES.xtime[s3 ^ s0];
i += 4;
}
};
org.ascrypt.AES.mci = function(s) {
var i = 0;
while(i < 16) {
var s0 = s[i];
var s1 = s[i + 1];
var s2 = s[i + 2];
var s3 = s[i + 3];
var h = s0 ^ s1 ^ s2 ^ s3;
var xh = org.ascrypt.AES.xtime[h];
var h1 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s0 ^ s2]] ^ h;
var h2 = org.ascrypt.AES.xtime[org.ascrypt.AES.xtime[xh ^ s1 ^ s3]] ^ h;
s[i] ^= h1 ^ org.ascrypt.AES.xtime[s0 ^ s1];
s[i + 1] ^= h2 ^ org.ascrypt.AES.xtime[s1 ^ s2];
s[i + 2] ^= h1 ^ org.ascrypt.AES.xtime[s2 ^ s3];
s[i + 3] ^= h2 ^ org.ascrypt.AES.xtime[s3 ^ s0];
i += 4;
}
};
org.ascrypt.AES.check = function(k,b) {
var kl = k.length;
if((kl != 16?kl != 24:false)?kl != 32:false) throw org.ascrypt.AES.ERROR_KEY;
if(b.length % 16 != 0) throw org.ascrypt.AES.ERROR_BLOCK;
};
org.ascrypt.common = {};
org.ascrypt.common.OperationMode = function() { };
org.ascrypt.utilities = {};
org.ascrypt.utilities.CBC = function() { };
org.ascrypt.utilities.CBC.encrypt = function(key,bytes,size,encrypt,iv) {
var r = [];
var l = bytes.length;
var i = 0;
while(i < l) {
var _g = 0;
while(_g < size) {
var j = _g++;
bytes[i + j] ^= iv[j];
}
r = r.concat(encrypt(key,bytes.slice(i,i + size)));
iv = r.slice(i,i + size);
i += size;
}
return r;
};
org.ascrypt.utilities.CBC.decrypt = function(key,bytes,size,decrypt,iv) {
var l = bytes.length;
var t;
var r = [];
var i = 0;
while(i < l) {
t = bytes.slice(i,i + size);
r = r.concat(decrypt(key,t));
var _g = 0;
while(_g < size) {
var j = _g++;
r[i + j] ^= iv[j];
}
iv = t.slice(0,size);
i += size;
}
return r;
};
org.ascrypt.utilities.CTR = function() { };
org.ascrypt.utilities.CTR.encrypt = function(key,bytes,size,encrypt,iv) {
var tmp;
var bl = bytes.length;
var e = [];
var x = iv.slice();
var i = 0;
while(i < bl) {
e = encrypt(key,x);
var _g = 0;
while(_g < size) {
var j = _g++;
bytes[i + j] ^= e[j];
}
var l = size - 1;
while(l >= 0) {
--l;
x[l]++;
if(x[l] != 0) break;
}
i += size;
}
tmp = bytes;
return tmp;
};
org.ascrypt.utilities.CTR.decrypt = function(key,bytes,size,encrypt,iv) {
var tmp;
var bl = bytes.length;
var e = [];
var x = iv.slice();
var i = 0;
while(i < bl) {
e = encrypt(key,x);
var _g = 0;
while(_g < size) {
var j = _g++;
bytes[i + j] ^= e[j];
}
var l = size - 1;
while(l >= 0) {
--l;
x[l]++;
if(x[l] != 0) break;
}
i += size;
}
tmp = bytes;
return tmp;
};
org.ascrypt.utilities.CTR.core = function(k,b,s,c,v) {
var bl = b.length;
var e = [];
var x = v.slice();
var i = 0;
while(i < bl) {
e = c(k,x);
var _g = 0;
while(_g < s) {
var j = _g++;
b[i + j] ^= e[j];
}
var l = s - 1;
while(l >= 0) {
--l;
x[l]++;
if(x[l] != 0) break;
}
i += s;
}
return b;
};
org.ascrypt.utilities.ECB = function() { };
org.ascrypt.utilities.ECB.encrypt = function(key,bytes,size,encrypt) {
var tmp;
var r = [];
var l = bytes.length;
var i = 0;
while(i < l) {
r = r.concat(encrypt(key,bytes.slice(i,i + size)));
i += size;
}
tmp = r;
return tmp;
};
org.ascrypt.utilities.ECB.decrypt = function(key,bytes,size,decrypt) {
var tmp;
var r = [];
var l = bytes.length;
var i = 0;
while(i < l) {
r = r.concat(decrypt(key,bytes.slice(i,i + size)));
i += size;
}
tmp = r;
return tmp;
};
org.ascrypt.utilities.ECB.core = function(k,b,s,c) {
var r = [];
var l = b.length;
var i = 0;
while(i < l) {
r = r.concat(c(k,b.slice(i,i + s)));
i += s;
}
return r;
};
org.ascrypt.AES.ERROR_KEY = "Invalid key size. Key size needs to be either 128, 192 or 256 bits.\n";
org.ascrypt.AES.ERROR_MODE = "Invalid mode of operation. Supported modes are ECB, CBC, CTR or NONE.\n";
org.ascrypt.AES.ERROR_BLOCK = "Invalid block size. Block size is fixed at 128 bits.\n";
org.ascrypt.AES.srtab = [0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11];
org.ascrypt.AES.sbox = [99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];
org.ascrypt.common.OperationMode.ECB = "ecb";
org.ascrypt.common.OperationMode.CBC = "cbc";
org.ascrypt.common.OperationMode.CTR = "ctr";
org.ascrypt.common.OperationMode.NONE = "none";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment