## API Module The API-module contains interfaces and domain model value classes that provide the basic functionality to build an sdk-client. The SDk is set up as a maven multi module to separate the (internal) API from implementation details ##### API Module The api module consists of all domain model classes and (api-) public interfaces needed to build an sdk-client #### Client Module Factories and Helper to create Sender and Subscriber. It acts as the actual user client. #### Impl Module Interface implementations ### Service Architecture ```mermaid classDiagram class CryptoService{ + decryptString + decryptBytes + encryptString + encryptBytes } class CertificateValidator{ + validatePublicKey } class MetadataValidator{ + validateMetadataSchema + validateMetadataHashValues } class MetadataService{ + createMetadata } class OAuthService{ + authenticate } class Sender { + retrieveOAuthToken + validatePublicKey + encryptSubmissionData + encryptAttachment + MetadataService + createMetadata } class Subscriber { + retrieveOAuthToken + decryptSubmissionData + decryptAttachment + validateMetadataSchema + validateMetadataHashValues } class SubscriberClient{ Subscriber } class SenderClient{ Sender } class AbstractClient { SdkModule (Guice DI) } AbstractClient <.. SenderClient : IsA AbstractClient <.. SubscriberClient : IsA SenderClient ..> Sender : Uses SubscriberClient ..> Subscriber : Uses Sender ..> CertificateValidator : Uses Sender ..> MetadataService : Uses Sender ..> OAuthService : Uses Sender ..> CryptoService : Uses Subscriber ..> OAuthService : Uses Subscriber ..> CryptoService : Uses Subscriber ..> MetadataValidator : Uses ```