Sample code for 30+ languages & platforms
Go Requires Chilkat v11.0.0+

RSA Sign Binary Data and Verify (Recover the Original Data)

See more RSA Examples

Demonstrates how to RSA sign binary data and then verify/recover the original data.

Note: This example uses methods introduced in Chilkat v9.5.0.77.

Chilkat Go Downloads

Go
    success := false

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

    //  Load an RSA private key for signing.
    privKey := chilkat.NewPrivateKey()
    success = privKey.LoadEncryptedPemFile("qa_data/pem/rsa_passwd.pem","passwd")
    if success == false {
        fmt.Println(privKey.LastErrorText())
        privKey.DisposePrivateKey()
        return
    }

    rsa := chilkat.NewRsa()
    rsa.UsePrivateKey(privKey)

    //  We have some binary data (in hex) to sign
    originalData := "0102030405060708090A"
    bd := chilkat.NewBinData()
    bd.AppendEncoded(originalData,"hex")

    //  If successful, the contents of bd are replaced with the RSA signature.
    success = rsa.SignRawBd(bd)
    if success == false {
        fmt.Println(rsa.LastErrorText())
        privKey.DisposePrivateKey()
        rsa.DisposeRsa()
        bd.DisposeBinData()
        return
    }

    //  Show the RSA signature in base64
    fmt.Println(*bd.GetEncoded("base64"))

    //  ------------------------------------------
    //  Get the public key from the private key
    pubKey := chilkat.NewPublicKey()
    privKey.ToPublicKey(pubKey)

    //  Verify the signature and extract the original data.
    rsa2 := chilkat.NewRsa()
    rsa2.UsePublicKey(pubKey)

    bVerified := rsa2.VerifyRawBd(bd)
    fmt.Println("signature verified: ", bVerified)

    //  Show the original data:
    fmt.Println("original data: ", *bd.GetEncoded("hex"))

    privKey.DisposePrivateKey()
    rsa.DisposeRsa()
    bd.DisposeBinData()
    pubKey.DisposePublicKey()
    rsa2.DisposeRsa()