blob: fbbe90ea26ff97313b599230718733bfb930a38d [file] [edit]
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#ifndef THIRD_PARTY_CREDENTIO_TSP_TIMESTAMP_PARSING_H_
#define THIRD_PARTY_CREDENTIO_TSP_TIMESTAMP_PARSING_H_
#include <string>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
#include "crypto/algorithms.h"
#include "openssl/base.h"
namespace credentio {
// Pulls the CMS timestamp token out of TimeStampResp and checks the response's
// status. See RFC 3161 section 2.4.2.
// `timestamp_resp` must be the full DER SEQUENCE, including the header bytes.
// Any TSA status codes other than "granted" or "grantedWithMods" in the
// response's `status` field will result in INVALID_ARGUMENT (as will any DER
// parsing errors).
absl::StatusOr<absl::string_view> ParseTimestampResp(
absl::string_view timestamp_resp);
// Extracts the `messageImprint`, `genTime`, and `nonce` values from a `TSTInfo`
// DER sequence, defined by RFC 3161. The array backing `cbs` will not be
// modified. All errors can be treated as `timestamp.malformed`. If the TSTInfo
// does not contain a `nonce` value, the provided `nonce` string will be left
// empty.
absl::Status ParseTstInfo(CBS cbs, absl::Time* time,
std::string* message_imprint_hash,
HashAlgorithm* hash_algorithm, std::string* nonce);
} // namespace credentio
#endif // THIRD_PARTY_CREDENTIO_TSP_TIMESTAMP_PARSING_H_