PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/asmcrypto.js/src/rsa
Просмотр файла: rsa.js
import { BigNumber, is_big_number, Modulus } from '../bignum/bignum';
import { is_buffer, is_bytes, is_string, string_to_bytes } from '../utils';
import { IllegalStateError } from '../errors';
export function RSA(options) {
options = options || {};
this.key = null;
this.result = null;
this.reset(options);
}
export function RSA_reset(options) {
options = options || {};
this.result = null;
var key = options.key;
if (key !== undefined) {
if (key instanceof Array) {
var l = key.length;
if (l !== 2 && l !== 3 && l !== 8) throw new SyntaxError('unexpected key type');
var k = [];
k[0] = new Modulus(new BigNumber(key[0]));
k[1] = new BigNumber(key[1]);
if (l > 2) {
k[2] = new BigNumber(key[2]);
}
if (l > 3) {
k[3] = new Modulus(new BigNumber(key[3]));
k[4] = new Modulus(new BigNumber(key[4]));
k[5] = new BigNumber(key[5]);
k[6] = new BigNumber(key[6]);
k[7] = new BigNumber(key[7]);
}
this.key = k;
} else {
throw new TypeError('unexpected key type');
}
}
return this;
}
export function RSA_encrypt(data) {
if (!this.key) throw new IllegalStateError('no key is associated with the instance');
if (is_string(data)) data = string_to_bytes(data);
if (is_buffer(data)) data = new Uint8Array(data);
var msg;
if (is_bytes(data)) {
msg = new BigNumber(data);
} else if (is_big_number(data)) {
msg = data;
} else {
throw new TypeError('unexpected data type');
}
if (this.key[0].compare(msg) <= 0) throw new RangeError('data too large');
var m = this.key[0],
e = this.key[1];
var result = m.power(msg, e).toBytes();
var bytelen = (m.bitLength + 7) >> 3;
if (result.length < bytelen) {
var r = new Uint8Array(bytelen);
r.set(result, bytelen - result.length);
result = r;
}
this.result = result;
return this;
}
export function RSA_decrypt(data) {
if (!this.key) throw new IllegalStateError('no key is associated with the instance');
if (this.key.length < 3) throw new IllegalStateError("key isn't suitable for decription");
if (is_string(data)) data = string_to_bytes(data);
if (is_buffer(data)) data = new Uint8Array(data);
var msg;
if (is_bytes(data)) {
msg = new BigNumber(data);
} else if (is_big_number(data)) {
msg = data;
} else {
throw new TypeError('unexpected data type');
}
if (this.key[0].compare(msg) <= 0) throw new RangeError('data too large');
var result;
if (this.key.length > 3) {
var m = this.key[0],
p = this.key[3],
q = this.key[4],
dp = this.key[5],
dq = this.key[6],
u = this.key[7];
var x = p.power(msg, dp),
y = q.power(msg, dq);
var t = x.subtract(y);
while (t.sign < 0) t = t.add(p);
var h = p.reduce(u.multiply(t));
result = h
.multiply(q)
.add(y)
.clamp(m.bitLength)
.toBytes();
} else {
var m = this.key[0],
d = this.key[2];
result = m.power(msg, d).toBytes();
}
var bytelen = (m.bitLength + 7) >> 3;
if (result.length < bytelen) {
var r = new Uint8Array(bytelen);
r.set(result, bytelen - result.length);
result = r;
}
this.result = result;
return this;
}
var RSA_prototype = RSA.prototype;
RSA_prototype.reset = RSA_reset;
RSA_prototype.encrypt = RSA_encrypt;
RSA_prototype.decrypt = RSA_decrypt;
Выполнить команду
Для локальной разработки. Не используйте в интернете!