pad-ansix923.js 805 B

123456789101112131415161718192021222324252627282930313233
  1. /**
  2. * ANSI X.923 padding strategy.
  3. */
  4. export const AnsiX923 = {
  5. pad(data, blockSize) {
  6. const _data = data;
  7. // Shortcuts
  8. const dataSigBytes = _data.sigBytes;
  9. const blockSizeBytes = blockSize * 4;
  10. // Count padding bytes
  11. const nPaddingBytes = blockSizeBytes - (dataSigBytes % blockSizeBytes);
  12. // Compute last byte position
  13. const lastBytePos = dataSigBytes + nPaddingBytes - 1;
  14. // Pad
  15. _data.clamp();
  16. _data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
  17. _data.sigBytes += nPaddingBytes;
  18. },
  19. unpad(data) {
  20. const _data = data;
  21. // Get number of padding bytes from last byte
  22. const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;
  23. // Remove padding
  24. _data.sigBytes -= nPaddingBytes;
  25. },
  26. };