in net/JetBrains.SignatureVerifier/src/Crypt/AppleSignatureVerifier.cs [184:219]
public IEnumerable<byte[]> GetHashAgilityV1Hashes(SignedMessage signedMessage)
{
List<byte[]> hashesList = new List<byte[]>();
var signersStore = signedMessage.SignedData.GetSignerInfos();
foreach (SignerInformation signer in signersStore.GetSigners())
{
var appleHashAgilities = signer.SignedAttributes.GetAll(OIDs.APPLE_HASH_AGILITY);
foreach (Attribute appleHashAgility in appleHashAgilities)
{
foreach (var nestedSignatureAttrValue in appleHashAgility.AttrValues)
{
if (nestedSignatureAttrValue is DerOctetString seq)
{
try
{
var hashesXml = Encoding.UTF8.GetString(seq.GetOctets());
XDocument plist = XDocument.Parse(hashesXml);
IEnumerable<byte[]> dataValues = plist.Descendants("data")
.Select(x => Convert.FromBase64String((string)x));
hashesList.AddRange(dataValues);
}
catch (Exception e)
{
_logger?.Warning($"Error parsing APPLE_HASH_AGILITY attribute value: {e.Message}");
}
}
}
}
}
return hashesList;
}