private async Task <ICryptoTransform> CreateAndSetEncryptionContext(SendHeaders metadata, CancellationToken cancellationToken)
        {
            if (metadata == null)
            {
                throw new ArgumentNullException(nameof(metadata));
            }

            if (this.encryptionKey == null)
            {
                throw new InvalidOperationException("Key is not initialized. Encryption requires it to be initialized.");
            }

            using (AesCryptoServiceProvider provider = new AesCryptoServiceProvider())
            {
                var data = new EncryptionData
                {
                    EncryptionAgent = new EncryptionAgent("1.0", EncryptionAlgorithm.AES_CBC_256)
                };

                var key = this.encryptionKey();

                var result = await key.WrapKeyAsync(provider.Key, null, cancellationToken).ConfigureAwait(false);

                data.WrappedContentKey   = new WrappedKey(key.Kid, result.Item1, result.Item2);
                data.ContentEncryptionIV = provider.IV;
                metadata.Set(EncryptionHeaderDataKey, JsonConvert.SerializeObject(data));
                return(provider.CreateEncryptor());
            }
        }
Beispiel #2
0
        static void SetHeaders(IDictionary <string, object> dictionary, SendHeaders headers)
        {
            foreach (KeyValuePair <string, object> header in headers.GetAll())
            {
                if (header.Value == null)
                {
                    if (dictionary.ContainsKey(header.Key))
                    {
                        dictionary.Remove(header.Key);
                    }

                    continue;
                }

                if (dictionary.ContainsKey(header.Key))
                {
                    continue;
                }

                switch (header.Value)
                {
                case DateTimeOffset value:
                    if (_dateTimeOffsetConverter.TryConvert(value, out string text))
                    {
                        dictionary[header.Key] = text;
                    }
                    break;

                case DateTime value:
                    if (_dateTimeConverter.TryConvert(value, out text))
                    {
                        dictionary[header.Key] = text;
                    }
                    break;

                case string value:
                    dictionary[header.Key] = value;
                    break;

                case bool value when value:
                    dictionary[header.Key] = bool.TrueString;
                    break;

                case IFormattable formatValue:
                    if (header.Value.GetType().IsValueType)
                    {
                        dictionary[header.Key] = header.Value;
                    }
                    else
                    {
                        dictionary[header.Key] = formatValue.ToString();
                    }
                    break;
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Set the host headers on the SendContext (for error, dead-letter, etc.)
 /// </summary>
 /// <param name="headers"></param>
 public static void SetHostHeaders(this SendHeaders headers)
 {
     headers.Set(MessageHeaders.Host.MachineName, HostMetadataCache.Host.MachineName);
     headers.Set(MessageHeaders.Host.ProcessName, HostMetadataCache.Host.ProcessName);
     headers.Set(MessageHeaders.Host.ProcessId, HostMetadataCache.Host.ProcessId.ToString("F0"));
     headers.Set(MessageHeaders.Host.Assembly, HostMetadataCache.Host.Assembly);
     headers.Set(MessageHeaders.Host.AssemblyVersion, HostMetadataCache.Host.AssemblyVersion);
     headers.Set(MessageHeaders.Host.MassTransitVersion, HostMetadataCache.Host.MassTransitVersion);
     headers.Set(MessageHeaders.Host.FrameworkVersion, HostMetadataCache.Host.FrameworkVersion);
     headers.Set(MessageHeaders.Host.OperatingSystemVersion, HostMetadataCache.Host.OperatingSystemVersion);
 }
 /// <summary>
 /// Set the host headers on the SendContext (for error, dead-letter, etc.)
 /// </summary>
 /// <param name="headers"></param>
 public static void SetHostHeaders(this SendHeaders headers)
 {
     headers.Set("MT-Host-MachineName", HostMetadataCache.Host.MachineName);
     headers.Set("MT-Host-ProcessName", HostMetadataCache.Host.ProcessName);
     headers.Set("MT-Host-ProcessId", HostMetadataCache.Host.ProcessId.ToString("F0"));
     headers.Set("MT-Host-Assembly", HostMetadataCache.Host.Assembly);
     headers.Set("MT-Host-AssemblyVersion", HostMetadataCache.Host.AssemblyVersion);
     headers.Set("MT-Host-MassTransitVersion", HostMetadataCache.Host.MassTransitVersion);
     headers.Set("MT-Host-FrameworkVersion", HostMetadataCache.Host.FrameworkVersion);
     headers.Set("MT-Host-OperatingSystemVersion", HostMetadataCache.Host.OperatingSystemVersion);
 }
Beispiel #5
0
        /// <summary>
        /// Set the host headers on the SendContext (for error, dead-letter, etc.)
        /// </summary>
        /// <param name="headers"></param>
        /// <param name="exception"></param>
        /// <param name="exceptionTimestamp"></param>
        public static void SetExceptionHeaders(this SendHeaders headers, Exception exception, DateTime exceptionTimestamp)
        {
            exception = exception.GetBaseException() ?? exception;

            var exceptionMessage = ExceptionUtil.GetMessage(exception);

            headers.Set(MessageHeaders.Reason, "fault");

            headers.Set(MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType()));
            headers.Set(MessageHeaders.FaultMessage, exceptionMessage);
            headers.Set(MessageHeaders.FaultTimestamp, exceptionTimestamp.ToString("O"));
            headers.Set(MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception));
        }
            void SetHeaders(IDictionary<string, object> dictionary, SendHeaders headers)
            {
                foreach (var header in headers.GetAll())
                {
                    if (header.Value == null)
                    {
                        if (dictionary.ContainsKey(header.Key))
                            dictionary.Remove(header.Key);

                        continue;
                    }

                    if (dictionary.ContainsKey(header.Key))
                        continue;

                    switch (header.Value)
                    {
                        case DateTimeOffset value:
                            if (_dateTimeOffsetConverter.TryConvert(value, out long result))
                                dictionary[header.Key] = new AmqpTimestamp(result);
                            else if (_dateTimeOffsetConverter.TryConvert(value, out string text))
                                dictionary[header.Key] = text;

                            break;

                        case DateTime value:
                            if (_dateTimeConverter.TryConvert(value, out result))
                                dictionary[header.Key] = new AmqpTimestamp(result);
                            else if (_dateTimeConverter.TryConvert(value, out string text))
                                dictionary[header.Key] = text;

                            break;

                        case string value:
                            dictionary[header.Key] = value;
                            break;

                        case IFormattable formatValue:
                            if (header.Value.GetType().IsValueType)
                                dictionary[header.Key] = header.Value;
                            else
                                dictionary[header.Key] = formatValue.ToString();

                            break;
                    }
                }
            }
        /// <summary>
        /// Set the host headers on the SendContext (for error, dead-letter, etc.)
        /// </summary>
        /// <param name="headers"></param>
        /// <param name="exceptionContext"></param>
        public static void SetExceptionHeaders(this SendHeaders headers, ExceptionReceiveContext exceptionContext)
        {
            var exception = exceptionContext.Exception.GetBaseException() ?? exceptionContext.Exception;

            var exceptionMessage = ExceptionUtil.GetMessage(exception);

            headers.Set(MessageHeaders.Reason, "fault");

            headers.Set(MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType()));
            headers.Set(MessageHeaders.FaultMessage, exceptionMessage);
            headers.Set(MessageHeaders.FaultTimestamp, exceptionContext.ExceptionTimestamp.ToString("O"));
            headers.Set(MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception));

            if (exceptionContext.TryGetPayload(out ConsumerFaultInfo info))
            {
                headers.Set(MessageHeaders.FaultConsumerType, info.ConsumerType);
                headers.Set(MessageHeaders.FaultMessageType, info.MessageType);
            }
        }
