Esempio n. 1
0
        private VirgilClient PredefinedClient(VirgilCrypto crypto)
        {
            var clientParams = new VirgilClientParams(ConfigurationManager.AppSettings["virgil:AppAccessToken"]);

            clientParams.SetCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsServicesAddress"]);
            clientParams.SetIdentityServiceAddress(ConfigurationManager.AppSettings["virgil:IdentityServiceAddress"]);
            clientParams.SetRAServiceAddress(ConfigurationManager.AppSettings["virgil:RAServicesAddress"]);
            clientParams.SetReadCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsReadServicesAddress"]);

            var validator = new CardValidator(crypto);

            // To use staging Verifier instead of default verifier
            var cardVerifier = new CardVerifierInfo
            {
                CardId        = ConfigurationManager.AppSettings["virgil:ServiceCardId"],
                PublicKeyData = VirgilBuffer.From(ConfigurationManager.AppSettings["virgil:ServicePublicKeyDerBase64"],
                                                  StringEncoding.Base64)
            };

            validator.AddVerifier(cardVerifier.CardId, cardVerifier.PublicKeyData.GetBytes());

            var client = new VirgilClient(clientParams);

            client.SetCardValidator(validator);

            return(client);
        }
Esempio n. 2
0
        public void DecryptThenVerifyByListOfTrustedCard_EncryptedMessage_ShouldGivenMessageBeDecryptedAndVerified()
        {
            // Create Alice's key
            var AppAccessToken = ConfigurationManager.AppSettings["virgil:AppAccessToken"];
            var virgil         = new VirgilApi(AppAccessToken);
            var aliceKey       = virgil.Keys.Generate();
            var aliceCard      = virgil.Cards.Create("AliceCard", aliceKey);
            var bobKey         = virgil.Keys.Generate();
            var bobCard        = virgil.Cards.Create("BobCard", bobKey);
            var samCard        = virgil.Cards.Create("SamCard", virgil.Keys.Generate());

            // Alice signs some message then ecrypt it for Bob and Sam
            var message = "Encrypt me, please!";
            var signedAndEncryptedMessage = aliceKey.SignThenEncrypt(VirgilBuffer.From(message),
                                                                     new List <VirgilCard>()
            {
                bobCard, samCard
            });

            // Somehow transfer signed and encrypted message as Base64 string
            var transferMessage = signedAndEncryptedMessage.ToString(StringEncoding.Base64);

            // Bob tries to decrypt and verify message
            var receivedMessage             = VirgilBuffer.From(transferMessage, StringEncoding.Base64);
            var decryptedAneVerifiedMessage = bobKey.DecryptThenVerify(receivedMessage, samCard, aliceCard);

            decryptedAneVerifiedMessage.ToString().ShouldBeEquivalentTo(message);
        }
        public void GetBytes_InstantiatedWithRandomBytes_ShouldReturnTheSameBytesAsInitialized()
        {
            var randomBytes = GenerateMe.RandomBytes();

            var buffer       = new VirgilBuffer(randomBytes);
            var resultString = buffer.GetBytes();

            Assert.AreEqual(resultString, randomBytes);
        }
        public void ToHEXString_InstantiatedWithRandomBytes_ShouldReturnNotSeporatedLovercaseHexString()
        {
            var randomBytes = GenerateMe.RandomBytes();

            var buffer       = new VirgilBuffer(randomBytes);
            var resultString = buffer.ToString(StringEncoding.Hex);

            resultString.Should().Be(BitConverter.ToString(randomBytes).Replace("-", "").ToLower());
        }
        public void ToUtf8String_InstantiatedWithRandomBytes_ShouldReturnUtf8String()
        {
            var randomBytes = GenerateMe.RandomBytes();

            var buffer       = new VirgilBuffer(randomBytes);
            var resultString = buffer.ToString();

            resultString.Should().Be(Encoding.UTF8.GetString(randomBytes));
        }
        public void ToBase64String_InstantiatedWithRandomBytes_ShouldReturnBase64EncodedString()
        {
            var randomBytes = GenerateMe.RandomBytes();

            var buffer       = new VirgilBuffer(randomBytes);
            var resultString = buffer.ToString(StringEncoding.Base64);

            resultString.Should().Be(Convert.ToBase64String(randomBytes));
        }
