public void ShouldGetDefaultConfiguration()
        {
            // Arrange
            HmacConfigurationManager configurationManager  = new HmacConfigurationManager();
            HmacConfiguration        expectedConfiguration = new HmacConfiguration
            {
                Name                   = configurationManager.DefaultConfigurationKey,
                UserHeaderName         = "X-Auth-User",
                AuthorizationScheme    = "HMAC",
                SignatureDataSeparator = "\n",
                SignatureEncoding      = "UTF-8",
                HmacAlgorithm          = "HMACSHA512",
                MaxRequestAge          = TimeSpan.FromMinutes(5),
                SignRequestUri         = true,
                ValidateContentMd5     = true,
                Headers                = null
            };

            // Act
            IHmacConfiguration defaultConfigByKey = configurationManager.Get(configurationManager.DefaultConfigurationKey);
            IHmacConfiguration defaultConfig      = configurationManager.GetDefault();

            // Assert
            AssertConfiguration(expectedConfiguration, defaultConfigByKey);
            AssertConfiguration(expectedConfiguration, defaultConfig);
        }
        public void ShouldConfigureFromFile()
        {
            // Arrange
            HmacConfigurationManager configurationManager  = new HmacConfigurationManager();
            HmacConfiguration        expectedConfiguration = new HmacConfiguration
            {
                Name                   = "TestConfiguration",
                UserHeaderName         = "X-Test-User",
                AuthorizationScheme    = "TEST",
                SignatureDataSeparator = "_",
                SignatureEncoding      = "UTF-32",
                HmacAlgorithm          = "HMACSHA256",
                MaxRequestAge          = TimeSpan.FromMinutes(2),
                SignRequestUri         = false,
                ValidateContentMd5     = true,
                Headers                = new List <string> {
                    "X-Test-Header-1", "X-Test-Header-2"
                }
            };

            // Act
            configurationManager.ConfigureFromFile("Hmac.config");
            IHmacConfiguration configuration = configurationManager.Get(expectedConfiguration.Name);

            // Assert
            AssertConfiguration(expectedConfiguration, configuration);
        }