Beispiel #8
0
        public static void SetTextHeaders(this IPrimitiveMap dictionary, SendHeaders headers)
        {
            foreach (KeyValuePair <string, object> header in headers.GetAll())
            {
                if (header.Value == null)
                {
                    continue;
                }

                if (dictionary.Contains(header.Key))
                {
                    continue;
                }

                if (header.Value is string stringValue)
                {
                    dictionary[header.Key] = stringValue;
                }
                else if (header.Value is IFormattable formatValue && formatValue.GetType().IsValueType)
                {
                    dictionary[header.Key] = formatValue.ToString();
                }
            }
        }
        public static void SetHeaders(this IPrimitiveMap dictionary, SendHeaders headers)
        {
            foreach (KeyValuePair <string, object> header in headers.GetAll())
            {
                if (header.Value == null)
                {
                    if (dictionary.Contains(header.Key))
                    {
                        dictionary.Remove(header.Key);
                    }

                    continue;
                }

                if (dictionary.Contains(header.Key))
                {
                    continue;
                }

                switch (header.Value)
                {
                case DateTimeOffset dateTimeOffset:
                    if (_dateTimeOffsetConverter.TryConvert(dateTimeOffset, out long result))
                    {
                        dictionary[header.Key] = result;
                    }
                    else if (_dateTimeOffsetConverter.TryConvert(dateTimeOffset, out string text))
                    {
                        dictionary[header.Key] = text;
                    }

                    break;

                case DateTime dateTime:
                    if (_dateTimeConverter.TryConvert(dateTime, out result))
                    {
                        dictionary[header.Key] = result;
                    }
                    else if (_dateTimeConverter.TryConvert(dateTime, out string text))
                    {
                        dictionary[header.Key] = text;
                    }

                    break;

                case string s:
                    dictionary[header.Key] = s;
                    break;

                case bool boolValue when boolValue:
                    dictionary[header.Key] = bool.TrueString;
                    break;

                case IFormattable formatValue:
                    if (header.Value.GetType().IsValueType)
                    {
                        dictionary[header.Key] = header.Value;
                    }
                    else
                    {
                        dictionary[header.Key] = formatValue.ToString();
                    }
                    break;
                }

                if (header.Key == "AMQ_SCHEDULED_DELAY")
                {
                    headers.Set(header.Key, null);
                }
            }
        }
