#ifndef GRPC_SRC_CORE_LIB_SECURITY_CREDENTIALS_JWT_JWT_VERIFIER_H
#define GRPC_SRC_CORE_LIB_SECURITY_CREDENTIALS_JWT_JWT_VERIFIER_H
#include <grpc/support/port_platform.h>
#include <stddef.h>
#include <grpc/support/time.h>
#include "src/core/lib/gprpp/time.h"
#include "src/core/lib/iomgr/iomgr_fwd.h"
#include "src/core/lib/json/json.h"
#define GRPC_OPENID_CONFIG_URL_SUFFIX …
#define GRPC_GOOGLE_SERVICE_ACCOUNTS_EMAIL_DOMAIN …
#define GRPC_GOOGLE_SERVICE_ACCOUNTS_KEY_URL_PREFIX …
grpc_jwt_verifier_status;
const char* grpc_jwt_verifier_status_to_string(grpc_jwt_verifier_status status);
grpc_jwt_claims;
void grpc_jwt_claims_destroy(grpc_jwt_claims* claims);
const grpc_core::Json* grpc_jwt_claims_json(const grpc_jwt_claims* claims);
const char* grpc_jwt_claims_subject(const grpc_jwt_claims* claims);
const char* grpc_jwt_claims_issuer(const grpc_jwt_claims* claims);
const char* grpc_jwt_claims_id(const grpc_jwt_claims* claims);
const char* grpc_jwt_claims_audience(const grpc_jwt_claims* claims);
gpr_timespec grpc_jwt_claims_issued_at(const grpc_jwt_claims* claims);
gpr_timespec grpc_jwt_claims_expires_at(const grpc_jwt_claims* claims);
gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims* claims);
grpc_jwt_verifier;
struct grpc_jwt_verifier_email_domain_key_url_mapping { … };
extern gpr_timespec grpc_jwt_verifier_clock_skew;
extern grpc_core::Duration grpc_jwt_verifier_max_delay;
grpc_jwt_verifier* grpc_jwt_verifier_create(
const grpc_jwt_verifier_email_domain_key_url_mapping* mappings,
size_t num_mappings);
void grpc_jwt_verifier_destroy(grpc_jwt_verifier* verifier);
grpc_jwt_verification_done_cb;
void grpc_jwt_verifier_verify(grpc_jwt_verifier* verifier,
grpc_pollset* pollset, const char* jwt,
const char* audience,
grpc_jwt_verification_done_cb cb,
void* user_data);
grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_core::Json json);
grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims* claims,
const char* audience);
const char* grpc_jwt_issuer_email_domain(const char* issuer);
#endif