40 lines
987 B
JavaScript
40 lines
987 B
JavaScript
import { BlockCipherMode } from "./cipher-core.mjs";
|
|
|
|
//#region src/mode-ofb.ts
|
|
/**
|
|
* OFB Encryptor/Decryptor (same operation)
|
|
*/
|
|
var OFBMode = class extends BlockCipherMode {
|
|
/** Keystream for OFB mode */
|
|
_keystream;
|
|
processBlock(words, offset) {
|
|
const _words = words;
|
|
const cipher = this._cipher;
|
|
const blockSize = cipher.blockSize;
|
|
const iv = this._iv;
|
|
let keystream = this._keystream;
|
|
if (iv) {
|
|
this._keystream = iv.slice(0);
|
|
keystream = this._keystream;
|
|
this._iv = void 0;
|
|
} else if (!keystream) {
|
|
this._keystream = new Array(blockSize).fill(0);
|
|
keystream = this._keystream;
|
|
}
|
|
cipher.encryptBlock(keystream, 0);
|
|
for (let i = 0; i < blockSize; i += 1) _words[offset + i] ^= keystream[i];
|
|
}
|
|
};
|
|
/**
|
|
* Output Feedback block mode.
|
|
*/
|
|
var OFB = class extends BlockCipherMode {
|
|
/** Keystream for OFB mode */
|
|
_keystream;
|
|
static Encryptor = OFBMode;
|
|
static Decryptor = OFBMode;
|
|
};
|
|
|
|
//#endregion
|
|
export { OFB };
|
|
//# sourceMappingURL=mode-ofb.mjs.map
|