PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/asmcrypto.js/src/rsa

Просмотр файла: genkey.js

/**
 * Generate RSA key pair
 *
 * @param bitlen desired modulus length, default is 2048
 * @param e public exponent, default is 65537
 */
import { RSA } from './rsa';
import { randomProbablePrime } from '../bignum/bignum';
import { BigNumber_extGCD } from '../bignum/extgcd';
import { BigNumber, is_big_number, Modulus } from '../bignum/bignum';
import { is_buffer, is_bytes, is_number, is_string, string_to_bytes } from '../utils';
import { IllegalArgumentError } from '../errors';

export function RSA_generateKey(bitlen, e) {
  bitlen = bitlen || 2048;
  e = e || 65537;

  if (bitlen < 512) throw new IllegalArgumentError('bit length is too small');

  if (is_string(e)) e = string_to_bytes(e);

  if (is_buffer(e)) e = new Uint8Array(e);

  if (is_bytes(e)) {
    e = new BigNumber(e);
  } else if (is_number(e)) {
    e = BigNumber.fromNumber(e);
  } else if (is_big_number(e)) {
    e = BigNumber.fromConfig(e);
  } else {
    throw new TypeError('unexpected exponent type');
  }

  if ((e.limbs[0] & 1) === 0) throw new IllegalArgumentError('exponent must be an odd number');

  var m, e, d, p, q, p1, q1, dp, dq, u;

  p = randomProbablePrime(bitlen >> 1, function(p) {
    p1 = BigNumber.fromConfig(p);
    p1.limbs[0] -= 1;
    return BigNumber_extGCD(p1, e).gcd.valueOf() == 1;
  });

  q = randomProbablePrime(bitlen - (bitlen >> 1), function(q) {
    m = new Modulus(p.multiply(q));
    if (!(m.limbs[((bitlen + 31) >> 5) - 1] >>> ((bitlen - 1) & 31))) return false;
    q1 = BigNumber.fromConfig(q);
    q1.limbs[0] -= 1;
    return BigNumber_extGCD(q1, e).gcd.valueOf() == 1;
  });

  d = new Modulus(p1.multiply(q1)).inverse(e);

  (dp = d.divide(p1).remainder), (dq = d.divide(q1).remainder);

  (p = new Modulus(p)), (q = new Modulus(q));

  var u = p.inverse(q);

  return [m, e, d, p, q, dp, dq, u];
}

RSA.generateKey = RSA_generateKey;

export default RSA;

Выполнить команду


Для локальной разработки. Не используйте в интернете!