/**
         * Generic validate function. Validates known types of xml signature.
         * @param fileName name of the signature file to be validated
         */
        public static void validate(String fileName)
        {
            Context context = new Context(Conn.ROOT_DIR + "efatura\\config\\");

            // add external resolver to resolve policies
            context.addExternalResolver(getPolicyResolver());

            XMLSignature signature = XMLSignature.parse(
                new FileDocument(new FileInfo(fileName)),
                context);

            ECertificate     cert = signature.SigningCertificate;
            ValidationSystem vs;

            if (cert.isMaliMuhurCertificate())
            {
                ValidationPolicy policy     = new ValidationPolicy();
                String           policyPath = Conn.ROOT_DIR + "efatura\\config\\certval-policy-malimuhur.xml";
                policy = PolicyReader.readValidationPolicy(policyPath);
                vs     = CertificateValidation.createValidationSystem(policy);
                context.setCertValidationSystem(vs);
            }
            else
            {
                ValidationPolicy policy     = new ValidationPolicy();
                String           policyPath = Conn.ROOT_DIR + "efatura\\config\\certval-policy.xml";
                policy = PolicyReader.readValidationPolicy(policyPath);
                vs     = CertificateValidation.createValidationSystem(policy);
                context.setCertValidationSystem(vs);
            }

            // no params, use the certificate in key info
            ValidationResult result = signature.verify();
            String           sonuc  = result.toXml();

            Console.WriteLine(result.toXml());
            // Assert.True(result.Type == ValidationResultType.VALID,"Cant verify " + fileName);

            UnsignedSignatureProperties usp = signature.QualifyingProperties.UnsignedSignatureProperties;

            if (usp != null)
            {
                IList <XMLSignature> counterSignatures = usp.AllCounterSignatures;
                foreach (XMLSignature counterSignature in counterSignatures)
                {
                    ValidationResult counterResult = signature.verify();

                    Console.WriteLine(counterResult.toXml());

                    //Assert.True(counterResult.Type == ValidationResultType.VALID,
                    //    "Cant verify counter signature" + fileName + " : "+counterSignature.Id);
                }
            }
        }
示例#2
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="signedXml">İmzası kontrol edilecek XML içeriği</param>
    /// <param name="unQaulifiedDigestAlgoritmList">Geçersiz signature.SignedInfo.SignatureMethod.Url
    /// <example>http://www.w3.org/2000/09/xmldsig#sha1</example></param>
    /// <param name="checkForEnvelopedSignature">Eğer true set edilirse İmzanın Enveloped yapısında olduğu kontrolü yapılır. Envelped yapısına olmayan İmzalarda Doğrulama sonucu başarısız döner.</param>
    /// <returns></returns>
    public static SignedDocumentValidationResult ValidateSignatureFromXml(string signedXml)
    {
        LicenseUtil.setLicenseXml(new MemoryStream(System.IO.File.ReadAllBytes(System.AppDomain.CurrentDomain.BaseDirectory + "/SignatureValidationConfig/Lisans/lisans.xml")));

        var context = new Context();

        context.Config = new tr.gov.tubitak.uekae.esya.api.xmlsignature.config.Config(System.AppDomain.CurrentDomain.BaseDirectory + "/SignatureValidationConfig/xmlsignature-config.xml");

        var file = System.IO.Path.GetTempFileName();

        System.IO.File.WriteAllText(file, signedXml);

        var sdvr      = new SignedDocumentValidationResult();
        var signature = XMLSignature.parse(new FileDocument(new FileInfo(file)), context);
        var result    = signature.verify();

        try
        {
            System.IO.File.Delete(file);
        }
        finally
        {
        }

        sdvr.Certificate = signature.SigningCertificate.asX509Certificate2();
        sdvr.CertificateValidationResult = new CertificateValidationResult();
        sdvr.SignatureInfo             = new SignatureInfo();
        sdvr.SignatureInfo.SigningTime = signature.SigningTime;
        sdvr.CertificateValidationResult.ValidationResultList = new List <SignatureValidator.DataTransferObject.ValidationResult>();

        //
        var nodeList = signature.Document.GetElementsByTagName("UBLVersionID", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2");

        if (nodeList != null && nodeList.Count > 0)
        {
            sdvr.SignatureInfo.UBLVersionID = nodeList.Item(0).InnerText;
        }

        if (context.ValidationResult != null && context.ValidationResult.getDetails() != null)
        {
            foreach (var item in context.ValidationResult.getDetails())
            {
                var vr = new SignatureValidator.DataTransferObject.ValidationResult();
                vr.Successful = item.isSuccessful();
                vr.Result     = vr.Successful ? tr.gov.tubitak.uekae.esya.api.signature.ValidationResultType.VALID.ToString() : tr.gov.tubitak.uekae.esya.api.signature.ValidationResultType.INVALID.ToString();
                vr.CheckText  = item.getCheckText();
                vr.ResultText = item.getResultText();
                sdvr.CertificateValidationResult.ValidationResultList.Add(vr);
            }
            sdvr.CertificateValidationResult.Successful = !sdvr.CertificateValidationResult.ValidationResultList.Exists(x => x.Successful.Equals(false));
        }

        sdvr.SignatureValidationResult                      = new SignatureValidator.DataTransferObject.SignatureValidationResult();
        sdvr.SignatureValidationResult.Successful           = result.getResultType() == tr.gov.tubitak.uekae.esya.api.signature.ValidationResultType.VALID;
        sdvr.SignatureValidationResult.ResultText           = result.getMessage() + Environment.NewLine + result.getResultType();
        sdvr.SignatureValidationResult.ValidationResultList = new List <SignatureValidator.DataTransferObject.ValidationResult>();

        foreach (var item in result.getDetails <tr.gov.tubitak.uekae.esya.api.xmlsignature.ValidationResult>())
        {
            var vr = new SignatureValidator.DataTransferObject.ValidationResult();

            vr.Successful = item.getResultType() == tr.gov.tubitak.uekae.esya.api.signature.ValidationResultType.VALID;
            vr.Result     = item.getResultType().ToString();
            vr.CheckText  = item.getCheckMessage();
            vr.ResultText = item.getCheckResult();

            sdvr.SignatureValidationResult.ValidationResultList.Add(vr);
        }
        return(sdvr);
    }