Sample code for 30+ languages & platforms
Objective-C

Get Certificates within XML Signature

See more XML Digital Signatures Examples

Demonstrates how to get the certificates contained within an XML signature.

Chilkat Objective-C Downloads

Objective-C
#import <CkoStringBuilder.h>
#import <CkoXmlDSig.h>
#import <CkoStringArray.h>
#import <CkoCert.h>

BOOL success = NO;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init];

//  Load XML containing one or more signatures.
success = [sbXml LoadFile: @"qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml" charset: @"utf-8"];
if (success == NO) {
    NSLog(@"%@",@"Failed to load the XML file..");
    return;
}

CkoXmlDSig *dsig = [[CkoXmlDSig alloc] init];

//  First load the XML containing the signatures to be verified.
//  Note that this particular Signature already contains the RSA public key that will be used
//  for verification.
success = [dsig LoadSignatureSb: sbXml];
if (success == NO) {
    NSLog(@"%@",dsig.LastErrorText);
    return;
}

//  For each signature, verify and also get the certificate(s) contained within each Signature.
int i = 0;
CkoStringArray *saCerts = [[CkoStringArray alloc] init];
CkoCert *cert = [[CkoCert alloc] init];

NSLog(@"%@%d",@"numSignatures = ",[dsig.NumSignatures intValue]);

while (i < [dsig.NumSignatures intValue]) {
    //  Select the Nth signature by setting the Selector property.
    dsig.Selector = [NSNumber numberWithInt: i];

    BOOL bVerifyReferenceDigests = YES;
    BOOL bVerified = [dsig VerifySignature: bVerifyReferenceDigests];
    NSLog(@"%@%d%@%d",@"Signature ",i + 1,@" verified = ",bVerified);

    //  Get the certificates embedded in this signature.
    [saCerts Clear];
    success = [dsig GetCerts: saCerts];
    if (success == YES) {
        int j = 0;
        while (j < [saCerts.Count intValue]) {
            success = [cert LoadFromBase64: [saCerts GetString: [NSNumber numberWithInt: j]]];
            if (success == YES) {
                NSLog(@"%@%@",@"    ",cert.SubjectDN);
            }

            j = j + 1;
        }

    }

    i = i + 1;
}