Visual FoxPro
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
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