Exemple #1
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" />
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(
            OAuthSignatureMethod signatureMethod,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (OAuthTools.IsNullOrBlank(tokenSecret))
            {
                tokenSecret = string.Empty;
            }
            consumerSecret = OAuthTools.UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = OAuthTools.UrlEncodeRelaxed(tokenSecret);
            if (signatureMethod != OAuthSignatureMethod.HmacSha1)
            {
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }
            HMACSHA1 hmacshA1 = new HMACSHA1();
            string   s        = consumerSecret + "&" + tokenSecret;

            hmacshA1.Key = OAuthTools._encoding.GetBytes(s);
            string str = OAuthTools.HashWith(signatureBase, (HashAlgorithm)hmacshA1);

            return(signatureTreatment == OAuthSignatureTreatment.Escaped ? OAuthTools.UrlEncodeRelaxed(str) : str);
        }
Exemple #2
0
 /// <summary>
 ///     Creates a signature value given a signature base and the consumer secret.
 ///     This method is used when the token secret is currently unknown.
 /// </summary>
 /// <param name="signatureMethod">The hashing method</param>
 /// <param name="signatureTreatment">The treatment to use on a signature value</param>
 /// <param name="signatureBase">The signature base</param>
 /// <param name="consumerSecret">The consumer key</param>
 /// <returns></returns>
 public static string GetSignature(
     OAuthSignatureMethod signatureMethod,
     OAuthSignatureTreatment signatureTreatment,
     string signatureBase,
     string consumerSecret
     )
 => GetSignature(signatureMethod, signatureTreatment, signatureBase, consumerSecret, null);
Exemple #3
0
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment, string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }
            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);
            string text;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                HMACSHA1 hMACSHA = new HMACSHA1();
                string   s       = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
                hMACSHA.Key = _encoding.GetBytes(s);
                text        = signatureBase.HashWith(hMACSHA);
                break;
            }

            case OAuthSignatureMethod.PlainText:
                text = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
                break;

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }
            return((signatureTreatment == OAuthSignatureTreatment.Escaped) ? UrlEncodeRelaxed(text) : text);
        }
Exemple #4
0
 /// <summary>
 /// Creates a signature value given a signature base and the consumer secret.
 /// This method is used when the token secret is currently unknown.
 /// </summary>
 /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" />
 /// <param name="signatureMethod">The hashing method</param>
 /// <param name="signatureTreatment">The treatment to use on a signature value</param>
 /// <param name="signatureBase">The signature base</param>
 /// <param name="consumerSecret">The consumer key</param>
 /// <returns></returns>
 public static string GetSignature(
     OAuthSignatureMethod signatureMethod,
     OAuthSignatureTreatment signatureTreatment,
     string signatureBase,
     string consumerSecret)
 {
     return(OAuthTools.GetSignature(signatureMethod, signatureTreatment, signatureBase, consumerSecret, (string)null));
 }
Exemple #5
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
#if !WINDOWS_UWP
                HMACSHA1 crypto = new HMACSHA1();
                string   key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
#else
                signature = signatureBase.HashWith(HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1));
#endif
                break;
            }

            case OAuthSignatureMethod.HmacSha256:
            {
                HMACSHA256 crypto = new HMACSHA256();
                string     key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);

                break;
            }

            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 and HMAC-SHA256 are currently supported.");
            }

            string result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);
        }
Exemple #6
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
#if !PocketPC
            case OAuthSignatureMethod.HmacSha1:
            {
                var key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
#if NETFX_CORE
                var crypto = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
                signature = signatureBase.HashWith(_encoding.GetBytes(key), crypto);
#else
                var crypto = new HMACSHA1();
                crypto.Key = _encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
#endif



                break;
            }
#endif
            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
#if PocketPC
                throw new NotImplementedException("Only PlainText is currently supported.");
#else
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
#endif
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                                ? UrlEncodeRelaxed(signature)
                                : signature;

            return(result);
        }
