security/pkix/lib/pkixtime.cpp

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
     3 /* This code is made available to you under your choice of the following sets
     4  * of licensing terms:
     5  */
     6 /* This Source Code Form is subject to the terms of the Mozilla Public
     7  * License, v. 2.0. If a copy of the MPL was not distributed with this
     8  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     9  */
    10 /* Copyright 2014 Mozilla Contributors
    11  *
    12  * Licensed under the Apache License, Version 2.0 (the "License");
    13  * you may not use this file except in compliance with the License.
    14  * You may obtain a copy of the License at
    15  *
    16  *     http://www.apache.org/licenses/LICENSE-2.0
    17  *
    18  * Unless required by applicable law or agreed to in writing, software
    19  * distributed under the License is distributed on an "AS IS" BASIS,
    20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    21  * See the License for the specific language governing permissions and
    22  * limitations under the License.
    23  */
    25 #include "pkix/Time.h"
    26 #include "pkixutil.h"
    27 #ifdef WIN32
    28 #include "windows.h"
    29 #else
    30 #include "sys/time.h"
    31 #endif
    33 namespace mozilla { namespace pkix {
    35 Time
    36 Now()
    37 {
    38   uint64_t seconds;
    40 #ifdef WIN32
    41   // "Contains a 64-bit value representing the number of 100-nanosecond
    42   // intervals since January 1, 1601 (UTC)."
    43   //   - http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
    44   FILETIME ft;
    45   GetSystemTimeAsFileTime(&ft);
    46   uint64_t ft64 = (static_cast<uint64_t>(ft.dwHighDateTime) << 32) |
    47                   ft.dwLowDateTime;
    48   seconds = (DaysBeforeYear(1601) * Time::ONE_DAY_IN_SECONDS) +
    49             ft64 / (1000u * 1000u * 1000u / 100u);
    50 #else
    51   // "The gettimeofday() function shall obtain the current time, expressed as
    52   // seconds and microseconds since the Epoch."
    53   //   - http://pubs.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html
    54   timeval tv;
    55   (void) gettimeofday(&tv, nullptr);
    56   seconds = (DaysBeforeYear(1970) * Time::ONE_DAY_IN_SECONDS) + tv.tv_sec;
    57 #endif
    59   return TimeFromElapsedSecondsAD(seconds);
    60 }
    62 Time
    63 TimeFromEpochInSeconds(uint64_t secondsSinceEpoch)
    64 {
    65   uint64_t seconds = (DaysBeforeYear(1970) * Time::ONE_DAY_IN_SECONDS) +
    66                      secondsSinceEpoch;
    67   return TimeFromElapsedSecondsAD(seconds);
    68 }
    70 } } // namespace mozilla::pkix

mercurial