Beispiel #10
0
        public static void SetTextHeaders <T>(this IDictionary <string, T> dictionary, SendHeaders headers, Func <string, string, T> converter)
        {
            foreach (var header in headers.GetAll())
            {
                if (header.Value == null)
                {
                    continue;
                }

                if (dictionary.ContainsKey(header.Key))
                {
                    continue;
                }

                if (header.Value is string stringValue)
                {
                    dictionary[header.Key] = converter(header.Key, stringValue);
                }
                else if (header.Value is IFormattable formatValue && formatValue.GetType().IsValueType)
                {
                    dictionary.Add(header.Key, converter(header.Key, formatValue.ToString()));
                }
            }
        }
            static void SetHeaders(IDictionary <string, object> dictionary, SendHeaders headers)
            {
                foreach (KeyValuePair <string, object> header in headers.GetAll())
                {
                    if (header.Value == null)
                    {
                        if (dictionary.ContainsKey(header.Key))
                        {
                            dictionary.Remove(header.Key);
                        }

                        continue;
                    }

                    if (dictionary.ContainsKey(header.Key))
                    {
                        continue;
                    }

                    switch (header.Value)
                    {
                    case DateTimeOffset value:
                        if (_dateTimeOffsetConverter.TryConvert(value, out long result))
                        {
                            dictionary[header.Key] = new AmqpTimestamp(result);
                        }
                        else if (_dateTimeOffsetConverter.TryConvert(value, out string text))
                        {
                            dictionary[header.Key] = text;
                        }

                        break;

                    case DateTime value:
                        if (_dateTimeConverter.TryConvert(value, out result))
                        {
                            dictionary[header.Key] = new AmqpTimestamp(result);
                        }
                        else if (_dateTimeConverter.TryConvert(value, out string text))
                        {
                            dictionary[header.Key] = text;
                        }

                        break;

                    case string value when header.Key == "CC" || header.Key == "BCC":
                        dictionary[header.Key] = new[] { value };
                        break;

                    case IEnumerable <string> strings when header.Key == "CC" || header.Key == "BCC":
                        dictionary[header.Key] = strings.ToArray();
                        break;

                    case string value:
                        dictionary[header.Key] = value;
                        break;

                    case bool value when value:
                        dictionary[header.Key] = bool.TrueString;
                        break;

                    case IFormattable formatValue:
                        if (header.Value.GetType().IsValueType)
                        {
                            dictionary[header.Key] = header.Value;
                        }
                        else
                        {
                            dictionary[header.Key] = formatValue.ToString();
                        }

                        break;
                    }
                }
            }
