--- /dev/null
+@startuml
+
+namespace ode {
+
+class AppBundle {
+void addInternal(const std::string& key, const std::string& value)
+}
+class Launchpad {
+void launch(const std::string& appid, const AppBundle& bundle)
+}
+
+Launchpad "1" ..> "1" AppBundle
+
+class ExternalEncryption {
+int encrypt(const std::string &password,unsigned int options)
+int decrypt(const std::string &password)
+}
+
+ExternalEncryption "1" ..> "1" EcryptfsEngine
+ExternalEncryption "1" ..> "1" AppBundle
+ExternalEncryption "1" ..> "1" Launchpad
+ExternalEncryption "1" ..> "1" KeyManager
+
+class EcryptfsEngine {
+void mount(const data &key, unsigned int options)
+void umount()
+void encrypt(const data &key, unsigned int options)
+void decrypt(const data &key, unsigned int options)
+}
+class ProgressBar {
+void update(int value)
+void done()
+}
+class FileFooter {
+const FileFooter::data read(const std::string &key)
+}
+class KernelKeyRing {
+int32_t add(const std::string& type, const std::string& description, const void* payload, size_t plen, int32_t ringid)
+long search(int32_t ringid, const std::string& type, const std::string& description, int32_t destringid)
+}
+
+EcryptfsEngine "1" *--> "1" ProgressBar
+EcryptfsEngine "1" ..> "1" KeyManager
+EcryptfsEngine "1" ..> "1" FileFooter
+EcryptfsEngine "1" ..> "1" KernelKeyRing
+FileFooter "1" ..> "1" KeyGenerator
+
+class AntiForensics {
+AntiForensics::data AFSplit(const AntiForensics::data &src, uint32_t blockSize, uint32_t blockNumbers)
+AntiForensics::data AFMerge(const AntiForensics::data &src, uint32_t blockSize, uint32_t blockNumbers)
+}
+class KeyManager {
+bool verifyPassword(const data& password)
+const data getMasterKey(const data& password)
+}
+class KeyStore {
+const data getPasswordSalt()
+const data getMasterKeyDigest()
+}
+class KeyGenerator {
+static const data PBKDF(const data& pass, const data& salt, size_t iteration, size_t resultSize)
+static const data RNG(size_t resultSize)
+}
+KeyManager "1" *--> "1" KeyStore
+KeyManager "1" ..> "1" AntiForensics
+KeyManager "1" ..> "1" KeyGenerator
+
+}
+
+@enduml
--- /dev/null
+@startuml
+
+namespace ode {
+
+class InternalEncryption {
+int encrypt(const std::string& password, unsigned int options)
+int decrypt(const std::string& password)
+}
+
+InternalEncryption "1" ..> "1" DMCryptEngine
+InternalEncryption "1" ..> "1" Ext4Engine
+InternalEncryption "1" ..> "1" KeyManager
+
+class CryptInfo {
+long getFileSystemSize()
+std::string getCryptoTypeName()
+}
+class DMCryptEngine {
+void mount(const data &key, unsigned int options)
+void umount()
+void encrypt(const data &key, unsigned int options)
+void decrypt(const data &key, unsigned int options)
+}
+class Ext4Engine {
+void mount(const data &key, unsigned int options)
+void umount()
+void encrypt(const data &key, unsigned int options)
+void decrypt(const data &key, unsigned int options)
+}
+class Ext4Tool {
+unsigned int getBlockSize()
+unsigned int getTotalBlockCount()
+}
+class ProgressBar {
+void update(int value)
+void done()
+}
+class FileFooter {
+const FileFooter::data read(const std::string &key)
+}
+
+DMCryptEngine "1" ..> "1" Ext4Tool
+DMCryptEngine "1" *--> "1" ProgressBar
+DMCryptEngine "1" *--> "1" CryptInfo
+DMCryptEngine "1" ..> "1" KeyManager
+DMCryptEngine "1" ..> "1" FileFooter
+Ext4Engine "1" *--> "1" ProgressBar
+Ext4Engine "1" ..> "1" KeyManager
+Ext4Engine "1" ..> "1" FileFooter
+Ext4Engine "1" ..> "1" KeyGenerator
+FileFooter "1" ..> "1" KeyGenerator
+
+class AntiForensics {
+AntiForensics::data AFSplit(const AntiForensics::data &src, uint32_t blockSize, uint32_t blockNumbers)
+AntiForensics::data AFMerge(const AntiForensics::data &src, uint32_t blockSize, uint32_t blockNumbers)
+}
+class KeyManager {
+bool verifyPassword(const data& password)
+const data getMasterKey(const data& password)
+}
+class KeyStore {
+const data getPasswordSalt()
+const data getMasterKeyDigest()
+}
+class KeyGenerator {
+static const data PBKDF(const data& pass, const data& salt, size_t iteration, size_t resultSize)
+static const data RNG(size_t resultSize)
+}
+KeyManager "1" *--> "1" KeyStore
+KeyManager "1" ..> "1" AntiForensics
+KeyManager "1" ..> "1" KeyGenerator
+
+}
+
+@enduml
--- /dev/null
+@startuml
+
+namespace ode {
+
+class Block {
+unsigned long long physicalOffset
+unsigned long long length
+}
+class BlockDevice {
+int discard(const Block &block)
+int secDiscard(const Block &block)
+int getSize()
+}
+
+BlockDevice "1" ..> "1" Block
+
+class SecureErase {
+int erase(const std::string& name)
+int clean(const std::string& name)
+}
+
+SecureErase "1" ..> "1" MMCEraseEngine
+
+class MMCEraseEngine {
+int eraseDevice(const std::string &path)
+int cleanDevice(const std::string &path)
+int eraseFiles(const std::string &path)
+}
+class Ext4Tool {
+unsigned int getBlockSize()
+unsigned int getTotalBlockCount()
+}
+class ProgressBar {
+void update(int value)
+void done()
+}
+
+MMCEraseEngine "1" *--> "1" ProgressBar
+MMCEraseEngine "1" ..> "1" Block
+MMCEraseEngine "1" ..> "1" BlockDevice
+MMCEraseEngine "1" ..> "1" Ext4Tool
+
+}
+
+@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant ExternalEncryption
+participant EcryptfsEngine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> ExternalEncryption : construct
activate ExternalEncryption
-ExternalEncryption -> Service : setMethodHandler
-ExternalEncryption -> EcryptfsEngine : construct
activate EcryptfsEngine
-
-participant FileFooter
-participant KeyManager
-
-EcryptfsEngine -> ProgressBar : construct
activate ProgressBar
-ExternalEncryption -> ExternalEncryption : externalAddEventReceiver
-
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-ODEContext <- ODELibrary : ode_external_encryption_decrypt
+Settings -> ODEContext : ode_external_encryption_decrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant ExternalEncryption
+participant EcryptfsEngine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> ExternalEncryption : construct
activate ExternalEncryption
-ExternalEncryption -> Service : setMethodHandler
-ExternalEncryption -> EcryptfsEngine : construct
activate EcryptfsEngine
-
-participant FileFooter
-participant KeyManager
-
-EcryptfsEngine -> ProgressBar : construct
activate ProgressBar
-ExternalEncryption -> ExternalEncryption : externalAddEventReceiver
-
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-ODEContext <- ODELibrary : ode_external_encryption_encrypt
+Settings -> ODEContext : ode_external_encryption_encrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant InternalEncryption
+participant DMCryptEngine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> InternalEncryption : construct
activate InternalEncryption
-InternalEncryption -> Service : setMethodHandler
-InternalEncryption -> DMCryptEngine : construct
activate DMCryptEngine
-
-participant FileFooter
-participant KeyManager
-
-DMCryptEngine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_internal_encryption_decrypt
+Settings -> ODEContext : ode_internal_encryption_decrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant InternalEncryption
+participant Ext4Engine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> InternalEncryption : construct
activate InternalEncryption
-InternalEncryption -> Service : setMethodHandler
-InternalEncryption -> Ext4Engine : construct
activate Ext4Engine
-
-participant FileFooter
-participant KeyManager
-
-Ext4Engine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_internal_encryption_decrypt
+Settings -> ODEContext : ode_internal_encryption_decrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant InternalEncryption
+participant DMCryptEngine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> InternalEncryption : construct
activate InternalEncryption
-InternalEncryption -> Service : setMethodHandler
-InternalEncryption -> DMCryptEngine : construct
activate DMCryptEngine
-
-participant FileFooter
-participant KeyManager
-
-DMCryptEngine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_internal_encryption_encrypt
+Settings -> ODEContext : ode_internal_encryption_encrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant InternalEncryption
+participant Ext4Engine
+participant FileFooter
+participant KeyManager
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> InternalEncryption : construct
activate InternalEncryption
-InternalEncryption -> Service : setMethodHandler
-InternalEncryption -> Ext4Engine : construct
activate Ext4Engine
-
-participant FileFooter
-participant KeyManager
-
-Ext4Engine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_internal_encryption_encrypt
+Settings -> ODEContext : ode_internal_encryption_encrypt
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant SecureErase
+participant MMCEraseEngine
+participant Ext4Tool
+participant BlockDevice
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> SecureErase : construct
activate SecureErase
-SecureErase -> Service : setMethodHandler
-SecureErase -> MMCEraseEngine : construct
activate MMCEraseEngine
-
-participant Ext4Tool
-participant BlockDevice
-
-MMCEraseEngine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_secure_clean
+Settings -> ODEContext : ode_secure_clean
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml
@startuml
hide footbox
-actor ODEDaemon
-activate ODEDaemon
-ODEDaemon -> Server : construct
-activate Server
+actor Settings
+participant ODEContext
+participant Client
+participant ClientConnection
-Server -> Service : construct(/tmp/.ode.sock)
-activate Service
-Service -> Mainloop : construct
+participant Mainloop
+participant Service
+participant ServerConnection
+participant SecureErase
+participant MMCEraseEngine
+participant Ext4Tool
+participant BlockDevice
+participant ProgressBar
activate Mainloop
-Mainloop -> ServerConnection : construct
+activate Service
activate ServerConnection
-Server -> SecureErase : construct
activate SecureErase
-SecureErase -> Service : setMethodHandler
-SecureErase -> MMCEraseEngine : construct
activate MMCEraseEngine
-
-participant Ext4Tool
-participant BlockDevice
-
-MMCEraseEngine -> ProgressBar : construct
activate ProgressBar
-participant ClientConnection
-participant Client
-participant ODEContext
-
-actor ODELibrary
-
-ODEContext <- ODELibrary : ode_secure_erase
+Settings -> ODEContext : ode_secure_erase
activate ODEContext
ODEContext -> Client : methodCall
deactivate ClientConnection
Client --> ODEContext : result
deactivate Client
-ODEContext --> ODELibrary : result
+ODEContext --> Settings : result
deactivate ODEContext
@enduml