public void round_trip_query_should_validate()
        {
            Signature signature = new HS256Signature(_symmetricKey);

            var payload = new EncodingParameters("token");

            payload.QueryParameters.Add(new KeyValuePair <string, string>("x", "1"));
            payload.QueryParameters.Add(new KeyValuePair <string, string>("y", "2"));

            var token = signature.Sign(payload);

            var cnfJson = new Cnf(
                new JsonWebKey
            {
                Kty = "oct",
                Alg = "HS256",
                K   = Base64Url.Encode(_symmetricKey)
            }).ToJson();
            var jwk = CnfParser.Parse(cnfJson);
            var key = jwk.ToPublicKey();

            signature = key.ToSignature();

            var result = signature.Verify(token);

            result.Should().NotBeNull();
            payload.Encode().IsSame(result).Should().BeTrue();
        }
        public async Task access_token_in_pop_token_should_be_validated()
        {
            var claims = new Claim[] {
                new Claim("sub", "123")
            };
            var id      = new ClaimsIdentity(claims, "password");
            var subject = new ClaimsPrincipal(id);

            var handler = new JwtSecurityTokenHandler();
            var token   = new JwtSecurityToken(
                "issuer", "audience",
                subject.Claims,
                notBefore: DateTime.UtcNow.AddSeconds(-5),
                expires: DateTime.UtcNow.AddMinutes(5),
                signingCredentials: new X509SigningCredentials(SigningCertificate.Cert));
            var jwt = handler.WriteToken(token);

            var encodingParams = new EncodingParameters(jwt);
            var pop            = _signature.Sign(encodingParams);

            _client.SetToken("PoP", pop);

            var response = await _client.GetAsync("http://foo.com/path?x=1&y=2");

            response.StatusCode.Should().Be(HttpStatusCode.OK);
        }
Ejemplo n.º 3
0
        public int StartCapture(string pwszFileName, Guid subType)
        {
            var hr = 0;

            lock (LockSync)
            {
                if (PReader == null)
                    return hr;
                // Create the sink writer
                if (Succeeded(hr))
                {
                    hr = MFExtern.MFCreateSinkWriterFromURL(pwszFileName, null, null, out PWriter);
                }

                // Set up the encoding parameters.
                if (Succeeded(hr))
                {
                    var param = new EncodingParameters {Subtype = subType};
                    hr = ConfigureCapture(param);
                }

                if (Succeeded(hr))
                {
                    BFirstSample = true;
                    LlBaseTime = 0;
                }
            }

            return hr;
        }
Ejemplo n.º 4
0
        public virtual async Task <EncodedParameters> ReadEncodedParametersAsync(IDictionary <string, object> env, EncodedParameters popValues)
        {
            if (env == null)
            {
                throw new ArgumentNullException("env");
            }
            if (popValues == null)
            {
                throw new ArgumentNullException("popValues");
            }

            var logger = Logging.GetLogger();

            var ctx = new OwinContext(env);

            var parameters = new EncodingParameters(popValues.AccessToken);

            if (ValidateMethod)
            {
                logger.WriteVerbose("Validating method");
                parameters.Method = new HttpMethod(ctx.Request.Method);
            }

            if (ValidateHost)
            {
                logger.WriteVerbose("Validating host");
                parameters.Host = ctx.Request.Host.Value;
            }

            if (ValidatePath)
            {
                logger.WriteVerbose("Validating path");
                parameters.Path = ctx.Request.Uri.AbsolutePath;
            }

            var queryParamsToValidate = GetQueryParamsToValidate(ctx.Request.Query, popValues.QueryParameters?.Keys);

            foreach (var item in queryParamsToValidate)
            {
                logger.WriteVerbose("Validating query string parameter: " + item.Key);
                parameters.QueryParameters.Add(item);
            }

            var headersToValidate = GetRequestHeadersToValidate(ctx.Request.Headers, popValues.RequestHeaders?.Keys);

            foreach (var item in headersToValidate)
            {
                logger.WriteVerbose("Validating request header: " + item.Key);
                parameters.RequestHeaders.Add(item);
            }

            if (ValidateBody)
            {
                logger.WriteVerbose("Validating body");
                parameters.Body = await ReadBodyAsync(ctx.Request);
            }

            return(parameters.Encode());
        }
