External plugin development¶
Cyclone DDS has three built-in security plugins that comply with the OMG DDS security specification:
Authentication
AccessControl
Cryptographic
Security plugins are dynamically loaded. The locations are defined in Cyclone DDS configuration or participant QoS settings, see DDS security.
You can add your own custom plugin in an API by implementing according to the OMG DDS security specification. You can implement all of the plugins or just one of them.
Interface¶
Implement all plugin-specific functions with exactly same prototype. Plugin-specific function interfaces are in the following header files:
dds_security_api_access_control.h
dds_security_api_authentication.h
dds_security_api_cryptography.h
init
and finalize
functions¶
A plugin must have an init
and a finalize
functions. The plugin_init
and
plugin_finalize
interfaces are found in the dds_security_api.h header file. The
functions must be same as in the configuration file.
After the plugin is loaded, the
init
function is called.Before the plugin is unloaded, the
finalize
function is called.
Inter-plugin communication¶
Within the authentication and cryptography plugins, there is a shared object (DDS_Security_SharedSecretHandle).
To implement one of the security plugins, and use the built-in for the other one, you must get, or provide the shared object:
DDS_Security_SharedSecretHandle is the integer representation of the DDS_Security_SharedSecretHandleImpl struct object.
The cryptography plugin gets the DDS_Security_SharedSecretHandle from the authentication plugin and casts to the DDS_Security_SharedSecretHandleImpl struct.
All required information can be retrieved through the DDS_Security_SharedSecretHandleImpl struct:
typedef struct DDS_Security_SharedSecretHandleImpl {
DDS_Security_octet* shared_secret;
DDS_Security_long shared_secret_size;
DDS_Security_octet challenge1[DDS_SECURITY_AUTHENTICATION_CHALLENGE_SIZE];
DDS_Security_octet challenge2[DDS_SECURITY_AUTHENTICATION_CHALLENGE_SIZE];
} DDS_Security_SharedSecretHandleImpl;