bigint.js 825 B

12345678910111213141516171819202122232425262728293031323334
  1. export function modPow(b, e, m) {
  2. let r = 1n;
  3. b = b % m;
  4. while (e > 0n) {
  5. if ((e & 1n) === 1n) {
  6. r = (r * b) % m;
  7. }
  8. e = e >> 1n;
  9. b = (b * b) % m;
  10. }
  11. return r;
  12. }
  13. export function bigIntToU8Array(bigint, padLength=0) {
  14. let hex = bigint.toString(16);
  15. if (padLength === 0) {
  16. padLength = Math.ceil(hex.length / 2);
  17. }
  18. hex = hex.padStart(padLength * 2, '0');
  19. const length = hex.length / 2;
  20. const arr = new Uint8Array(length);
  21. for (let i = 0; i < length; i++) {
  22. arr[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
  23. }
  24. return arr;
  25. }
  26. export function u8ArrayToBigInt(arr) {
  27. let hex = '0x';
  28. for (let i = 0; i < arr.length; i++) {
  29. hex += arr[i].toString(16).padStart(2, '0');
  30. }
  31. return BigInt(hex);
  32. }