Ejemplo n.º 5
0
        HResult ConfigureEncoder(
            EncodingParameters eparams,
            IMFMediaType pType,
            IMFSinkWriter pWriter,
            out int pdwStreamIndex
            )
        {
            HResult hr = HResult.S_OK;

            IMFMediaType pType2 = null;

            hr = MFExtern.MFCreateMediaType(out pType2);

            if (Succeeded(hr))
            {
                hr = pType2.SetGUID(MFAttributesClsid.MF_MT_MAJOR_TYPE, MFMediaType.Video);
            }

            if (Succeeded(hr))
            {
                hr = pType2.SetGUID(MFAttributesClsid.MF_MT_SUBTYPE, eparams.subtype);
            }

            if (Succeeded(hr))
            {
                hr = pType2.SetUINT32(MFAttributesClsid.MF_MT_AVG_BITRATE, eparams.bitrate);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_FRAME_SIZE);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_FRAME_RATE);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_PIXEL_ASPECT_RATIO);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_INTERLACE_MODE);
            }

            pdwStreamIndex = 0;
            if (Succeeded(hr))
            {
                hr = pWriter.AddStream(pType2, out pdwStreamIndex);
            }

            SafeRelease(pType2);

            return(hr);
        }
        public void asymmetric_signed_result_should_be_able_to_verifed()
        {
            var subject  = new RS256Signature(_asymmetricKey);
            var encoding = new EncodingParameters("foo");

            var token   = subject.Sign(encoding);
            var decoded = subject.Verify(token);

            decoded.AccessToken.Should().Be("foo");
        }
        public void encode_should_capture_path()
        {
            var subject = new EncodingParameters("token");

            subject.Path = "/path";

            var result = subject.Encode();

            result.Path.Should().Be("/path");
        }
        public void encode_should_capture_host()
        {
            var subject = new EncodingParameters("token");

            subject.Host = "foo.com";

            var result = subject.Encode();

            result.Host.Should().Be("foo.com");
        }
        public void encode_should_capture_method()
        {
            var subject = new EncodingParameters("token");

            subject.Method = HttpMethod.Put;

            var result = subject.Encode();

            result.Method.Should().Be("PUT");
        }
        public void when_using_wrong_key_should_not_be_able_to_verify()
        {
            var encoding = new EncodingParameters("foo");
            var token    = new RS256Signature(_asymmetricKey).Sign(encoding);

            var subject = new HS256Signature(_symmetricKey);
            var decoded = subject.Verify(token);

            decoded.Should().BeNull();
        }
        public void encode_should_capture_body()
        {
            var subject = new EncodingParameters("token");

            subject.Body = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

            var result = subject.Encode();

            result.BodyHash.Should().Be("vnPfBFvKBXMv9S6m1FMSeSi1VLnnmqYXGr4xk9ImCp8");
        }
