Botan  1.10.9
Public Member Functions | List of all members
Botan::X509_Time Class Reference

#include <asn1_obj.h>

Inheritance diagram for Botan::X509_Time:
Botan::ASN1_Object

Public Member Functions

std::string as_string () const
 
s32bit cmp (const X509_Time &) const
 
void decode_from (class BER_Decoder &)
 
void encode_into (class DER_Encoder &) const
 
std::string readable_string () const
 
void set_to (const std::string &)
 
void set_to (const std::string &, ASN1_Tag)
 
bool time_is_set () const
 
 X509_Time (u64bit)
 
 X509_Time (const std::string &="")
 
 X509_Time (const std::string &, ASN1_Tag)
 

Detailed Description

X.509 Time

Definition at line 41 of file asn1_obj.h.

Constructor & Destructor Documentation

Botan::X509_Time::X509_Time ( u64bit  timer)

Definition at line 28 of file asn1_tm.cpp.

References Botan::calendar_value(), Botan::calendar_point::day, Botan::GENERALIZED_TIME, Botan::calendar_point::hour, Botan::calendar_point::minutes, Botan::calendar_point::month, Botan::calendar_point::seconds, Botan::UTC_TIME, and Botan::calendar_point::year.

29  {
30  calendar_point cal = calendar_value(timer);
31 
32  year = cal.year;
33  month = cal.month;
34  day = cal.day;
35  hour = cal.hour;
36  minute = cal.minutes;
37  second = cal.seconds;
38 
39  tag = (year >= 2050) ? GENERALIZED_TIME : UTC_TIME;
40  }
calendar_point calendar_value(u64bit a_time_t)
Definition: time.cpp:81
Botan::X509_Time::X509_Time ( const std::string &  time_str = "")

Definition at line 20 of file asn1_tm.cpp.

References set_to().

21  {
22  set_to(time_str);
23  }
void set_to(const std::string &)
Definition: asn1_tm.cpp:53
Botan::X509_Time::X509_Time ( const std::string &  t_spec,
ASN1_Tag  t 
)

Definition at line 45 of file asn1_tm.cpp.

References set_to().

45  : tag(t)
46  {
47  set_to(t_spec, tag);
48  }
void set_to(const std::string &)
Definition: asn1_tm.cpp:53

Member Function Documentation

std::string Botan::X509_Time::as_string ( ) const

Definition at line 180 of file asn1_tm.cpp.

References Botan::GENERALIZED_TIME, readable_string(), time_is_set(), Botan::to_string(), and Botan::UTC_TIME.

Referenced by encode_into().

