Sample code for 30+ languages & platforms
DataFlex

RSA Sign String using Private Key of Certificate Type A3 (smart card / token)

See more RSA Examples

Demonstrates RSA signing a string using the private key of a certificate type A3 (smart card, token).

Note: This is a Windows-only example.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vCert
Store    Handle hoCertStore
    String sThumbprint
    Boolean iBReadOnly
    Variant vJson
    Handle hoJson
    Variant vCert
    Handle hoCert
    Handle hoRsa
    Boolean iBUsePrivateKey
    String sSigBase64
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // First get the A3 certificate that was installed on the Windows system.
    Get Create (RefClass(cComChilkatCertStore)) To hoCertStore
    If (Not(IsComObjectCreated(hoCertStore))) Begin
        Send CreateComObject of hoCertStore
    End

    Move "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2" To sThumbprint

    // This is specific to Windows because it is opening the Windows Current-User certificate store.
    Move True To iBReadOnly
    Get ComOpenCurrentUserStore Of hoCertStore iBReadOnly To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoCertStore To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Find the certificate with the desired thumbprint
    // (There are many ways to locate a certificate.  This example chooses to find by thumbprint.)
    Get Create (RefClass(cComChilkatJsonObject)) To hoJson
    If (Not(IsComObjectCreated(hoJson))) Begin
        Send CreateComObject of hoJson
    End
    Get ComUpdateString Of hoJson "thumbprint" sThumbprint To iSuccess

    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End
    Get pvComObject of hoJson to vJson
    Get pvComObject of hoCert to vCert
    Get ComFindCert Of hoCertStore vJson vCert To iSuccess
    If (iSuccess = False) Begin
        Showln "Failed to find the certificate."
        Procedure_Return
    End

    Get ComSubjectCN Of hoCert To sTemp1
    Showln "Found: " sTemp1

    Get Create (RefClass(cComChilkatRsa)) To hoRsa
    If (Not(IsComObjectCreated(hoRsa))) Begin
        Send CreateComObject of hoRsa
    End

    // Provide the cert's private key
    Move True To iBUsePrivateKey
    Get pvComObject of hoCert to vCert
    Get ComSetX509Cert Of hoRsa vCert iBUsePrivateKey To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Return the RSA signature in base64 encoded form.
    Set ComEncodingMode Of hoRsa To "base64"

    // Sign the utf-8 byte representation of the string.
    Set ComCharset Of hoRsa To "utf-8"

    // You can also choose other hash algorithms, such as SHA-1.
    Get ComSignStringENC Of hoRsa "text to sign" "SHA-256" To sSigBase64
    Get ComLastMethodSuccess Of hoRsa To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "Base64 signature: " sSigBase64


End_Procedure