Guest User

CertUtil.h

a guest
Jul 10th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.62 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2. // Módulo de certificados digitais
  3. //
  4.  
  5. #ifndef CertUtilH
  6. #define CertUtilH
  7.  
  8. //---------------------------------------------------------------------------
  9. // Inclusões
  10.  
  11. #include <System.hpp>
  12. #include <Classes.hpp>
  13.  
  14. #include <windows.h>
  15. #include <wincrypt.h>
  16. #include <cryptxml.h>
  17.  
  18. //---------------------------------------------------------------------------
  19. // Definições
  20.  
  21. #define CERTUTIL_TAG_SIZE       128     // Tamanho máximo da TAG/Id
  22. #define CERTUTIL_LEVEL_MAX      16      // Nível máximo da TAG
  23. #define CERTUTIL_CHAIN_MAX      8       // Limite da cadeia de certificados
  24. #define CERTUTIL_SIGN_SIZE      4096    // Tamanho máximo do elemento <Signature>
  25.  
  26. //---------------------------------------------------------------------------
  27. // Classe de certificados digitais
  28.  
  29. class Cert
  30. {
  31.   private:
  32.     HANDLE hStore;                      // Repositório de certificados
  33.     PCCERT_CONTEXT ctxCert;             // Contexto do certificado
  34.  
  35.     HCRYPTPROV hPrvProv;                // Provedor criptográfico privado
  36.     DWORD dwKeySpec;                    // Tipo de certificado
  37.     BOOL bFreeProv;                     // Se o provedor privado será fechado
  38.  
  39.     PCCERT_CHAIN_CONTEXT ctxChain;      // Contexto da cadeia de certificação
  40.  
  41.     CRYPT_DATA_BLOB pfxData;            // Dados do arquivo PFX
  42.  
  43.     System::WideString certFile;        // Nome do arquivo de certificados
  44.     System::WideString certName;        // Nome do certificado
  45.     System::WideString certType;        // Tipo de certificado
  46.     System::WideString name;            // Nome Empresarial/Pessoa Física
  47.     System::WideString doc;             // Número de inscrição no CPF/CNPJ
  48.     System::WideString loc;             // Localização
  49.     System::WideString email;           // E-mail
  50.     System::TDateTime validFrom;        // Data do início da validade
  51.     System::TDateTime validTo;          // Data do fim da validade
  52.  
  53.     System::WideString issuerName;      // Nome do emissor certificado
  54.  
  55.     System::WideString errMsg;          // Última mensagem de erro
  56.     System::WideString errCtx;          // Contexto do erro
  57.  
  58.     // Define o último erro / contexto
  59.     void error( DWORD err, const System::WideString msg, const System::WideString ctx );
  60.  
  61.     // Abre o repositório de certificados do sistema se nenhum aberto
  62.     bool openSystemStore();
  63.  
  64.     // Obtém a chave privada e cadeia de certificação do certificado atual
  65.     bool openPrivateKey();
  66.  
  67.   public:
  68.     // Contrutor
  69.     Cert();
  70.  
  71.     // Destrutor
  72.     ~Cert();
  73.  
  74.     // Libera todos os recursos e fecha o repositório de certificados
  75.     bool freeStore( bool closeStore );
  76.  
  77.     // Retorna e limpa a última mensagem de erro
  78.     System::WideString lastError();
  79.  
  80.     // Abre um repositório de certificados em arquivo
  81.     bool openFileStore( const System::WideString &fileName, const wchar_t *password );
  82.  
  83.     // Lista os certificados no repositório aberto ou do sistema
  84.     bool listCert( Classes::TStrings &lst );
  85.  
  86.     // Abre um certificado no repositório aberto ou do sistema
  87.     bool openCert( const System::WideString &cert );
  88.  
  89.     // Carrega o arquivo na memória
  90.     // *ppbData deve ser desalocado com LocalFree
  91.     bool loadFile( const System::WideString &fileName,
  92.         BYTE **ppbData, DWORD *pcbData );
  93.  
  94.     // Salva o conteúdo da memória em um arquivo
  95.     bool writeFile( const System::WideString &fileOut,
  96.         BYTE *pbData, DWORD cbData );
  97.  
  98.     // Localiza e monta o caminho XPath de uma TAG e extrai sua propriedade Id
  99.     bool loadTagXPathId( const BYTE *pbData, const DWORD cbData,
  100.         const System::WideString &tag, System::WideString &tag_xpath,
  101.         System::WideString &tag_id );
  102.  
  103.     // Assina um arquivo XML (de um arquivo para outro)
  104.     bool signXMLFile( const System::WideString &fileOut,
  105.         const System::WideString &fileIn, const System::WideString &tag );
  106.  
  107.     // Assina um arquivo XML (da memória para um arquivo)
  108.     bool signXMLBufferToFile( const System::WideString &fileOut,
  109.         BYTE *pbData, DWORD cbData, const System::WideString &tag );
  110.  
  111.     // Assina um arquivo XML (num buffer de memória)
  112.     // freeData: libera a memória originalmente apontada por *pbData
  113.     bool signXMLBuffer( BYTE **pbData, DWORD *cbData,
  114.         const System::WideString &tag, bool freeData );
  115.  
  116.     // Verifica se um arquivo XML tem assinatura
  117.     bool signedXMLFile( const System::WideString &fileName );
  118.  
  119.     // Verifica a assinatura de um arquivo XML
  120.     bool verifyXMLFile( const System::WideString &fileName );
  121.  
  122.     // Verifica se uma cadeia XML tem assinatura
  123.     bool signedXMLBuffer( BYTE *pbData, DWORD cbData );
  124.  
  125.     // Verifica a assinatura de uma cadeia XML
  126.     bool verifyXMLBuffer( BYTE *pbData, DWORD cbData );
  127.  
  128.     // Nome do arquivo de certificados atual
  129.     System::WideString getFileName();
  130.  
  131.     // Nome do certificado atual
  132.     System::WideString getCertName();
  133.  
  134.     // Tipo de certificado
  135.     System::WideString getCertType();
  136.  
  137.     // Nome Empresarial/Pessoa Física
  138.     System::WideString getName();
  139.  
  140.     // Número de inscrição no CPF/CNPJ
  141.     System::WideString getDoc();
  142.  
  143.     // Localização
  144.     System::WideString getLoc();
  145.  
  146.     // E-mail do requerente
  147.     System::WideString getEmail();
  148.  
  149.     // Data do início da validade
  150.     System::TDateTime getValidFrom();
  151.  
  152.     // Data do fim da validade
  153.     System::TDateTime getValidTo();
  154.  
  155.     // Nome do emissor certificado
  156.     System::WideString getIssuerName();
  157. };
  158.  
  159. //---------------------------------------------------------------------------
  160. #endif
Advertisement
Add Comment
Please, Sign In to add comment