BlowfishECB constructor

BlowfishECB(
  1. Uint8List key
)

Creates an instance of the codec initialized with the given key.

Implementation

BlowfishECB(Uint8List key) {
  final keyLength = key.length;

  if (keyLength > 56) {
    throw FormatException('Max key length is 448 bits (56 bytes)', key);
  }

  var j = 0;
  for (var i = 0; i < _p.length; ++i) {
    var data = 0;
    for (var k = 0; k < 4; ++k) {
      data = ((data << 8) & 0xffffffff) | key[j];
      ++j;
      if (j >= keyLength) j = 0;
    }
    _p[i] ^= data;
  }

  final data = Uint8List(8);
  for (var i = 0; i < _p.length; i += 2) {
    BlowfishECBEncoder.encryptBlock(data, 0, _p, _s);
    _p[i] = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
    _p[i + 1] = (data[4] << 24) + (data[5] << 16) + (data[6] << 8) + data[7];
  }

  for (var i = 0; i < 4; ++i) {
    for (var j = 0; j < 256; j += 2) {
      BlowfishECBEncoder.encryptBlock(data, 0, _p, _s);
      _s[i][j] = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
      _s[i][j + 1] =
          (data[4] << 24) + (data[5] << 16) + (data[6] << 8) + data[7];
    }
  }
}