181  {
182  if(time_is_set() == false)
183  throw Invalid_State("X509_Time::as_string: No time set");
184 
185  std::string asn1rep;
186  if(tag == GENERALIZED_TIME)
187  asn1rep = to_string(year, 4);
188  else if(tag == UTC_TIME)
189  {
190  if(year < 1950 || year >= 2050)
191  throw Encoding_Error("X509_Time: The time " + readable_string() +
192  " cannot be encoded as a UTCTime");
193  u32bit asn1year = (year >= 2000) ? (year - 2000) : (year - 1900);
194  asn1rep = to_string(asn1year, 2);
195  }
196  else
197  throw Invalid_Argument("X509_Time: Invalid tag " + to_string(tag));
198 
199  asn1rep += to_string(month, 2) + to_string(day, 2);
200  asn1rep += to_string(hour, 2) + to_string(minute, 2) + to_string(second, 2);
201  asn1rep += "Z";
202  return asn1rep;
203  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
bool time_is_set() const
Definition: asn1_tm.cpp:208
std::string to_string(u64bit n, size_t min_len)
Definition: parsing.cpp:42
std::string readable_string() const
Definition: asn1_tm.cpp:216
unsigned int u32bit
Definition: types.h:32
s32bit Botan::X509_Time::cmp ( const X509_Time other) const

Definition at line 250 of file asn1_tm.cpp.

References time_is_set().

Referenced by Botan::operator!=(), Botan::operator<(), Botan::operator<=(), Botan::operator==(), Botan::operator>(), and Botan::operator>=().

251  {
252  if(time_is_set() == false)
253  throw Invalid_State("X509_Time::cmp: No time set");
254 
255  const s32bit EARLIER = -1, LATER = 1, SAME_TIME = 0;
256 
257  if(year < other.year) return EARLIER;
258  if(year > other.year) return LATER;
259  if(month < other.month) return EARLIER;
260  if(month > other.month) return LATER;
261  if(day < other.day) return EARLIER;
262  if(day > other.day) return LATER;
263  if(hour < other.hour) return EARLIER;
264  if(hour > other.hour) return LATER;
265  if(minute < other.minute) return EARLIER;
266  if(minute > other.minute) return LATER;
267  if(second < other.second) return EARLIER;
268  if(second > other.second) return LATER;
269 
270  return SAME_TIME;
271  }
signed int s32bit
Definition: types.h:37
bool time_is_set() const
Definition: asn1_tm.cpp:208
void Botan::X509_Time::decode_from ( class BER_Decoder from)
virtual

Decode whatever this object is from from

Parameters
fromthe BER_Decoder that will be read from

Implements Botan::ASN1_Object.

Definition at line 167 of file asn1_tm.cpp.

References Botan::BER_Decoder::get_next_object(), Botan::LATIN1_CHARSET, Botan::LOCAL_CHARSET, set_to(), Botan::ASN1::to_string(), Botan::Charset::transcode(), and Botan::BER_Object::type_tag.

168  {
169  BER_Object ber_time = source.get_next_object();
170 
173  LOCAL_CHARSET),
174  ber_time.type_tag);
175  }
std::string to_string(const BER_Object &obj)
Definition: asn1_int.cpp:46
std::string transcode(const std::string &str, Character_Set to, Character_Set from)
Definition: charset.cpp:103
void set_to(const std::string &)
Definition: asn1_tm.cpp:53
void Botan::X509_Time::encode_into ( class DER_Encoder to) const
virtual

Encode whatever this object is into to

Parameters
tothe DER_Encoder that will be written to

Implements Botan::ASN1_Object.

Definition at line 153 of file asn1_tm.cpp.

References Botan::DER_Encoder::add_object(), as_string(), Botan::GENERALIZED_TIME, Botan::LATIN1_CHARSET, Botan::LOCAL_CHARSET, Botan::Charset::transcode(), Botan::UNIVERSAL, and Botan::UTC_TIME.

154  {
155  if(tag != GENERALIZED_TIME && tag != UTC_TIME)
156  throw Invalid_Argument("X509_Time: Bad encoding tag");
157 
158  der.add_object(tag, UNIVERSAL,
161  LATIN1_CHARSET));
162  }
std::string as_string() const
Definition: asn1_tm.cpp:180
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
std::string transcode(const std::string &str, Character_Set to, Character_Set from)
Definition: charset.cpp:103
std::string Botan::X509_Time::readable_string ( ) const

Definition at line 216 of file asn1_tm.cpp.

References time_is_set(), and Botan::to_string().

Referenced by as_string().

217  {
218  if(time_is_set() == false)
219  throw Invalid_State("X509_Time::readable_string: No time set");
220 
221  std::string readable;
222  readable += to_string(year, 4) + "/";
223  readable += to_string(month ) + "/";
224  readable += to_string(day ) + " ";
225  readable += to_string(hour ) + ":";
226  readable += to_string(minute, 2) + ":";
227  readable += to_string(second, 2) + " UTC";
228  return readable;
229  }
bool time_is_set() const
Definition: asn1_tm.cpp:208
std::string to_string(u64bit n, size_t min_len)
Definition: parsing.cpp:42
void Botan::X509_Time::set_to ( const std::string &  time_str)

Definition at line 53 of file asn1_tm.cpp.

References Botan::GENERALIZED_TIME, Botan::Charset::is_digit(), Botan::NO_OBJECT, Botan::to_u32bit(), and Botan::UTC_TIME.

Referenced by decode_from(), and X509_Time().

