1 #ifndef __OPKELE_UTIL_INTERNAL_H 2 #define __OPKELE_UTIL_INTERNAL_H 3 4 #include <openssl/bn.h> 5 #include <openssl/dh.h> 6 #include <opkele/types.h> 7 8 namespace opkele { 9 namespace util { 10 11 /** 12 * Convenience class encapsulating SSL BIGNUM object for the purpose of 13 * automatical freeing. 14 */ 15 class bignum_t { 16 public: 17 BIGNUM *_bn; 18 bignum_t()19 bignum_t() : _bn(0) { } bignum_t(BIGNUM * bn)20 bignum_t(BIGNUM *bn) : _bn(bn) { } throw()21 ~bignum_t() throw() { if(_bn) BN_free(_bn); } 22 23 bignum_t& operator=(BIGNUM *bn) { if(_bn) BN_free(_bn); _bn = bn; return *this; } 24 25 operator const BIGNUM*(void) const { return _bn; } 26 operator BIGNUM*(void) { return _bn; } 27 }; 28 /** 29 * Convenience clas encapsulating SSL DH object for the purpose of 30 * automatic freeing. 31 */ 32 class dh_t { 33 public: 34 DH *_dh; 35 dh_t()36 dh_t() : _dh(0) { } dh_t(DH * dh)37 dh_t(DH *dh) : _dh(dh) { } throw()38 ~dh_t() throw() { if(_dh) DH_free(_dh); } 39 40 dh_t& operator=(DH *dh) { if(_dh) DH_free(_dh); _dh = dh; return *this; } 41 42 operator const DH*(void) const { return _dh; } 43 operator DH*(void) { return _dh; } 44 45 DH* operator->() { return _dh; } 46 const DH* operator->() const { return _dh; } 47 }; 48 49 /** 50 * Convert base64-encoded SSL BIGNUM to internal representation. 51 * @param b64 base64-encoded number 52 * @return SSL BIGNUM 53 * @throw failed_conversion in case of error 54 */ 55 BIGNUM *base64_to_bignum(const string& b64); 56 /** 57 * Convert decimal representation to SSL BIGNUM. 58 * @param dec decimal representation 59 * @return resulting BIGNUM 60 * @throw failed_conversion in case of error 61 */ 62 BIGNUM *dec_to_bignum(const string& dec); 63 /** 64 * Convert SSL BIGNUM data to base64 encoded string. 65 * @param bn BIGNUM 66 * @return base64encoded string 67 */ 68 string bignum_to_base64(const BIGNUM *bn); 69 70 string abi_demangle(const char* mn); 71 72 class change_mode_message_proxy : public basic_openid_message { 73 public: 74 const basic_openid_message& x; 75 const string& mode; 76 change_mode_message_proxy(const basic_openid_message & xx,const string & m)77 change_mode_message_proxy(const basic_openid_message& xx,const string& m) : x(xx), mode(m) { } 78 has_field(const string & n)79 bool has_field(const string& n) const { return x.has_field(n); } get_field(const string & n)80 const string& get_field(const string& n) const { 81 return (n=="mode")?mode:x.get_field(n); } has_ns(const string & uri)82 bool has_ns(const string& uri) const {return x.has_ns(uri); } get_ns(const string & uri)83 string get_ns(const string& uri) const { return x.get_ns(uri); } fields_begin()84 fields_iterator fields_begin() const { 85 return x.fields_begin(); } fields_end()86 fields_iterator fields_end() const { 87 return x.fields_end(); } 88 }; 89 90 } 91 } 92 93 #endif /* __OPKELE_UTIL_INTERNAL_H */ 94