| 123456789101112131415161718192021222324252627282930313233343536 |
- /**
- * Output Feedback block mode.
- */
- import {
- BlockCipherMode,
- } from './cipher-core.js';
- export class OFB extends BlockCipherMode {
- }
- OFB.Encryptor = class extends OFB {
- processBlock(words, offset) {
- const _words = words;
- // Shortcuts
- const cipher = this._cipher;
- const { blockSize } = cipher;
- const iv = this._iv;
- let keystream = this._keystream;
- // Generate keystream
- if (iv) {
- this._keystream = iv.slice(0);
- keystream = this._keystream;
- // Remove IV for subsequent blocks
- this._iv = undefined;
- }
- cipher.encryptBlock(keystream, 0);
- // Encrypt
- for (let i = 0; i < blockSize; i += 1) {
- _words[offset + i] ^= keystream[i];
- }
- }
- };
- OFB.Decryptor = OFB.Encryptor;
|