public static CardManager GetManagerWithConstAccessTokenProvider(ConstAccessTokenProvider constAccessTokenProvider)
        {
            Func <RawSignedModel, Task <RawSignedModel> > signCallBackFunc = async(model) =>
            {
                var response = await EmulateServerResponseToSignByAppRequest(model.ExportAsString());

                return(RawSignedModelUtils.GenerateFromString(response));
            };

            var validator = new VirgilCardVerifier(new VirgilCardCrypto())
            {
                VerifySelfSignature = true, VerifyVirgilSignature = true
            };

            validator.ChangeServiceCreds(AppSettings.ServicePublicKeyDerBase64);
            var manager = new CardManager(new CardManagerParams()
            {
                CardCrypto          = CardCrypto,
                ApiUrl              = AppSettings.CardsServiceAddress,
                AccessTokenProvider = constAccessTokenProvider,
                SignCallBack        = signCallBackFunc,
                Verifier            = validator
            });

            return(manager);
        }
Exemplo n.º 2
0
        public async Task CardManager_Should_RaiseException_IfExpiredToken()
        {
            // STC-26
            var aliceName = "alice-" + Guid.NewGuid();
            //var aliceCard = await IntegrationHelper.PublishCard(aliceName);
            var crypto  = new VirgilCrypto();
            var keypair = crypto.GenerateKeys();

            var jwtFromServer = await IntegrationHelper.EmulateServerResponseToBuildTokenRequest(
                new TokenContext(faker.Random.AlphaNumeric(20), "some_operation"), 0.3
                );

            var jwt = new Jwt(jwtFromServer);
            var constAccessTokenProvider = new ConstAccessTokenProvider(jwt);

            var cardManager = IntegrationHelper.GetManagerWithConstAccessTokenProvider(constAccessTokenProvider);
            var aliceCard   = await cardManager.PublishCardAsync(
                new CardParams()
            {
                Identity       = aliceName,
                PublicKey      = keypair.PublicKey,
                PrivateKey     = keypair.PrivateKey,
                PreviousCardId = null,
                ExtraFields    = new Dictionary <string, string>
                {
                    { "some meta key", "some meta val" }
                }
            });

            // var aaa = await IntegrationHelper.GetCardAsync(aliceCard.Id);
            Thread.Sleep(30000);
            Assert.ThrowsAsync <UnauthorizedClientException>(
                async() => await cardManager.GetCardAsync(aliceCard.Id));
        }
Exemplo n.º 3
0
        public async Task YTC16()
        {
            var correnctPassword = "******";
            var wrongPassword    = "******";

            var crypto = Substitute.For <IPythiaCrypto>();

            crypto.Blind(correnctPassword).Returns(new PythiaCrypto().Blind(correnctPassword));
            crypto.Blind(wrongPassword).Returns(new PythiaCrypto().Blind(wrongPassword));
            crypto.Deblind(Arg.Any <byte[]>(), Arg.Any <byte[]>())
            .Returns((arg) => new PythiaCrypto().Deblind((byte[])arg[0], (byte[])arg[1]));
            crypto.GenerateSalt().Returns(new PythiaCrypto().GenerateSalt());
            crypto.Verify(Arg.Any <PythiaProofParams>()).Returns(true, false, false, false, false);

            var virgilCrypto = new VirgilCrypto();
            var signer       = new VirgilAccessTokenSigner();

            var apiKey    = virgilCrypto.ImportPrivateKey(Bytes.FromString(AppSettings.Get.ApiKey, StringEncoding.BASE64));
            var generator = new JwtGenerator(AppSettings.Get.AppId, apiKey, AppSettings.Get.ApiKeyId, TimeSpan.FromDays(1), signer);
            var jwt       = generator.GenerateToken("PYTHIA-CLIENT");

            var connection    = new ServiceConnection(AppSettings.Get.ApiURL);
            var tokenProvider = new ConstAccessTokenProvider(jwt);

            var client = new PythiaClient(connection, new NewtonsoftJsonSerializer());

            var protocol = new PythiaProtocol(client, crypto, tokenProvider, AppSettings.Get.ProofKeys.Skip(1));
            var bpp      = await protocol.CreateBreachProofPasswordAsync(correnctPassword);

            await Task.Delay(TimeSpan.FromSeconds(2));

            var verifyResult1 = await protocol.VerifyBreachProofPasswordAsync(correnctPassword, bpp, false);

            verifyResult1.Should().BeTrue();
            await Task.Delay(TimeSpan.FromSeconds(2));

            Func <Task> verifyResult2 = async() => { await protocol.VerifyBreachProofPasswordAsync(correnctPassword, bpp, true); };

            verifyResult2.Should().Throw <Exception>();
            await Task.Delay(TimeSpan.FromSeconds(2));

            var verifyResult3 = await protocol.VerifyBreachProofPasswordAsync(wrongPassword, bpp, false);

            verifyResult3.Should().BeFalse();
            await Task.Delay(TimeSpan.FromSeconds(2));

            Func <Task> verifyResult4 = async() => { await protocol.VerifyBreachProofPasswordAsync(wrongPassword, bpp, true); };

            verifyResult4.Should().Throw <Exception>();
            await Task.Delay(TimeSpan.FromSeconds(2));
        }
Exemplo n.º 4
0
        public async Task GetTokenAsync_Should_ReturnTheSameToken_InConstAccessTokenProviderAsync()
        {
            var jwtFromServer = await IntegrationHelper.EmulateServerResponseToBuildTokenRequest(
                new TokenContext(faker.Random.AlphaNumeric(20), "some_operation")
                );

            var jwt = new Jwt(jwtFromServer);
            var constAccessTokenProvider = new ConstAccessTokenProvider(jwt);
            var token1 = await constAccessTokenProvider.GetTokenAsync(
                new TokenContext(
                    faker.Random.AlphaNumeric(10),
                    faker.Random.AlphaNumeric(10),
                    true)
                );

            var token2 = await constAccessTokenProvider.GetTokenAsync(
                new TokenContext(
                    faker.Random.AlphaNumeric(10),
                    faker.Random.AlphaNumeric(10),
                    true)
                );

            Assert.AreEqual(token1, token2);
        }