encryptByPrivateKey function

Uint8List encryptByPrivateKey(
  1. Uint8List data,
  2. RSAPublicKey publicKey,
  3. RSAPrivateKey privateKey
)

Implementation

Uint8List encryptByPrivateKey(
    Uint8List data, RSAPublicKey publicKey, RSAPrivateKey privateKey) {
  try {
    var keyParameter = () => PrivateKeyParameter<RSAPrivateKey>(privateKey);
    AsymmetricBlockCipher cipher = AsymmetricBlockCipher("RSA/PKCS1");
    cipher.reset();
    cipher.init(true, keyParameter());
    int index = 0;
    int strlength = data.length;
    final keysize = publicKey.modulus!.bitLength ~/ 8 - 11;
    final blocksize = publicKey.modulus!.bitLength ~/ 8;
    final numBlocks =
        (strlength ~/ keysize) + ((strlength % keysize != 0) ? 1 : 0);
    Uint8List list = Uint8List(blocksize * numBlocks);
    int count = 0;
    while (index < strlength) {
      Uint8List listtmp;
      if (index + keysize > strlength) {
        listtmp = data.sublist(index, strlength);
        index = strlength;
      } else {
        listtmp = data.sublist(index, index + keysize);
        index += keysize;
      }
      Uint8List encryptResult = cipher.process(listtmp);
      for (int v_i = 0; v_i < blocksize; v_i++) {
        list[count * blocksize + v_i] = encryptResult[v_i];
      }
      count += 1;
    }
    return list;
  } catch (e) {
    print(e.toString());
    rethrow;
  }
}