|
| 1 | +using System; |
| 2 | +using System.Text; |
| 3 | + |
| 4 | +using NUnit.Framework; |
| 5 | + |
| 6 | +using Org.BouncyCastle.Crypto.Digests; |
| 7 | +using Org.BouncyCastle.Crypto.Macs; |
| 8 | +using Org.BouncyCastle.Crypto.Parameters; |
| 9 | +using Org.BouncyCastle.Utilities; |
| 10 | +using Org.BouncyCastle.Utilities.Encoders; |
| 11 | +using Org.BouncyCastle.Utilities.Test; |
| 12 | + |
| 13 | +namespace Org.BouncyCastle.Crypto.Tests |
| 14 | +{ |
| 15 | + /** |
| 16 | + * SHA1 HMac Test, test vectors from RFC 2202 |
| 17 | + */ |
| 18 | + public class NonMemoableDigestTest |
| 19 | + : SimpleTest |
| 20 | + { |
| 21 | + private static readonly string[] keys = { |
| 22 | + "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| 23 | + "4a656665", |
| 24 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| 25 | + "0102030405060708090a0b0c0d0e0f10111213141516171819", |
| 26 | + "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", |
| 27 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| 28 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 29 | + }; |
| 30 | + |
| 31 | + private static readonly string[] digests = { |
| 32 | + "b617318655057264e28bc0b6fb378c8ef146be00", |
| 33 | + "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", |
| 34 | + "125d7342b9ac11cd91a39af48aa17b4f63f175d3", |
| 35 | + "4c9007f4026250c6bc8414f9bf50c86c2d7235da", |
| 36 | + "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", |
| 37 | + "aa4ae5e15272d00e95705637ce8a3b55ed402112", |
| 38 | + "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", |
| 39 | + "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", |
| 40 | + "aa4ae5e15272d00e95705637ce8a3b55ed402112", |
| 41 | + "e8e99d0f45237d786d6bbaa7965c7808bbff1a91" |
| 42 | + }; |
| 43 | + |
| 44 | + private static readonly string[] messages = { |
| 45 | + "Hi There", |
| 46 | + "what do ya want for nothing?", |
| 47 | + "0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", |
| 48 | + "0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", |
| 49 | + "Test With Truncation", |
| 50 | + "Test Using Larger Than Block-Size Key - Hash Key First", |
| 51 | + "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" |
| 52 | + }; |
| 53 | + |
| 54 | + public override string Name |
| 55 | + { |
| 56 | + get { return "NonMemoableDigest"; } |
| 57 | + } |
| 58 | + |
| 59 | + public override void PerformTest() |
| 60 | + { |
| 61 | + HMac hmac = new HMac(new NonMemoableDigest(new Sha1Digest())); |
| 62 | + byte[] resBuf = new byte[hmac.GetMacSize()]; |
| 63 | + |
| 64 | + for (int i = 0; i < messages.Length; i++) |
| 65 | + { |
| 66 | + byte[] m = Strings.ToByteArray(messages[i]); |
| 67 | + if (messages[i].StartsWith("0x")) |
| 68 | + { |
| 69 | + m = Hex.Decode(messages[i].Substring(2)); |
| 70 | + } |
| 71 | + hmac.Init(new KeyParameter(Hex.Decode(keys[i]))); |
| 72 | + hmac.BlockUpdate(m, 0, m.Length); |
| 73 | + hmac.DoFinal(resBuf, 0); |
| 74 | + |
| 75 | + if (!Arrays.AreEqual(resBuf, Hex.Decode(digests[i]))) |
| 76 | + { |
| 77 | + Fail(Name + ": Vector " + i + " failed"); |
| 78 | + } |
| 79 | + } |
| 80 | + |
| 81 | + // |
| 82 | + // test reset |
| 83 | + // |
| 84 | + { |
| 85 | + int vector = 0; // vector used for test |
| 86 | + byte[] m = Strings.ToByteArray(messages[vector]); |
| 87 | + if (messages[vector].StartsWith("0x")) |
| 88 | + { |
| 89 | + m = Hex.Decode(messages[vector].Substring(2)); |
| 90 | + } |
| 91 | + hmac.Init(new KeyParameter(Hex.Decode(keys[vector]))); |
| 92 | + hmac.BlockUpdate(m, 0, m.Length); |
| 93 | + hmac.DoFinal(resBuf, 0); |
| 94 | + hmac.Reset(); |
| 95 | + hmac.BlockUpdate(m, 0, m.Length); |
| 96 | + hmac.DoFinal(resBuf, 0); |
| 97 | + |
| 98 | + if (!Arrays.AreEqual(resBuf, Hex.Decode(digests[vector]))) |
| 99 | + { |
| 100 | + Fail(Name + ": Reset with vector " + vector + " failed"); |
| 101 | + } |
| 102 | + } |
| 103 | + } |
| 104 | + |
| 105 | + public static void Main( |
| 106 | + string[] args) |
| 107 | + { |
| 108 | + RunTest(new NonMemoableDigestTest()); |
| 109 | + } |
| 110 | + |
| 111 | + [Test] |
| 112 | + public void TestFunction() |
| 113 | + { |
| 114 | + string resultText = Perform().ToString(); |
| 115 | + |
| 116 | + Assert.AreEqual(Name + ": Okay", resultText); |
| 117 | + } |
| 118 | + } |
| 119 | +} |
0 commit comments