encrypt.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { CompactEncrypt } from '../jwe/compact/encrypt.js';
  2. import { encoder } from '../lib/buffer_utils.js';
  3. import { ProduceJWT } from './produce.js';
  4. export class EncryptJWT extends ProduceJWT {
  5. setProtectedHeader(protectedHeader) {
  6. if (this._protectedHeader) {
  7. throw new TypeError('setProtectedHeader can only be called once');
  8. }
  9. this._protectedHeader = protectedHeader;
  10. return this;
  11. }
  12. setKeyManagementParameters(parameters) {
  13. if (this._keyManagementParameters) {
  14. throw new TypeError('setKeyManagementParameters can only be called once');
  15. }
  16. this._keyManagementParameters = parameters;
  17. return this;
  18. }
  19. setContentEncryptionKey(cek) {
  20. if (this._cek) {
  21. throw new TypeError('setContentEncryptionKey can only be called once');
  22. }
  23. this._cek = cek;
  24. return this;
  25. }
  26. setInitializationVector(iv) {
  27. if (this._iv) {
  28. throw new TypeError('setInitializationVector can only be called once');
  29. }
  30. this._iv = iv;
  31. return this;
  32. }
  33. replicateIssuerAsHeader() {
  34. this._replicateIssuerAsHeader = true;
  35. return this;
  36. }
  37. replicateSubjectAsHeader() {
  38. this._replicateSubjectAsHeader = true;
  39. return this;
  40. }
  41. replicateAudienceAsHeader() {
  42. this._replicateAudienceAsHeader = true;
  43. return this;
  44. }
  45. async encrypt(key, options) {
  46. const enc = new CompactEncrypt(encoder.encode(JSON.stringify(this._payload)));
  47. if (this._replicateIssuerAsHeader) {
  48. this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss };
  49. }
  50. if (this._replicateSubjectAsHeader) {
  51. this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub };
  52. }
  53. if (this._replicateAudienceAsHeader) {
  54. this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud };
  55. }
  56. enc.setProtectedHeader(this._protectedHeader);
  57. if (this._iv) {
  58. enc.setInitializationVector(this._iv);
  59. }
  60. if (this._cek) {
  61. enc.setContentEncryptionKey(this._cek);
  62. }
  63. if (this._keyManagementParameters) {
  64. enc.setKeyManagementParameters(this._keyManagementParameters);
  65. }
  66. return enc.encrypt(key, options);
  67. }
  68. }