public virtual bool CheckCounterSignaturesReference()
{
CounterSignatureCollection counterSignatureCollection;
XadesSignedXml counterSignature;
string referenceUri;
ArrayList parentSignatureValueChain;
bool referenceToParentSignatureFound;
bool retVal;
retVal = true;
parentSignatureValueChain = new ArrayList();
parentSignatureValueChain.Add("#" + this.signatureValueId);
counterSignatureCollection = this.XadesObject.QualifyingProperties.UnsignedProperties.UnsignedSignatureProperties.CounterSignatureCollection;
for (int counterSignatureCounter = 0; (retVal == true) && (counterSignatureCounter < counterSignatureCollection.Count); counterSignatureCounter++)
{
counterSignature = counterSignatureCollection[counterSignatureCounter];
referenceToParentSignatureFound = false;
for (int referenceCounter = 0; referenceToParentSignatureFound == false && (referenceCounter < counterSignature.SignedInfo.References.Count); referenceCounter++)
{
referenceUri = ((Reference)counterSignature.SignedInfo.References[referenceCounter]).Uri;
if (parentSignatureValueChain.BinarySearch(referenceUri) >= 0)
{
referenceToParentSignatureFound = true;
}
parentSignatureValueChain.Add("#" + counterSignature.SignatureValueId);
parentSignatureValueChain.Sort();
}
retVal = referenceToParentSignatureFound;
}
if (retVal == false)
{
throw new CryptographicException("CheckCounterSignaturesReference() failed on at least one counter signature");
}
retVal = true;
return retVal;
}