public void VerifyExtendedSignatureUsingPublicationsFile() { KSI.Ksi ksi = GetKsi(); // Read the existing signature, assume it is extended IKsiSignature signature = LoadExtendedSignature(); // We need to compute the hash from the original data, to make sure it // matches the one in the signature and has not been changed // Use the same algorithm as the input hash in the signature IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), PublicationsFile = ksi.GetPublicationsFile(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsFile > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsFile > verification failed with error > " + verificationResult.VerificationError); } }
public void VerifyKeyBased() { KSI.Ksi ksi = GetKsi(); // Read signature, assume to be not extended IKsiSignature signature = LoadUnextendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); VerificationPolicy policy = new KeyBasedVerificationPolicy(new X509Store(StoreName.Root), GetCertificateSubjectRdnSelector()); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), PublicationsFile = ksi.GetPublicationsFile(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyKeyBased > signature valid"); } else { Console.WriteLine("VerifyKeyBased > signature verification failed with error > " + verificationResult.VerificationError); } }
public void VerifyExtendedSignatureUsingPublicationsCode() { // Read the existing signature, assume it is extended IKsiSignature signature = LoadExtendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); // The trust anchor in this example is the publication code in Financial Times or on Twitter PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM"); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), UserPublication = publicationData }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature verification failed with error > " + verificationResult.VerificationError); } }
private static void Verify(Ksi ksi, IKsiSignature signature, DataHash documentHash) { VerificationContext verificationContext = new VerificationContext(signature) { DocumentHash = documentHash, PublicationsFile = ksi.GetPublicationsFile() }; AggregationHashChain.Link firstChainLink = signature.GetAggregationHashChains()[0].GetChainLinks()[0]; if (firstChainLink.Metadata != null && firstChainLink.Metadata.Padding == null) { throw new Exception("Metadata padding is missing."); } KeyBasedVerificationPolicy policy = new KeyBasedVerificationPolicy(); VerificationResult verificationResult = policy.Verify(verificationContext); if (verificationResult.ResultCode != VerificationResultCode.Ok) { Console.WriteLine("Verification result code: " + verificationResult.ResultCode); Console.WriteLine("Verification rule name: " + verificationResult.RuleName); Console.WriteLine("Verification error: " + verificationResult.VerificationError); } Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode, "Signature should verify with key based policy"); }
protected override void Verify(VerificationContext context) { Assert.AreEqual(true, context.Package.IsExecutionSuccess); bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, exists); DtsVariable variable = context.Package.GetVariableForPath(@"\[CopyCustomers]\[DFT Convert customer names].[CustomerCount]"); var count = (int)variable.GetValue(); Assert.AreEqual(3, count); Assert.AreEqual(1, context.FakeDestinations.Count); FakeDestination fakeDestination = context.FakeDestinations[0]; foreach (FakeDestinationSnapshot snapshot in fakeDestination.Snapshots) { string data = snapshot.LoadData(); string[] rows = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual("1;COMPANY1;", rows[0]); Assert.AreEqual("5;COMPANY2;", rows[1]); Assert.AreEqual("11;COMPANY3;", rows[2]); } }
public void VerifyExtendedSignatureUsingPublicationsCodeAutoExtend() { // Read signature, assume to be not extended IKsiSignature signature = LoadUnextendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM"); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), UserPublication = publicationData, IsExtendingAllowed = true, KsiService = GetKsiService(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature verification failed with error > " + verificationResult.VerificationError); } }
public void VerifyCalendarBasedUnextended() { IKsiSignature signature = LoadUnextendedSignature(); IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm); dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt")); VerificationPolicy policy = new CalendarBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = dataHasher.GetHash(), KsiService = GetKsiService(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyCalendarBasedUnextended > signature valid"); } else { Console.WriteLine("VerifyCalendarBasedUnextended > signature verification failed with error > " + verificationResult.VerificationError); } }
public void SignWithStreamAndLevelTest(Ksi ksi) { IKsiSignature signature; using (MemoryStream stream = new MemoryStream()) { byte[] data = Encoding.UTF8.GetBytes("This is my document"); stream.Write(data, 0, data.Length); stream.Seek(0, SeekOrigin.Begin); signature = ksi.Sign(stream, 3); } Assert.LessOrEqual(3, signature.GetAggregationHashChains()[0].GetChainLinks()[0].LevelCorrection, "Level correction is invalid."); VerificationContext verificationContext = new VerificationContext(signature) { DocumentHash = new DataHash(HashAlgorithm.Sha2256, Base16.Decode("D439459856BEF5ED25772646F73A70A841FC078D3CBBC24AB7F47C464683768D")), PublicationsFile = ksi.GetPublicationsFile() }; KeyBasedVerificationPolicy policy = new KeyBasedVerificationPolicy(); VerificationResult verificationResult = policy.Verify(verificationContext); Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode, "Signature should verify with key based policy"); }
public IEnumerator <ITask> SendVerificationCode(string @namespace, string userAccessToken, string userId, VerificationContext context, string userName, ResultCallback callback) { Assert.IsNotNull(@namespace, "Can't send verification code! Namespace parameter is null!"); Assert.IsNotNull(userAccessToken, "Can't send verification code! UserAccessToken parameter is null!"); Assert.IsNotNull(userId, "Can't send verification code! UserId parameter is null!"); Assert.IsNotNull(userName, "Can't send verification code! Username parameter is null!"); var request = HttpRequestBuilder .CreatePost(this.baseUrl + "/iam/namespaces/{namespace}/users/{userId}/verificationcode") .WithPathParam("namespace", @namespace) .WithPathParam("userId", userId) .WithBearerAuth(userAccessToken) .WithContentType(MediaType.ApplicationJson) .WithBody(string.Format("{{\"LoginID\": \"{0}\", \"Context\": \"{1:G}\"}}", userName, context)) .ToRequest(); HttpWebResponse response = null; yield return(Task.Await(request, rsp => response = rsp)); var result = response.TryParse(); callback.Try(result); }
protected override void Verify(VerificationContext context) { context.Package.ThrowExceptionOnError(); Assert.AreEqual(true, context.Package.IsExecutionSuccess); bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, exists); exists = File.Exists(Constants.CustomersFileConverted); Assert.AreEqual(true, exists); DtsVariable customerCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers4]\[DFT Convert customer names].[CustomerCount]"); var customersCount = (int)customerCountVariable.GetValue(); Assert.AreEqual(13, customersCount); DtsVariable sourceCustomersErrorCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers4]\[DFT Convert customer names].[SourceCustomersErrorCount]"); var errorsCount = (int)sourceCustomersErrorCountVariable.GetValue(); Assert.AreEqual(0, errorsCount); ReadOnlyCollection <DataTap> dataTaps = context.DataTaps; Assert.AreEqual(1, dataTaps.Count); CheckDataTap1(dataTaps); }
public void VerifyExtendedSignatureUsingPublicationsFile() { KSI.Ksi ksi = GetKsi(); // Read the existing signature, assume it is extended IKsiSignature signature = LoadExtendedSignature(); DataHash documentHash = KsiProvider.CreateDataHasher(signature.InputHash.Algorithm) .AddData(File.ReadAllBytes("Resources/infile.txt")) .GetHash(); // Do the verification and check the result VerificationPolicy policy = new PublicationBasedVerificationPolicy(); VerificationContext context = new VerificationContext(signature) { DocumentHash = documentHash, PublicationsFile = ksi.GetPublicationsFile(), }; VerificationResult verificationResult = policy.Verify(context); if (verificationResult.ResultCode == VerificationResultCode.Ok) { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsFile > signature valid"); } else { Console.WriteLine("VerifyExtendedSignatureUsingPublicationsFile > verification failed with error > " + verificationResult.VerificationError); } }
protected override void Verify(VerificationContext context) { context.Package.ThrowExceptionOnError(); Assert.AreEqual(true, context.Package.IsExecutionSuccess); bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, exists); DtsVariable customerCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers3]\[DFT Convert customer names].[CustomerCount]"); var customersCount = (int)customerCountVariable.GetValue(); Assert.AreEqual(4, customersCount); DtsVariable sourceCustomersErrorCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers3]\[DFT Convert customer names].[SourceCustomersErrorCount]"); var errorsCount = (int)sourceCustomersErrorCountVariable.GetValue(); Assert.AreEqual(2, errorsCount); DtsVariable firstCustomerVariable = context.Package.GetVariableForPath(@"\[CopyCustomers3]\[DFT Convert customer names].[FirstCustomer]"); var customerName = (string)firstCustomerVariable.GetValue(); Assert.AreEqual("pg", customerName); DtsVariable secondCustomerVariable = context.Package.GetVariableForPath(@"\[CopyCustomers3]\[DFT Convert customer names].[SecondCustomer]"); customerName = (string)secondCustomerVariable.GetValue(); Assert.AreEqual("irg", customerName); ReadOnlyCollection <DataTap> dataTaps = context.DataTaps; Assert.AreEqual(7, dataTaps.Count); CheckDataTap1(dataTaps); CheckDataTap2(dataTaps); CheckDataTap3(dataTaps); CheckDataTap4(dataTaps); CheckDataTap5(dataTaps); CheckDataTap6(dataTaps); CheckDataTap7(dataTaps); Assert.AreEqual(1, context.FakeDestinations.Count); FakeDestination fakeDestination = context.FakeDestinations[0]; foreach (FakeDestinationSnapshot snapshot in fakeDestination.Snapshots) { string data = snapshot.LoadData(); string[] rows = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual("911;LG;", rows[0]); Assert.AreEqual("1908;PG;", rows[1]); Assert.AreEqual("1924;PIL;", rows[2]); Assert.AreEqual("2401;IRG;", rows[3]); } }
protected override void Verify(VerificationContext context) { bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, context.ActiveExecutable.IsExecutionSuccess); Assert.AreEqual(true, exists); }
/// <summary> /// Defines a verifier to establish if expectations are met. /// </summary> /// <param name="builder">The builder.</param> /// <param name="ct">The cancellation token.</param> /// <returns></returns> public async Task <IVerifier> VerifyAsync(Action <IVerificationContext> builder, CancellationToken ct = default) { var context = new VerificationContext(this); builder(context); return(await context.BuildAsync(ct)); }
protected override void Verify(VerificationContext context) { Assert.AreEqual(true, context.ActiveExecutable.IsExecutionSuccess); var val = (int) context.ActiveExecutable.GetVariable(@"ExecutedId").GetValue(); Assert.AreEqual(1908, val); }
public void TestCalendarHashChainOkChangedAlgorithm() { SignaturePublicationRecordPublicationHashRule rule = new SignaturePublicationRecordPublicationHashRule(); IKsiSignature signature = TestUtil.GetSignature(Resources.CalendarHashChain_Ok_Changed_Algorithm); VerificationContext context = new VerificationContext(signature); VerificationResult result = rule.Verify(context); Assert.AreEqual(VerificationResultCode.Ok, result.ResultCode); }
protected override void Verify(VerificationContext context) { Assert.AreEqual(false, context.Package.IsExecutionSuccess); Assert.AreEqual(false, context.ActiveExecutable.IsExecutionSuccess); DtsVariable variable = context.Package.GetVariable(@"CustomersImported"); var value = (bool)variable.GetValue(); Assert.AreEqual(false, value); }
public void TestSignatureWithNotValidCertAtAggregationTime() { VerificationContext context = new VerificationContext() { Signature = TestUtil.GetSignature(Resources.KsiSignature_Invalid_Not_Valid_Cert), PublicationsFile = TestUtil.GetPublicationsFile() }; Verify(context, VerificationResultCode.Fail, VerificationError.Key03); }
private static void Verify(IKsiSignature signature, DataHash dataHash) { IVerificationContext context = new VerificationContext() { Signature = signature, DocumentHash = dataHash }; VerificationResult result = new InternalVerificationPolicy().Verify(context); Assert.AreEqual(VerificationResultCode.Ok, result.ResultCode, "Unexpected verification result"); }
public VerifyTest() { var optionsBuilder = new DbContextOptionsBuilder <VerificationContext>(); optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString()); var Usercontext = new VerificationContext(optionsBuilder.Options); _operation = new UserOperation(Usercontext); _controller = new UsersController(_operation); CreateTestData(Usercontext); }
public void VerifyWithoutSignatureInContext() { KsiVerificationException ex = Assert.Throws <KsiVerificationException>(delegate { // no signature in context VerificationContext context = new VerificationContext(); Policy.Verify(context); }); Assert.That(ex.Message, Does.StartWith("Invalid KSI signature in context: null")); }
private static void Verify(IKsiSignature signature) { Assert.IsTrue(signature.IsExtended, ""); IVerificationContext context = new VerificationContext() { Signature = signature, }; VerificationResult result = new InternalVerificationPolicy().Verify(context); Assert.AreEqual(VerificationResultCode.Ok, result.ResultCode, "Unexpected verification result"); }
protected override void Verify(VerificationContext context) { context.Package.ThrowExceptionOnError(); Assert.AreEqual(true, context.Package.IsExecutionSuccess); bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, exists); DtsVariable customerCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers4]\[DFT Convert customer names].[CustomerCount]"); var customersCount = (int)customerCountVariable.GetValue(); Assert.AreEqual(13, customersCount); DtsVariable sourceCustomersErrorCountVariable = context.Package.GetVariableForPath(@"\[CopyCustomers4]\[DFT Convert customer names].[SourceCustomersErrorCount]"); var errorsCount = (int)sourceCustomersErrorCountVariable.GetValue(); Assert.AreEqual(0, errorsCount); ReadOnlyCollection <DataTap> dataTaps = context.DataTaps; Assert.AreEqual(1, dataTaps.Count); CheckDataTap1(dataTaps); Assert.AreEqual(1, context.FakeDestinations.Count); FakeDestination fakeDestination = context.FakeDestinations[0]; foreach (FakeDestinationSnapshot snapshot in fakeDestination.Snapshots) { string data = snapshot.LoadData(); string[] rows = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); int i = 0; Assert.AreEqual("1;Company1;table;1;".ToUpper(), rows[i]); Assert.AreEqual("1;Company1;chair;4;".ToUpper(), rows[++i]); Assert.AreEqual("1;Company1;glass;5;".ToUpper(), rows[++i]); Assert.AreEqual("2;furniture co;;;".ToUpper(), rows[++i]); Assert.AreEqual("5;Company2;car;2;".ToUpper(), rows[++i]); Assert.AreEqual("5;Company2;motor;6;".ToUpper(), rows[++i]); Assert.AreEqual("5;Company2;radio;9;".ToUpper(), rows[++i]); Assert.AreEqual("5;Company2;navi;10;".ToUpper(), rows[++i]); Assert.AreEqual("7;used cars;;;".ToUpper(), rows[++i]); Assert.AreEqual("11;Company3;laptop;3;".ToUpper(), rows[++i]); Assert.AreEqual("11;Company3;monitor;7;".ToUpper(), rows[++i]); Assert.AreEqual("11;Company3;mouse;8;".ToUpper(), rows[++i]); Assert.AreEqual("18;computers;;;".ToUpper(), rows[++i]); } }
public void VerifyWithNotValidCertAtAggregationTime() { VerificationContext context = new VerificationContext() { Signature = TestUtil.GetSignature(Resources.KsiSignature_Invalid_Not_Valid_Cert), PublicationsFile = TestUtil.GetPublicationsFile() }; VerificationResult result = Policy.Verify(context); CheckResult(result, VerificationResultCode.Fail, VerificationError.Key03, 2, typeof(KeyBasedVerificationPolicy)); }
protected override void Verify(VerificationContext context) { Assert.AreEqual(true, context.Package.IsExecutionSuccess); Assert.AreEqual(true, context.ActiveExecutable.IsExecutionSuccess); context.DataAccess.OpenConnection(Constants.DbConnectionString); var rowCount = (int)context.DataAccess.ExecuteScalar(@"select count(*) from [dbo].[CustomersStaging]"); context.DataAccess.CloseConnection(); Assert.AreEqual(3, rowCount); }
public void VerifyWithKey1() { VerificationContext context = new VerificationContext() { Signature = TestUtil.GetSignature(Resources.KsiSignature_Ok), DocumentHash = new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")), PublicationsFile = TestUtil.GetPublicationsFile() }; VerificationResult result = Policy.Verify(context); CheckResult(result, VerificationResultCode.Ok, null, 2, typeof(KeyBasedVerificationPolicy)); }
private Symbol ProcessAliasedQuerySource(VerificationContext context, HeD.Engine.Model.Node source) { var sourceAlias = source.GetAttribute <String>("alias"); var sourceExpression = source.Children[0] as ASTNode; if (sourceExpression == null) { throw new InvalidOperationException(String.Format("Could not determine source expression for alias '{0}'.", sourceAlias)); } Verifier.Verify(context, sourceExpression); return(new Symbol(sourceAlias, sourceExpression.ResultType)); }
protected override void Verify(VerificationContext context) { Assert.IsTrue(context.ActiveExecutable.IsExecutionSuccess); DtsVariable indexVar = context.Package.GetVariable("index"); var indexVarVal = (int)indexVar.GetValue(); Assert.IsTrue(indexVarVal == 5); DtsVariable customerCntVar = context.Package.GetVariableForPath(@"\[LoopWithDataFlow]\[FOR]\[DFT Convert customer names].[CustomerCount]"); var customerCntVarVal = (int)customerCntVar.GetValue(); Assert.IsTrue(customerCntVarVal == 3); }
private VerificationResult SignHash(Ksi ksi) { DataHash hash = new DataHash(HashAlgorithm.Sha2256, Base16.Decode("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08")); IKsiSignature signature = ksi.Sign(hash); VerificationContext verificationContext = new VerificationContext(signature) { DocumentHash = hash, PublicationsFile = ksi.GetPublicationsFile() }; KeyBasedVerificationPolicy policy = new KeyBasedVerificationPolicy(); return(policy.Verify(verificationContext)); }
protected override void Verify(VerificationContext context) { Assert.AreEqual(true, context.Package.IsExecutionSuccess); bool exists = File.Exists(Constants.CustomersFileDestination); Assert.AreEqual(true, exists); DtsVariable variable = context.Package.GetVariableForPath(@"\[CopyCustomers]\[DFT Convert customer names].[CustomerCount]"); var count = (int)variable.GetValue(); Assert.AreEqual(3, count); ReadOnlyCollection <DataTap> dataTaps = context.DataTaps; DataTap dataTap = dataTaps[0]; foreach (DataTapSnapshot snapshot in dataTap.Snapshots) { string data = snapshot.LoadData(); Assert.IsFalse(string.IsNullOrEmpty(data)); string[] rows = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual("1908;PG;", rows[0]); Assert.AreEqual("2401;IRG;", rows[1]); Assert.AreEqual("911;LG;", rows[2]); } DtsVariable sourceCustomersErrorCount = context.Package.GetVariableForPath(@"\[CopyCustomers]\[DFT Convert customer names].[SourceCustomersErrorCount]"); var val = (int)sourceCustomersErrorCount.GetValue(); Assert.AreEqual(2, val); Assert.AreEqual(1, context.FakeDestinations.Count); FakeDestination fakeDestination = context.FakeDestinations[0]; foreach (FakeDestinationSnapshot snapshot in fakeDestination.Snapshots) { string data = snapshot.LoadData(); string[] rows = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual("1908;PG;", rows[0]); Assert.AreEqual("2401;IRG;", rows[1]); Assert.AreEqual("911;LG;", rows[2]); } }