00001
00002
00007 #ifndef __DSINFO_H__
00008 #define __DSINFO_H__
00009
00010 #include "StrUtil.H"
00011
00012 LIBEPP_NICBR_NS_BEGIN
00013
00015 class DSInfo {
00016 public:
00017 struct KeyData {
00018 unsigned int _flags;
00019 unsigned int _protocol;
00020 unsigned int _algorithm;
00021 string _pub_key;
00022
00023 KeyData& operator=(const KeyData &key_data) {
00024 _flags = key_data._flags;
00025 _protocol = key_data._protocol;
00026 _algorithm = key_data._algorithm;
00027 _pub_key = key_data._pub_key;
00028
00029 return *this;
00030 }
00031
00032 KeyData() {
00033 this->reset();
00034 }
00035
00036 bool is_set() {
00037 return (_flags != 0 && _protocol != 0 && _algorithm != 0 &&
00038 _pub_key != "");
00039 }
00040
00041 void reset() {
00042 _flags = 0;
00043 _protocol = 0;
00044 _algorithm = 0;
00045 _pub_key = "";
00046 }
00047 };
00048
00049 DSInfo& operator=(const DSInfo &dsInfo) {
00050 _key_tag = dsInfo._key_tag;
00051 _key_tag_f = dsInfo._key_tag_f;
00052 _algo = dsInfo._algo;
00053 _algo_f = dsInfo._algo_f;
00054 _digest_type = dsInfo._digest_type;
00055 _digest_type_f = dsInfo._digest_type_f;
00056 _digest = dsInfo._digest;
00057 _digest_f = dsInfo._digest_f;
00058 _max_sig_life = dsInfo._max_sig_life;
00059 _key_data = dsInfo._key_data;
00060 _hasKeyData = dsInfo._hasKeyData;
00061
00062 return *this;
00063 }
00064
00066 DSInfo()
00067 {
00068 this->reset();
00069 }
00070
00072
00075 void set_key_tag(const unsigned int key_tag)
00076 {
00077 _key_tag = key_tag;
00078 _key_tag_f = true;
00079 }
00080
00082
00085 unsigned int get_key_tag() { return _key_tag; }
00086
00088
00091 void set_algo(const unsigned int algo)
00092 {
00093 _algo = algo;
00094 _algo_f = true;
00095 }
00096
00098
00101 unsigned int get_algo() { return _algo; }
00102
00104
00107 void set_digest_type(const unsigned int digest_type)
00108 {
00109 _digest_type = digest_type;
00110 _digest_type_f = true;
00111 }
00112
00114
00117 unsigned int get_digest_type() { return _digest_type; }
00118
00120
00123 void set_digest(string digest)
00124 {
00125 _digest = digest;
00126 _digest_f = true;
00127 }
00128
00130
00133 string get_digest()
00134 {
00135 return _digest;
00136 }
00137
00139
00142 void set_max_sig_life(const unsigned int max_sig_life)
00143 {
00144 _max_sig_life = max_sig_life;
00145 }
00146
00148
00151 unsigned int get_max_sig_life()
00152 {
00153 return _max_sig_life;
00154 }
00155
00157
00160 void set_key_data(const KeyData key_data)
00161 {
00162 _key_data = key_data;
00163 _hasKeyData = true;
00164 }
00165
00167
00170 KeyData get_key_data()
00171 {
00172 return _key_data;
00173 }
00174
00176 bool hasKeyData()
00177 {
00178 return _hasKeyData;
00179 }
00180
00182
00185 string get_xml_format()
00186 {
00187 string xml = "<secDNS:dsData>"
00188 "<secDNS:keyTag>" + StrUtil::to_string("%u", _key_tag) +
00189 "</secDNS:keyTag>"
00190 "<secDNS:alg>" + StrUtil::to_string("%u", _algo) +
00191 "</secDNS:alg>"
00192 "<secDNS:digestType>" + StrUtil::to_string("%u", _digest_type) +
00193 "</secDNS:digestType>"
00194 "<secDNS:digest>" + StrUtil::esc_xml_markup(_digest) +
00195 "</secDNS:digest>";
00196
00197 if (_max_sig_life > 0) {
00198 xml += "<secDNS:maxSigLife>" + StrUtil::to_string("%u", _max_sig_life) +
00199 "</secDNS:maxSigLife>";
00200 }
00201
00202 if (_hasKeyData) {
00203 xml += "<secDNS:keyData>"
00204 "<secDNS:flags>" + StrUtil::to_string("%u", _key_data._flags) +
00205 "</secDNS:flags>"
00206 "<secDNS:protocol>" + StrUtil::to_string("%u", _key_data._protocol) +
00207 "</secDNS:protocol>"
00208 "<secDNS:alg>" + StrUtil::to_string("%u", _key_data._algorithm) +
00209 "</secDNS:alg>"
00210 "<secDNS:pubKey>" + _key_data._pub_key +
00211 "</secDNS:pubKey>" +
00212 "</secDNS:keyData>";
00213 }
00214
00215 xml += "</secDNS:dsData>";
00216
00217 return xml;
00218 }
00219
00221 void reset()
00222 {
00223 _key_tag = 0;
00224 _algo = 0;
00225 _digest_type = 0;
00226 _max_sig_life = 0;
00227 _digest = "";
00228 _key_data.reset();
00229 _key_tag_f = false;
00230 _algo_f = false;
00231 _digest_type_f = false;
00232 _digest_f = false;
00233 _hasKeyData = false;
00234 }
00235
00236 protected:
00237
00238 bool _key_tag_f;
00239 bool _algo_f;
00240 bool _digest_type_f;
00241 bool _digest_f;
00242 bool _hasKeyData;
00243
00245 unsigned int _key_tag;
00246 unsigned int _algo;
00247 unsigned int _digest_type;
00248 string _digest;
00249 unsigned int _max_sig_life;
00250 KeyData _key_data;
00251
00252 };
00253 LIBEPP_NICBR_NS_END
00254 #endif //__DSINFO__