Ejemplo n.º 1
0
        public void SignStaticMultiPayloadsResponseIncludingErrorPayloadTest()
        {
            Ksi ksi = GetStaticKsi(Resources.KsiService_AggregationResponsePdu_Multi_Payloads_Including_ErrorPayload, 2);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Server responded with error message. Status: 418464624128; Message: anon"), "Unexpected inner exception message: " + ex.Message);
        }
Ejemplo n.º 2
0
        public void EndGetPublicationsFileInvalidAsyncResultTest()
        {
            KsiService service = GetKsiService();

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.EndGetPublicationsFile(new TestAsyncResult());
            });

            Assert.That(ex.Message.StartsWith("Invalid asyncResult type:"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 3
0
        public void EndGetPublicationsFileWithoutPublicationsFileServiceProtocol()
        {
            KsiService service = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.EndGetPublicationsFile(new TestAsyncResult());
            });

            Assert.That(ex.Message.StartsWith("Publications file service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 4
0
        public void EndGetExtenderConfigWithoutExtendingServiceProtocol()
        {
            KsiService service = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.EndGetExtenderConfig(new TestAsyncResult());
            });

            Assert.That(ex.Message.StartsWith("Extending service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 5
0
        public void LegacySignStaticInvalidMacAlgorithmTest()
        {
            Ksi ksi = GetStaticKsi(Resources.KsiService_LegacyAggregationResponsePdu, 318748698, null, PduVersion.v1, HashAlgorithm.Sha2512);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("HMAC algorithm mismatch."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 6
0
        public void SignStaticInvalidPduTypeTest()
        {
            Ksi ksi = GetStaticKsi(new byte[] { 1, 2, 3, 4, 5 });

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Unknown response PDU tag type"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 7
0
        public void BeginSignWithoutSigningServiceProtocol()
        {
            KsiService service = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.BeginSign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")), null, null);
            });

            Assert.That(ex.Message.StartsWith("Signing service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 8
0
        public void SignStaticInvalidPduContentTest()
        {
            Ksi ksi = GetStaticKsi(new byte[] { 0x82, 0x21, 0x08, 0xA7, 0x01 });

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Could not parse response message"), "Unexpected exception message: " + ex.Message);
        }
        public void BeginGetAggregatorConfigWithoutSigningServiceProtocol()
        {
            KsiService service = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.BeginGetAggregatorConfig(null, null);
            });

            Assert.That(ex.Message.StartsWith("Signing service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 10
0
        public void SignStaticInvalidMacTest()
        {
            Ksi ksi = GetStaticKsi(Resources.KsiService_AggregationResponsePdu_Invalid_Mac, 1584727637);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Invalid MAC in response PDU."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 11
0
        public void BeginExtendWithoutExtendingServiceProtocol()
        {
            KsiService service = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.BeginExtend(1, null, null);
            });

            Assert.That(ex.Message.StartsWith("Extending service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 12
0
        public void EndSignInvalidAsyncResultTest()
        {
            IKsiService service = GetStaticKsiService(new byte[] { 0 });

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.EndSign(new TestAsyncResult());
            });

            Assert.That(ex.Message.StartsWith("Invalid asyncResult type:"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 13
0
        public void LegacySignStaticInvalidRequestIdTest()
        {
            Ksi ksi = GetStaticKsi(Resources.KsiService_LegacyAggregationResponsePdu, 0, null, PduVersion.v1);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Unknown request ID:"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 14
0
        public void SignStaticWithDeprecatedInputHashAlgorithmTest()
        {
            Ksi ksi = GetStaticKsi(new byte[] { });

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0011A700B0C8066C47ECBA05ED37BC14DCADB23855")));
            });

            Assert.That(ex.Message.StartsWith("Hash algorithm SHA1 is deprecated since 2016-07-01 and can not be used for signing."),
                        "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 15
0
        public void ExtendStaticResponseHasOnlyUnknownNonCriticalPayloadTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_ExtenderResponseUnkownNonCriticalPayload, 1234567890);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Could not parse response message"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 16
0
        public void LegacyExtendStaticInvalidMacAlgorithmTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_LegacyExtendResponsePdu, 3491956840, null, PduVersion.v1, null, HashAlgorithm.Sha2512);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("HMAC algorithm mismatch."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 17
0
        public void ExtendStaticMultiPayloadsResponseIncludingErrorPayloadTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_ExtendResponsePdu_Multi_Payloads_Including_ErrorPayload);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Server responded with error message. Status: 418464624128; Message: anon"), "Unexpected inner exception message: " + ex.Message);
        }
Ejemplo n.º 18
0
        public void ExtenderConfigRequestInvalidStaticTest()
        {
            // pdu does not contain extender config payload
            Ksi ksi = GetStaticKsi(Resources.KsiService_ExtendResponsePdu_RequestId_1043101455);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.GetExtenderConfig();
            });

            Assert.That(ex.Message.StartsWith("Invalid response PDU. Could not find a valid payload."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 19
0
        public void SignStaticResponseHasOnlyUnknownNonCriticalPayloadTest()
        {
            // Response has only unknown non-ciritcal payload.
            Ksi ksi = GetStaticKsi(Resources.KsiService_AggregationResponseUnknownNonCriticalPayload, 1234567890);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("019f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08")));
            });

            Assert.That(ex.Message.StartsWith("Could not parse response message"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 20
0
        public void SignStaticResponseWithWrongRequestIdTest()
        {
            // Response has additional unknown non-ciritcal payload.
            Ksi ksi = GetStaticKsi(Resources.KsiService_AggregationResponsePdu_RequestId_1584727637, 1234567890);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("019f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08")));
            });

            Assert.That(ex.Message.StartsWith("Invalid response PDU. Could not find a valid payload."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 21
0
        public void LegacyExtendStaticWithNonZeroPayloadStatusTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_LegacyExtendResponsePdu_NonZeroPayloadStatus, 768278381, null, PduVersion.v1);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Server responded with error message. Status: 17; Message: No error."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 22
0
        public void LegacyExtendStaticInvalidRequestIdTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_LegacyExtendResponsePdu, 0, null, PduVersion.v1);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Unknown request ID:"), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 23
0
        public void BeginGetExtenderConfigWithoutExtendingServiceCredentials()
        {
            TestKsiServiceProtocol protocol = new TestKsiServiceProtocol();
            KsiService             service  = new KsiService(null, null, protocol, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                service.BeginGetExtenderConfig(null, null);
            });

            Assert.That(ex.Message.StartsWith("Extending service credentials are missing."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 24
0
        public void SignStaticErrorPayloadTest()
        {
            Ksi ksi = GetStaticKsi(Resources.KsiService_AggregationResponsePdu_ErrorPayload, 2);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Sign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")));
            });

            Assert.That(ex.Message.StartsWith("Server responded with error message. Status: 258; Message: The request could not be authenticated."),
                        "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 25
0
        public void ExtendStaticResponseWithWrongRequestIdTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_ExtendResponsePdu_RequestId_1043101455, 1234567890);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Invalid response PDU. Could not find a valid payload."), "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 26
0
        public void ExtendStaticErrorPayloadTest()
        {
            IKsiSignature signature = new KsiSignatureFactory().Create(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiSignature_Ok)));
            Ksi           ksi       = GetStaticKsi(Resources.KsiService_ExtenderResponsePdu_ErrorPayload);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                ksi.Extend(signature);
            });

            Assert.That(ex.Message.StartsWith("Server responded with error message. Status: 258; Message: The request could not be authenticated."),
                        "Unexpected exception message: " + ex.Message);
        }
Ejemplo n.º 27
0
        public void EndSignWithoutSigningServiceProtocol()
        {
            IKsiService serviceBegin = GetStaticKsiService(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_AggregationResponsePdu_RequestId_1584727637)),
                                                           1584727637);
            IAsyncResult asyncResult = serviceBegin.BeginSign(new DataHash(Base16.Decode("0111A700B0C8066C47ECBA05ED37BC14DCADB238552D86C659342D1D7E87B8772D")), null, null);
            KsiService   serviceEnd  = new KsiService(null, null, null, null, null, null);

            KsiServiceException ex = Assert.Throws <KsiServiceException>(delegate
            {
                serviceEnd.EndSign(asyncResult);
            });

            Assert.That(ex.Message.StartsWith("Signing service protocol is missing from service"), "Unexpected exception message: " + ex.Message);
        }
        /// <summary>
        /// Parse KSI service response.
        /// </summary>
        /// <param name="data">Response byte array</param>
        /// <param name="requestId">Request ID</param>
        /// <returns></returns>
        public PduPayload Parse(byte[] data, ulong?requestId = null)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            RawTag    rawTag    = null;
            Pdu       pdu       = null;
            LegacyPdu legacyPdu = null;

            try
            {
                using (TlvReader reader = new TlvReader(new MemoryStream(data)))
                {
                    rawTag = new RawTag(reader.ReadTag());
                }

                if (rawTag.Type == GetPduTagType(false))
                {
                    if (_pduVersion == PduVersion.v1)
                    {
                        throw new KsiServiceUnexpectedResponseFormatException("Received PDU v2 response to PDU v1 request. Configure the SDK to use PDU v2 format.");
                    }

                    pdu = GetPdu(rawTag);
                }
                else if (rawTag.Type == GetPduTagType(true))
                {
                    if (_pduVersion == PduVersion.v2)
                    {
                        if (!IsLegacyRequestSupported())
                        {
                            throw new KsiServiceUnexpectedResponseFormatException("Received PDU v1 response to PDU v2 request.");
                        }

                        throw new KsiServiceUnexpectedResponseFormatException("Received PDU v1 response to PDU v2 request. Configure the SDK to use PDU v1 format.");
                    }

                    legacyPdu = GetLegacyPdu(rawTag);
                }
                else
                {
                    throw new KsiServiceException("Unknown response PDU tag type: " + rawTag.Type.ToString("X"));
                }

                if (legacyPdu != null)
                {
                    return(GetLegacyResponsePayload(legacyPdu, requestId));
                }
                else
                {
                    CheckAggregatorConfigChange(pdu);
                    CheckExtenderConfigChange(pdu);

                    return(GetResponsePayload(data, pdu, requestId));
                }
            }
            catch (TlvException e)
            {
                KsiException ksiException = new KsiServiceException("Could not parse response message: " + Base16.Encode(data), e);
                if (requestId.HasValue)
                {
                    Logger.Warn("Request failed (request id: {0}): {1}", requestId, ksiException);
                }
                else
                {
                    Logger.Warn("Request failed: {0}", ksiException);
                }
                throw ksiException;
            }
            catch (KsiException e)
            {
                if (requestId.HasValue)
                {
                    Logger.Warn("Request failed (request id: {0}){1}{2}{1}PDU:{1}{3}", requestId, Environment.NewLine, e, legacyPdu ?? pdu ?? (ITlvTag)rawTag);
                }
                else
                {
                    Logger.Warn("Request failed.{0}{1}{0}PDU:{0}{2}", Environment.NewLine, e, legacyPdu ?? pdu ?? (ITlvTag)rawTag);
                }

                throw;
            }
        }