Ejemplo n.º 12
0
        HResult ConfigureCapture(EncodingParameters eparam)
        {
            HResult hr          = HResult.S_OK;
            int     sink_stream = 0;

            IMFMediaType pType = null;

            hr = ConfigureSourceReader(m_pReader);

            if (Succeeded(hr))
            {
                hr = m_pReader.GetCurrentMediaType(
                    MF_SOURCE_READER_FIRST_VIDEO_STREAM,
                    out pType
                    );
            }

            if (Succeeded(hr))
            {
                hr = ConfigureEncoder(eparam, pType, m_pWriter, out sink_stream);
            }

            if (Succeeded(hr))
            {
                // Register the color converter DSP for this process, in the video
                // processor category. This will enable the sink writer to enumerate
                // the color converter when the sink writer attempts to match the
                // media types.

                hr = MFExtern.MFTRegisterLocalByCLSID(
                    typeof(CColorConvertDMO).GUID,
                    MFTransformCategory.MFT_CATEGORY_VIDEO_PROCESSOR,
                    "",
                    MFT_EnumFlag.SyncMFT,
                    0,
                    null,
                    0,
                    null
                    );
            }

            if (Succeeded(hr))
            {
                hr = m_pWriter.SetInputMediaType(sink_stream, pType, null);
            }

            if (Succeeded(hr))
            {
                hr = m_pWriter.BeginWriting();
            }

            SafeRelease(pType);

            return(hr);
        }
        public void encode_should_capture_query()
        {
            var subject = new EncodingParameters("token");

            subject.QueryParameters.Add(new KeyValuePair <string, string>("foo", "bar1"));
            subject.QueryParameters.Add(new KeyValuePair <string, string>("foo", "bar2"));

            var result = subject.Encode();

            result.QueryParameters.Should().NotBeNull();
            result.QueryParameters.Keys.Should().ContainInOrder(new string[] { "foo", "foo" });
            result.QueryParameters.HashedValue.Should().Be("EgePUeakH8URmSH3yz8zE39c0r4kYVYsuQRSZa_MdvQ");
        }
        public void encode_should_capture_headers()
        {
            var subject = new EncodingParameters("token");

            subject.RequestHeaders.Add(new KeyValuePair <string, string>("foo", "bar1"));
            subject.RequestHeaders.Add(new KeyValuePair <string, string>("foo", "bar2"));

            var result = subject.Encode();

            result.RequestHeaders.Should().NotBeNull();
            result.RequestHeaders.Keys.Should().ContainInOrder(new string[] { "foo", "foo" });
            result.RequestHeaders.HashedValue.Should().Be("trcKLrzChz2G8_T50KpExyZ9DTfcsMTXsGGd3YwftLc");
        }
Ejemplo n.º 15
0
        public TextFileUserImporter(Stream stream, FileParameters param)
        {
            this.stream = stream;
            ExcludeList = new List <string> {
                "ID", "Status"
            };

            Encoding     = EncodingParameters.GetById(param.Encode);
            Separators   = SeparatorParameters.GetById(param.Separator);
            TextDelmiter = DelimiterParameters.GetById(param.Delimiter);

            FirstPosition = param.Position;
            UserHeader    = param.UserHeader;
        }
        public async Task valid_claim_should_succeed_validation()
        {
            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload  = new EncodingParameters("token");
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeTrue();
        }
        public async Task negative_timestamp_should_fail_validation()
        {
            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload = new EncodingParameters("token");

            payload.TimeStamp = DateTimeOffset.MinValue;
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeFalse();
        }
        public async Task too_new_timestamp_should_fail_validation()
        {
            _stubOptions.TimespanValidityWindow = TimeSpan.FromSeconds(300);

            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload = new EncodingParameters("token");

            payload.TimeStamp = DateTimeOffset.UtcNow.AddSeconds(302);
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeFalse();
        }
        public void encode_should_capture_access_token_and_timestamp()
        {
            var subject = new EncodingParameters("token");

            subject.AccessToken.Should().Be("token");

            var now = DateTimeOffset.UtcNow;

            subject.TimeStamp = now;

            var result = subject.Encode();

            result.AccessToken.Should().Be("token");
            result.TimeStamp.Should().Be(now.ToEpochTime());
            result.Method.Should().BeNull();
            result.Host.Should().BeNull();
            result.Path.Should().BeNull();
            result.QueryParameters.Should().BeNull();
            result.RequestHeaders.Should().BeNull();
            result.BodyHash.Should().BeNull();
        }
        public void alg_mismatch_should_fail_validation()
        {
            var hs256 = new HS256Signature(_symmetricKey);
            var hs384 = new HS384Signature(_symmetricKey);
            var hs512 = new HS512Signature(_symmetricKey);
            var rs256 = new RS256Signature(_asymmetricKey);
            var rs384 = new RS384Signature(_asymmetricKey);
            var rs512 = new RS512Signature(_asymmetricKey);

            var encoding = new EncodingParameters("foo");

            hs256.Verify(hs384.Sign(encoding)).Should().BeNull();
            hs384.Verify(hs512.Sign(encoding)).Should().BeNull();
            hs512.Verify(hs256.Sign(encoding)).Should().BeNull();

            rs256.Verify(rs512.Sign(encoding)).Should().BeNull();
            rs384.Verify(rs256.Sign(encoding)).Should().BeNull();
            rs512.Verify(rs384.Sign(encoding)).Should().BeNull();

            rs512.Verify(hs512.Sign(encoding)).Should().BeNull();
            hs512.Verify(rs512.Sign(encoding)).Should().BeNull();
        }
