private void CheckTestCase(OcbBlockCipher encCipher, OcbBlockCipher decCipher, string testName, int macLengthBytes, byte[] P, byte[] C) { byte[] tag = Arrays.Copy(C, C.Length - macLengthBytes, macLengthBytes); { byte[] enc = new byte[encCipher.GetOutputSize(P.Length)]; int len = encCipher.ProcessBytes(P, 0, P.Length, enc, 0); len += encCipher.DoFinal(enc, len); if (enc.Length != len) { Fail("encryption reported incorrect length: " + testName); } if (!AreEqual(C, enc)) { Fail("incorrect encrypt in: " + testName); } if (!AreEqual(tag, encCipher.GetMac())) { Fail("getMac() not the same as the appended tag: " + testName); } } { byte[] dec = new byte[decCipher.GetOutputSize(C.Length)]; int len = decCipher.ProcessBytes(C, 0, C.Length, dec, 0); len += decCipher.DoFinal(dec, len); if (dec.Length != len) { Fail("decryption reported incorrect length: " + testName); } if (!AreEqual(P, dec)) { Fail("incorrect decrypt in: " + testName); } if (!AreEqual(tag, decCipher.GetMac())) { Fail("getMac() not the same as the appended tag: " + testName); } } }