Example #3
0
        public void SignatureFailureTest()
        {
            var context = _workContext.WithTag(_tag);

            var testHeaders = new List <KeyValuePair <string, IEnumerable <string> > >
            {
                new KeyValuePair <string, IEnumerable <string> >("Content-Type", new string[] { "application/x-www-form-urlencoded", "charset=utf-8" }),
                new KeyValuePair <string, IEnumerable <string> >("Content-MD5", new string[] { "kdskflosifm3938dldasksdfjdf" }),
                new KeyValuePair <string, IEnumerable <string> >("Api-Cv", new string[] { "dkdfjdie.1" }),
                new KeyValuePair <string, IEnumerable <string> >("Api-Key", new string[] { "3asfvesef" }),
                new KeyValuePair <string, IEnumerable <string> >("Api-duplicate", new string[] { "false" }),
            };

            var          uri        = new Uri("http://*****:*****@domain.com";

            IHmacConfiguration hmacConfiguration = new HmacConfiguration();
            var    hmac      = new HmacSignature(hmacConfiguration);
            string signature = hmac.CreateSignature(context, credential, apiKey, method, uri, testHeaders);

            signature = signature.Remove(credential.Length + 5, 2);
            hmac.ValidateSignature(context, signature, apiKey, method, uri, testHeaders).Should().BeFalse();
        }
Example #4
0
        public void ShouldCreateCanonicalizedUriString()
        {
            // Arrange
            IHmacConfiguration configuration = new HmacConfiguration {
                SignatureEncoding = "UTF-8"
            };
            HmacSigner signer = new HmacSigner(configuration, _keyRepository);

            const string uriString         = "  HTTP://WWW.EXAMPLE.DOMAIN/Test?Key=Value  ";
            const string expectedUriString = "http://www.example.domain:80/Test?Key=Value";

            const string uriString2         = "  httpS://WWW.EXAMPLE.DOMAIN:3000/Test?Key=Value  ";
            const string expectedUriString2 = "https://www.example.domain:3000/Test?Key=Value";

            const string uriString3         = "  TEST://WWW.EXAMPLE.DOMAIN/Test?Key=Value  ";
            const string expectedUriString3 = "test://www.example.domain:-1/Test?Key=Value";

            const string relativeUriString = "/Test?Key=Value";
            Uri          relativeUri       = new Uri(relativeUriString, UriKind.Relative);

            // Act
            string result1 = signer.CreateCanonicalizedUriString(uriString);
            string result2 = signer.CreateCanonicalizedUriString(uriString2);
            string result3 = signer.CreateCanonicalizedUriString(uriString3);
            string result4 = signer.CreateCanonicalizedUriString(relativeUri);

            // Assert
            Assert.AreEqual(expectedUriString, result1);
            Assert.AreEqual(expectedUriString2, result2);
            Assert.AreEqual(expectedUriString3, result3);
            Assert.AreEqual(relativeUriString, result4);
        }
Example #5
0
        public void Configuration(IAppBuilder app)
        {
            var config = new HttpConfiguration();

            config.MapHttpAttributeRoutes();

            HmacConfiguration
            .Create()
            .WithApiKey("123456")
            .WithScope("MyApp")
            .Configure();

            app.UseWebApi(config);
        }
Example #6
0
        public void ShouldCreateBase64Md5Hash()
        {
            // Arrange
            IHmacConfiguration configuration = new HmacConfiguration {
                SignatureEncoding = "UTF-8"
            };
            HmacSigner signer = new HmacSigner(configuration, _keyRepository);

            // Act
            string base64Md5HashFromString = signer.CreateBase64Md5Hash(Body, Encoding.UTF8);
            string base64Md5HashFromBytes  = signer.CreateBase64Md5Hash(_bodyBytes);
            string base64Md5HashFromStream = signer.CreateBase64Md5Hash(_bodyStream);

            // Assert
            Assert.IsNotNull(base64Md5HashFromString);
            Assert.AreEqual(_base64Md5Hash, base64Md5HashFromString);
            Assert.IsNotNull(base64Md5HashFromBytes);
            Assert.AreEqual(_base64Md5Hash, base64Md5HashFromBytes);
            Assert.IsNotNull(base64Md5HashFromStream);
            Assert.AreEqual(_base64Md5Hash, base64Md5HashFromStream);
        }
Example #7
0
        public void ShouldCreateCanonicalizedHeaderString()
        {
            // Arrange
            IHmacConfiguration configuration = new HmacConfiguration {
                SignatureEncoding = "UTF-8", SignatureDataSeparator = "\n"
            };
            HmacSigner          signer  = new HmacSigner(configuration, _keyRepository);
            NameValueCollection headers = new NameValueCollection
            {
                { "  X-Test-Header-1 ", " Value2 " },
                { "  X-Test-Header-1 ", " Value4" },
                { "X-Test-Header-2", "value3" },
                { "  x-test-headeR-1 ", "Value1" }
            };
            const string expectedHeaderString = "x-test-header-1:Value2,Value4,Value1\nx-test-header-2:value3";

            // Act
            string headerString = signer.CreateCanonicalizedHeadersString(headers);

            // Assert
            Assert.IsNotNull(headerString);
            Assert.AreEqual(expectedHeaderString, headerString);
        }
Example #8
0
        public void ShouldCreateMd5Hash()
        {
            // Arrange
            IHmacConfiguration configuration = new HmacConfiguration {
                SignatureEncoding = "UTF-8"
            };
            HmacSigner signer = new HmacSigner(configuration, _keyRepository);

            // Act
            byte[] md5HashFromString = signer.CreateMd5Hash(Body, Encoding.UTF8);
            byte[] md5HashFromBytes  = signer.CreateMd5Hash(_bodyBytes);
            byte[] md5HashFromStrean = signer.CreateMd5Hash(_bodyStream);

            // Assert
            Assert.IsNotNull(md5HashFromString);
            Assert.AreEqual(_md5Hash.Length, md5HashFromString.Length);
            Assert.IsTrue(_md5Hash.SequenceEqual(md5HashFromString));
            Assert.IsNotNull(md5HashFromBytes);
            Assert.AreEqual(_md5Hash.Length, md5HashFromBytes.Length);
            Assert.IsTrue(_md5Hash.SequenceEqual(md5HashFromBytes));
            Assert.IsNotNull(md5HashFromStrean);
            Assert.AreEqual(_md5Hash.Length, md5HashFromStrean.Length);
            Assert.IsTrue(_md5Hash.SequenceEqual(md5HashFromStrean));
        }