#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/public/common/origin_trials/trial_token.h"
#include <memory>
#include <optional>
#include <string_view>
#include "base/base64.h"
#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/numerics/byte_conversions.h"
#include "base/strings/strcat.h"
#include "base/time/time.h"
#include "base/values.h"
#include "third_party/blink/public/common/origin_trials/origin_trials.h"
#include "third_party/boringssl/src/include/openssl/curve25519.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace blink {
namespace {
const size_t kMaxPayloadSize = …;
const size_t kMaxTokenSize = …;
const size_t kVersionOffset = …;
const size_t kVersionSize = …;
const size_t kSignatureOffset = …;
const size_t kSignatureSize = …;
const size_t kPayloadLengthOffset = …;
const size_t kPayloadLengthSize = …;
const size_t kPayloadOffset = …;
const uint8_t kVersion3 = …;
const uint8_t kVersion2 = …;
const char* kUsageSubset = …;
}
TrialToken::~TrialToken() = default;
std::unique_ptr<TrialToken> TrialToken::From(
std::string_view token_text,
const OriginTrialPublicKey& public_key,
OriginTrialTokenStatus* out_status) { … }
OriginTrialTokenStatus TrialToken::IsValid(const url::Origin& origin,
const base::Time& now) const { … }
OriginTrialTokenStatus TrialToken::Extract(
std::string_view token_text,
const OriginTrialPublicKey& public_key,
std::string* out_token_payload,
std::string* out_token_signature,
uint8_t* out_token_version) { … }
std::unique_ptr<TrialToken> TrialToken::Parse(const std::string& token_payload,
const uint8_t version) { … }
bool TrialToken::ValidateOrigin(const url::Origin& origin) const { … }
bool TrialToken::ValidateFeatureName(std::string_view feature_name) const { … }
bool TrialToken::ValidateDate(const base::Time& now) const { … }
bool TrialToken::ValidateSignature(std::string_view signature,
const std::string& data,
const OriginTrialPublicKey& public_key) { … }
TrialToken::TrialToken(const url::Origin& origin,
bool match_subdomains,
const std::string& feature_name,
base::Time expiry_time,
bool is_third_party,
UsageRestriction usage_restriction)
: … { … }
std::unique_ptr<TrialToken> TrialToken::CreateTrialTokenForTesting(
const url::Origin& origin,
bool match_subdomains,
const std::string& feature_name,
base::Time expiry_time,
bool is_third_party,
UsageRestriction usage_restriction,
const std::string& signature) { … }
}