|       
      
      
 
 | 
     
      (DataFlex) ScMinidriver - Import Private Key to Smart Card
      Demonstrates how to import a private key to the "signature" or "key exchange" location in the Nth key container on a smart card.
		
 
      Use ChilkatAx-win32.pkg
Procedure Test
    Variant vPrivKey
    Handle hoPrivKey
    Boolean iSuccess
    Handle hoScmd
    String sReaderName
    String sPinId
    Integer iRetval
    String sTemp1
    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.
    // Chilkat recommends the following free tool for interactively examining the contents of your smart card
    // through the ScMinidriver interface:  MGTEK Tool for Minidriver enabled Smart Cards
    // Let's first look at our smart card before importing a private key.
    // Here's the view of our Gemalto (Thales) IDPrime MD T=0 smart card in the MGTEK tool:
     
    // First let's load a private key into the Chilkat private key object.
    // (Chilkat provides the ability to load private keys from many different sources and formats.
    // this example loads from a PEM file.)
    Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey
    If (Not(IsComObjectCreated(hoPrivKey))) Begin
        Send CreateComObject of hoPrivKey
    End
    Get ComLoadPemFile Of hoPrivKey "qa_data/rsa/rsaPrivKey_pkcs8.pem" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPrivKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End
    Get Create (RefClass(cComChilkatScMinidriver)) To hoScmd
    If (Not(IsComObjectCreated(hoScmd))) Begin
        Send CreateComObject of hoScmd
    End
    // First we need to acquire a context to the smart card in the reader where it is inserted.
    // Reader names (smart card readers or USB tokens) can be discovered
    // via List Readers or Find Smart Cards
    Move "Alcor Micro USB Smart Card Reader 0" To sReaderName
    Get ComAcquireContext Of hoScmd sReaderName To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoScmd To sTemp1
        Showln sTemp1
        Procedure_Return
    End
    // If successful, the name of the currently inserted smart card is available:
    Get ComCardName Of hoScmd To sTemp1
    Showln "Card name: " sTemp1
    // To import a private key, we'll need to be PIN authenticated.
    // For more details about smart card PIN authentication, see the Smart Card PIN Authentication Example
    Move "user" To sPinId
    Get ComPinAuthenticate Of hoScmd sPinId "0000" To iRetval
    If (iRetval <> 0) Begin
        Showln "PIN Authentication failed."
        Get ComDeleteContext Of hoScmd To iSuccess
        Procedure_Return
    End
    // Let's import into the "key exchange" position in key container #7.
    Get pvComObject of hoPrivKey to vPrivKey
    Get ComImportKey Of hoScmd 7 "kex" vPrivKey "user" To iSuccess
    If (iSuccess = False) Begin
        Showln "PIN Authentication failed."
        Get ComDeleteContext Of hoScmd To iSuccess
        Procedure_Return
    End
    Get ComDeleteContext Of hoScmd To iSuccess
    Showln "Success."
    // Here's the MGTEK view of the smart card after importing the private key:
     
End_Procedure
     |