Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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");
        }
Example #5
0
        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]);
            }
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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);
        }
Example #11
0
        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);
        }
Example #14
0
        /// <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));
        }
Example #15
0
        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);
        }
Example #19
0
        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");
        }
Example #20
0
        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));
        }
Example #27
0
        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]);
            }
        }