Esempio n. 7
0
        public async Task AddOrDeleteRelationWithoutAuthoritySign_ExceptionShouldOccur()
        {
            const string identityType  = "member";
            var          crypto        = new VirgilCrypto();
            var          client        = PredefinedClient(crypto);
            var          requestSigner = new RequestSigner(crypto);

            var aliceKeys = crypto.GenerateKeys();
            var aliceExportedPublicKey = crypto.ExportPublicKey(aliceKeys.PublicKey);
            var aliceRequest           = new PublishCardRequest("alice", identityType, aliceExportedPublicKey);

            var bobKeys = crypto.GenerateKeys();
            var bobExportedPublicKey = crypto.ExportPublicKey(bobKeys.PublicKey);
            var bobRequest           = new PublishCardRequest("bob", identityType, bobExportedPublicKey);

            var appId  = ConfigurationManager.AppSettings["virgil:AppID"];
            var appKey = crypto.ImportPrivateKey(
                VirgilBuffer.FromFile(ConfigurationManager.AppSettings["virgil:AppKeyPath"]).GetBytes(),
                ConfigurationManager.AppSettings["virgil:AppKeyPassword"]);


            // publish cards
            requestSigner.SelfSign(aliceRequest, aliceKeys.PrivateKey);
            requestSigner.AuthoritySign(aliceRequest, appId, appKey);
            var aliceCardModel = await client
                                 .PublishCardAsync(aliceRequest).ConfigureAwait(false);

            requestSigner.SelfSign(bobRequest, bobKeys.PrivateKey);
            requestSigner.AuthoritySign(bobRequest, appId, appKey);
            var bobCardModel = await client
                               .PublishCardAsync(bobRequest).ConfigureAwait(false);

            aliceCardModel.Meta.Relations.Count.ShouldBeEquivalentTo(0);


            // add Bob's card to Alice's relations
            var addRelationRequest = new AddRelationRequest(bobCardModel.SnapshotModel);

            Assert.ThrowsAsync <Exceptions.RelationException>(() => client.AddRelationAsync(addRelationRequest));

            // Delete Bob's card from Alice's relations
            var deleteRelationRequest = new DeleteRelationRequest(bobCardModel.Id, RevocationReason.Unspecified);

            Assert.ThrowsAsync <Exceptions.RelationException>(() => client.DeleteRelationAsync(deleteRelationRequest));

            // delete cards
            var revokeBobRequest = new RevokeCardRequest(bobCardModel.Id, RevocationReason.Unspecified);

            requestSigner.AuthoritySign(revokeBobRequest, appId, appKey);
            await client.RevokeCardAsync(revokeBobRequest);

            var revokeAliceRequest = new RevokeCardRequest(aliceCardModel.Id, RevocationReason.Unspecified);

            requestSigner.AuthoritySign(revokeAliceRequest, appId, appKey);
            await client.RevokeCardAsync(revokeAliceRequest);
        }
        public static VirgilApiContext VirgilApiContext()
        {
            var parameters = new VirgilClientParams(AppAccessToken);

            parameters.SetCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsServicesAddress"]);
            parameters.SetReadCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsReadServicesAddress"]);
            parameters.SetIdentityServiceAddress(ConfigurationManager.AppSettings["virgil:IdentityServiceAddress"]);
            parameters.SetRAServiceAddress(ConfigurationManager.AppSettings["virgil:RAServicesAddress"]);

            return(new VirgilApiContext
            {
                ClientParams = parameters,
                Credentials = new AppCredentials
                {
                    AppKey = VirgilBuffer.From(AppKey),
                    AppKeyPassword = AppKeyPassword,
                    AppId = AppID
                }
            });
        }
