public byte[] OaepDecrypt(byte[] cipherText, TpmAlgId hashAlg, byte[] encodingParms) { byte[] zeroTermEncoding = GetLabel(encodingParms); BigInteger cipher = FromBigEndian(cipherText); BigInteger plain = BigInteger.ModPow(cipher, D, N); byte[] encMessage = ToBigEndian(plain, KeySize - 1); byte[] message; // Hack - be robust to leading zeros while (true) { bool decodeOk = CryptoEncoders.OaepDecode(encMessage, zeroTermEncoding, hashAlg, out message); if (decodeOk) { break; } encMessage = Globs.AddZeroToBeginning(encMessage); } return(message); }