Add a ServerProofVerifier interface to QUIC.

This is a server-side equivalent of ProofVerifier.  It is used to verify a
client's certificate chain.  It will only be used when the server needs to
request client certificates.

ServerProofVerifier drops the VerifyProof() function (not used in TLS 1.3) and
the |hostname|, |ocsp_response|, and |cert_sct| parameters of VerifyCertChain()
(those aren't really meaningful to a server).

See go/quic-tls-client-certificates for the full design doc and context.

gfe-relnote: no functional changes (only adds an interface).
PiperOrigin-RevId: 291429810
Change-Id: Ifd7deb6e72294b2626572b6555e3b5e2976b286e
diff --git a/quic/core/crypto/server_proof_verifier.h b/quic/core/crypto/server_proof_verifier.h
new file mode 100644
index 0000000..94fe131
--- /dev/null
+++ b/quic/core/crypto/server_proof_verifier.h
@@ -0,0 +1,42 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_CORE_CRYPTO_SERVER_PROOF_VERIFIER_H_
+#define QUICHE_QUIC_CORE_CRYPTO_SERVER_PROOF_VERIFIER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "net/third_party/quiche/src/quic/core/crypto/proof_verifier.h"
+#include "net/third_party/quiche/src/quic/core/quic_types.h"
+
+namespace quic {
+
+// A ServerProofVerifier checks the certificate chain presented by a client.
+class QUIC_EXPORT_PRIVATE ServerProofVerifier {
+ public:
+  virtual ~ServerProofVerifier() {}
+
+  // VerifyCertChain checks that |certs| is a valid chain. On success, it
+  // returns QUIC_SUCCESS. On failure, it returns QUIC_FAILURE and sets
+  // |*error_details| to a description of the problem. In either case it may set
+  // |*details|, which the caller takes ownership of.
+  //
+  // |context| specifies an implementation specific struct (which may be nullptr
+  // for some implementations) that provides useful information for the
+  // verifier, e.g. logging handles.
+  //
+  // This function may also return QUIC_PENDING, in which case the
+  // ServerProofVerifier will call back, on the original thread, via |callback|
+  // when complete. In this case, the ServerProofVerifier will take ownership of
+  // |callback|.
+  virtual QuicAsyncStatus VerifyCertChain(
+      const std::vector<std::string>& certs,
+      std::string* error_details,
+      std::unique_ptr<ProofVerifierCallback> callback) = 0;
+};
+
+}  // namespace quic
+#endif  // QUICHE_QUIC_CORE_CRYPTO_SERVER_PROOF_VERIFIER_H_