Sample code for 30+ languages & platforms
Go

Get Certificates within XML Signature

See more XML Digital Signatures Examples

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

Chilkat Go Downloads

Go
    success := false

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

    sbXml := chilkat.NewStringBuilder()

    // Load XML containing one or more signatures.
    success = sbXml.LoadFile("qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml","utf-8")
    if success == false {
        fmt.Println("Failed to load the XML file..")
        sbXml.DisposeStringBuilder()
        return
    }

    dsig := chilkat.NewXmlDSig()

    // 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 != true {
        fmt.Println(dsig.LastErrorText())
        sbXml.DisposeStringBuilder()
        dsig.DisposeXmlDSig()
        return
    }

    // For each signature, verify and also get the certificate(s) contained within each Signature.
    i := 0
    saCerts := chilkat.NewStringArray()
    cert := chilkat.NewCert()

    fmt.Println("numSignatures = ", dsig.NumSignatures())

    for i < dsig.NumSignatures() {
        // Select the Nth signature by setting the Selector property.
        dsig.SetSelector(i)

        bVerifyReferenceDigests := true
        bVerified := dsig.VerifySignature(bVerifyReferenceDigests)
        fmt.Println("Signature ", i + 1, " verified = ", bVerified)

        // Get the certificates embedded in this signature.
        saCerts.Clear()
        success = dsig.GetCerts(saCerts)
        if success == true {
            j := 0
            for j < saCerts.Count() {
                success = cert.LoadFromBase64(*saCerts.GetString(j))
                if success == true {
                    fmt.Println("    ", cert.SubjectDN())
                }

                j = j + 1
            }

        }

        i = i + 1
    }


    sbXml.DisposeStringBuilder()
    dsig.DisposeXmlDSig()
    saCerts.DisposeStringArray()
    cert.DisposeCert()