Security and Trust Agent Architecture and Components
At a high level the agent can be viewed as a black box that implements the DirectProject specification. Digging deeper into the box, the agent consists of a directly consumable API and several subsystems that can be directly consumed as stand-alone components.
Each component within the agent functions independently whilst the agent orchestrates the business logic between the internal components.
Core Components and Interfaces
- NHINDAgent: Interface specification for the security and trust agent. Incoming and outgoing messages are processed by the agent according to the DirectProject specification. JavaDoc
- Cryptographer: Interface specification for message encryption/decryption and message signature operations. JavaDoc
- CertificateResolver: Certificate resolvers are responsible for locating public and private X509 certificates for destination and source addresses. Certificates are used for encryption/decryption, message signing, and signature validation. JavaDoc
- TrustModel: Interface specification for the trust enforcement policy. Trust is enforced by trust anchors, revocation policies, and an optional set of intermediate certificates. JavaDoc
- Mail Library: Contains utility classes and specific implementations of agent mail classes. The majority of the classes are built on the JavaMail API. JavaDoc
Typically messages are processed by the agent using the appropriate incoming or outgoing method and return either a processed message or throw an exception if the message cannot be processed.
IoC and DI Support
Inversion of control (IoC) and dependency injection (DI) are popular design patterns for componentized software. Most of the components support multiple IoC and DI frameworks through constructor and attribute setter methods; however, the agent module is biased towards the Spring framework and supports Spring specific constructs such as Spring Beans and Spring application contexts.
Although the protocol implementation bridges provided by the gateway module almost exclusively instantiate component instances using Spring, component instances can be instantiated directly without the use of DI.