IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Pb de linkage Crypt32.lib


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Par défaut Pb de linkage Crypt32.lib
    Voic le debut de mon code pris sur msdn et que je veux tester.
    A compiler tout seul cela fonctionne, mais si je veux c faire un build de mon projet avec en plus ce fichier cpp, j'ai une erreur LNK2019: unresolved external symbol sur mes fonctions crypto API ???

    voici le debut de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <stdio.h>
    #include <windows.h>
    #include <Wincrypt.h>
     
     
    // Link with the Crypt32.lib file.
    #pragma comment (lib, "Crypt32.lib")
     
    #define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
     
    #define MAX_NAME 256
     
    #define CERTIFICATE_STORE_NAME L"MY"
     
    //-------------------------------------------------------------------
    //    Declare local functions.
     
    //-------------------------------------------------------------------
    BOOL EncodeMessage(PCRYPT_DATA_BLOB pEncodedData,
                       LPWSTR pwszSignerName);
    void DecodeMessage(PCRYPT_DATA_BLOB pEncodedData,
                       LPWSTR pwszSignerName);
     
    //  Define function MyHandleError.
    void MyHandleError(LPTSTR psz)
    {
        _ftprintf(stderr, TEXT("An error occurred in the program. \n"));
        _ftprintf(stderr, TEXT("%s\n"), psz);
        _ftprintf(stderr, TEXT("Error number %x.\n"), GetLastError());
        _ftprintf(stderr, TEXT("Program terminating. \n"));
        exit(1);
    } // End of MyHandleError.
    .....
    /*---------------------------------------------------------------
            In two steps, sign and encode the message. First, get the 
            number of bytes required for the buffer to hold the signed 
            and encoded message.
        ---------------------------------------------------------------*/
     
        if( CryptSignMessage(
                &SignMessagePara,
                FALSE,
                1,
                rgpbToBeSigned,
                rgcbToBeSigned,
                NULL,
                &pEncodedBlob->cbData))
        {
            printf("The needed length is %d \n", pEncodedBlob->cbData);
        }
        else
        {
            MyHandleError((LPTSTR)(LPCTSTR)"Getting the length failed.\n");
        }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Il n'y a aucun appel aux fonctions de la CryptoAPI, là...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Par défaut
    Je viens de remettee a jours le code pour montrer que j'utilise des fonctions Crypto qui ne sont pas reconnu (ici CryptSignMessage)
    Je travaille avec evC++

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    En comparant les résultats de recherche de CryptSignMessage et CryptEncrypt, je pense que CryptSignMessage n'est tout simplement pas supportée par les Windows CE.

    CryptSignHash l'est, par contre. Et si j'ai bien compris l'aide, CryptSignMessage est plus ou moins un wrapper...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Par défaut
    J'ai essayé autre chose en tenant compte de la remarque mais j'ai une erreur sur le CFile , j'ai pouratn ajoute les MFC a mon projet, que dois je faire?
    J'ai l'erreur suivant
    error C2065: 'CFile' : undeclared identifier
    H:\encodedecode.cpp(19) : error C2065: 'fileIn' : undeclared identifier
    H:\encodedecode.cpp(19) : error C2065: 'fileSignedData' : undeclared identifier
    H:\encodedecode.cpp(19) : error C2078: too many initializers
    H:\encodedecode\encodedecode.cpp(19) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
    H:\encodedecode\encodedecode.cpp(93) : error C2448: '<Unknown>' :


    voici le nouveau code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    #include <stdio.h>
    #include <windows.h>
    #include <Wincrypt.h>
     
     
    // Link with the Crypt32.lib file.
    #pragma comment (lib, "Crypt32.lib")
     
    #define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
     
    #define MAX_NAME 256
     
    #define CERTIFICATE_STORE_NAME L"MY"
     
    //-------------------------------------------------------------------
    //    Declare local functions.
     
    //-------------------------------------------------------------------
    bool EncodeMessage(CFile& fileIn,CFile& fileSignedData);
     
     
    //  Define function MyHandleError.
    void MyHandleError(LPTSTR psz)
    {
        _ftprintf(stderr, TEXT("An error occurred in the program. \n"));
        _ftprintf(stderr, TEXT("%s\n"), psz);
        _ftprintf(stderr, TEXT("Error number %x.\n"), GetLastError());
        _ftprintf(stderr, TEXT("Program terminating. \n"));
        exit(1);
    } // End of MyHandleError.
     
     
     
     
    bool EncodeMessage(CFile& fileIn,CFile& fileSignedData)
    {
       BOOL bResult = TRUE;
       HCRYPTKEY      hPublicKey = NULL;
       HCRYPTHASH     hHash = NULL;
       DWORD          dwKeyBlobLen = 0;
       CByteArray     baKeyBlob;
       DWORD          dwCount = 0;
       BOOL           bEOF = 0;
       DWORD dwSigLength = 0;
       CByteArray baSignature;
       DWORD dwLen;
       BYTE pBufData[BLOCK_SIZE];
     
       //////////////////////////////////////////////////////////////
       // 1. Obtain external public key
       //////////////////////////////////////////////////////////////
       if( fileIn.Read(&dwKeyBlobLen,sizeof(DWORD)) != sizeof(DWORD) )
       {
          TRACE(_T("Corrupted key file: 0x%Xn"),GetLastError ());
          bResult = FALSE;
          goto CleanUp;
       }
     
       baKeyBlob.SetSize(dwKeyBlobLen);
       if ( fileIn.Read(baKeyBlob.GetData(),
            dwKeyBlobLen) != dwKeyBlobLen )
       {
          TRACE(_T("Corrupted key file: 0x%Xn"),GetLastError ());
          bResult = FALSE;
          goto CleanUp;
       }
     
       if( !CryptImportKey(m_hProv,baKeyBlob.GetData(),dwKeyBlobLen,
           0,0,&hPublicKey) )
       {
          TRACE(_T("Error during CryptImportKey: 0x%Xn"),
                GetLastError ());
          bResult = FALSE;
          goto CleanUp;
       }
     
       //////////////////////////////////////////////////////////////
       // 2. Hash a message
       //////////////////////////////////////////////////////////////
       if(!CryptCreateHash(m_hProv,CALG_MD5,0,0,&hHash))
       {
          DWORD dwErr = GetLastError();
          TRACE(_T("Error during CryptCreateHash: 0x%Xn"),dwErr);
          bResult = FALSE;
          goto CleanUp;
       }
     
       if(fileSignedData.Read(&dwSigLength,sizeof(DWORD)) !=
          sizeof(DWORD))
       {
          DWORD dwErr = GetLastError ();
          TRACE(_T("Error during Read Data file: 0x%Xn"),dwErr);
          bResult = FALSE;
          goto CleanUp;
       }
       if(dwSigLength <= 0 )
       {
          TRACE(_T("Error during Read Data filen"));
          bResult = FALSE;
          goto CleanUp;
       }
     
       baSignature.SetSize(dwSigLength);
       fileSignedData.Read(baSignature.GetData(),dwSigLength);
     
       memset(pBufData,0,BLOCK_SIZE);
       while((dwLen = fileSignedData.Read(pBufData,BLOCK_SIZE)))
       {
          if(!CryptHashData(hHash,pBufData,dwLen,0))
          {
             DWORD dwErr = GetLastError();
             TRACE(_T("Error during CryptHashData: 0x%Xn"),dwErr);
             bResult = FALSE;
             goto CleanUp;
          }
          memset(pBufData,0,BLOCK_SIZE);
       }
     
       //////////////////////////////////////////////////////////////
       // 3. Verify signature
       //////////////////////////////////////////////////////////////
       if(!CryptVerifySignature(hHash,baSignature.GetData(),
                                dwSigLength,hPublicKey,NULL,0))
       {
          DWORD dwErr = GetLastError();
          TRACE(_T("Error during CryptVerifySignature: 0x%Xn"),dwErr);
          bResult = FALSE;
          goto CleanUp;
       }
     
    CleanUp:
       if ( hHash )
          CryptDestroyHash (hHash);
     
       return bResult;
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Je ne vois pas d'inclusion des headers de MFC (ou de stdafx.h") dans ton code...
    Et tu es sûr que le CFile est supporté par WinCE ? Je n'ai pas regardé, mais il me semble que les MFC aussi sont un tantinet réduites...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [VC6] problème de linkage librairie .lib
    Par moulefrite dans le forum Visual C++
    Réponses: 0
    Dernier message: 03/06/2009, 15h59
  2. [NASM / Linux] Problème de linkage avec lib C
    Par donkeyquote dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 01/11/2008, 15h09
  3. [C++] Probleme de linkage de Lib
    Par Arkael dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 16/07/2008, 01h01
  4. [LNK1104] linkage de lib
    Par ZaaN dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2007, 08h39
  5. [Code::Blocks] Problème de linkage: "msvcrt.lib"
    Par skhay dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 14/03/2006, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo