Sample code for 30+ languages & platforms
Go

Verfies an RSA Signature

See more Apple Keychain Examples

Verifies an RSA signature against the original data.

Chilkat Go Downloads

Go
    success := false

    // The following data was signed by the following example:
    // RSA Sign using a Private Key on a USB Token or Smartcard
    bd := chilkat.NewBinData()
    var i int
    for i = 0; i <= 100; i++ {
        bd.AppendEncoded("000102030405060708090A0B0C0D0E0F","hex")
    }

    // Load the signature
    bdSig := chilkat.NewBinData()
    success = bdSig.LoadFile("rsaSignatures/test1.sig")
    if success == false {
        fmt.Println("Failed to load the RSA signature")
        bd.DisposeBinData()
        bdSig.DisposeBinData()
        return
    }

    // Get the public key to be used for signature verification.
    pubKey := chilkat.NewPublicKey()
    success = pubKey.LoadFromFile("rsaKeys/chilkat-rsa-2048.pem")
    if success == false {
        fmt.Println(pubKey.LastErrorText())
        bd.DisposeBinData()
        bdSig.DisposeBinData()
        pubKey.DisposePublicKey()
        return
    }

    rsa := chilkat.NewRsa()
    success = rsa.UsePublicKey(pubKey)
    if success == false {
        fmt.Println(rsa.LastErrorText())
        bd.DisposeBinData()
        bdSig.DisposeBinData()
        pubKey.DisposePublicKey()
        rsa.DisposeRsa()
        return
    }

    // Verify the hash of the data against the signature.
    // We pass in the original data.  Internally, the hash is generated
    // and used to validate the signature.
    // Validating the RSA signature means two things:  
    // (1) the original data is exactly what was signed, and 
    // (2) it was signed by the owner of the RSA private key.
    success = rsa.VerifyBd(bd,"sha256",bdSig)

    if success == false {
        fmt.Println(rsa.LastErrorText())
        fmt.Println("Signature invalid.")
    } else {
        fmt.Println("Signature valid.")
    }


    bd.DisposeBinData()
    bdSig.DisposeBinData()
    pubKey.DisposePublicKey()
    rsa.DisposeRsa()