|  | // 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_ |