private void TestExceptions() { ChaCha20Poly1305 c = new ChaCha20Poly1305(); try { c = new ChaCha20Poly1305(new SipHash()); Fail("incorrect mac size not picked up"); } catch (ArgumentException e) { // expected } try { c.Init(false, new KeyParameter(new byte[32])); Fail("illegal argument not picked up"); } catch (ArgumentException e) { // expected } AeadTestUtilities.TestTampering(this, c, new AeadParameters(new KeyParameter(new byte[32]), 128, new byte[12])); byte[] P = Strings.ToByteArray("Hello world!"); byte[] buf = new byte[100]; c = new ChaCha20Poly1305(); AeadParameters aeadParameters = new AeadParameters(new KeyParameter(new byte[32]), 128, new byte[12]); c.Init(true, aeadParameters); c.ProcessBytes(P, 0, P.Length, buf, 0); c.DoFinal(buf, 0); try { c.DoFinal(buf, 0); Fail("no exception on reuse"); } catch (InvalidOperationException e) { IsTrue("wrong message", e.Message.Equals("ChaCha20Poly1305 cannot be reused for encryption")); } try { c.Init(true, aeadParameters); Fail("no exception on reuse"); } catch (ArgumentException e) { IsTrue("wrong message", e.Message.Equals("cannot reuse nonce for ChaCha20Poly1305 encryption")); } }
private void DoTestExceptions() { GcmBlockCipher gcm = new GcmBlockCipher(CreateAesEngine()); try { gcm = new GcmBlockCipher(new DesEngine()); Fail("incorrect block size not picked up"); } catch (ArgumentException) { // expected } try { gcm.Init(false, new KeyParameter(new byte[16])); Fail("illegal argument not picked up"); } catch (ArgumentException) { // expected } AeadTestUtilities.TestTampering(this, gcm, new AeadParameters(new KeyParameter(new byte[16]), 128, new byte[16])); byte[] P = Strings.ToByteArray("Hello world!"); byte[] buf = new byte[100]; GcmBlockCipher c = new GcmBlockCipher(CreateAesEngine()); AeadParameters aeadParameters = new AeadParameters(new KeyParameter(new byte[16]), 128, new byte[16]); c.Init(true, aeadParameters); c.ProcessBytes(P, 0, P.Length, buf, 0); c.DoFinal(buf, 0); try { c.DoFinal(buf, 0); Fail("no exception on reuse"); } catch (InvalidOperationException e) { IsTrue("wrong message", e.Message.Equals("GCM cipher cannot be reused for encryption")); } try { c.Init(true, aeadParameters); Fail("no exception on reuse"); } catch (ArgumentException e) { IsTrue("wrong message", e.Message.Equals("cannot reuse nonce for GCM encryption")); } }