コード例 #1
0
ファイル: Sha1HMac.cs プロジェクト: robinreigns/IoTGateway
        /// <summary>
        /// Evaluates the function.
        /// </summary>
        /// <param name="Argument1">Function argument 1.</param>
        /// <param name="Argument2">Function argument 2.</param>
        /// <param name="Variables">Variables collection.</param>
        /// <returns>Function result.</returns>
        public override IElement Evaluate(IElement Argument1, IElement Argument2, Variables Variables)
        {
            if (!(Argument1.AssociatedObjectValue is byte[] Data))
            {
                throw new ScriptRuntimeException("Binary data expected.", this);
            }

            if (!(Argument2.AssociatedObjectValue is byte[] Key))
            {
                throw new ScriptRuntimeException("Binary key expected.", this);
            }

            return(new ObjectValue(Hashes.ComputeHMACSHA1Hash(Key, Data)));
        }
コード例 #2
0
ファイル: DataForm.cs プロジェクト: wu-xian/IoTGateway
        /// <summary>
        /// Signs the form (if necessary), according to XEP-0348.
        /// </summary>
        /// <param name="FormSignatureKey">Form signature key.</param>
        /// <param name="FormSignatureSecret">Form signature secret.</param>
        public void Sign(string FormSignatureKey, string FormSignatureSecret)
        {
            Field oauth_version          = this["oauth_version"];
            Field oauth_signature_method = this["oauth_signature_method"];
            Field oauth_token            = this["oauth_token"];
            Field oauth_token_secret     = this["oauth_token_secret"];
            Field oauth_nonce            = this["oauth_nonce"];
            Field oauth_timestamp        = this["oauth_timestamp"];
            Field oauth_consumer_key     = this["oauth_consumer_key"];
            Field oauth_signature        = this["oauth_signature"];

            if (oauth_version != null &&
                oauth_signature_method != null &&
                oauth_token != null &&
                oauth_token_secret != null &&
                oauth_nonce != null &&
                oauth_timestamp != null &&
                oauth_consumer_key != null &&
                oauth_signature != null)
            {
                SortedDictionary <string, string> Sorted = new SortedDictionary <string, string>();
                DateTime Now          = DateTime.Now.ToUniversalTime();
                TimeSpan Span         = Now - OAuthFirstDay;
                long     TotalSeconds = (long)Span.TotalSeconds;
                string   Nonce        = Guid.NewGuid().ToString().Replace("-", string.Empty);
                string   TokenSecret  = oauth_token_secret.ValueString;

                oauth_consumer_key.SetValue(FormSignatureKey);
                oauth_timestamp.SetValue(TotalSeconds.ToString());
                oauth_nonce.SetValue(Nonce);
                oauth_version.SetValue("1.0");
                oauth_signature_method.SetValue("HMAC-SHA1");

                foreach (Field F in this.fields)
                {
                    Sorted[F.Var] = F.ValueString;
                }

                Sorted.Remove("oauth_token_secret");
                Sorted.Remove("oauth_signature");

                StringBuilder PStr  = new StringBuilder();
                bool          First = true;

                foreach (KeyValuePair <string, string> Pair in Sorted)
                {
                    if (First)
                    {
                        First = false;
                    }
                    else
                    {
                        PStr.Append("&");
                    }

                    PStr.Append(OAuthEncode(Pair.Key));
                    PStr.Append("=");
                    PStr.Append(OAuthEncode(Pair.Value));
                }

                StringBuilder BStr = new StringBuilder();

                BStr.Append("submit&&");                    // No to-field.
                BStr.Append(OAuthEncode(PStr.ToString()));

                byte[] Key  = Encoding.ASCII.GetBytes(OAuthEncode(FormSignatureSecret) + "&" + OAuthEncode(TokenSecret));
                byte[] Hash = Hashes.ComputeHMACSHA1Hash(Key, Encoding.ASCII.GetBytes(BStr.ToString()));

                oauth_signature.SetValue(OAuthEncode(Convert.ToBase64String(Hash)));
            }
        }