include/DSInfo.H

Go to the documentation of this file.
00001 /* ${copyright}$ */
00002 /* $Id: DSInfo.H 886 2007-03-06 19:39:07Z eduardo $ */
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   // Flags for DS Info attributes
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__

Generated on Tue Mar 20 13:02:18 2007 for libepp_nicbr by  doxygen 1.4.7