ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: xFrame   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

jeu. 19 août 2021, 15h06

vh
France France

atoutfox.public.association

Re: xFrame

J'ai essayé d'adapter une ancienne contribution et en utilisant AdvApi32.dll

Mais cette dll est abandonnée par MS et je n'ai pas réussi à importer la clé privée (CryptImportKey)

lnStatus = CryptImportKey (lhProv, @pbData, LEN (pbData), 0, 0, @phKey) me retourne toujours 0

Est-ce que ton programme fait la même chose (en mieux et plus moderne je suppose) ?


FUNCTION HmacSHA256
   LPARAMETERS tcData
   LOCAL lnStatus, lnErr, lhProv, lhHashObject, lnDataSize, lcHashValue, lnHashSize
   lhProv = 0
   lhHashObject = 0
   lnDataSize = LEN (tcData)
   lcHashValue = REPLICATE (Chr0, 16)
   lnHashSize = LEN (lcHashValue)
   pbData = STRTRAN (Cles ("privée"), RetChar, Vierge)
   phKey = Vierge
   TRY
      DECLARE INTEGER GetLastError ;
         IN Win32api AS GetLastError
      DECLARE INTEGER CryptAcquireContextA ;
         IN AdvApi32 AS CryptAcquireContext ;
         INTEGER @lhProvHandle, ;
         STRING  cContainer, ;
         STRING  cProvider, ;
         INTEGER nProvType, ;
         INTEGER nFlags
      * load a crypto provider
      lnStatus = CryptAcquireContext(@lhProv, 0, 0, dnPROV_RSA_FULL, dnCRYPT_VERIFYCONTEXT)
      IF lnStatus = 0
         THROW GetLastError()
      ENDIF
      * Import de la clé privée
      DECLARE INTEGER CryptImportKey ;
         IN AdvApi32 AS CryptImportKey ;
         INTEGER hProviderHandle, ;
         STRING  @pbData, ;
         INTEGER lenData, ;
         INTEGER hPubKey, ;
         INTEGER dwFlags, ;
         STRING @phKey
      lnStatus = CryptImportKey (lhProv, @pbData, LEN (pbData), 0, 0, @phKey)
      IF lnStatus = 0
         THROW GetLastError()
      ENDIF
      #DEFINE CALG_SHA_256 0x0000800c
      DECLARE INTEGER CryptCreateHash ;
         IN AdvApi32 AS CryptCreateHash ;
         INTEGER hProviderHandle, ;
         INTEGER nALG_ID, ;
         INTEGER hKeyhandle, ;
         INTEGER nFlags, ;
         INTEGER @hCryptHashHandle
      * create a hash object that uses SHA256 algorithm
      lnStatus = CryptCreateHash(lhProv, CALG_SHA_256, 0, 0, @lhHashObject)
      #UNDEFINE CALG_SHA_256
      IF lnStatus = 0
         THROW GetLastError()
      ENDIF
      DECLARE INTEGER CryptHashData ;
      IN AdvApi32 AS CryptHashData ;
      INTEGER hHashHandle, ;
      STRING  @cData, ;
      INTEGER nDataLen, ;
      INTEGER nFlags
      * add the input data to the hash object
      lnStatus = CryptHashData(lhHashObject, tcData, lnDataSize, 0)
      IF lnStatus = 0
         THROW GetLastError()
      ENDIF
      DECLARE INTEGER CryptGetHashParam ;
      IN AdvApi32 AS CryptGetHashParam ;
      INTEGER hHashHandle, ;
      INTEGER nParam, ;
      STRING  @cHashValue, ;
      INTEGER @nHashSize, ;
      INTEGER nFlags
    * retrieve the hash value, if caller did not provide enough storage (16 bytes for MD5)
    * this will fail with dnERROR_MORE_DATA and lnHashSize will contain needed storage size
    lnStatus = CryptGetHashParam(lhHashObject, dnHP_HASHVAL, @lcHashValue, @lnHashSize, 0)
    IF lnStatus = 0
      THROW GetLastError()
    ENDIF
    DECLARE INTEGER CryptDestroyHash ;
      IN AdvApi32 AS CryptDestroyHash;
      INTEGER hKeyHandle
    * free the hash object
    lnStatus = CryptDestroyHash(lhHashObject)
    IF lnStatus = 0
      THROW GetLastError()
    ENDIF
    DECLARE INTEGER CryptReleaseContext ;
      IN AdvApi32 AS CryptReleaseContext ;
      INTEGER hProvHandle, ;
      INTEGER nReserved
    * release the crypto provider
    lnStatus = CryptReleaseContext(lhProv, 0)
    IF lnStatus = 0
      THROW GetLastError()
    ENDIF
  CATCH TO lnErr
    * clean up the hash object and release provider
    IF lhHashObject != 0
      CryptDestroyHash(lhHashObject)
    ENDIF
    IF lhProv != 0
      CryptReleaseContext(lhProv, 0)
    ENDIF
    ERROR ("HmacSHA256 Failed")
  ENDTRY
  RETURN lcHashValue
ENDFUNC


Permalink : http://www.atoutfox.org/nntp.asp?ID=0000019901
19 855 messages dans le forum • Liste complète des messages

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2021.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3