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); }
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)); }
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 } }); }
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); }
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()); }
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); }