54  {
55  if(time_str == "")
56  {
57  year = month = day = hour = minute = second = 0;
58  tag = NO_OBJECT;
59  return;
60  }
61 
62  std::vector<std::string> params;
63  std::string current;
64 
65  for(size_t j = 0; j != time_str.size(); ++j)
66  {
67  if(Charset::is_digit(time_str[j]))
68  current += time_str[j];
69  else
70  {
71  if(current != "")
72  params.push_back(current);
73  current.clear();
74  }
75  }
76  if(current != "")
77  params.push_back(current);
78 
79  if(params.size() < 3 || params.size() > 6)
80  throw Invalid_Argument("Invalid time specification " + time_str);
81 
82  year = to_u32bit(params[0]);
83  month = to_u32bit(params[1]);
84  day = to_u32bit(params[2]);
85  hour = (params.size() >= 4) ? to_u32bit(params[3]) : 0;
86  minute = (params.size() >= 5) ? to_u32bit(params[4]) : 0;
87  second = (params.size() == 6) ? to_u32bit(params[5]) : 0;
88 
89  tag = (year >= 2050) ? GENERALIZED_TIME : UTC_TIME;
90 
91  if(!passes_sanity_check())
92  throw Invalid_Argument("Invalid time specification " + time_str);
93  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
bool is_digit(char c)
Definition: charset.cpp:128
u32bit to_u32bit(const std::string &number)
Definition: parsing.cpp:18
void Botan::X509_Time::set_to ( const std::string &  t_spec,
ASN1_Tag  spec_tag 
)

Definition at line 98 of file asn1_tm.cpp.

References Botan::GENERALIZED_TIME, Botan::to_string(), Botan::to_u32bit(), and Botan::UTC_TIME.

99  {
100  if(spec_tag != GENERALIZED_TIME && spec_tag != UTC_TIME)
101  throw Invalid_Argument("X509_Time: Invalid tag " + to_string(spec_tag));
102 
103  if(spec_tag == GENERALIZED_TIME && t_spec.size() != 13 && t_spec.size() != 15)
104  throw Invalid_Argument("Invalid GeneralizedTime: " + t_spec);
105 
106  if(spec_tag == UTC_TIME && t_spec.size() != 11 && t_spec.size() != 13)
107  throw Invalid_Argument("Invalid UTCTime: " + t_spec);
108 
109  if(t_spec[t_spec.size()-1] != 'Z')
110  throw Invalid_Argument("Invalid time encoding: " + t_spec);
111 
112  const size_t YEAR_SIZE = (spec_tag == UTC_TIME) ? 2 : 4;
113 
114  std::vector<std::string> params;
115  std::string current;
116 
117  for(size_t j = 0; j != YEAR_SIZE; ++j)
118  current += t_spec[j];
119  params.push_back(current);
120  current.clear();
121 
122  for(size_t j = YEAR_SIZE; j != t_spec.size() - 1; ++j)
123  {
124  current += t_spec[j];
125  if(current.size() == 2)
126  {
127  params.push_back(current);
128  current.clear();
129  }
130  }
131 
132  year = to_u32bit(params[0]);
133  month = to_u32bit(params[1]);
134  day = to_u32bit(params[2]);
135  hour = to_u32bit(params[3]);
136  minute = to_u32bit(params[4]);
137  second = (params.size() == 6) ? to_u32bit(params[5]) : 0;
138  tag = spec_tag;
139 
140  if(spec_tag == UTC_TIME)
141  {
142  if(year >= 50) year += 1900;
143  else year += 2000;
144  }
145 
146  if(!passes_sanity_check())
147  throw Invalid_Argument("Invalid time specification " + t_spec);
148  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
std::string to_string(u64bit n, size_t min_len)
Definition: parsing.cpp:42
u32bit to_u32bit(const std::string &number)
Definition: parsing.cpp:18
bool Botan::X509_Time::time_is_set ( ) const

Definition at line 208 of file asn1_tm.cpp.

Referenced by as_string(), cmp(), and readable_string().

209  {
210  return (year != 0);
211  }

The documentation for this class was generated from the following files: