private byte[] OAEPDecrypt(byte[] cipher) { var modLen = rsaParameters.Modulus.GetByteCount(); var msize = modLen - HashOutputSize - 1; var X = new byte[msize]; var Y = new byte[HashOutputSize]; Array.Copy(cipher, 0, X, 0, msize); Array.Copy(cipher, msize, Y, 0, Y.Length); using var sha256 = new SHA256C(); var r = XorArray(Y, sha256.ComputeHash(X)); sha256.Initialize(); var m = XorArray(X, sha256.ComputeHash(r)); var i = m.Length - 1; while (m[i] == 0) { --i; } return(m.Take(i + 1).ToArray()); }
private byte[] OAEPEncrypt(byte[] message) { var modLen = rsaParameters.Modulus.GetByteCount(); byte[] r = new byte[HashOutputSize]; RandomNumberGenerator.Fill(r); var msize = modLen - r.Length - 1; var m = new byte[msize]; m.Initialize(); Array.Copy(message, m, message.Length); using var sha256 = new SHA256C(); var X = XorArray(m, sha256.ComputeHash(r)); sha256.Initialize(); var Y = XorArray(r, sha256.ComputeHash(X)); return(X.Concat(Y).ToArray()); }