public void Given_ValidAESKey_When_MapToXMLPOCO_Then_EncodingHelperClassMustBeused()
        {
            // Arrange
            var key = new AesKey()
            {
                Iv  = RandomByteArrayUtils.CreateRandomByteArray(512),
                Key = RandomByteArrayUtils.CreateRandomByteArray(1024),
            };
            var ivMapsTo  = "myIVString";
            var keyMapsTo = "myIVString";
            var converter = new Mock <IKeyDetailsPersistConverter>(MockBehavior.Strict);

            converter.Setup(c => c.Encode(key.Iv)).Returns(ivMapsTo);
            converter.Setup(c => c.Encode(key.Key)).Returns(keyMapsTo);

            // Act
            var aesKeyToXmlMapper = new AesKeyToXmlMapper(converter.Object);
            var xmlPoco           = new EnvCryptKey();

            aesKeyToXmlMapper.Map(key, xmlPoco);

            // Assert
            xmlPoco.Aes.Should().NotBeNull().And.HaveCount(1);
            xmlPoco.Aes[0].Iv.Should().Be(ivMapsTo);
            xmlPoco.Aes[0].Key.Should().Be(keyMapsTo);
            converter.Verify(c => c.Encode(key.Iv), Times.Once);
            converter.Verify(c => c.Encode(key.Key), Times.Once);
        }
Example #2
0
        public void Given_RandomBinaryData_When_EncodeAndDecode_Then_BinaryDataMustBeUnchanged()
        {
            // Arrange
            var randomData = RandomByteArrayUtils.CreateRandomByteArray(9999);

            // Act
            var converter = new KeyDetailsPersistConverter();
            var result    = converter.Decode(converter.Encode(randomData));

            // Assert
            result.Should().BeEquivalentTo(randomData);
        }
Example #3
0
        public void Given_ValidRSAKey_When_MapToXMLPOCO_Then_EncodingHelperClassMustBeused()
        {
            // Arrange
            var key = new RsaKey(new RSAParameters()
            {
                D        = RandomByteArrayUtils.CreateRandomByteArray(10),
                DP       = RandomByteArrayUtils.CreateRandomByteArray(11),
                DQ       = RandomByteArrayUtils.CreateRandomByteArray(12),
                Exponent = RandomByteArrayUtils.CreateRandomByteArray(13),
                Modulus  = RandomByteArrayUtils.CreateRandomByteArray(14),
                InverseQ = RandomByteArrayUtils.CreateRandomByteArray(15),
                P        = RandomByteArrayUtils.CreateRandomByteArray(16),
                Q        = RandomByteArrayUtils.CreateRandomByteArray(17),
            }, true);
            var converter = new Mock <IKeyDetailsPersistConverter>(MockBehavior.Strict);

            converter.Setup(c => c.Encode(key.Key.D)).Returns("d");
            converter.Setup(c => c.Encode(key.Key.DP)).Returns("dp");
            converter.Setup(c => c.Encode(key.Key.DQ)).Returns("dq");
            converter.Setup(c => c.Encode(key.Key.Exponent)).Returns("exponent");
            converter.Setup(c => c.Encode(key.Key.Modulus)).Returns("modulus");
            converter.Setup(c => c.Encode(key.Key.InverseQ)).Returns("inverseQ");
            converter.Setup(c => c.Encode(key.Key.P)).Returns("p");
            converter.Setup(c => c.Encode(key.Key.Q)).Returns("q");

            // Act
            var aesKeyToXmlMapper = new RsaKeyToXmlMapper(converter.Object);
            var xmlPoco           = new EnvCryptKey();

            aesKeyToXmlMapper.Map(key, xmlPoco);

            // Assert
            xmlPoco.Rsa.Should().NotBeNull().And.HaveCount(1);
            xmlPoco.Rsa[0].D.Should().Be("d");
            xmlPoco.Rsa[0].Dp.Should().Be("dp");
            xmlPoco.Rsa[0].Dq.Should().Be("dq");
            xmlPoco.Rsa[0].Exponent.Should().Be("exponent");
            xmlPoco.Rsa[0].Modulus.Should().Be("modulus");
            xmlPoco.Rsa[0].InverseQ.Should().Be("inverseQ");
            xmlPoco.Rsa[0].P.Should().Be("p");
            xmlPoco.Rsa[0].Q.Should().Be("q");

            converter.Verify(c => c.Encode(key.Key.D), Times.Once);
            converter.Verify(c => c.Encode(key.Key.DP), Times.Once);
            converter.Verify(c => c.Encode(key.Key.DQ), Times.Once);
            converter.Verify(c => c.Encode(key.Key.Exponent), Times.Once);
            converter.Verify(c => c.Encode(key.Key.Modulus), Times.Once);
            converter.Verify(c => c.Encode(key.Key.InverseQ), Times.Once);
            converter.Verify(c => c.Encode(key.Key.P), Times.Once);
            converter.Verify(c => c.Encode(key.Key.Q), Times.Once);
        }
