/**
         * Validate function for parallel signatures
         * @param fileName name of the signature file to be validated
         */
        public static void validateParallel(String fileName)
        {
            Context context = new Context(Conn.ROOT_DIR + "efatura\\config\\");

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

            List <XMLSignature> xmlSignatures = new List <XMLSignature>();

            // get signature as signed document in order to be able to validate parallel ones
            SignedDocument sd = new SignedDocument(new FileDocument(new FileInfo(fileName)), context);

            xmlSignatures.AddRange(sd.getRootSignatures());

            foreach (var xmlSignature in xmlSignatures)
            {
                // no params, use the certificate in key info
                ValidationResult result = xmlSignature.verify();
                Console.WriteLine(result.toXml());
                Assert.True(result.getType() == ValidationResultType.VALID, "Cant verify " + fileName);

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

                        Console.WriteLine(counterResult.toXml());

                        Assert.True(counterResult.getType() == ValidationResultType.VALID,
                                    "Cant verify counter signature" + fileName + " : " + counterSignature.Id);
                    }
                }
            }
        }