Porting attestation verification from Rust to C++.
Header file for https://github.com/project-oak/oak/blob/main/oak_attestation_verification/src/endorsement.rs
Change-Id: I616b8ee851b61888b7c42b82937ad7330c399bb9
Bug: b/324141620
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5454987
Reviewed-by: Adam Langley <agl@chromium.org>
Commit-Queue: Livia Seibert <livseibert@google.com>
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1288285}
diff --git a/device/fido/BUILD.gn b/device/fido/BUILD.gn
index 32f50f3..3fdcec61 100644
--- a/device/fido/BUILD.gn
+++ b/device/fido/BUILD.gn
@@ -165,6 +165,8 @@
"enclave/types.h",
"enclave/verify/claim.cc",
"enclave/verify/claim.h",
+ "enclave/verify/endorsement.cc",
+ "enclave/verify/endorsement.h",
"enclave/verify/verify.h",
"fido_authenticator.cc",
"fido_authenticator.h",
diff --git a/device/fido/enclave/verify/endorsement.cc b/device/fido/enclave/verify/endorsement.cc
new file mode 100644
index 0000000..8c2ac3d
--- /dev/null
+++ b/device/fido/enclave/verify/endorsement.cc
@@ -0,0 +1,7 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/fido/enclave/verify/endorsement.h"
+
+namespace device::enclave {} // namespace device::enclave
diff --git a/device/fido/enclave/verify/endorsement.h b/device/fido/enclave/verify/endorsement.h
new file mode 100644
index 0000000..e1c5988
--- /dev/null
+++ b/device/fido/enclave/verify/endorsement.h
@@ -0,0 +1,35 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef DEVICE_FIDO_ENCLAVE_VERIFY_ENDORSEMENT_H_
+#define DEVICE_FIDO_ENCLAVE_VERIFY_ENDORSEMENT_H_
+
+#include <cstdint>
+#include <vector>
+
+#include "base/containers/span.h"
+#include "base/time/time.h"
+#include "device/fido/enclave/verify/claim.h"
+
+namespace device::enclave {
+
+bool VerifyBinaryDigest(base::span<const uint8_t> endorsement,
+ base::span<const uint8_t> expected);
+
+bool VerifyBinaryEndorsement(base::Time now,
+ base::span<const uint8_t> endorsement,
+ base::span<const uint8_t> signature,
+ base::span<const uint8_t> log_entry,
+ base::span<const uint8_t> endorser_public_key,
+ base::span<const uint8_t> rekor_public_key);
+
+bool VerifyEndorsementStatement(base::Time now,
+ const EndorsementStatement& statement);
+
+bool VerifyEndorserPublicKey(base::span<const uint8_t> log_entry,
+ base::span<const uint8_t> endorser_public_key);
+
+} // namespace device::enclave
+
+#endif // DEVICE_FIDO_ENCLAVE_VERIFY_ENDORSEMENT_H_