Esempio n. 9
0
        public void Verify_GivenMessageAndSignature_ShouldSignedDataBeVerified()
        {
            // Create Alice's key
            var AppAccessToken = ConfigurationManager.AppSettings["virgil:AppAccessToken"];
            var virgil         = new VirgilApi(AppAccessToken);
            var aliceKey       = virgil.Keys.Generate();
            var aliceCard      = virgil.Cards.Create("AliceCard", aliceKey);

            // Sign some message
            var message   = "Encrypt me, please!";
            var signature = aliceKey.Sign(VirgilBuffer.From(message));

            // Somehow transfer signature as Base64 string
            var transferSignatureData = signature.ToString(StringEncoding.Base64);

            // Verify message by Alice's Card using received signature
            var receivedSignature = VirgilBuffer.From(transferSignatureData, StringEncoding.Base64);
            var isVerified        = aliceCard.Verify(message, receivedSignature);

            isVerified.ShouldBeEquivalentTo(true);
        }
Esempio n. 10
0
        public void Decrypt_PredefinedCipherDataGiven_ShouldCipherDataBeDecrypted()
        {
            // Create Alice's card
            var AppAccessToken = ConfigurationManager.AppSettings["virgil:AppAccessToken"];
            var virgil         = new VirgilApi(AppAccessToken);
            var aliceKey       = virgil.Keys.Generate();
            var aliceCard      = virgil.Cards.Create("AliceCard", aliceKey);

            // Encrypt some message
            var message    = "Encrypt me, please!";
            var cipherData = aliceCard.Encrypt(VirgilBuffer.From(message));

            // Somehow transfer encrypted message as Base64 string
            var transferData = cipherData.ToString(StringEncoding.Base64);

            // Decrypt received message
            var receivedCipherData = VirgilBuffer.From(transferData, StringEncoding.Base64);
            var decryptedMessage   = aliceKey.Decrypt(receivedCipherData);

            message.ShouldBeEquivalentTo(decryptedMessage.ToString());
        }
Esempio n. 11
0
        public async Task PublishCardWithAppCredentials_PredefinedCard_ShouldPublishCard()
        {
            var clientParams = new VirgilClientParams(ConfigurationManager.AppSettings["virgil:AppAccessToken"]);

            clientParams.SetCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsServicesAddress"]);
            clientParams.SetIdentityServiceAddress(ConfigurationManager.AppSettings["virgil:IdentityServiceAddress"]);
            clientParams.SetRAServiceAddress(ConfigurationManager.AppSettings["virgil:RAServicesAddress"]);
            clientParams.SetReadCardsServiceAddress(ConfigurationManager.AppSettings["virgil:CardsReadServicesAddress"]);

            // To use staging Verifier instead of default verifier
            var cardVerifier = new CardVerifierInfo
            {
                CardId        = ConfigurationManager.AppSettings["virgil:ServiceCardId"],
                PublicKeyData = VirgilBuffer.From(ConfigurationManager.AppSettings["virgil:ServicePublicKeyDerBase64"],
                                                  StringEncoding.Base64)
            };
            var virgil = new VirgilApi(new VirgilApiContext
            {
                Credentials = new AppCredentials
                {
                    AppId          = ConfigurationManager.AppSettings["virgil:AppID"],
                    AppKey         = VirgilBuffer.FromFile(ConfigurationManager.AppSettings["virgil:AppKeyPath"]),
                    AppKeyPassword = ConfigurationManager.AppSettings["virgil:AppKeyPassword"]
                },
                ClientParams        = clientParams,
                UseBuiltInVerifiers = false,
                CardVerifiers       = new[] { cardVerifier }
            });

            var aliceKey  = virgil.Keys.Generate();
            var aliceCard = virgil.Cards.Create("AliceCard", aliceKey);

            await virgil.Cards.PublishAsync(aliceCard);

            aliceCard.Id.Should().NotBeEmpty();

            Assert.IsTrue(aliceCard.IsPairFor(aliceKey));
            await virgil.Cards.RevokeAsync(aliceCard);
        }