Move DiceClearMemory() declaration to own header Refactor the header structure so that the function can be declared without needing to specificy a particular configuration, which was previously required (yet unnecessary) due to the include path: src/clear_memory.c <-- dice/ops.h <-- dice/config.h This allows DiceClearMemory() to be compiled irrespective of the configuration included, if any. Bug: 357008987 Change-Id: I2391d9db7171af1e3672be64b3357dc0d1ef38f4 Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/250053 Commit-Queue: Pierre-Clément Tosi <ptosi@google.com> Pigweed-Auto-Submit: Pierre-Clément Tosi <ptosi@google.com> Reviewed-by: Alice Wang <aliceywang@google.com> Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com> Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Andrew Scull <ascull@google.com>
diff --git a/include/dice/ops.h b/include/dice/ops.h index 1cde417..99fb41d 100644 --- a/include/dice/ops.h +++ b/include/dice/ops.h
@@ -17,6 +17,7 @@ #include <dice/config.h> #include <dice/dice.h> +#include <dice/ops/clear_memory.h> // These are the set of functions that implement various operations that the // main DICE functions depend on. They are provided as part of an integration @@ -80,14 +81,6 @@ const DiceInputValues* input_values, size_t certificate_buffer_size, uint8_t* certificate, size_t* certificate_actual_size); -// Securely clears |size| bytes at |address|. This project contains a basic -// implementation. OPENSSL_cleanse from boringssl, SecureZeroMemory from -// Windows and memset_s from C11 could also be used as an implementation but a -// particular target platform or toolchain may have a better implementation -// available that can be plugged in here. Care may be needed to ensure sensitive -// data does not leak due to features such as caches. -void DiceClearMemory(void* context, size_t size, void* address); - #ifdef __cplusplus } // extern "C" #endif
diff --git a/include/dice/ops/clear_memory.h b/include/dice/ops/clear_memory.h new file mode 100644 index 0000000..7229586 --- /dev/null +++ b/include/dice/ops/clear_memory.h
@@ -0,0 +1,36 @@ +// Copyright 2024 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 DICE_OPS_CLEAR_MEMORY_H_ +#define DICE_OPS_CLEAR_MEMORY_H_ + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif + +// Securely clears |size| bytes at |address|. This project contains a basic +// implementation. OPENSSL_cleanse from boringssl, SecureZeroMemory from +// Windows and memset_s from C11 could also be used as an implementation but a +// particular target platform or toolchain may have a better implementation +// available that can be plugged in here. Care may be needed to ensure sensitive +// data does not leak due to features such as caches. +void DiceClearMemory(void* context, size_t size, void* address); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // DICE_OPS_CLEAR_MEMORY_H_
diff --git a/src/clear_memory.c b/src/clear_memory.c index d8f5ca6..405793c 100644 --- a/src/clear_memory.c +++ b/src/clear_memory.c
@@ -17,9 +17,9 @@ // volatile data pointer. Attention has not been given to performance, clearing // caches or other potential side channels. -#include <stdint.h> +#include "dice/ops/clear_memory.h" -#include "dice/ops.h" +#include <stdint.h> void DiceClearMemory(void* context, size_t size, void* address) { (void)context;