Ejemplo n.º 21
0
        public HResult StartCapture(
            IMFActivate pActivate,
            string pwszFileName,
            EncodingParameters param
            )
        {
            HResult hr = HResult.S_OK;

            IMFMediaSource pSource = null;
            object         pS;

            lock (this)
            {
                // Create the media source for the device.
                hr = pActivate.ActivateObject(
                    typeof(IMFMediaSource).GUID,
                    out pS
                    );
                pSource = (IMFMediaSource)pS;

                // Get the symbolic link. This is needed to handle device-
                // loss notifications. (See CheckDeviceLost.)

                if (Succeeded(hr))
                {
                    int iSize;
                    hr = pActivate.GetAllocatedString(
                        MFAttributesClsid.MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK,
                        out m_pwszSymbolicLink,
                        out iSize
                        );
                }

                if (Succeeded(hr))
                {
                    hr = OpenMediaSource(pSource);
                }

                // Create the sink writer
                if (Succeeded(hr))
                {
                    hr = MFExtern.MFCreateSinkWriterFromURL(
                        pwszFileName,
                        null,
                        null,
                        out m_pWriter
                        );
                }

                // Set up the encoding parameters.
                if (Succeeded(hr))
                {
                    hr = ConfigureCapture(param);
                }

                if (Succeeded(hr))
                {
                    m_bFirstSample = true;
                    m_llBaseTime   = 0;

                    // Request the first video frame.

                    hr = m_pReader.ReadSample(
                        MF_SOURCE_READER_FIRST_VIDEO_STREAM,
                        0,
                        IntPtr.Zero,
                        IntPtr.Zero,
                        IntPtr.Zero,
                        IntPtr.Zero
                        );
                }

                SafeRelease(pSource);
            }

            return(hr);
        }
Ejemplo n.º 22
0
        public int StartCapture(
            IMFActivate pActivate,
            string pwszFileName,
            EncodingParameters param
            )
        {
            int hr = S_Ok;

            IMFMediaSource pSource = null;
            object pS;

            lock (this)
            {
                // Create the media source for the device.
                hr = pActivate.ActivateObject(
                    typeof(IMFMediaSource).GUID,
                    out pS
                    );
                pSource = (IMFMediaSource)pS;

                // Get the symbolic link. This is needed to handle device-
                // loss notifications. (See CheckDeviceLost.)

                if (Succeeded(hr))
                {
                    int iSize;
                    hr = pActivate.GetAllocatedString(
                        MFAttributesClsid.MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK,
                        out m_pwszSymbolicLink,
                        out iSize
                        );
                }

                if (Succeeded(hr))
                {
                    hr = OpenMediaSource(pSource);
                }

                // Create the sink writer
                if (Succeeded(hr))
                {
                    hr = MFExtern.MFCreateSinkWriterFromURL(
                        pwszFileName,
                        null,
                        null,
                        out m_pWriter
                        );
                }

                // Set up the encoding parameters.
                if (Succeeded(hr))
                {
                    hr = ConfigureCapture(param);
                }

                if (Succeeded(hr))
                {
                    m_bFirstSample = true;
                    m_llBaseTime = 0;

                    // Request the first video frame.

                    hr = m_pReader.ReadSample(
                        MF_SOURCE_READER_FIRST_VIDEO_STREAM,
                        0,
                        IntPtr.Zero,
                        IntPtr.Zero,
                        IntPtr.Zero,
                        IntPtr.Zero
                        );
                }

                SafeRelease(pSource);
            }

            return hr;
        }