Example #4
0
        public void Given_ValidRSAKey_When_PublicKeyParametersChanged_Then_HashCodeIsDifferent()
        {
            // Arrange
            var key1 = new RsaKey(new RSAParameters()
            {
                Exponent = RandomByteArrayUtils.CreateRandomByteArray(5),
                Modulus  = RandomByteArrayUtils.CreateRandomByteArray(6),
            }, true);
            var key2 = new RsaKey(new RSAParameters()
            {
                Exponent = key1.Key.Exponent,
                Modulus  = RandomByteArrayUtils.CreateRandomByteArray(7),
            }, true);

            // Act
            // Assert
            key1.GetHashCode().Should().NotBe(key2.GetHashCode());
        }
        public void Given_AnyDataToEncrypt_When_Encrypt_Then_AllDataEncryptedTogether(
            [Range(0, 10000, 1000)] int actualKeySize)
        {
            // Arrange
            var algo = new Mock <IEncryptionAlgo <AesKey> >();
            var key  = new AesKey();

            algo.Setup(encryptionAlgo => encryptionAlgo.Encrypt(It.IsAny <byte[]>(), key)).Returns(new byte[1]);
            var dataToEncrypt = RandomByteArrayUtils.CreateRandomByteArray(actualKeySize);

            // Act
            var segEncrypter = new AesSegmentEncryptionAlgo(algo.Object);

            segEncrypter.Encrypt(dataToEncrypt, key);

            // Assert
            algo.Verify(a => a.Encrypt(dataToEncrypt, key), Times.Once());
        }
        private int SetupMethod(int lengthOfByteArray, int maxSegmentSize, out byte[] toEncrypt, out RsaKey rsaKey,
                                out Mock <IEncryptionAlgo <RsaKey> > algoMock, out RsaSegmentEncryptionAlgo encrypter)
        {
            //      # of segments created
            var expectedArraysInList = (int)Math.Ceiling((double)lengthOfByteArray / maxSegmentSize);

            toEncrypt = RandomByteArrayUtils.CreateRandomByteArray(lengthOfByteArray);

            rsaKey = new RsaKey(new RSAParameters(), true);
            var rsaKeyCopy = rsaKey;

            algoMock = new Mock <IEncryptionAlgo <RsaKey> >();
            algoMock.Setup(algo => algo.Encrypt(It.IsAny <byte[]>(), rsaKeyCopy)).Returns(new byte[] { 0 });

            var maxEncryptionSizeCalcMock = new Mock <IRsaMaxEncryptionCalc>();

            maxEncryptionSizeCalcMock.Setup(calc => calc.GetMaxBytesThatCanBeEncrypted(rsaKeyCopy))
            .Returns(maxSegmentSize);
            encrypter = new RsaSegmentEncryptionAlgo(algoMock.Object, maxEncryptionSizeCalcMock.Object);
            return(expectedArraysInList);
        }
Example #7
0
        public void Given_ValidRSAKey_When_PrivateKeyParametersChanged_Then_HashCodeIsTheSame()
        {
            // Arrange
            var key1 = new RsaKey(new RSAParameters()
            {
                Exponent = RandomByteArrayUtils.CreateRandomByteArray(5),
                Modulus  = RandomByteArrayUtils.CreateRandomByteArray(5),
            }, true);
            var key2 = new RsaKey(new RSAParameters()
            {
                Exponent = key1.Key.Exponent,
                Modulus  = key1.Key.Modulus,
                D        = RandomByteArrayUtils.CreateRandomByteArray(5),
                DP       = RandomByteArrayUtils.CreateRandomByteArray(5),
                DQ       = RandomByteArrayUtils.CreateRandomByteArray(5),
                InverseQ = RandomByteArrayUtils.CreateRandomByteArray(5),
                P        = RandomByteArrayUtils.CreateRandomByteArray(5),
                Q        = RandomByteArrayUtils.CreateRandomByteArray(5),
            }, true);

            // Act
            // Assert
            key1.GetHashCode().Should().Be(key2.GetHashCode(), "hash code only takes public key parameters into account");
        }