Sample code for 30+ languages & platforms
PureBasic

Duplicate openssl dgst -sha256 -verify pubKey.pem -signature signature.sig in.dat

See more OpenSSL Examples

Demonstrates how to duplicate this OpenSSL command:
openssl dgst -sha256 -verify pubKey.pem -signature signature.sig in.dat
The in.dat file contains the original data that was signed, and can contain text or binary data of any type. The above OpenSSL command does the following:
  1. Creates a SHA256 digest of the contents of the input file.
  2. Verifies the SHA256 digest using the public key.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkRsa.pb"
IncludeFile "CkPublicKey.pb"

Procedure ChilkatExample()

    success.i = 0

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

    pubKey.i = CkPublicKey::ckCreate()
    If pubKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Load the public key from an PEM file:
    success = CkPublicKey::ckLoadFromFile(pubKey,"pubKey.pem")
    If success = 0
        Debug CkPublicKey::ckLastErrorText(pubKey)
        CkPublicKey::ckDispose(pubKey)
        ProcedureReturn
    EndIf

    ; Load the data of the original file that was signed.
    bdFileData.i = CkBinData::ckCreate()
    If bdFileData.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckLoadFile(bdFileData,"in.dat")

    ; Load the signature.
    bdSig.i = CkBinData::ckCreate()
    If bdSig.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckLoadFile(bdSig,"signature.sig")

    rsa.i = CkRsa::ckCreate()
    If rsa.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Import the public key into the RSA component:
    success = CkRsa::ckUsePublicKey(rsa,pubKey)
    If success = 0
        Debug CkRsa::ckLastErrorText(rsa)
        CkPublicKey::ckDispose(pubKey)
        CkBinData::ckDispose(bdFileData)
        CkBinData::ckDispose(bdSig)
        CkRsa::ckDispose(rsa)
        ProcedureReturn
    EndIf

    ; OpenSSL uses big-endian.
    CkRsa::setCkLittleEndian(rsa, 0)

    success = CkRsa::ckVerifyBd(rsa,bdFileData,"sha256",bdSig)
    If success <> 1
        Debug CkRsa::ckLastErrorText(rsa)
        Debug "The signature was invalid."
        CkPublicKey::ckDispose(pubKey)
        CkBinData::ckDispose(bdFileData)
        CkBinData::ckDispose(bdSig)
        CkRsa::ckDispose(rsa)
        ProcedureReturn
    EndIf

    Debug "The signature was verified."


    CkPublicKey::ckDispose(pubKey)
    CkBinData::ckDispose(bdFileData)
    CkBinData::ckDispose(bdSig)
    CkRsa::ckDispose(rsa)


    ProcedureReturn
EndProcedure