Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / net / der / parse_values.h
blobfbe1d88b80b694e384f63379812c9bc536fc02e6
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef NET_DER_PARSE_VALUES_H_
6 #define NET_DER_PARSE_VALUES_H_
8 #include "base/compiler_specific.h"
9 #include "net/base/net_export.h"
10 #include "net/der/input.h"
12 namespace net {
14 namespace der {
16 // Reads a DER-encoded ASN.1 BOOLEAN value from |in| and puts the resulting
17 // value in |out|. Returns whether the encoded value could successfully be
18 // read.
19 NET_EXPORT bool ParseBool(const Input& in, bool* out) WARN_UNUSED_RESULT;
21 // Like ParseBool, except it is more relaxed in what inputs it accepts: Any
22 // value that is a valid BER encoding will be parsed successfully.
23 NET_EXPORT bool ParseBoolRelaxed(const Input& in, bool* out) WARN_UNUSED_RESULT;
25 // Reads a DER-encoded ASN.1 INTEGER value from |in| and puts the resulting
26 // value in |out|. ASN.1 INTEGERs are arbitrary precision; this function is
27 // provided as a convenience when the caller knows that the value is unsigned
28 // and is between 0 and 2^63-1. This function does not support the full range of
29 // uint64_t. This function returns false if the value is too big to fit in a
30 // uint64_t, is negative, or if there is an error reading the integer.
31 NET_EXPORT bool ParseUint64(const Input& in, uint64_t* out) WARN_UNUSED_RESULT;
33 struct GeneralizedTime {
34 uint16_t year;
35 uint8_t month;
36 uint8_t day;
37 uint8_t hours;
38 uint8_t minutes;
39 uint8_t seconds;
42 NET_EXPORT_PRIVATE bool operator<(const GeneralizedTime& lhs,
43 const GeneralizedTime& rhs);
45 // Reads a DER-encoded ASN.1 UTCTime value from |in| and puts the resulting
46 // value in |out|, returning true if the UTCTime could be parsed successfully.
47 NET_EXPORT bool ParseUTCTime(const Input& in,
48 GeneralizedTime* out) WARN_UNUSED_RESULT;
50 // Like ParseUTCTime, but it is more lenient in what is accepted. DER requires
51 // a UTCTime to be in the format YYMMDDhhmmssZ; this function will accept both
52 // that and YYMMDDhhmmZ, which is a valid BER encoding of a UTCTime which
53 // sometimes incorrectly appears in X.509 certificates.
54 NET_EXPORT bool ParseUTCTimeRelaxed(const Input& in,
55 GeneralizedTime* out) WARN_UNUSED_RESULT;
57 // Reads a DER-encoded ASN.1 GeneralizedTime value from |in| and puts the
58 // resulting value in |out|, returning true if the GeneralizedTime could
59 // be parsed sucessfully. This function is even more restrictive than the
60 // DER rules - it follows the rules from RFC5280, which does not allow for
61 // fractional seconds.
62 NET_EXPORT bool ParseGeneralizedTime(const Input& in,
63 GeneralizedTime* out) WARN_UNUSED_RESULT;
65 } // namespace der
67 } // namespace net
69 #endif // NET_DER_PARSE_VALUES_H_