mirror of
https://github.com/openpgpjs/openpgpjs.git
synced 2025-06-19 04:36:39 +00:00

Also, when generating RSA keys in JS, generate them with p < q, as per the spec. Also, when generating RSA keys using Web Crypto or Node crypto, swap the generated p and q around, so that will satisfy p < q in most browsers (but not old Microsoft Edge, 50% of the time) and so that we can use the generated u coefficient (p^-1 mod q in OpenPGP, q^-1 mod p in RFC3447). Then, when signing and verifying, swap p and q again, so that the key hopefully satisfies Safari's requirement that p > q, and so that we can keep using u again.
65 lines
2.0 KiB
JavaScript
65 lines
2.0 KiB
JavaScript
/**
|
|
* @fileoverview Old browser polyfills
|
|
* All are listed as dev dependencies because Node does not need them
|
|
* and for browser babel will take care of it
|
|
* @requires util
|
|
* @module polyfills
|
|
*/
|
|
|
|
import util from './util';
|
|
|
|
if (typeof window !== 'undefined') {
|
|
/********************************************************************
|
|
* NOTE: This list is duplicated in Gruntfile.js, *
|
|
* so that these polyfills are only included in the compat bundle. *
|
|
********************************************************************/
|
|
|
|
try {
|
|
if (typeof window.fetch === 'undefined') {
|
|
require('whatwg-fetch');
|
|
}
|
|
if (typeof Array.prototype.fill === 'undefined') {
|
|
require('core-js/fn/array/fill');
|
|
}
|
|
if (typeof Array.prototype.find === 'undefined') {
|
|
require('core-js/fn/array/find');
|
|
}
|
|
if (typeof Array.prototype.includes === 'undefined') {
|
|
require('core-js/fn/array/includes');
|
|
}
|
|
if (typeof Array.from === 'undefined') {
|
|
require('core-js/fn/array/from');
|
|
}
|
|
|
|
// No if-statement on Promise because of IE11. Otherwise Promise is undefined in the service worker.
|
|
require('core-js/fn/promise');
|
|
|
|
if (typeof Uint8Array.from === 'undefined') {
|
|
require('core-js/fn/typed/uint8-array');
|
|
}
|
|
if (typeof String.prototype.repeat === 'undefined') {
|
|
require('core-js/fn/string/repeat');
|
|
}
|
|
if (typeof Symbol === 'undefined') {
|
|
require('core-js/fn/symbol');
|
|
}
|
|
if (typeof Object.assign === 'undefined') {
|
|
require('core-js/fn/object/assign');
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
|
|
if (typeof TransformStream === 'undefined') {
|
|
require('@mattiasbuelens/web-streams-polyfill/es6');
|
|
}
|
|
if (typeof TextEncoder === 'undefined') {
|
|
const nodeUtil = util.nodeRequire('util') || {};
|
|
global.TextEncoder = nodeUtil.TextEncoder;
|
|
global.TextDecoder = nodeUtil.TextDecoder;
|
|
}
|
|
if (typeof TextEncoder === 'undefined') {
|
|
const textEncoding = require('text-encoding-utf-8');
|
|
global.TextEncoder = textEncoding.TextEncoder;
|
|
global.TextDecoder = textEncoding.TextDecoder;
|
|
}
|