public IEnumerable GetHashAgilityV1Hashes()

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;
  }