|
13 | 13 | // limitations under the License.
|
14 | 14 |
|
15 | 15 | using System.Security.Cryptography;
|
| 16 | +using OnixLabs.Core; |
16 | 17 | using Xunit;
|
17 | 18 |
|
18 | 19 | namespace OnixLabs.Security.Cryptography.UnitTests;
|
@@ -598,4 +599,148 @@ public void Sha3Shake256ShouldProduceExpectedResult(char character, int length,
|
598 | 599 | // Then
|
599 | 600 | Assert.Equal(expected, actual);
|
600 | 601 | }
|
| 602 | + |
| 603 | + [Theory(DisplayName = "Sha3Hash224 multiple block transforms should produce the expected result")] |
| 604 | + [InlineData("abcdef", "", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 605 | + [InlineData("abcde", "f", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 606 | + [InlineData("abcd", "ef", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 607 | + [InlineData("abc", "def", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 608 | + [InlineData("ab", "cdef", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 609 | + [InlineData("a", "bcdef", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 610 | + [InlineData("", "abcdef", "ceb3f4cd85af081120bf69ecf76bf61232bd5d810866f0eca3c8907d")] |
| 611 | + public void Sha3Hash224MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 612 | + { |
| 613 | + // Given |
| 614 | + using HashAlgorithm algorithm = Sha3.CreateSha3Hash224(); |
| 615 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 616 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 617 | + |
| 618 | + // When |
| 619 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 620 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 621 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 622 | + |
| 623 | + // Then |
| 624 | + Assert.Equal(expected, actual); |
| 625 | + } |
| 626 | + |
| 627 | + [Theory(DisplayName = "Sha3Hash256 multiple block transforms should produce the expected result")] |
| 628 | + [InlineData("abcdef", "", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 629 | + [InlineData("abcde", "f", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 630 | + [InlineData("abcd", "ef", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 631 | + [InlineData("abc", "def", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 632 | + [InlineData("ab", "cdef", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 633 | + [InlineData("a", "bcdef", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 634 | + [InlineData("", "abcdef", "59890c1d183aa279505750422e6384ccb1499c793872d6f31bb3bcaa4bc9f5a5")] |
| 635 | + public void Sha3Hash256MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 636 | + { |
| 637 | + // Given |
| 638 | + using HashAlgorithm algorithm = Sha3.CreateSha3Hash256(); |
| 639 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 640 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 641 | + |
| 642 | + // When |
| 643 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 644 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 645 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 646 | + |
| 647 | + // Then |
| 648 | + Assert.Equal(expected, actual); |
| 649 | + } |
| 650 | + |
| 651 | + [Theory(DisplayName = "Sha3Hash384 multiple block transforms should produce the expected result")] |
| 652 | + [InlineData("abcdef", "", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 653 | + [InlineData("abcde", "f", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 654 | + [InlineData("abcd", "ef", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 655 | + [InlineData("abc", "def", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 656 | + [InlineData("ab", "cdef", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 657 | + [InlineData("a", "bcdef", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 658 | + [InlineData("", "abcdef", "d77460b0ce6109168480e279a81af32facb689ab96e22623f0122ff3a10ead263db6607f83876a843d3264dc2a863805")] |
| 659 | + public void Sha3Hash384MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 660 | + { |
| 661 | + // Given |
| 662 | + using HashAlgorithm algorithm = Sha3.CreateSha3Hash384(); |
| 663 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 664 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 665 | + |
| 666 | + // When |
| 667 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 668 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 669 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 670 | + |
| 671 | + // Then |
| 672 | + Assert.Equal(expected, actual); |
| 673 | + } |
| 674 | + |
| 675 | + [Theory(DisplayName = "Sha3Hash512 multiple block transforms should produce the expected result")] |
| 676 | + [InlineData("abcdef", "", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 677 | + [InlineData("abcde", "f", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 678 | + [InlineData("abcd", "ef", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 679 | + [InlineData("abc", "def", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 680 | + [InlineData("ab", "cdef", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 681 | + [InlineData("a", "bcdef", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 682 | + [InlineData("", "abcdef", "01309a45c57cd7faef9ee6bb95fed29e5e2e0312af12a95fffeee340e5e5948b4652d26ae4b75976a53cc1612141af6e24df36517a61f46a1a05f59cf667046a")] |
| 683 | + public void Sha3Hash512MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 684 | + { |
| 685 | + // Given |
| 686 | + using HashAlgorithm algorithm = Sha3.CreateSha3Hash512(); |
| 687 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 688 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 689 | + |
| 690 | + // When |
| 691 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 692 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 693 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 694 | + |
| 695 | + // Then |
| 696 | + Assert.Equal(expected, actual); |
| 697 | + } |
| 698 | + |
| 699 | + [Theory(DisplayName = "Sha3Shake128 multiple block transforms should produce the expected result")] |
| 700 | + [InlineData("abcdef", "", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 701 | + [InlineData("abcde", "f", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 702 | + [InlineData("abcd", "ef", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 703 | + [InlineData("abc", "def", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 704 | + [InlineData("ab", "cdef", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 705 | + [InlineData("a", "bcdef", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 706 | + [InlineData("", "abcdef", "9428dbf9493c942630c0618d8a0983d518e828a7c0f4a39c2a54e013f64ebc125475308324e864c2617062639263a24bd58c26379342b40bad4a81e6f3e2c32e41bcd52927971ad0374c88f3244b6d229652a454fdc4fa422838eab19aa2fac7ddf457d66122ea674424e534b529e65684b2b4e3404914ad814a53")] |
| 707 | + public void Sha3Shake128MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 708 | + { |
| 709 | + // Given |
| 710 | + using HashAlgorithm algorithm = Sha3.CreateSha3Shake128(123); |
| 711 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 712 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 713 | + |
| 714 | + // When |
| 715 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 716 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 717 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 718 | + |
| 719 | + // Then |
| 720 | + Assert.Equal(expected, actual); |
| 721 | + } |
| 722 | + |
| 723 | + [Theory(DisplayName = "Sha3Shake256 multiple block transforms should produce the expected result")] |
| 724 | + [InlineData("abcdef", "", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 725 | + [InlineData("abcde", "f", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 726 | + [InlineData("abcd", "ef", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 727 | + [InlineData("abc", "def", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 728 | + [InlineData("ab", "cdef", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 729 | + [InlineData("a", "bcdef", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 730 | + [InlineData("", "abcdef", "81d5e45d095acf3c0decf25bcc63f6ee16c689b909b48040ad91c7c67dfe4e9fec910fa73b44e84541600b5a5736b7b0869c89b1e403e35e550158e09bdb7430a6617cff69c0f10fdaf1035ac62ab6277cd267616c06b9ce4d888543ba5771eecf12df031e9add88f314de262dc1bb0c4aae43c9b5316fea1af11d")] |
| 731 | + public void Sha3Shake256MultipleBlockTransformsShouldProduceExpectedResult(string firstBlock, string lastBlock, string expected) |
| 732 | + { |
| 733 | + // Given |
| 734 | + using HashAlgorithm algorithm = Sha3.CreateSha3Shake256(123); |
| 735 | + byte[] firstBlockBytes = firstBlock.ToByteArray(); |
| 736 | + byte[] lastBlockBytes = lastBlock.ToByteArray(); |
| 737 | + |
| 738 | + // When |
| 739 | + algorithm.TransformBlock(firstBlockBytes, 0, firstBlockBytes.Length, null, 0); |
| 740 | + algorithm.TransformFinalBlock(lastBlockBytes, 0, lastBlockBytes.Length); |
| 741 | + string actual = new Hash(algorithm.Hash).ToString(); |
| 742 | + |
| 743 | + // Then |
| 744 | + Assert.Equal(expected, actual); |
| 745 | + } |
601 | 746 | }
|
0 commit comments