Exemple #7
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (IsNullOrBlank(tokenSecret))
            {
                tokenSecret = String.Empty;
            }

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            case OAuthSignatureMethod.HmacSha256:
            {
                consumerSecret = UrlEncodeRelaxed(consumerSecret);
                tokenSecret    = UrlEncodeRelaxed(tokenSecret);
                var key = string.Concat(consumerSecret, "&", tokenSecret);
#if WINRT
                IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, _encoding);
                string  algorithm   = OAuthSignatureMethod.HmacSha1 ? MacAlgorithmNames.HmacSha1 : MacAlgorithmNames.HmacSha256;
                MacAlgorithmProvider hmacShaProvider = MacAlgorithmProvider.OpenAlgorithm(algorithm);
                CryptographicKey     macKey          = hmacShaProvider.CreateKey(keyMaterial);
                IBuffer dataToBeSigned  = CryptographicBuffer.ConvertStringToBinary(signatureBase, _encoding);
                IBuffer signatureBuffer = CryptographicEngine.Sign(macKey, dataToBeSigned);
                signature = CryptographicBuffer.EncodeToBase64String(signatureBuffer);
#else
                var crypto = signatureMethod == OAuthSignatureMethod.HmacSha1 ? (HMAC) new HMACSHA1() : new HMACSHA256();

                crypto.Key = _encoding.GetBytes(key);
                signature  = HashWith(signatureBase, crypto);
#endif

                break;
            }

            case OAuthSignatureMethod.RsaSha1:
                signature = TextSigner.SignWithRsaSha1(signatureBase, consumerSecret);
                break;

            default:
                throw new NotImplementedException("Only HMAC-SHA1, HMAC-SHA256 and RSA-SHA1 signatures are currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return(result);
        }
Exemple #8
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known
        /// token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" />
        /// <param name="signatureMethod">
        /// The hashing method
        /// </param>
        /// <param name="signatureTreatment">
        /// The treatment to use on a signature value
        /// </param>
        /// <param name="signatureBase">
        /// The signature base
        /// </param>
        /// <param name="consumerSecret">
        /// The consumer secret
        /// </param>
        /// <param name="tokenSecret">
        /// The token secret
        /// </param>
        /// <returns>
        /// </returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment, string?signatureBase,
                                          string?consumerSecret, string?tokenSecret)
        {
            if (string.IsNullOrWhiteSpace(signatureBase))
            {
                throw new NullReferenceException($"parameter {nameof(signatureBase)} must not be null, empty or whitespace");
            }

            if (string.IsNullOrWhiteSpace(consumerSecret))
            {
                throw new NullReferenceException($"parameter {nameof(consumerSecret)} must not be null, empty or whitespace");
            }

            if (string.IsNullOrWhiteSpace(tokenSecret))
            {
                tokenSecret = string.Empty;
            }

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                consumerSecret = UrlEncodeRelaxed(consumerSecret);
                tokenSecret    = UrlEncodeRelaxed(tokenSecret);
                var key = string.Concat(consumerSecret, "&", tokenSecret);

                var crypto = new HMACSHA1
                {
                    Key = _encoding.GetBytes(key)
                };

                signature = HashWith(signatureBase, crypto);

                break;
            }

            case OAuthSignatureMethod.RsaSha1:
                signature = TextSigner.SignWithRsaSha1(signatureBase, consumerSecret);
                break;

            default:
                throw new NotImplementedException("Only HMAC-SHA1 and RSA-SHA1 signatures are currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return(result);
        }
Exemple #9
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret. This method is
        /// used when the token secret is currently unknown.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" />
        /// <param name="signatureMethod">
        /// The hashing method
        /// </param>
        /// <param name="signatureTreatment">
        /// The treatment to use on a signature value
        /// </param>
        /// <param name="signatureBase">
        /// The signature base
        /// </param>
        /// <param name="consumerSecret">
        /// The consumer key
        /// </param>
        /// <returns>
        /// </returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment, string?signatureBase, string?consumerSecret)
        {
            if (string.IsNullOrWhiteSpace(signatureBase))
            {
                throw new NullReferenceException($"parameter {nameof(signatureBase)} must not be null, empty or whitespace");
            }

            if (string.IsNullOrWhiteSpace(consumerSecret))
            {
                throw new NullReferenceException($"parameter {nameof(consumerSecret)} must not be null, empty or whitespace");
            }

            return(GetSignature(signatureMethod, signatureTreatment, signatureBase, consumerSecret, null));
        }
