Sample code for 30+ languages & platforms
Visual FoxPro

ScMinidriver - Import a Certificate to IDPrime MD T=0 Smart Card

See more ScMinidriver Examples

Demonstrates how to import a certificate and its private key to a key container on an ID Prime MD T=0 smartcard.

Note: Requires Chilkat v9.5.0.88 or later. This example only runs on Windows because ScMinidriver is a Windows-only class.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loScmd
LOCAL lcReaderName
LOCAL lcPinId
LOCAL lnRetval
LOCAL loCert
LOCAL lcPassword
LOCAL lnContainerIndex
LOCAL lcKeySpec

lnSuccess = 0

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

loScmd = CreateObject('Chilkat.ScMinidriver')

* Reader names (smart card readers or USB tokens) can be discovered
* via List Readers or Find Smart Cards
lcReaderName = "SCM Microsystems Inc. SCR33x USB Smart Card Reader 0"
lnSuccess = loScmd.AcquireContext(lcReaderName)
IF (lnSuccess = 0) THEN
    ? loScmd.LastErrorText
    RELEASE loScmd
    CANCEL
ENDIF

* If successful, the name of the currently inserted smart card is available:
? "Card name: " + loScmd.CardName

* The IDPRime MD smart card has 4 different PIN roles:
* "user" -- Primary Card PIN
* "admin" -- Administrator PIN
* "3" -- Digital Signature PIN
* "4" -- Unblock only PIN (PUK)
* To import a certificate to the "IDPrime MD T=0" smart card, we must first PIN authenticate using "user", and then also PIN authenticate using "3" (the Digital Signature PIN)
lcPinId = "user"
* (Of course, use your PIN which may be different than "0000")
lnRetval = loScmd.PinAuthenticate(lcPinId,"0000")
IF (lnRetval <> 0) THEN
    ? "PIN Authentication failed."
    loScmd.DeleteContext()
    RELEASE loScmd
    CANCEL
ENDIF

loCert = CreateObject('Chilkat.Cert')

* Load the cert + private key from a .p12/.pfx
* We got this .p12 from https://badssl.com/download/
lcPassword = "badssl.com"
lnSuccess = loCert.LoadPfxFile("qa_data/pfx/badssl.com-client.p12",lcPassword)
IF (lnSuccess = 0) THEN
    ? loCert.LastErrorText
    loScmd.DeleteContext()
    RELEASE loScmd
    RELEASE loCert
    CANCEL
ENDIF

* Also authenticate using "3", the digital signature PIN.
* (Of course, use your PIN which may be different than "12345678")
lnRetval = loScmd.PinAuthenticate("3","12345678")
IF (lnRetval <> 0) THEN
    ? "PIN Authentication failed."
    loScmd.DeleteContext()
    RELEASE loScmd
    RELEASE loCert
    CANCEL
ENDIF

* Let's import this certificate as the "signature" key/cert in key container #6.
lnContainerIndex = 6
lcKeySpec = "sig"
* Note the last argument (the pin ID) is "3".  This is the required PIN ID for the IDPrime MD T=0 smart card.
lnSuccess = loScmd.ImportCert(loCert,lnContainerIndex,lcKeySpec,"3")
IF (lnSuccess = 0) THEN
    ? loScmd.LastErrorText
ELSE
    ? "Successfully imported the cert + private key onto the smart card."
ENDIF

* Delete the context when finished with the card.
lnSuccess = loScmd.DeleteContext()
IF (lnSuccess = 0) THEN
    ? loScmd.LastErrorText
ENDIF

RELEASE loScmd
RELEASE loCert