## API Module The API-module contains interfaces and domain model value classes that provide the basic functionality to build an sdk-client. ### 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 ```