Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- // Módulo de certificados digitais
- //
- #ifndef CertUtilH
- #define CertUtilH
- //---------------------------------------------------------------------------
- // Inclusões
- #include <System.hpp>
- #include <Classes.hpp>
- #include <windows.h>
- #include <wincrypt.h>
- #include <cryptxml.h>
- //---------------------------------------------------------------------------
- // Definições
- #define CERTUTIL_TAG_SIZE 128 // Tamanho máximo da TAG/Id
- #define CERTUTIL_LEVEL_MAX 16 // Nível máximo da TAG
- #define CERTUTIL_CHAIN_MAX 8 // Limite da cadeia de certificados
- #define CERTUTIL_SIGN_SIZE 4096 // Tamanho máximo do elemento <Signature>
- //---------------------------------------------------------------------------
- // Classe de certificados digitais
- class Cert
- {
- private:
- HANDLE hStore; // Repositório de certificados
- PCCERT_CONTEXT ctxCert; // Contexto do certificado
- HCRYPTPROV hPrvProv; // Provedor criptográfico privado
- DWORD dwKeySpec; // Tipo de certificado
- BOOL bFreeProv; // Se o provedor privado será fechado
- PCCERT_CHAIN_CONTEXT ctxChain; // Contexto da cadeia de certificação
- CRYPT_DATA_BLOB pfxData; // Dados do arquivo PFX
- System::WideString certFile; // Nome do arquivo de certificados
- System::WideString certName; // Nome do certificado
- System::WideString certType; // Tipo de certificado
- System::WideString name; // Nome Empresarial/Pessoa Física
- System::WideString doc; // Número de inscrição no CPF/CNPJ
- System::WideString loc; // Localização
- System::WideString email; // E-mail
- System::TDateTime validFrom; // Data do início da validade
- System::TDateTime validTo; // Data do fim da validade
- System::WideString issuerName; // Nome do emissor certificado
- System::WideString errMsg; // Última mensagem de erro
- System::WideString errCtx; // Contexto do erro
- // Define o último erro / contexto
- void error( DWORD err, const System::WideString msg, const System::WideString ctx );
- // Abre o repositório de certificados do sistema se nenhum aberto
- bool openSystemStore();
- // Obtém a chave privada e cadeia de certificação do certificado atual
- bool openPrivateKey();
- public:
- // Contrutor
- Cert();
- // Destrutor
- ~Cert();
- // Libera todos os recursos e fecha o repositório de certificados
- bool freeStore( bool closeStore );
- // Retorna e limpa a última mensagem de erro
- System::WideString lastError();
- // Abre um repositório de certificados em arquivo
- bool openFileStore( const System::WideString &fileName, const wchar_t *password );
- // Lista os certificados no repositório aberto ou do sistema
- bool listCert( Classes::TStrings &lst );
- // Abre um certificado no repositório aberto ou do sistema
- bool openCert( const System::WideString &cert );
- // Carrega o arquivo na memória
- // *ppbData deve ser desalocado com LocalFree, se for retornado true
- bool loadFile( const System::WideString &fileName,
- BYTE **ppbData, DWORD *pcbData );
- // Salva o conteúdo da memória em um arquivo
- bool writeFile( const System::WideString &fileOut,
- BYTE *pbData, DWORD cbData );
- // Localiza e monta o caminho XPath de uma TAG e extrai sua propriedade Id
- bool loadTagXPathId( const BYTE *pbData, const DWORD cbData,
- const System::WideString &tag, System::WideString &tag_xpath,
- System::WideString &tag_id );
- // Assina um arquivo XML (de um arquivo para outro)
- bool signXMLFile( const System::WideString &fileOut,
- const System::WideString &fileIn, const System::WideString &tag );
- // Assina um arquivo XML (da memória para um arquivo)
- bool signXMLBufferToFile( const System::WideString &fileOut,
- BYTE *pbData, DWORD cbData, const System::WideString &tag );
- // Assina um arquivo XML (num buffer de memória)
- // freeData: libera a memória originalmente apontada por *ppbData
- // *ppbData deve ser desalocado com LocalFree, se for retornado true
- bool signXMLBuffer( BYTE **ppbData, DWORD *pcbData,
- const System::WideString &tag, bool freeData );
- // Verifica se um arquivo XML tem assinatura
- bool signedXMLFile( const System::WideString &fileName );
- // Verifica a assinatura de um arquivo XML
- bool verifyXMLFile( const System::WideString &fileName );
- // Verifica se uma cadeia XML tem assinatura
- bool signedXMLBuffer( BYTE *pbData, DWORD cbData );
- // Verifica a assinatura de uma cadeia XML
- bool verifyXMLBuffer( BYTE *pbData, DWORD cbData );
- // Nome do arquivo de certificados atual
- System::WideString getFileName();
- // Nome do certificado atual
- System::WideString getCertName();
- // Tipo de certificado
- System::WideString getCertType();
- // Nome Empresarial/Pessoa Física
- System::WideString getName();
- // Número de inscrição no CPF/CNPJ
- System::WideString getDoc();
- // Localização
- System::WideString getLoc();
- // E-mail do requerente
- System::WideString getEmail();
- // Data do início da validade
- System::TDateTime getValidFrom();
- // Data do fim da validade
- System::TDateTime getValidTo();
- // Nome do emissor certificado
- System::WideString getIssuerName();
- };
- //---------------------------------------------------------------------------
- #endif
Advertisement
Add Comment
Please, Sign In to add comment