コード例 #1
0
        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");
        }
コード例 #2
0
        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");
        }
コード例 #3
0
        public void GetPublicationsFileStaticTest()
        {
            Ksi ksi = GetKsi();

            IPublicationsFile pubFile = ksi.GetPublicationsFile();

            Assert.AreEqual(1515974400, pubFile.GetLatestPublication().PublicationData.PublicationTime, "Unexpected last publication time");
        }
コード例 #4
0
        public void VerifyNewSignatureWithPublicationsFile(Ksi ksi)
        {
            DataHash           documentHash = new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D"));
            IKsiSignature      signature    = ksi.Sign(documentHash);
            VerificationResult result       = ksi.Verify(signature, null, ksi.GetPublicationsFile());

            Assert.AreEqual(VerificationResultCode.Ok, result.ResultCode, "Unexpected verification result code.");
            Assert.AreEqual(nameof(DefaultVerificationPolicy), result.RuleName, "Unexpected policy used.");
        }
コード例 #5
0
        public void ExtendToNearestPublicationTest(Ksi ksi)
        {
            IKsiSignature ksiSignature      = TestUtil.GetSignature();
            IKsiSignature extendedToLatest  = ksi.Extend(ksiSignature, ksi.GetPublicationsFile().GetLatestPublication());
            IKsiSignature extendedToNearest = ksi.Extend(ksiSignature);

            Assert.True(extendedToLatest.PublicationRecord.PublicationData.PublicationTime > extendedToNearest.PublicationRecord.PublicationData.PublicationTime);
            Assert.AreEqual(1455494400, extendedToNearest.PublicationRecord.PublicationData.PublicationTime);
        }
コード例 #6
0
        public void VerifyWithExtendingAllowed(Ksi ksi)
        {
            VerificationResult result = ksi.Verify(new DefaultVerificationPolicy(), new VerificationContext(TestUtil.GetSignature(Resources.KsiSignature_Ok))
            {
                PublicationsFile   = ksi.GetPublicationsFile(),
                IsExtendingAllowed = true
            });

            Assert.AreEqual(VerificationResultCode.Ok, result.ResultCode, "Unexpected verification result code.");
            Assert.AreEqual(nameof(DefaultVerificationPolicy), result.RuleName, "Unexpected policy used.");
        }
コード例 #7
0
        public void GetPublicationsFileWithInvalidUrlTest(Ksi ksi)
        {
            Exception ex = Assert.Throws <KsiServiceProtocolException>(delegate
            {
                ksi.GetPublicationsFile();
            });

            Assert.That(ex.Message.StartsWith("Get publication http response failed"), "Unexpected exception message: " + ex.Message);
            Assert.IsNotNull(ex.InnerException, "Inner exception should not be null");
            Assert.That(ex.InnerException.Message.StartsWith("The remote name could not be resolved"), "Unexpected inner exception message: " + ex.InnerException.Message);
        }
コード例 #8
0
        public void GetPublicationsFileTest(Ksi ksi)
        {
            IPublicationsFile publicationsFile = ksi.GetPublicationsFile();

            PublicationRecordInPublicationFile latest = publicationsFile.GetLatestPublication();
            PublicationRecordInPublicationFile prev   = publicationsFile.GetNearestPublicationRecord(latest.PublicationData.PublicationTime - 35 * 24 * 3600);

            Assert.True(latest.PublicationData.PublicationTime > prev.PublicationData.PublicationTime);
            prev = publicationsFile.GetNearestPublicationRecord(Util.ConvertUnixTimeToDateTime(latest.PublicationData.PublicationTime).AddDays(-35));
            Assert.True(latest.PublicationData.PublicationTime > prev.PublicationData.PublicationTime);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        public void HttpSignSm3HashTest(Ksi ksi)
        {
            DataHash      hash      = new DataHash(HashAlgorithm.Sm3, Base16.Decode("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"));
            IKsiSignature signature = ksi.Sign(hash);

            VerificationContext verificationContext = new VerificationContext(signature)
            {
                DocumentHash     = hash,
                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");
        }
コード例 #11
0
        public void SignByteArrayTest(Ksi ksi)
        {
            byte[]        data      = Encoding.UTF8.GetBytes("This is my document");
            IKsiSignature signature = ksi.Sign(data);

            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");
        }
コード例 #12
0
        public void ExtendAndVerifySignatureWithAggregationChainsOnly(Ksi ksi)
        {
            PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy();

            // signature contains only aggregation chains
            IKsiSignature   ksiSignature      = TestUtil.GetSignature(Resources.KsiSignature_Ok_Only_Aggregtion_Chains);
            IKsiSignature   extendedSignature = ksi.Extend(ksiSignature);
            PublicationData publicationData   = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData;

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData
            };

            VerificationResult verificationResult = rule.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
コード例 #13
0
        public void ExtendAndVerifyTest(Ksi ksi)
        {
            PublicationBasedVerificationPolicy policy = new PublicationBasedVerificationPolicy();

            IKsiSignature   ksiSignature      = TestUtil.GetSignature();
            IKsiSignature   extendedSignature = ksi.Extend(ksiSignature);
            PublicationData publicationData   = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData;

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData,
                KsiService      = GetHttpKsiService()
            };

            VerificationResult verificationResult = policy.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
コード例 #14
0
        public void HttpSignHashWithLevelTest(Ksi ksi)
        {
            DataHash documentHash = new DataHash(HashAlgorithm.Sha2256, Base16.Decode("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"));

            IKsiSignature signature = ksi.Sign(documentHash, 3);

            Assert.LessOrEqual(3, signature.GetAggregationHashChains()[0].GetChainLinks()[0].LevelCorrection, "Level correction is invalid.");

            VerificationContext verificationContext = new VerificationContext(signature)
            {
                DocumentHash     = documentHash,
                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");
        }
コード例 #15
0
        public void VerifySignedHashWithInvalidHashTest(Ksi ksi)
        {
            VerificationResult verificationResult;

            using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test")))
            {
                IDataHasher dataHasher = CryptoTestFactory.CreateDataHasher(HashAlgorithm.Sha2256);
                dataHasher.AddData(memoryStream);
                IKsiSignature signature = ksi.Sign(dataHasher.GetHash());

                VerificationContext verificationContext = new VerificationContext(signature)
                {
                    DocumentHash = new DataHash(HashAlgorithm.Sha2256,
                                                Base16.Decode("1f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08")),
                    PublicationsFile = ksi.GetPublicationsFile()
                };
                KeyBasedVerificationPolicy policy = new KeyBasedVerificationPolicy();

                verificationResult = policy.Verify(verificationContext);
            }

            Assert.AreEqual(VerificationResultCode.Fail, verificationResult.ResultCode, "Invalid hash should not verify with key based policy");
            Assert.AreEqual(VerificationError.Gen01, verificationResult.VerificationError);
        }