in jsign-core/src/main/java/net/jsign/mscab/MSCabinetFile.java [194:222]
public synchronized List<CMSSignedData> getSignatures() throws IOException {
List<CMSSignedData> signatures = new ArrayList<>();
try {
CABSignature cabsig = header.getSignature();
if (cabsig != null && cabsig.offset > 0) {
byte[] buffer = new byte[(int) cabsig.length];
channel.position(cabsig.offset);
channel.read(ByteBuffer.wrap(buffer));
CMSSignedData signedData;
signedData = new CMSSignedData((CMSProcessable) null, ContentInfo.getInstance(new ASN1InputStream(buffer).readObject()));
signatures.add(signedData);
SignerInformation signerInformation = signedData.getSignerInfos().getSigners().iterator().next();
AttributeTable unsignedAttributes = signerInformation.getUnsignedAttributes();
if (unsignedAttributes != null) {
Attribute nestedSignatures = unsignedAttributes.get(AuthenticodeObjectIdentifiers.SPC_NESTED_SIGNATURE_OBJID);
if (nestedSignatures != null) {
for (ASN1Encodable nestedSignature : nestedSignatures.getAttrValues()) {
signatures.add(new CMSSignedData((CMSProcessable) null, ContentInfo.getInstance(nestedSignature)));
}
}
}
}
} catch (CMSException e) {
throw new IOException(e);
}
return signatures;
}