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