rsaes.js 930 B

123456789101112131415161718192021222324
  1. import { checkEncCryptoKey } from './crypto_key.js';
  2. import { checkKeyLength } from './signing.js';
  3. import { JOSENotSupported } from '../util/errors.js';
  4. const subtleAlgorithm = (alg) => {
  5. switch (alg) {
  6. case 'RSA-OAEP':
  7. case 'RSA-OAEP-256':
  8. case 'RSA-OAEP-384':
  9. case 'RSA-OAEP-512':
  10. return 'RSA-OAEP';
  11. default:
  12. throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
  13. }
  14. };
  15. export async function encrypt(alg, key, cek) {
  16. checkEncCryptoKey(key, alg, 'encrypt');
  17. checkKeyLength(alg, key);
  18. return new Uint8Array(await crypto.subtle.encrypt(subtleAlgorithm(alg), key, cek));
  19. }
  20. export async function decrypt(alg, key, encryptedKey) {
  21. checkEncCryptoKey(key, alg, 'decrypt');
  22. checkKeyLength(alg, key);
  23. return new Uint8Array(await crypto.subtle.decrypt(subtleAlgorithm(alg), key, encryptedKey));
  24. }