Guest User

CertUtil.h

a guest
Jul 10th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 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, se for retornado true
  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 *ppbData
  113.     // *ppbData deve ser desalocado com LocalFree, se for retornado true
  114.     bool signXMLBuffer( BYTE **ppbData, DWORD *pcbData,
  115.         const System::WideString &tag, bool freeData );
  116.  
  117.     // Verifica se um arquivo XML tem assinatura
  118.     bool signedXMLFile( const System::WideString &fileName );
  119.  
  120.     // Verifica a assinatura de um arquivo XML
  121.     bool verifyXMLFile( const System::WideString &fileName );
  122.  
  123.     // Verifica se uma cadeia XML tem assinatura
  124.     bool signedXMLBuffer( BYTE *pbData, DWORD cbData );
  125.  
  126.     // Verifica a assinatura de uma cadeia XML
  127.     bool verifyXMLBuffer( BYTE *pbData, DWORD cbData );
  128.  
  129.     // Nome do arquivo de certificados atual
  130.     System::WideString getFileName();
  131.  
  132.     // Nome do certificado atual
  133.     System::WideString getCertName();
  134.  
  135.     // Tipo de certificado
  136.     System::WideString getCertType();
  137.  
  138.     // Nome Empresarial/Pessoa Física
  139.     System::WideString getName();
  140.  
  141.     // Número de inscrição no CPF/CNPJ
  142.     System::WideString getDoc();
  143.  
  144.     // Localização
  145.     System::WideString getLoc();
  146.  
  147.     // E-mail do requerente
  148.     System::WideString getEmail();
  149.  
  150.     // Data do início da validade
  151.     System::TDateTime getValidFrom();
  152.  
  153.     // Data do fim da validade
  154.     System::TDateTime getValidTo();
  155.  
  156.     // Nome do emissor certificado
  157.     System::WideString getIssuerName();
  158. };
  159.  
  160. //---------------------------------------------------------------------------
  161. #endif
Advertisement
Add Comment
Please, Sign In to add comment