aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils/calendar.cpp
diff options
context:
space:
mode:
authorSimon Warta <[email protected]>2015-07-15 00:13:13 +0200
committerSimon Warta <[email protected]>2015-07-15 13:51:20 +0200
commit7f3c4b1ab3837e75e890232bd2c3ecb9f6390732 (patch)
tree485ca6e7e6739693a3dd1cb32b812096cb633b75 /src/lib/utils/calendar.cpp
parentbac65bbdd0f28804f0418d41bd63fa39c290c68d (diff)
Fix round_up
1. src/lib/codec/base64/base64.cpp: : (round_up<size_t>(input_length, 3) / 3) * 4; 2. src/lib/codec/base64/base64.cpp: : (round_up<size_t>(input_length, 4) * 3) / 4; 3. src/lib/filters/transform_filter.cpp: return round_up(target_size, update_granularity); 4. src/lib/math/bigint/bigint.cpp: m_reg.resize(round_up<size_t>(size, 8)); 5. src/lib/math/bigint/bigint.cpp: m_reg.resize(round_up<size_t>((length / WORD_BYTES) + 1, 8)); 6. src/lib/math/numbertheory/mp_numth.cpp: BigInt z(BigInt::Positive, round_up<size_t>(2*x_sw, 16)); 7. src/lib/modes/cbc/cbc.cpp: return round_up(input_length, cipher().block_size()); 8. src/lib/modes/ecb/ecb.cpp: return round_up(input_length, cipher().block_size()); 9. src/lib/modes/xts/xts.cpp: return round_up(input_length, cipher().block_size()); 10. src/lib/pbkdf/pbkdf2/pbkdf2.cpp: const size_t blocks_needed = round_up(out_len, prf_sz) / prf_sz; 11. src/lib/tls/tls_record.cpp: const size_t buf_size = round_up( 12. src/lib/utils/rounding.h:inline T round_up(T n, T align_to) 1. Reason for change 2. Reason for change 3. first argument cannot be 0 (`target_size = 1024`) 4. Is a bug in the current implementation iff `size = 0` 5. first argument cannot be 0 6. round_up should return 0 if `x_sw = 0` 7. ? 8. ? 9. ? 10. first argument cannot be 0 (`if(out_len == 0) return 0;`) 11. first argument is unlikely to be 0 (`iv_size + msg_length + mac_size + (block_size ? 1 : 0)`) 12. Implementation
Diffstat (limited to 'src/lib/utils/calendar.cpp')
-rw-r--r--src/lib/utils/calendar.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/lib/utils/calendar.cpp b/src/lib/utils/calendar.cpp
index 3ce5170fc..b578f6be9 100644
--- a/src/lib/utils/calendar.cpp
+++ b/src/lib/utils/calendar.cpp
@@ -33,9 +33,30 @@ std::tm do_gmtime(std::time_t time_val)
}
-/*
-* Convert a time_point to a calendar_point
-*/
+std::chrono::system_clock::time_point calendar_point::to_std_timepoint()
+ {
+ if (year < 1900)
+ throw Invalid_Argument("calendar_point::to_std_timepoint() does not support years before 1990.");
+
+ std::tm tm;
+ tm.tm_sec = seconds;
+ tm.tm_min = minutes;
+ tm.tm_hour = hour;
+ tm.tm_mday = day;
+ tm.tm_mon = month - 1;
+ tm.tm_year = year - 1900;
+
+ // Convert std::tm to std::time_t
+ // http://stackoverflow.com/questions/16647819/timegm-cross-platform
+ #if defined(BOTAN_TARGET_OS_IS_WINDOWS)
+ #define timegm _mkgmtime
+ #endif
+ std::time_t tt = timegm(&tm);
+
+ return std::chrono::system_clock::from_time_t(tt);
+ }
+
+
calendar_point calendar_value(
const std::chrono::system_clock::time_point& time_point)
{