The data flow in the write-case is:
- User application uses SimpleFileInterface to communicate with Engine
- Engine uses MetadataService to gain information on which server under which filenames the encrypted fragments should be stored
- CryptoEngine gets the original data, performs encryption and puts encrypted data into the placeholders (provided by MetadataService)
- Distributor gets the encrypted data and forwards the request to the different backend servers
- Within the backend server the ExecutionHandler is called which forwards the storage operation to StorageServer
- StorageServer persists the data
The data flow for the read-case is similar:
- User application uses SimpleFileInterface to communicate with Engine
- Engine uses MetadataService to gain informaiton on which server under which filenames the encrypted fragments should be stored
- Distributor gets the read request and forwards the information through the BFT network to the backend servers
- Within the backend server the ExecutionHandler is called to perform the storage operation through StorageServer
- StorageServer retrieves the data (might be a network operation in case of S3) and returns it to the Distributor
- After the Distributor has collected 2f+1 results the result is forwarded to the CryptoEngine
- CryptoEngine reconstructs the original data
- Engine returns the original (unencrypted) data to the caller