fintp_base
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
P7MFilter.h
Go to the documentation of this file.
1 /*
2 * FinTP - Financial Transactions Processing Application
3 * Copyright (C) 2013 Business Information Systems (Allevo) S.R.L.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>
17 * or contact Allevo at : 031281 Bucuresti, 23C Calea Vitan, Romania,
18 * phone +40212554577, office@allevo.ro <mailto:office@allevo.ro>, www.allevo.ro.
19 */
20 
25 #ifndef _P7MFILTER_H_
26 #define _P7MFILTER_H_
27 
28 #include "../AbstractFilter.h"
29 #include "../AppSettings.h"
30 #include <xercesc/util/PlatformUtils.hpp>
31 #include <xercesc/framework/StdOutFormatTarget.hpp>
32 
33 #include <openssl/bio.h>
34 #include <openssl/x509.h>
35 #include <openssl/pkcs7.h>
36 #include <openssl/x509.h>
37 #include <openssl/pkcs12.h>
38 
39 namespace FinTP
40 {
47  {
48  private:
49 
51  PKCS7* m_P7;
53  PKCS7_SIGNER_INFO *m_SI;
55  BIO *m_Data, *m_P7bio;
57  STACK_OF(PKCS7_SIGNER_INFO) *m_sk;
59  EVP_PKEY* m_PKey;
61  X509* m_X509;
63  PKCS12* m_Pkcs12;
64 
65  public:
66 
68  static const string P7MCERTFILENAME;
70  static const string P7MCERTPASSWD;
72  P7MFilter();
74  ~P7MFilter();
75 
82  bool isMethodSupported( FilterMethod method, bool asClient );
83 
92  AbstractFilter::FilterResult ProcessMessage( AbstractFilter::buffer_type inputData, AbstractFilter::buffer_type outputData, NameValueCollection& transportHeaders, bool asClient );
101  AbstractFilter::FilterResult ProcessMessage( AbstractFilter::buffer_type inputData, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* outputData, NameValueCollection& transportHeaders, bool asClient );
110  AbstractFilter::FilterResult ProcessMessage( const XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* inputData, AbstractFilter::buffer_type outputData, NameValueCollection& transportHeaders, bool asClient )
111  {
113  }
114 
116  AbstractFilter::FilterResult ProcessMessage( XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* inputOutputData, NameValueCollection& transportHeaders, bool asClient )
117  {
119  }
120 
122  AbstractFilter::FilterResult ProcessMessage( const XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* inputData, unsigned char** outputData, NameValueCollection& transportHeaders, bool asClient )
123  {
125  }
126 
128  AbstractFilter::FilterResult ProcessMessage( AbstractFilter::buffer_type inputData, unsigned char** outputData, NameValueCollection& transportHeaders, bool asClient )
129  {
131  }
132 
137  static bool IsSigned( const string& signedString );
138 
139  private :
140 
144  string m_CertPasswd;
145 
147  void ValidateProperties();
152  static string ReadDataFromBIO( BIO* bp );
153  //read pkcs7 structure from b64 format
154  static PKCS7* B64_read_PKCS7( BIO* bio );
155  //write pkcs7 structure to b64 format
156  static int B64_write_PKCS7(BIO *bio, PKCS7 *p7);
157 
160  static int Verify_Callback(int ok, X509_STORE_CTX *ctx );
161  };
162 }
163 #endif // _P7MFILTER_H_