in src/ecdh.js [436:505]
AES_CBC_IV0_DECRYPT: function(K, C) { /* padding is removed */
var a = new ctx.AES(),
buff = [],
MM = [],
ipt = 0,
opt = 0,
M, ch, fin, bad, padlen, i;
a.init(ctx.AES.CBC, K.length, K, null);
if (C.length === 0) {
return [];
}
ch = C[ipt++];
fin = false;
for (;;) {
for (i = 0; i < 16; i++) {
buff[i] = ch;
if (ipt >= C.length) {
fin = true;
break;
} else {
ch = C[ipt++];
}
}
a.decrypt(buff);
if (fin) {
break;
}
for (i = 0; i < 16; i++) {
MM[opt++] = buff[i];
}
}
a.end();
bad = false;
padlen = buff[15];
if (i != 15 || padlen < 1 || padlen > 16) {
bad = true;
}
if (padlen >= 2 && padlen <= 16) {
for (i = 16 - padlen; i < 16; i++) {
if (buff[i] != padlen) {
bad = true;
}
}
}
if (!bad) {
for (i = 0; i < 16 - padlen; i++) {
MM[opt++] = buff[i];
}
}
M = [];
if (bad) {
return M;
}
for (i = 0; i < opt; i++) {
M[i] = MM[i];
}
return M;
},