#include "anonymous_tokens/cpp/crypto/rsa_blinder.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "anonymous_tokens/cpp/crypto/constants.h"
#include "anonymous_tokens/cpp/crypto/crypto_utils.h"
#include "anonymous_tokens/cpp/shared/status_utils.h"
#include <openssl/digest.h>
#include <openssl/rsa.h>
namespace anonymous_tokens {
absl::StatusOr<std::unique_ptr<RsaBlinder>> RsaBlinder::New(
absl::string_view rsa_modulus, absl::string_view rsa_public_exponent,
const EVP_MD* signature_hash_function, const EVP_MD* mgf1_hash_function,
int salt_length, const bool use_rsa_public_exponent,
std::optional<absl::string_view> public_metadata) { … }
RsaBlinder::RsaBlinder(int salt_length,
std::optional<absl::string_view> public_metadata,
const EVP_MD* sig_hash, const EVP_MD* mgf1_hash,
bssl::UniquePtr<RSA> rsa_public_key,
bssl::UniquePtr<BIGNUM> r,
bssl::UniquePtr<BIGNUM> r_inv_mont,
bssl::UniquePtr<BN_MONT_CTX> mont_n)
: … { … }
absl::StatusOr<std::string> RsaBlinder::Blind(const absl::string_view message) { … }
absl::StatusOr<std::string> RsaBlinder::Unblind(
const absl::string_view blind_signature) { … }
absl::Status RsaBlinder::Verify(absl::string_view signature,
absl::string_view message) { … }
}