Sample code for 30+ languages & platforms
PureBasic

ScMinidriver - PIN Authentication for Smart Card or USB Token

See more ScMinidriver Examples

Demonstrates how to PIN authenticate with a connected smart card or USB token.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkScMinidriver.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Reader names (smart card readers or USB tokens) can be discovered
    ; via List Readers or Find Smart Cards
    readerName.s = "Alcor Micro USB Smart Card Reader 0"
    success = CkScMinidriver::ckAcquireContext(scmd,readerName)
    If success = 0
        Debug CkScMinidriver::ckLastErrorText(scmd)
        CkScMinidriver::ckDispose(scmd)
        ProcedureReturn
    EndIf

    ; If we are successful, the name of the currently inserted smart card is available:
    cardName.s = CkScMinidriver::ckCardName(scmd)
    Debug "Card name: " + cardName

    ; Perform regular PIN authentication with the smartcard.
    ; If authentication is successful, then the ScMinidriver session is authenticated and
    ; operations such as signing are permissible.

    ; The pin ID can be "user", "admin", or a number "3" through "7" (passed as a string).
    ; The possible pin ID's for a given smartcard are obtained via the GetCardProperties method.
    ; See Get Smart Card Properties for sample code.
    ; You should generally use the "user" pin ID.  You would only use the other pin ID's for very specific purposes.
    pinId.s = "user"

    ; Change this to the PIN for your smart card.
    pin.s = "0000"

    retval.i = CkScMinidriver::ckPinAuthenticate(scmd,pinId,pin)

    ; The return value is 0 for success.
    ; If the retval is greater than 0, it is the number of attempts remaining before the PIN is blocked.
    ; If the retval equals -1, then something else went wrong and you should consult the LastErrorText.
    If retval < 0
        Debug CkScMinidriver::ckLastErrorText(scmd)
        CkScMinidriver::ckDispose(scmd)
        ProcedureReturn
    EndIf

    If retval > 0
        Debug "PIN authentcation failed, " + Str(retval) + " attempts remaining before the PIN is blocked."
    Else
        Debug "PIN authentication successful. Your session is now authenticated and you may proceed with operations such as signing."
    EndIf

    ; ...
    ; ...
    ; ...

    ; You may deauthenticate the session when finished with operations that required authentication.
    success = CkScMinidriver::ckPinDeauthenticate(scmd,pinId)
    If success = 0
        Debug CkScMinidriver::ckLastErrorText(scmd)
    EndIf

    ; Delete the context when finished with the card.
    success = CkScMinidriver::ckDeleteContext(scmd)
    If success = 0
        Debug CkScMinidriver::ckLastErrorText(scmd)
    EndIf



    CkScMinidriver::ckDispose(scmd)


    ProcedureReturn
EndProcedure