Ejemplo n.º 23
0
        int ConfigureCapture(EncodingParameters eparam)
        {
            int hr = S_Ok;
            int sink_stream = 0;

            IMFMediaType pType = null;

            hr = ConfigureSourceReader(m_pReader);

            if (Succeeded(hr))
            {
                hr = m_pReader.GetCurrentMediaType(
                    MF_SOURCE_READER_FIRST_VIDEO_STREAM,
                    out pType
                    );
            }

            if (Succeeded(hr))
            {
                hr = ConfigureEncoder(eparam, pType, m_pWriter, out sink_stream);
            }

            if (Succeeded(hr))
            {
                // Register the color converter DSP for this process, in the video
                // processor category. This will enable the sink writer to enumerate
                // the color converter when the sink writer attempts to match the
                // media types.

                hr = MFExtern.MFTRegisterLocalByCLSID(
                    typeof(CColorConvertDMO).GUID,
                    MFTransformCategory.MFT_CATEGORY_VIDEO_PROCESSOR,
                    "",
                    MFT_EnumFlag.SyncMFT,
                    0,
                    null,
                    0,
                    null
                    );
            }

            if (Succeeded(hr))
            {
                hr = m_pWriter.SetInputMediaType(sink_stream, pType, null);
            }

            if (Succeeded(hr))
            {
                hr = m_pWriter.BeginWriting();
            }

            SafeRelease(pType);

            return hr;
        }
Ejemplo n.º 24
0
        private int ConfigureCapture(EncodingParameters eparam)
        {
            IMFMediaType pType = null;

            //var hr = ConfigureSourceReader(PReader);

            var hr = PReader.GetCurrentMediaType((int)MF_SOURCE_READER.FirstVideoStream, out pType);
            int w, h;
            MfGetAttributeSize(pType, out w, out h);
            eparam.Bitrate = w*h*20;

            var sinkStream = 0;
            if (Succeeded(hr))
            {
                hr = ConfigureEncoder(eparam, pType, PWriter, out sinkStream);
            }

            if (Succeeded(hr))
            {
                // Register the color converter DSP for this process, in the video
                // processor category. This will enable the sink writer to enumerate
                // the color converter when the sink writer attempts to match the
                // media types.

                hr = MFExtern.MFTRegisterLocalByCLSID(
                    typeof(CColorConvertDMO).GUID,
                    MFTransformCategory.MFT_CATEGORY_VIDEO_PROCESSOR,
                    "",
                    MFT_EnumFlag.SyncMFT,
                    0,
                    null,
                    0,
                    null
                    );
            }

            if (Succeeded(hr))
            {
                hr = PWriter.SetInputMediaType(sinkStream, pType, null);
            }

            if (Succeeded(hr))
            {
                hr = PWriter.BeginWriting();
            }

            SafeRelease(pType);

            return hr;
        }
Ejemplo n.º 25
0
        private static int ConfigureEncoder(EncodingParameters eparams, IMFMediaType pType, IMFSinkWriter pWriter,
            out int pdwStreamIndex)
        {
            IMFMediaType pType2;

            var hr = MFExtern.MFCreateMediaType(out pType2);

            if (Succeeded(hr))
            {
                hr = pType2.SetGUID(MFAttributesClsid.MF_MT_MAJOR_TYPE, MFMediaType.Video);
            }

            if (Succeeded(hr))
            {
                hr = pType2.SetGUID(MFAttributesClsid.MF_MT_SUBTYPE, eparams.Subtype);
            }

            if (Succeeded(hr))
            {
                hr = pType2.SetUINT32(MFAttributesClsid.MF_MT_AVG_BITRATE, eparams.Bitrate);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_FRAME_SIZE);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_FRAME_RATE);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_PIXEL_ASPECT_RATIO);
            }

            if (Succeeded(hr))
            {
                hr = CopyAttribute(pType, pType2, MFAttributesClsid.MF_MT_INTERLACE_MODE);
            }

            pdwStreamIndex = 0;
            if (Succeeded(hr))
            {
                hr = pWriter.AddStream(pType2, out pdwStreamIndex);
            }

            SafeRelease(pType2);

            return hr;
        }