rsaEncrypt function

Future<Uint8List> rsaEncrypt(
  1. RSAPublicKey myPublic,
  2. Uint8List dataToEncrypt
)

Implementation

Future<Uint8List> rsaEncrypt(
    RSAPublicKey myPublic, Uint8List dataToEncrypt) async {
  var k = 256;
  if (dataToEncrypt.length > k - 2 * 32 - 2) {
    throw "wrong msg size";
  }
  List<int> label = [];
  var lHash = sha256.convert(label);
  List<int> em = List.filled(k, 0);

  var seedOffset = 1;
  var seedSize = 32;

  var dbOffset = 1 + 32;
  var dbSize = em.length - dbOffset;

  for (int i = 0; i < 32; i++) {
    em[dbOffset + i] = lHash.bytes[i];
  }
  var msgSize = dataToEncrypt.length;
  em[dbOffset + (dbSize - msgSize - 1)] = 1;

  var msgOffset = dbSize - msgSize;
  for (int i = 0; i < msgSize; i++) {
    em[dbOffset + msgOffset + i] = dataToEncrypt[i];
  }

  var rng = Random();
  for (int i = 0; i < 32; i++) {
    em[1 + i] = rng.nextInt(255);
  }

  mgf1XOR(em, dbOffset, dbSize, em, seedOffset, seedSize);
  mgf1XOR(em, seedOffset, seedSize, em, dbOffset, dbSize);
  var m = bytesToBigInt(em);
  var c = encrypt(myPublic, m);
  var result = fillBytes(c, k);

  return Uint8List.fromList(result);
}