Sample code for 30+ languages & platforms
Go

Duplicate OpensSSL to Create Signature using Cert and Key Files

See more OpenSSL Examples

This example duplicates the following:
openssl smime –sign -in something.xml -out something.der -signer mycert.crt -inkey cert.key -outform der –nodetach

Note: Although "smime" is the OpenSSL command, it's not actually producing S/MIME. The arguments "-outform der -binary" indicates that the output is binary DER (i.e. the PKCS7 binary signature). The input can be any type of file: XML, PDF, JPG, ... *anything*...

Chilkat Go Downloads

Go
    success := false

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

    crypt := chilkat.NewCrypt2()

    // Load the cert and private key from separate files.
    cert := chilkat.NewCert()
    success = cert.LoadFromFile("myCert.crt")
    if success != true {
        fmt.Println(cert.LastErrorText())
        crypt.DisposeCrypt2()
        cert.DisposeCert()
        return
    }

    bd := chilkat.NewBinData()
    success = bd.LoadFile("cert.key")
    privkey := chilkat.NewPrivateKey()
    // Load from any format private key.
    // If the file does not need a password, the 2nd arg is ignored.
    success = privkey.LoadAnyFormat(bd,"password_if_needed")
    if success != true {
        fmt.Println(privkey.LastErrorText())
        crypt.DisposeCrypt2()
        cert.DisposeCert()
        bd.DisposeBinData()
        privkey.DisposePrivateKey()
        return
    }

    success = crypt.SetSigningCert2(cert,privkey)
    if success != true {
        fmt.Println(crypt.LastErrorText())
        crypt.DisposeCrypt2()
        cert.DisposeCert()
        bd.DisposeBinData()
        privkey.DisposePrivateKey()
        return
    }

    // Create the opaque signature (PKCS7 binary DER that contains both the signature and original file data).
    success = crypt.CreateP7M("qa_data/infile.anything","qa_output/outfile.der")
    if success != true {
        fmt.Println(crypt.LastErrorText())
        crypt.DisposeCrypt2()
        cert.DisposeCert()
        bd.DisposeBinData()
        privkey.DisposePrivateKey()
        return
    }

    fmt.Println("Success.")

    crypt.DisposeCrypt2()
    cert.DisposeCert()
    bd.DisposeBinData()
    privkey.DisposePrivateKey()