Exemple #10
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(
            OAuthSignatureMethod signatureMethod,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string?consumerSecret,
            string?tokenSecret
            )
        {
            if (tokenSecret.IsEmpty())
            {
                tokenSecret = string.Empty;
            }
            if (consumerSecret.IsEmpty())
            {
                consumerSecret = string.Empty;
            }

            var unencodedConsumerSecret = consumerSecret !;

            consumerSecret = Uri.EscapeDataString(consumerSecret !);
            tokenSecret    = Uri.EscapeDataString(tokenSecret !);

            var signature = signatureMethod switch
            {
                HmacSha1 => GetHmacSignature(new HMACSHA1(), consumerSecret, tokenSecret, signatureBase),
                HmacSha256 => GetHmacSignature(new HMACSHA256(), consumerSecret, tokenSecret, signatureBase),
                RsaSha1 => GetRsaSignature(),
                PlainText => $"{consumerSecret}&{tokenSecret}",
                _ => throw new NotImplementedException("Only HMAC-SHA1, HMAC-SHA256, and RSA-SHA1 are currently supported.")
            };

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);

            string GetRsaSignature()
            {
                using var provider = new RSACryptoServiceProvider { PersistKeyInCsp = false };

                provider.FromXmlString2(unencodedConsumerSecret);

                var hasher = new SHA1Managed();
                var hash   = hasher.ComputeHash(Encoding.GetBytes(signatureBase));

                return(Convert.ToBase64String(provider.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"))));
            }
        }
Exemple #11
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (IsNullOrBlank(tokenSecret))
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                var crypto = new HMACSHA1();
                var key    = string.Concat(consumerSecret, "&", tokenSecret);

                crypto.Key = _encoding.GetBytes(key);
                signature  = HashWith(signatureBase, crypto);

                break;
            }

            case OAuthSignatureMethod.HmacSha256: {
                var crypto = new HMACSHA256();
                var key    = string.Concat(consumerSecret, "&", tokenSecret);

                crypto.Key = _encoding.GetBytes(key);
                signature  = HashWith(signatureBase, crypto);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return(result);
        }
Exemple #12
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                var key              = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
                var keyMaterial      = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
                var hmacSha1Provider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
                var macKey           = hmacSha1Provider.CreateKey(keyMaterial);
                var dataToBeSigned   = CryptographicBuffer.ConvertStringToBinary(signatureBase, BinaryStringEncoding.Utf8);
                var signatureBuffer  = CryptographicEngine.Sign(macKey, dataToBeSigned);
                signature = CryptographicBuffer.EncodeToBase64String(signatureBuffer);
                break;
            }

            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);
        }
Exemple #13
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <a href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (string.IsNullOrEmpty(tokenSecret))
            {
                tokenSecret = String.Empty;
            }
            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);
            var    key = string.Format("{0}&{1}", consumerSecret, tokenSecret);
            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                var keyData = _encoding.GetBytes(key);
#if USE_BOUNCYCASTLE
                var digest = new Org.BouncyCastle.Crypto.Digests.Sha1Digest();
                var crypto = new Org.BouncyCastle.Crypto.Macs.HMac(digest);
                crypto.Init(new Org.BouncyCastle.Crypto.Parameters.KeyParameter(keyData));
                signature = signatureBase.HashWith(crypto);
#else
                using (var digest = new System.Security.Cryptography.HMACSHA1(keyData))
                    signature = signatureBase.HashWith(digest);
#endif
                break;
            }

            case OAuthSignatureMethod.PlainText:
            {
                signature = key;
                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }
            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;
            return(result);
        }
Exemple #14
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
#if NETFX_CORE
                throw new NotImplementedException("What goes here?");
#else
                var crypto = new HMACSHA1();
                var key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = _encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);

                break;
#endif
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                                ? UrlEncodeRelaxed(signature)
                                : signature;

            return(result);
        }
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <a href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureProvider">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(
            ISignatureProvider signatureProvider,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (string.IsNullOrEmpty(tokenSecret))
            {
                tokenSecret = string.Empty;
            }
            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);
            var data      = _encoding.GetBytes(signatureBase);
            var hash      = signatureProvider.CalculateSignature(data, consumerSecret, tokenSecret);
            var signature = hash;

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                             ? UrlEncodeRelaxed(signature)
                             : signature;

            return(result);
        }
Exemple #16
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                var crypto = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha1);
                var key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
                signature = signatureBase.HashWith(crypto, key);
                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return(result);
        }
Exemple #17
0
 /// <summary>
 /// Creates a signature value given a signature base and the consumer secret.
 /// This method is used when the token secret is currently unknown.
 /// </summary>
 /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
 /// <param name="signatureMethod">The hashing method</param>
 /// <param name="signatureTreatment">The treatment to use on a signature value</param>
 /// <param name="signatureBase">The signature base</param>
 /// <param name="consumerSecret">The consumer key</param>
 /// <returns></returns>
 public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment,
     string signatureBase, string consumerSecret)
 {
     return GetSignature(signatureMethod, signatureTreatment, signatureBase, consumerSecret, null);
 }
