// 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_SALT_SALT_GENERATOR_H_
#define THIRD_PARTY_CREDENTIO_SALT_SALT_GENERATOR_H_

#include <cstddef>
#include <string>

#include "absl/status/statusor.h"

namespace credentio {

// Default salt length in bytes (128 bits of entropy). C2PA specification v2.2
// Section 8.4.2.3 allows salts of 16 or 32 bytes.
inline constexpr size_t kDefaultSaltLength = 16;

// Abstract interface for generating assertion salt bytes.
//
// Salts are embedded into the private 'c2sh' box within an assertion's JUMBF
// Description Box to ensure that redacted assertions cannot be easily
// dictionary-attacked or pre-image brute-forced.
class SaltGenerator {
 public:
  virtual ~SaltGenerator() = default;

  // Returns a generator that produces empty salts, i.e. assertions are not
  // salted.
  static const SaltGenerator& NoOp();

  // Generates random salt bytes of length `kDefaultSaltLength`. An empty result
  // means no salt. Returns an error if a salt cannot be generated.
  virtual absl::StatusOr<std::string> Generate() const = 0;
};

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_SALT_SALT_GENERATOR_H_
