| // Copyright 2019 The Fuchsia 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 SRC_STORAGE_FSHOST_ENCRYPTED_VOLUME_INTERFACE_H_ |
| #define SRC_STORAGE_FSHOST_ENCRYPTED_VOLUME_INTERFACE_H_ |
| |
| namespace devmgr { |
| |
| class EncryptedVolumeInterface { |
| public: |
| virtual ~EncryptedVolumeInterface() = default; |
| |
| // Does everything it can to ensure that by the time this function returns, |
| // there is an unsealed block device exposed. If none of the available keys |
| // can unseal the device, then it is permissible for the implementation to |
| // reformat the backing store to make *some* storage available. |
| zx_status_t EnsureUnsealedAndFormatIfNeeded(); |
| |
| private: |
| // Attempt to unseal the underlying volume. |
| virtual zx_status_t Unseal() = 0; |
| |
| // Format the underlying volume with the best available key source. This will |
| // destroy any data contained therein, but will ensure that we can |
| // subsequently unseal the newly-formatted volume, rather than getting stuck. |
| virtual zx_status_t Format() = 0; |
| }; |
| |
| } // namespace devmgr |
| |
| #endif // SRC_STORAGE_FSHOST_ENCRYPTED_VOLUME_INTERFACE_H_ |