Exemple #18
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment,
            string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
                case OAuthSignatureMethod.HmacSha1:
                {
#if !WINDOWS_UWP
                    HMACSHA1 crypto = new HMACSHA1();
                    string key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                    crypto.Key = encoding.GetBytes(key);
                    signature = signatureBase.HashWith(crypto);
#else
                    signature = signatureBase.HashWith(HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1));         
#endif               
                    break;
                }

                case OAuthSignatureMethod.HmacSha256:
                {
                    HMACSHA256 crypto = new HMACSHA256();
                    string key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                    crypto.Key = encoding.GetBytes(key);
                    signature = signatureBase.HashWith(crypto);

                    break;
                }

                case OAuthSignatureMethod.PlainText:
                {
                    signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                    break;
                }

                default:
                    throw new NotImplementedException("Only HMAC-SHA1 and HMAC-SHA256 are currently supported.");
            }

            string result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return result;
        }
        /// <summary>
        ///     Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }

            var unencodedConsumerSecret = consumerSecret;

            consumerSecret = Uri.EscapeDataString(consumerSecret);
            tokenSecret    = Uri.EscapeDataString(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
                var crypto = new HMACSHA1();
                var key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
                break;
            }

            case OAuthSignatureMethod.HmacSha256:
            {
                var crypto = new HMACSHA256();
                var key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
                break;
            }

            case OAuthSignatureMethod.RsaSha1:
            {
                using (var provider = new RSACryptoServiceProvider {
                        PersistKeyInCsp = false
                    })
                {
                    provider.FromXmlString2(unencodedConsumerSecret);

                    SHA1Managed hasher = new SHA1Managed();
                    byte[]      hash   = hasher.ComputeHash(encoding.GetBytes(signatureBase));

                    signature = Convert.ToBase64String(provider.SignHash(hash, CryptoConfig.MapNameToOID("SHA1")));
                }
                break;
            }

            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1, HMAC-SHA256, and RSA-SHA1 are currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);
        }
Exemple #20
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
#if !PocketPC
                case OAuthSignatureMethod.HmacSha1:
                    {
                        var crypto = new HMACSHA1();
                        var key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                        crypto.Key = _encoding.GetBytes(key);
                        signature = signatureBase.HashWith(crypto);

                        break;
                    }
#endif

                case OAuthSignatureMethod.PlainText:
                    {
                        signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                        break;
                    }

                default:
#if PocketPC
                    throw new NotImplementedException("Only PlainText is currently supported.");
#else
                    throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
#endif
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return result;
        }
 /// <summary>
 /// Creates a signature value given a signature base and the consumer secret.
 /// This method is used when the token secret is currently unknown.
 /// </summary>
 /// <a href="http://oauth.net/core/1.0#rfc.section.9.2"/>
 /// <param name="signatureProvider">The hashing method</param>
 /// <param name="signatureTreatment">The treatment to use on a signature value</param>
 /// <param name="signatureBase">The signature base</param>
 /// <param name="consumerSecret">The consumer key</param>
 /// <returns></returns>
 public static string GetSignature(ISignatureProvider signatureProvider, OAuthSignatureTreatment signatureTreatment, string signatureBase, string consumerSecret)
 {
     return GetSignature(signatureProvider, signatureTreatment, signatureBase, consumerSecret, null);
 }
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <a href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureProvider">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(
            ISignatureProvider signatureProvider,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (string.IsNullOrEmpty(tokenSecret))
            {
                tokenSecret = string.Empty;
            }
            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);
            var data = _encoding.GetBytes(signatureBase);
            var hash = signatureProvider.CalculateSignature(data, consumerSecret, tokenSecret);
            var signature = hash;

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                             ? UrlEncodeRelaxed(signature)
                             : signature;
            return result;
        }
Exemple #23
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, 
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (IsNullOrBlank(tokenSecret))
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);

            string signature;
            switch (signatureMethod)
            {
                case OAuthSignatureMethod.HmacSha1:
                    {
                        var key = String.Concat(consumerSecret, "&", tokenSecret);

            #if NETFX_CORE
                        var crypto = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha1);

                        var cryptoKey = crypto.CreateKey(CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8));

                        signature = HashWith(signatureBase, cryptoKey);
            #endif

            #if !NETFX_CORE
                        var crypto = new HMACSHA1();

                        crypto.Key = _encoding.GetBytes(key);
                        signature = HashWith(signatureBase, crypto);
            #endif

                        break;
                    }
                default:
                    throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return result;
        }
