| // 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_TEST_HELPERS_H_ | |
| #define THIRD_PARTY_CREDENTIO_TSP_TEST_HELPERS_H_ | |
| #include <cstdint> | |
| #include <optional> | |
| #include <string> | |
| #include <variant> | |
| #include <vector> | |
| #include "absl/base/nullability.h" | |
| #include "absl/strings/string_view.h" | |
| #include "absl/time/time.h" | |
| #include "absl/types/span.h" | |
| #include "crypto/algorithms.h" | |
| #include "openssl/base.h" | |
| #include "tink/public_key_sign.h" | |
| #include "tsp/status_codes.h" | |
| namespace credentio { | |
| // Wraps arbitrary data in a DER SEQUENCE. | |
| std::string WrapDerSequence(absl::string_view payload); | |
| // Encodes a DER INTEGER (with tag and length, no wrapping structure) | |
| std::string EncodeDerInteger(uint64_t n); | |
| std::string CreateTimeStampResp(absl::string_view ts_token); | |
| std::string CreateFailedTimeStampResp( | |
| TspPkiStatus status, absl::Span<const absl::string_view> status_string = {}, | |
| absl::Span<const int32_t> failure_info = {}); | |
| // If `signing_certificate_attribute` holds a string, it will be taken as the | |
| // raw attribute value. If it holds `true` the value will be generated from | |
| // `cert_pem`. If it holds `false`, the attribute will be omitted. | |
| std::string CreateTimeStampTokenRsa( | |
| absl::Span<const absl::string_view> der_data, absl::string_view key_pem, | |
| absl::string_view cert_pem, bool embed_cert = true, | |
| std::variant<absl::string_view, bool> signing_certificate_attribute = true); | |
| // If `signing_certificate_attribute` holds a string, it will be taken as the | |
| // raw attribute value. If it holds `true` the value will be generated from | |
| // `cert_pem`. If it holds `false`, the attribute will be omitted. | |
| std::string CreateTimeStampTokenEcdsa( | |
| absl::Span<const absl::string_view> der_data, | |
| const crypto::tink::PublicKeySign& signer, absl::string_view cert_pem, | |
| bool embed_cert, | |
| std::variant<absl::string_view, bool> signing_certificate_attribute = true, | |
| std::optional<absl::Time> signing_time = std::nullopt); | |
| // If `signing_certificate_attribute` holds a string, it will be taken as the | |
| // raw attribute value. If it holds `true` the value will be generated from | |
| // `cert_pem` and `extra_certs. If it holds `false`, the attribute will be | |
| // omitted. | |
| // If `use_wrong_e_content_type` is true, the eContentType will be set to | |
| // id-data instead of id-ct-tst-info. | |
| std::string CreateTimeStampTokenEcdsa( | |
| absl::Span<const absl::string_view> der_data, absl::string_view key_pem, | |
| absl::string_view cert_pem, bool embed_cert = true, | |
| std::optional<std::vector<const X509*>> extra_certs = std::nullopt, | |
| std::variant<absl::string_view, bool> signing_certificate_attribute = true, | |
| bool use_wrong_e_content_type = false); | |
| // If supplied, `nonce` will be inserted directly into the DER SEQUENCE, so it | |
| // must contain its own headers. | |
| std::string CreateTstInfo( | |
| absl::string_view gen_time, absl::string_view message_imprint_hash, | |
| absl::string_view message_imprint_algorithm_txt, | |
| std::optional<absl::string_view> nonce = std::nullopt); | |
| std::string CreateSigningCertificateV2Attribute( | |
| absl::Span<X509* absl_nonnull> certs, HashAlgorithm hash_algorithm); | |
| } // namespace credentio | |
| #endif // THIRD_PARTY_CREDENTIO_TSP_TEST_HELPERS_H_ |