Beispiel #12
0
 public static void Set(this IDictionary <string, MessageAttributeValue> attributes, SendHeaders sendHeaders)
 {
     attributes.SetTextHeaders(sendHeaders, (key, text) => new MessageAttributeValue
     {
         StringValue = text,
         DataType    = "String"
     });
 }
Beispiel #13
0
 internal static void SetSentTime(this SendHeaders headers, DateTimeOffset time)
 {
     headers.Set(SentTimeHeader, time);
 }
Beispiel #14
0
        private async Task ReadStream()
        {
            while (!Closing)
            {
                try
                {
                    //try to read a header
                    var hdata = new byte[24];
                    await Stream.ReadAsyncExact(hdata, 0, hdata.Length);

                    var h = new MessageHeader();
                    h.ReadFromPayload(hdata, 0);
                    if (h != null)
                    {
                        //read the payload
                        var pl = new byte[h.PayloadSize];
                        await Stream.ReadAsyncExact(pl, 0, pl.Length);

                        bool checksumOk = false;

                        //verify hash
                        using (var sha = SHA256.Create())
                        {
                            var h1 = sha.ComputeHash(pl);
                            var h2 = sha.ComputeHash(h1);

                            checksumOk = h2[0] == h.Checksum[0] && h2[1] == h.Checksum[1] && h2[2] == h.Checksum[2] && h2[3] == h.Checksum[3];
                        }

                        if (checksumOk)
                        {
                            switch (h.Command)
                            {
                            case "addr\0\0\0\0\0\0\0\0":
                            {
                                if (OnAddr != null)
                                {
                                    var a = new Addr();
                                    a.ReadFromPayload(pl, 0);

                                    await OnAddr?.Invoke(this, a);
                                }
                                break;
                            }

                            case "alert\0\0\0\0\0\0\0":
                            {
                                if (OnAlert != null)
                                {
                                    var a = new Alert();
                                    a.ReadFromPayload(pl, 0);

                                    await OnAlert?.Invoke(this, a);
                                }
                                break;
                            }

                            case "feefilter\0\0\0":
                            {
                                if (OnFeeFilter != null)
                                {
                                    var f = new FeeFilter();
                                    f.ReadFromPayload(pl, 0);

                                    await OnFeeFilter?.Invoke(this, f);
                                }
                                break;
                            }

                            case "filteradd\0\0\0":
                            {
                                if (OnFilterAdd != null)
                                {
                                    var f = new FilterAdd();
                                    f.ReadFromPayload(pl, 0);

                                    await OnFilterAdd?.Invoke(this, f);
                                }
                                break;
                            }

                            case "filterclear\0":
                            {
                                if (OnFilterClear != null)
                                {
                                    var f = new FilterClear();
                                    f.ReadFromPayload(pl, 0);

                                    await OnFilterClear?.Invoke(this, f);
                                }
                                break;
                            }

                            case "filterload\0\0":
                            {
                                if (OnFilterLoad != null)
                                {
                                    var f = new FilterLoad();
                                    f.ReadFromPayload(pl, 0);

                                    await OnFilterLoad?.Invoke(this, f);
                                }
                                break;
                            }

                            case "getaddr\0\0\0\0\0":
                            {
                                if (OnGetAddr != null)
                                {
                                    var ga = new GetAddr();
                                    ga.ReadFromPayload(pl, 0);

                                    await OnGetAddr?.Invoke(this, ga);
                                }
                                break;
                            }

                            case "getblocks\0\0\0":
                            {
                                if (OnGetBlocks != null)
                                {
                                    var gb = new GetBlocks();
                                    gb.ReadFromPayload(pl, 0);

                                    await OnGetBlocks?.Invoke(this, gb);
                                }
                                break;
                            }

                            case "getdata\0\0\0\0\0":
                            {
                                if (OnGetData != null)
                                {
                                    var gd = new GetData();
                                    gd.ReadFromPayload(pl, 0);

                                    await OnGetData?.Invoke(this, gd);
                                }
                                break;
                            }

                            case "getheaders\0\0":
                            {
                                if (OnGetHeaders != null)
                                {
                                    var gh = new GetHeaders();
                                    gh.ReadFromPayload(pl, 0);

                                    await OnGetHeaders?.Invoke(this, gh);
                                }
                                break;
                            }

                            case "headers\0\0\0\0\0":
                            {
                                if (OnHeaders != null)
                                {
                                    var hd = new Headers();
                                    hd.ReadFromPayload(pl, 0);

                                    await OnHeaders?.Invoke(this, hd);
                                }
                                break;
                            }

                            case "inv\0\0\0\0\0\0\0\0\0":
                            {
                                if (OnInv != null)
                                {
                                    var iv = new Inv();
                                    iv.ReadFromPayload(pl, 0);

                                    await OnInv?.Invoke(this, iv);
                                }
                                break;
                            }

                            case "mempool\0\0\0\0\0":
                            {
                                if (OnMemPool != null)
                                {
                                    var mp = new MemPool();
                                    mp.ReadFromPayload(pl, 0);

                                    await OnMemPool?.Invoke(this, mp);
                                }
                                break;
                            }

                            case "notfound\0\0\0\0":
                            {
                                if (OnNotFound != null)
                                {
                                    var nf = new NotFound();
                                    nf.ReadFromPayload(pl, 0);

                                    await OnNotFound?.Invoke(this, nf);
                                }
                                break;
                            }

                            case "ping\0\0\0\0\0\0\0\0":
                            {
                                if (OnPing != null)
                                {
                                    var ping = new Ping();
                                    ping.ReadFromPayload(pl, 0);

                                    await OnPing?.Invoke(this, ping);
                                }
                                break;
                            }

                            case "pong\0\0\0\0\0\0\0\0":
                            {
                                if (OnPong != null)
                                {
                                    var pong = new Pong();
                                    pong.ReadFromPayload(pl, 0);

                                    await OnPong?.Invoke(this, pong);
                                }
                                break;
                            }

                            case "reject\0\0\0\0\0\0":
                            {
                                if (OnReject != null)
                                {
                                    var re = new Reject();
                                    re.ReadFromPayload(pl, 0);

                                    await OnReject?.Invoke(this, re);
                                }
                                break;
                            }

                            case "sendheaders\0":
                            {
                                if (OnSendHeaders != null)
                                {
                                    var sh = new SendHeaders();
                                    sh.ReadFromPayload(pl, 0);

                                    await OnSendHeaders?.Invoke(this, sh);
                                }
                                break;
                            }

                            case "verack\0\0\0\0\0\0":
                            {
                                if (OnVerAck != null)
                                {
                                    var va = new VerAck();
                                    va.ReadFromPayload(pl, 0);

                                    await OnVerAck.Invoke(this, va);
                                }
                                break;
                            }

                            case "version\0\0\0\0\0":
                            {
                                if (OnVersion != null)
                                {
                                    var v = new bitcoin_lib.P2P.Version("");
                                    v.ReadFromPayload(pl, 0);

                                    await OnVersion?.Invoke(this, v);
                                }
                                break;
                            }

                            default:
                            {
                                //Console.WriteLine($"Got cmd: {h.Command}");
                                break;
                            }
                            }
                        }
                        else
                        {
                            Closing = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Closing = true;
                }
            }
        }
Beispiel #15
0
        public AmazonSqsHeaderProvider(Message message)
        {
            _message = message;

            _adapter = new AmazonSqsHeaderAdapter(message.MessageAttributes);
        }
Beispiel #16
0
 private Task Peer_OnSendHeaders(BitcoinPeer s, SendHeaders sh)
 {
     throw new NotImplementedException();
 }