Exemple #24
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }

            var unencodedConsumerSecret = consumerSecret;

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
#if !WINDOWS_UWP
                HMACSHA1 crypto = new HMACSHA1();
                string   key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
#else
                signature = signatureBase.HashWith(HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1));
#endif
                break;
            }

            case OAuthSignatureMethod.HmacSha256:
            {
                HMACSHA256 crypto = new HMACSHA256();
                string     key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);

                break;
            }

            case OAuthSignatureMethod.RsaSha1:
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    Org.BouncyCastle.OpenSsl.PemReader pemReader;
                    Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair;

                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writer.Write(unencodedConsumerSecret);
                        writer.Flush();
                        stream.Position = 0;

                        pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StreamReader(stream));
                        keyPair   = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)pemReader.ReadObject();
                    }

                    Org.BouncyCastle.Crypto.AsymmetricKeyParameter priKey = (Org.BouncyCastle.Crypto.AsymmetricKeyParameter)keyPair.Private;

                    Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters rsaPriv = (Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)priKey;
                    RSAParameters RSAKeyInfo = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(rsaPriv);

                    using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())          // { PersistKeyInCsp = false };
                    {
                        provider.ImportParameters(RSAKeyInfo);

                        SHA1Managed hasher = new SHA1Managed();
                        byte[]      hash   = hasher.ComputeHash(encoding.GetBytes(signatureBase));

                        Trace.WriteLine(string.Format("Hashing [{0}]", signatureBase));

                        signature = Convert.ToBase64String(provider.SignHash(hash, CryptoConfig.MapNameToOID("SHA1")));
                        Trace.WriteLine(string.Format("SHA1 Signature [{0}]", signature));
                    }
                }
            }
            break;

            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1, HMAC-SHA256, and RSA-SHA1 are currently supported.");
            }

            string result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);
        }
 /// <summary>
 /// Creates a signature value given a signature base and the consumer secret.
 /// This method is used when the token secret is currently unknown.
 /// </summary>
 /// <a href="http://oauth.net/core/1.0#rfc.section.9.2"/>
 /// <param name="signatureProvider">The hashing method</param>
 /// <param name="signatureTreatment">The treatment to use on a signature value</param>
 /// <param name="signatureBase">The signature base</param>
 /// <param name="consumerSecret">The consumer key</param>
 /// <returns></returns>
 public static string GetSignature(ISignatureProvider signatureProvider, OAuthSignatureTreatment signatureTreatment, string signatureBase, string consumerSecret)
 {
     return(GetSignature(signatureProvider, signatureTreatment, signatureBase, consumerSecret, null));
 }
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, 
                                          OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase,
                                          string consumerSecret,
                                          string tokenSecret)
        {
            if (IsNullOrBlank(tokenSecret))
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);

            string signature;
            switch (signatureMethod)
            {
                case OAuthSignatureMethod.HmacSha1:
                    {
                        var key = string.Concat(consumerSecret, "&", tokenSecret);
                        var crypto = new HMACSHA1(_encoding.GetBytes(key));

                        signature = HashWith(signatureBase, crypto);

                        break;
                    }
                default:
                    throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                       ? UrlEncodeRelaxed(signature)
                       : signature;

            return result;
        }
Exemple #27
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod,
            OAuthSignatureTreatment signatureTreatment,
            string signatureBase,
            string consumerSecret,
            string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = String.Empty;
            }

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret = UrlEncodeRelaxed(tokenSecret);

            string signature;
            switch (signatureMethod)
            {
                case OAuthSignatureMethod.HmacSha1:
                    {
                        var key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);
                        var keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
                        var hmacSha1Provider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
                        var macKey = hmacSha1Provider.CreateKey(keyMaterial);
                        var dataToBeSigned = CryptographicBuffer.ConvertStringToBinary(signatureBase, BinaryStringEncoding.Utf8);
                        var signatureBuffer = CryptographicEngine.Sign(macKey, dataToBeSigned);
                        signature = CryptographicBuffer.EncodeToBase64String(signatureBuffer);
                        break;
                    }
                case OAuthSignatureMethod.PlainText:
                    {
                        signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                        break;
                    }
                default:
                    throw new NotImplementedException("Only HMAC-SHA1 is currently supported.");
            }

            var result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return result;
        }