generateSignature method

  1. @override
PSSSignature generateSignature(
  1. Uint8List message
)
override

Sign the passed in message (usually the output of a hash function)

Implementation

@override
PSSSignature generateSignature(Uint8List message) {
  if (!_forSigning) {
    throw StateError('Signer was not initialised for signature generation');
  }

  _contentDigest.reset();
  _contentDigest.update(message, 0, message.length);
  _contentDigest.doFinal(_mDash, _mDash.length - _hLen - _sLen);

  if (_sLen != 0) {
    if (!_sSet) {
      _salt = _random.nextBytes(_sLen);
    }

    arrayCopy(_salt, 0, _mDash, _mDash.length - _sLen, _sLen);
  }

  var h = Uint8List(_hLen);

  _contentDigest.update(_mDash, 0, _mDash.length);

  _contentDigest.doFinal(h, 0);

  _block[_block.length - _sLen - 1 - _hLen - 1] = 0x01;
  arrayCopy(_salt, 0, _block, _block.length - _sLen - _hLen - 1, _sLen);

  var dbMask =
      _maskGeneratorFunction1(h, 0, h.length, _block.length - _hLen - 1);
  for (var i = 0; i != dbMask.length; i++) {
    _block[i] ^= dbMask[i];
  }

  arrayCopy(h, 0, _block, _block.length - _hLen - 1, _hLen);

  var firstByteMask = 0xff >> ((_block.length * 8) - _emBits);

  _block[0] &= firstByteMask;
  _block[_block.length - 1] = _trailer;

  var b = _cipher.process(_block);

  _clearBlock(_block);

  return PSSSignature(b);
}