diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-07-21 11:15:35 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-07-21 11:15:35 +0700 |
commit | e4f294fd80d11226b2fe0e0acd5dd2a59b929dbc (patch) | |
tree | d29cb025d6bd4ab0eea7c2578c50ae06e1c1f538 /crypto | |
parent | Asterisk the default coordinates for each curve (diff) | |
download | BouncyCastle.NET-ed25519-e4f294fd80d11226b2fe0e0acd5dd2a59b929dbc.tar.xz |
De-tabify
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/test/src/crypto/test/GCMTest.cs | 916 |
1 files changed, 458 insertions, 458 deletions
diff --git a/crypto/test/src/crypto/test/GCMTest.cs b/crypto/test/src/crypto/test/GCMTest.cs index 60630c6e4..4fe185be7 100644 --- a/crypto/test/src/crypto/test/GCMTest.cs +++ b/crypto/test/src/crypto/test/GCMTest.cs @@ -14,358 +14,358 @@ using Org.BouncyCastle.Utilities.Test; namespace Org.BouncyCastle.Crypto.Tests { - /// <summary> - /// Test vectors from "The Galois/Counter Mode of Operation (GCM)", McGrew/Viega, Appendix B - /// </summary> - [TestFixture] - public class GcmTest - : SimpleTest - { - private static readonly string[][] TestVectors = new string[][] - { - new string[] - { - "Test Case 1", - "00000000000000000000000000000000", - "", - "", - "000000000000000000000000", - "", - "58e2fccefa7e3061367f1d57a4e7455a", - }, - new string[] - { - "Test Case 2", - "00000000000000000000000000000000", - "00000000000000000000000000000000", - "", - "000000000000000000000000", - "0388dace60b6a392f328c2b971b2fe78", - "ab6e47d42cec13bdf53a67b21257bddf", - }, - new string[] - { - "Test Case 3", - "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b391aafd255", - "", - "cafebabefacedbaddecaf888", - "42831ec2217774244b7221b784d0d49c" - + "e3aa212f2c02a4e035c17e2329aca12e" - + "21d514b25466931c7d8f6a5aac84aa05" - + "1ba30b396a0aac973d58e091473f5985", - "4d5c2af327cd64a62cf35abd2ba6fab4", - }, - new string[] - { - "Test Case 4", - "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbaddecaf888", - "42831ec2217774244b7221b784d0d49c" - + "e3aa212f2c02a4e035c17e2329aca12e" - + "21d514b25466931c7d8f6a5aac84aa05" - + "1ba30b396a0aac973d58e091", - "5bc94fbc3221a5db94fae95ae7121a47", - }, - new string[] - { - "Test Case 5", - "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbad", - "61353b4c2806934a777ff51fa22a4755" - + "699b2a714fcdc6f83766e5f97b6c7423" - + "73806900e49f24b22b097544d4896b42" - + "4989b5e1ebac0f07c23f4598", - "3612d2e79e3b0785561be14aaca2fccb", - }, - new string[] - { - "Test Case 6", - "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "9313225df88406e555909c5aff5269aa" - + "6a7a9538534f7da1e4c303d2a318a728" - + "c3c0c95156809539fcf0e2429a6b5254" - + "16aedbf5a0de6a57a637b39b", - "8ce24998625615b603a033aca13fb894" - + "be9112a5c3a211a8ba262a3cca7e2ca7" - + "01e4a9a4fba43c90ccdcb281d48c7c6f" - + "d62875d2aca417034c34aee5", - "619cc5aefffe0bfa462af43c1699d050", - }, - new string[] - { - "Test Case 7", - "00000000000000000000000000000000" - + "0000000000000000", - "", - "", - "000000000000000000000000", - "", - "cd33b28ac773f74ba00ed1f312572435", - }, - new string[] - { - "Test Case 8", - "00000000000000000000000000000000" - + "0000000000000000", - "00000000000000000000000000000000", - "", - "000000000000000000000000", - "98e7247c07f0fe411c267e4384b0f600", - "2ff58d80033927ab8ef4d4587514f0fb", - }, - new string[] - { - "Test Case 9", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b391aafd255", - "", - "cafebabefacedbaddecaf888", - "3980ca0b3c00e841eb06fac4872a2757" - + "859e1ceaa6efd984628593b40ca1e19c" - + "7d773d00c144c525ac619d18c84a3f47" - + "18e2448b2fe324d9ccda2710acade256", - "9924a7c8587336bfb118024db8674a14", - }, - new string[] - { - "Test Case 10", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbaddecaf888", - "3980ca0b3c00e841eb06fac4872a2757" - + "859e1ceaa6efd984628593b40ca1e19c" - + "7d773d00c144c525ac619d18c84a3f47" - + "18e2448b2fe324d9ccda2710", - "2519498e80f1478f37ba55bd6d27618c", - }, - new string[] - { - "Test Case 11", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbad", - "0f10f599ae14a154ed24b36e25324db8" - + "c566632ef2bbb34f8347280fc4507057" - + "fddc29df9a471f75c66541d4d4dad1c9" - + "e93a19a58e8b473fa0f062f7", - "65dcc57fcf623a24094fcca40d3533f8", - }, - new string[] - { - "Test Case 12", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "9313225df88406e555909c5aff5269aa" - + "6a7a9538534f7da1e4c303d2a318a728" - + "c3c0c95156809539fcf0e2429a6b5254" - + "16aedbf5a0de6a57a637b39b", - "d27e88681ce3243c4830165a8fdcf9ff" - + "1de9a1d8e6b447ef6ef7b79828666e45" - + "81e79012af34ddd9e2f037589b292db3" - + "e67c036745fa22e7e9b7373b", - "dcf566ff291c25bbb8568fc3d376a6d9", - }, - new string[] - { - "Test Case 13", - "00000000000000000000000000000000" - + "00000000000000000000000000000000", - "", - "", - "000000000000000000000000", - "", - "530f8afbc74536b9a963b4f1c4cb738b", - }, - new string[] - { - "Test Case 14", - "00000000000000000000000000000000" - + "00000000000000000000000000000000", - "00000000000000000000000000000000", - "", - "000000000000000000000000", - "cea7403d4d606b6e074ec5d3baf39d18", - "d0d1c8a799996bf0265b98b5d48ab919", - }, - new string[] - { - "Test Case 15", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b391aafd255", - "", - "cafebabefacedbaddecaf888", - "522dc1f099567d07f47f37a32a84427d" - + "643a8cdcbfe5c0c97598a2bd2555d1aa" - + "8cb08e48590dbb3da7b08b1056828838" - + "c5f61e6393ba7a0abcc9f662898015ad", - "b094dac5d93471bdec1a502270e3cc6c", - }, - new string[] - { - "Test Case 16", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbaddecaf888", - "522dc1f099567d07f47f37a32a84427d" - + "643a8cdcbfe5c0c97598a2bd2555d1aa" - + "8cb08e48590dbb3da7b08b1056828838" - + "c5f61e6393ba7a0abcc9f662", - "76fc6ece0f4e1768cddf8853bb2d551b", - }, - new string[] - { - "Test Case 17", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "cafebabefacedbad", - "c3762df1ca787d32ae47c13bf19844cb" - + "af1ae14d0b976afac52ff7d79bba9de0" - + "feb582d33934a4f0954cc2363bc73f78" - + "62ac430e64abe499f47c9b1f", - "3a337dbf46a792c45e454913fe2ea8f2", - }, - new string[] - { - "Test Case 18", - "feffe9928665731c6d6a8f9467308308" - + "feffe9928665731c6d6a8f9467308308", - "d9313225f88406e5a55909c5aff5269a" - + "86a7a9531534f7da2e4c303d8a318a72" - + "1c3c0c95956809532fcf0e2449a6b525" - + "b16aedf5aa0de657ba637b39", - "feedfacedeadbeeffeedfacedeadbeef" - + "abaddad2", - "9313225df88406e555909c5aff5269aa" - + "6a7a9538534f7da1e4c303d2a318a728" - + "c3c0c95156809539fcf0e2429a6b5254" - + "16aedbf5a0de6a57a637b39b", - "5a8def2f0c9e53f1f75d7853659e2a20" - + "eeb2b22aafde6419a058ab4f6f746bf4" - + "0fc0c3b780f244452da3ebf1c5d82cde" - + "a2418997200ef82e44ae7e3f", - "a44a8266ee1c8eb0c8b5d4cf5ae9f19a", - }, - }; - - public override string Name - { - get { return "GCM"; } - } - - public override void PerformTest() - { - for (int i = 0; i < TestVectors.Length; ++i) - { - runTestCase(TestVectors[i]); - } - - randomTests(); - } - - private void runTestCase( - string[] testVector) - { - for (int macLength = 12; macLength <= 16; ++macLength) - { - runTestCase(testVector, macLength); - } - } - - private void runTestCase( - string[] testVector, - int macLength) - { - int pos = 0; - string testName = testVector[pos++]; - byte[] K = Hex.Decode(testVector[pos++]); - byte[] P = Hex.Decode(testVector[pos++]); - byte[] A = Hex.Decode(testVector[pos++]); - byte[] IV = Hex.Decode(testVector[pos++]); - byte[] C = Hex.Decode(testVector[pos++]); - - // For short MAC, take leading bytes - byte[] t = Hex.Decode(testVector[pos++]); - byte[] T = new byte[macLength]; - Array.Copy(t, T, T.Length); - - // Default multiplier + /// <summary> + /// Test vectors from "The Galois/Counter Mode of Operation (GCM)", McGrew/Viega, Appendix B + /// </summary> + [TestFixture] + public class GcmTest + : SimpleTest + { + private static readonly string[][] TestVectors = new string[][] + { + new string[] + { + "Test Case 1", + "00000000000000000000000000000000", + "", + "", + "000000000000000000000000", + "", + "58e2fccefa7e3061367f1d57a4e7455a", + }, + new string[] + { + "Test Case 2", + "00000000000000000000000000000000", + "00000000000000000000000000000000", + "", + "000000000000000000000000", + "0388dace60b6a392f328c2b971b2fe78", + "ab6e47d42cec13bdf53a67b21257bddf", + }, + new string[] + { + "Test Case 3", + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b391aafd255", + "", + "cafebabefacedbaddecaf888", + "42831ec2217774244b7221b784d0d49c" + + "e3aa212f2c02a4e035c17e2329aca12e" + + "21d514b25466931c7d8f6a5aac84aa05" + + "1ba30b396a0aac973d58e091473f5985", + "4d5c2af327cd64a62cf35abd2ba6fab4", + }, + new string[] + { + "Test Case 4", + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbaddecaf888", + "42831ec2217774244b7221b784d0d49c" + + "e3aa212f2c02a4e035c17e2329aca12e" + + "21d514b25466931c7d8f6a5aac84aa05" + + "1ba30b396a0aac973d58e091", + "5bc94fbc3221a5db94fae95ae7121a47", + }, + new string[] + { + "Test Case 5", + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbad", + "61353b4c2806934a777ff51fa22a4755" + + "699b2a714fcdc6f83766e5f97b6c7423" + + "73806900e49f24b22b097544d4896b42" + + "4989b5e1ebac0f07c23f4598", + "3612d2e79e3b0785561be14aaca2fccb", + }, + new string[] + { + "Test Case 6", + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "9313225df88406e555909c5aff5269aa" + + "6a7a9538534f7da1e4c303d2a318a728" + + "c3c0c95156809539fcf0e2429a6b5254" + + "16aedbf5a0de6a57a637b39b", + "8ce24998625615b603a033aca13fb894" + + "be9112a5c3a211a8ba262a3cca7e2ca7" + + "01e4a9a4fba43c90ccdcb281d48c7c6f" + + "d62875d2aca417034c34aee5", + "619cc5aefffe0bfa462af43c1699d050", + }, + new string[] + { + "Test Case 7", + "00000000000000000000000000000000" + + "0000000000000000", + "", + "", + "000000000000000000000000", + "", + "cd33b28ac773f74ba00ed1f312572435", + }, + new string[] + { + "Test Case 8", + "00000000000000000000000000000000" + + "0000000000000000", + "00000000000000000000000000000000", + "", + "000000000000000000000000", + "98e7247c07f0fe411c267e4384b0f600", + "2ff58d80033927ab8ef4d4587514f0fb", + }, + new string[] + { + "Test Case 9", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b391aafd255", + "", + "cafebabefacedbaddecaf888", + "3980ca0b3c00e841eb06fac4872a2757" + + "859e1ceaa6efd984628593b40ca1e19c" + + "7d773d00c144c525ac619d18c84a3f47" + + "18e2448b2fe324d9ccda2710acade256", + "9924a7c8587336bfb118024db8674a14", + }, + new string[] + { + "Test Case 10", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbaddecaf888", + "3980ca0b3c00e841eb06fac4872a2757" + + "859e1ceaa6efd984628593b40ca1e19c" + + "7d773d00c144c525ac619d18c84a3f47" + + "18e2448b2fe324d9ccda2710", + "2519498e80f1478f37ba55bd6d27618c", + }, + new string[] + { + "Test Case 11", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbad", + "0f10f599ae14a154ed24b36e25324db8" + + "c566632ef2bbb34f8347280fc4507057" + + "fddc29df9a471f75c66541d4d4dad1c9" + + "e93a19a58e8b473fa0f062f7", + "65dcc57fcf623a24094fcca40d3533f8", + }, + new string[] + { + "Test Case 12", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "9313225df88406e555909c5aff5269aa" + + "6a7a9538534f7da1e4c303d2a318a728" + + "c3c0c95156809539fcf0e2429a6b5254" + + "16aedbf5a0de6a57a637b39b", + "d27e88681ce3243c4830165a8fdcf9ff" + + "1de9a1d8e6b447ef6ef7b79828666e45" + + "81e79012af34ddd9e2f037589b292db3" + + "e67c036745fa22e7e9b7373b", + "dcf566ff291c25bbb8568fc3d376a6d9", + }, + new string[] + { + "Test Case 13", + "00000000000000000000000000000000" + + "00000000000000000000000000000000", + "", + "", + "000000000000000000000000", + "", + "530f8afbc74536b9a963b4f1c4cb738b", + }, + new string[] + { + "Test Case 14", + "00000000000000000000000000000000" + + "00000000000000000000000000000000", + "00000000000000000000000000000000", + "", + "000000000000000000000000", + "cea7403d4d606b6e074ec5d3baf39d18", + "d0d1c8a799996bf0265b98b5d48ab919", + }, + new string[] + { + "Test Case 15", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b391aafd255", + "", + "cafebabefacedbaddecaf888", + "522dc1f099567d07f47f37a32a84427d" + + "643a8cdcbfe5c0c97598a2bd2555d1aa" + + "8cb08e48590dbb3da7b08b1056828838" + + "c5f61e6393ba7a0abcc9f662898015ad", + "b094dac5d93471bdec1a502270e3cc6c", + }, + new string[] + { + "Test Case 16", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbaddecaf888", + "522dc1f099567d07f47f37a32a84427d" + + "643a8cdcbfe5c0c97598a2bd2555d1aa" + + "8cb08e48590dbb3da7b08b1056828838" + + "c5f61e6393ba7a0abcc9f662", + "76fc6ece0f4e1768cddf8853bb2d551b", + }, + new string[] + { + "Test Case 17", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "cafebabefacedbad", + "c3762df1ca787d32ae47c13bf19844cb" + + "af1ae14d0b976afac52ff7d79bba9de0" + + "feb582d33934a4f0954cc2363bc73f78" + + "62ac430e64abe499f47c9b1f", + "3a337dbf46a792c45e454913fe2ea8f2", + }, + new string[] + { + "Test Case 18", + "feffe9928665731c6d6a8f9467308308" + + "feffe9928665731c6d6a8f9467308308", + "d9313225f88406e5a55909c5aff5269a" + + "86a7a9531534f7da2e4c303d8a318a72" + + "1c3c0c95956809532fcf0e2449a6b525" + + "b16aedf5aa0de657ba637b39", + "feedfacedeadbeeffeedfacedeadbeef" + + "abaddad2", + "9313225df88406e555909c5aff5269aa" + + "6a7a9538534f7da1e4c303d2a318a728" + + "c3c0c95156809539fcf0e2429a6b5254" + + "16aedbf5a0de6a57a637b39b", + "5a8def2f0c9e53f1f75d7853659e2a20" + + "eeb2b22aafde6419a058ab4f6f746bf4" + + "0fc0c3b780f244452da3ebf1c5d82cde" + + "a2418997200ef82e44ae7e3f", + "a44a8266ee1c8eb0c8b5d4cf5ae9f19a", + }, + }; + + public override string Name + { + get { return "GCM"; } + } + + public override void PerformTest() + { + for (int i = 0; i < TestVectors.Length; ++i) + { + runTestCase(TestVectors[i]); + } + + randomTests(); + } + + private void runTestCase( + string[] testVector) + { + for (int macLength = 12; macLength <= 16; ++macLength) + { + runTestCase(testVector, macLength); + } + } + + private void runTestCase( + string[] testVector, + int macLength) + { + int pos = 0; + string testName = testVector[pos++]; + byte[] K = Hex.Decode(testVector[pos++]); + byte[] P = Hex.Decode(testVector[pos++]); + byte[] A = Hex.Decode(testVector[pos++]); + byte[] IV = Hex.Decode(testVector[pos++]); + byte[] C = Hex.Decode(testVector[pos++]); + + // For short MAC, take leading bytes + byte[] t = Hex.Decode(testVector[pos++]); + byte[] T = new byte[macLength]; + Array.Copy(t, T, T.Length); + + // Default multiplier runTestCase(null, null, testName, K, IV, A, P, C, T); runTestCase(new BasicGcmMultiplier(), new BasicGcmMultiplier(), testName, K, IV, A, P, C, T); runTestCase(new Tables8kGcmMultiplier(), new Tables8kGcmMultiplier(), testName, K, IV, A, P, C, T); runTestCase(new Tables64kGcmMultiplier(), new Tables64kGcmMultiplier(), testName, K, IV, A, P, C, T); - } + } private void runTestCase( - IGcmMultiplier encM, - IGcmMultiplier decM, - string testName, + IGcmMultiplier encM, + IGcmMultiplier decM, + string testName, byte[] K, byte[] IV, byte[] A, byte[] P, - byte[] C, - byte[] T) + byte[] C, + byte[] T) { byte[] fa = new byte[A.Length / 2]; byte[] la = new byte[A.Length - (A.Length / 2)]; @@ -391,7 +391,7 @@ namespace Org.BouncyCastle.Crypto.Tests { AeadParameters parameters = new AeadParameters(new KeyParameter(K), T.Length * 8, IV, A); GcmBlockCipher encCipher = initCipher(encM, true, parameters); - GcmBlockCipher decCipher = initCipher(decM, false, parameters); + GcmBlockCipher decCipher = initCipher(decM, false, parameters); checkTestCase(encCipher, decCipher, testName, SA, P, C, T); checkTestCase(encCipher, decCipher, testName + " (reused)", SA, P, C, T); @@ -403,119 +403,119 @@ namespace Org.BouncyCastle.Crypto.Tests checkTestCase(encCipher, decCipher, testName + " (key reuse)", SA, P, C, T); } - private GcmBlockCipher initCipher( - IGcmMultiplier m, - bool forEncryption, - AeadParameters parameters) - { - GcmBlockCipher c = new GcmBlockCipher(new AesFastEngine(), m); - c.Init(forEncryption, parameters); - return c; - } - - private void checkTestCase( - GcmBlockCipher encCipher, - GcmBlockCipher decCipher, - string testName, + private GcmBlockCipher initCipher( + IGcmMultiplier m, + bool forEncryption, + AeadParameters parameters) + { + GcmBlockCipher c = new GcmBlockCipher(new AesFastEngine(), m); + c.Init(forEncryption, parameters); + return c; + } + + private void checkTestCase( + GcmBlockCipher encCipher, + GcmBlockCipher decCipher, + string testName, byte[] SA, byte[] P, - byte[] C, - byte[] T) - { - byte[] enc = new byte[encCipher.GetOutputSize(P.Length)]; + byte[] C, + byte[] T) + { + byte[] enc = new byte[encCipher.GetOutputSize(P.Length)]; if (SA != null) { encCipher.ProcessAadBytes(SA, 0, SA.Length); } int len = encCipher.ProcessBytes(P, 0, P.Length, enc, 0); - len += encCipher.DoFinal(enc, len); + len += encCipher.DoFinal(enc, len); - if (enc.Length != len) - { + if (enc.Length != len) + { // Console.WriteLine("" + enc.Length + "/" + len); - Fail("encryption reported incorrect length: " + testName); - } + Fail("encryption reported incorrect length: " + testName); + } - byte[] mac = encCipher.GetMac(); + byte[] mac = encCipher.GetMac(); - byte[] data = new byte[P.Length]; - Array.Copy(enc, data, data.Length); - byte[] tail = new byte[enc.Length - P.Length]; - Array.Copy(enc, P.Length, tail, 0, tail.Length); + byte[] data = new byte[P.Length]; + Array.Copy(enc, data, data.Length); + byte[] tail = new byte[enc.Length - P.Length]; + Array.Copy(enc, P.Length, tail, 0, tail.Length); - if (!AreEqual(C, data)) - { - Fail("incorrect encrypt in: " + testName); - } + if (!AreEqual(C, data)) + { + Fail("incorrect encrypt in: " + testName); + } - if (!AreEqual(T, mac)) - { - Fail("GetMac() returned wrong mac in: " + testName); - } + if (!AreEqual(T, mac)) + { + Fail("GetMac() returned wrong mac in: " + testName); + } - if (!AreEqual(T, tail)) - { - Fail("stream contained wrong mac in: " + testName); - } + if (!AreEqual(T, tail)) + { + Fail("stream contained wrong mac in: " + testName); + } - byte[] dec = new byte[decCipher.GetOutputSize(enc.Length)]; + byte[] dec = new byte[decCipher.GetOutputSize(enc.Length)]; if (SA != null) { decCipher.ProcessAadBytes(SA, 0, SA.Length); } len = decCipher.ProcessBytes(enc, 0, enc.Length, dec, 0); - len += decCipher.DoFinal(dec, len); - mac = decCipher.GetMac(); + len += decCipher.DoFinal(dec, len); + mac = decCipher.GetMac(); - data = new byte[C.Length]; - Array.Copy(dec, data, data.Length); + data = new byte[C.Length]; + Array.Copy(dec, data, data.Length); - if (!AreEqual(P, data)) - { - Fail("incorrect decrypt in: " + testName); - } - } + if (!AreEqual(P, data)) + { + Fail("incorrect decrypt in: " + testName); + } + } private void randomTests() - { - SecureRandom srng = new SecureRandom(); - for (int i = 0; i < 10; ++i) - { + { + SecureRandom srng = new SecureRandom(); + for (int i = 0; i < 10; ++i) + { randomTest(srng, null); randomTest(srng, new BasicGcmMultiplier()); - randomTest(srng, new Tables8kGcmMultiplier()); + randomTest(srng, new Tables8kGcmMultiplier()); randomTest(srng, new Tables64kGcmMultiplier()); - } - } + } + } - private void randomTest( - SecureRandom srng, - IGcmMultiplier m) - { - int kLength = 16 + 8 * srng.Next(3); - byte[] K = new byte[kLength]; - srng.NextBytes(K); + private void randomTest( + SecureRandom srng, + IGcmMultiplier m) + { + int kLength = 16 + 8 * srng.Next(3); + byte[] K = new byte[kLength]; + srng.NextBytes(K); - int pLength = srng.Next(65536); - byte[] P = new byte[pLength]; - srng.NextBytes(P); + int pLength = srng.Next(65536); + byte[] P = new byte[pLength]; + srng.NextBytes(P); - int aLength = srng.Next(256); - byte[] A = new byte[aLength]; - srng.NextBytes(A); + int aLength = srng.Next(256); + byte[] A = new byte[aLength]; + srng.NextBytes(A); int saLength = srng.Next(256); byte[] SA = new byte[saLength]; srng.NextBytes(SA); - int ivLength = 1 + srng.Next(256); - byte[] IV = new byte[ivLength]; - srng.NextBytes(IV); + int ivLength = 1 + srng.Next(256); + byte[] IV = new byte[ivLength]; + srng.NextBytes(IV); - GcmBlockCipher cipher = new GcmBlockCipher(new AesFastEngine(), m); - AeadParameters parameters = new AeadParameters(new KeyParameter(K), 16 * 8, IV, A); - cipher.Init(true, parameters); - byte[] C = new byte[cipher.GetOutputSize(P.Length)]; + GcmBlockCipher cipher = new GcmBlockCipher(new AesFastEngine(), m); + AeadParameters parameters = new AeadParameters(new KeyParameter(K), 16 * 8, IV, A); + cipher.Init(true, parameters); + byte[] C = new byte[cipher.GetOutputSize(P.Length)]; int predicted = cipher.GetUpdateOutputSize(P.Length); int split = srng.Next(SA.Length + 1); @@ -530,22 +530,22 @@ namespace Org.BouncyCastle.Crypto.Tests len += cipher.DoFinal(C, len); - if (C.Length != len) - { - Fail("encryption reported incorrect length in randomised test"); - } + if (C.Length != len) + { + Fail("encryption reported incorrect length in randomised test"); + } - byte[] encT = cipher.GetMac(); - byte[] tail = new byte[C.Length - P.Length]; - Array.Copy(C, P.Length, tail, 0, tail.Length); + byte[] encT = cipher.GetMac(); + byte[] tail = new byte[C.Length - P.Length]; + Array.Copy(C, P.Length, tail, 0, tail.Length); - if (!AreEqual(encT, tail)) - { - Fail("stream contained wrong mac in randomised test"); - } + if (!AreEqual(encT, tail)) + { + Fail("stream contained wrong mac in randomised test"); + } - cipher.Init(false, parameters); - byte[] decP = new byte[cipher.GetOutputSize(C.Length)]; + cipher.Init(false, parameters); + byte[] decP = new byte[cipher.GetOutputSize(C.Length)]; predicted = cipher.GetUpdateOutputSize(C.Length); split = srng.Next(SA.Length + 1); @@ -560,30 +560,30 @@ namespace Org.BouncyCastle.Crypto.Tests len += cipher.DoFinal(decP, len); - if (!AreEqual(P, decP)) - { - Fail("incorrect decrypt in randomised test"); - } - - byte[] decT = cipher.GetMac(); - if (!AreEqual(encT, decT)) - { - Fail("decryption produced different mac from encryption"); - } - } - - public static void Main( - string[] args) - { - RunTest(new GcmTest()); - } - - [Test] - public void TestFunction() - { - string resultText = Perform().ToString(); - - Assert.AreEqual(Name + ": Okay", resultText); - } - } + if (!AreEqual(P, decP)) + { + Fail("incorrect decrypt in randomised test"); + } + + byte[] decT = cipher.GetMac(); + if (!AreEqual(encT, decT)) + { + Fail("decryption produced different mac from encryption"); + } + } + + public static void Main( + string[] args) + { + RunTest(new GcmTest()); + } + + [Test] + public void TestFunction() + { + string resultText = Perform().ToString(); + + Assert.AreEqual(Name + ": Okay", resultText); + } + } } |