OpenDDS::Security::CryptoBuiltInImpl Class Reference

#include <CryptoBuiltInImpl.h>

Inheritance diagram for OpenDDS::Security::CryptoBuiltInImpl:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::Security::CryptoBuiltInImpl:
Collaboration graph
[legend]

List of all members.

Classes

struct  EntityInfo
struct  Session
struct  WriterOpts

Public Member Functions

 CryptoBuiltInImpl ()
virtual ~CryptoBuiltInImpl ()

Private Types

typedef KeyMaterial_AES_GCM_GMAC KeyMaterial
typedef
KeyMaterial_AES_GCM_GMAC_Seq 
KeySeq
typedef std::map
< DDS::Security::NativeCryptoHandle,
KeySeq
KeyTable_t
typedef std::map
< DDS::Security::DatawriterCryptoHandle,
WriterOpts
Writers_t
typedef std::pair
< DDS::Security::NativeCryptoHandle,
unsigned int > 
KeyId_t
typedef std::map< KeyId_t,
Session
SessionTable_t

Private Member Functions

bool _is_a (const char *)
const char * _interface_repository_id () const
bool marshal (TAO_OutputCDR &)
virtual
DDS::Security::ParticipantCryptoHandle 
register_local_participant (DDS::Security::IdentityHandle participant_identity, DDS::Security::PermissionsHandle participant_permissions, const DDS::PropertySeq &participant_properties, const DDS::Security::ParticipantSecurityAttributes &participant_security_attributes, DDS::Security::SecurityException &ex)
virtual
DDS::Security::ParticipantCryptoHandle 
register_matched_remote_participant (DDS::Security::ParticipantCryptoHandle local_participant_crypto_handle, DDS::Security::IdentityHandle remote_participant_identity, DDS::Security::PermissionsHandle remote_participant_permissions, DDS::Security::SharedSecretHandle *shared_secret, DDS::Security::SecurityException &ex)
virtual
DDS::Security::DatawriterCryptoHandle 
register_local_datawriter (DDS::Security::ParticipantCryptoHandle participant_crypto, const DDS::PropertySeq &datawriter_properties, const DDS::Security::EndpointSecurityAttributes &datawriter_security_attributes, DDS::Security::SecurityException &ex)
virtual
DDS::Security::DatareaderCryptoHandle 
register_matched_remote_datareader (DDS::Security::DatawriterCryptoHandle local_datawriter_crypto_handle, DDS::Security::ParticipantCryptoHandle remote_participant_crypto, DDS::Security::SharedSecretHandle *shared_secret, bool relay_only, DDS::Security::SecurityException &ex)
virtual
DDS::Security::DatareaderCryptoHandle 
register_local_datareader (DDS::Security::ParticipantCryptoHandle participant_crypto, const DDS::PropertySeq &datareader_properties, const DDS::Security::EndpointSecurityAttributes &datareader_security_attributes, DDS::Security::SecurityException &ex)
virtual
DDS::Security::DatawriterCryptoHandle 
register_matched_remote_datawriter (DDS::Security::DatareaderCryptoHandle local_datareader_crypto_handle, DDS::Security::ParticipantCryptoHandle remote_participant_crypt, DDS::Security::SharedSecretHandle *shared_secret, DDS::Security::SecurityException &ex)
virtual bool unregister_participant (DDS::Security::ParticipantCryptoHandle participant_crypto_handle, DDS::Security::SecurityException &ex)
virtual bool unregister_datawriter (DDS::Security::DatawriterCryptoHandle datawriter_crypto_handle, DDS::Security::SecurityException &ex)
virtual bool unregister_datareader (DDS::Security::DatareaderCryptoHandle datareader_crypto_handle, DDS::Security::SecurityException &ex)
virtual bool create_local_participant_crypto_tokens (DDS::Security::ParticipantCryptoTokenSeq &local_participant_crypto_tokens, DDS::Security::ParticipantCryptoHandle local_participant_crypto, DDS::Security::ParticipantCryptoHandle remote_participant_crypto, DDS::Security::SecurityException &ex)
virtual bool set_remote_participant_crypto_tokens (DDS::Security::ParticipantCryptoHandle local_participant_crypto, DDS::Security::ParticipantCryptoHandle remote_participant_crypto, const DDS::Security::ParticipantCryptoTokenSeq &remote_participant_tokens, DDS::Security::SecurityException &ex)
virtual bool create_local_datawriter_crypto_tokens (DDS::Security::DatawriterCryptoTokenSeq &local_datawriter_crypto_tokens, DDS::Security::DatawriterCryptoHandle local_datawriter_crypto, DDS::Security::DatareaderCryptoHandle remote_datareader_crypto, DDS::Security::SecurityException &ex)
virtual bool set_remote_datawriter_crypto_tokens (DDS::Security::DatareaderCryptoHandle local_datareader_crypto, DDS::Security::DatawriterCryptoHandle remote_datawriter_crypto, const DDS::Security::DatawriterCryptoTokenSeq &remote_datawriter_tokens, DDS::Security::SecurityException &ex)
virtual bool create_local_datareader_crypto_tokens (DDS::Security::DatareaderCryptoTokenSeq &local_datareader_crypto_tokens, DDS::Security::DatareaderCryptoHandle local_datareader_crypto, DDS::Security::DatawriterCryptoHandle remote_datawriter_crypto, DDS::Security::SecurityException &ex)
virtual bool set_remote_datareader_crypto_tokens (DDS::Security::DatawriterCryptoHandle local_datawriter_crypto, DDS::Security::DatareaderCryptoHandle remote_datareader_crypto, const DDS::Security::DatareaderCryptoTokenSeq &remote_datareader_tokens, DDS::Security::SecurityException &ex)
virtual bool return_crypto_tokens (const DDS::Security::CryptoTokenSeq &crypto_tokens, DDS::Security::SecurityException &ex)
virtual bool encode_serialized_payload (DDS::OctetSeq &encoded_buffer, DDS::OctetSeq &extra_inline_qos, const DDS::OctetSeq &plain_buffer, DDS::Security::DatawriterCryptoHandle sending_datawriter_crypto, DDS::Security::SecurityException &ex)
virtual bool encode_datawriter_submessage (DDS::OctetSeq &encoded_rtps_submessage, const DDS::OctetSeq &plain_rtps_submessage, DDS::Security::DatawriterCryptoHandle sending_datawriter_crypto, const DDS::Security::DatareaderCryptoHandleSeq &receiving_datareader_crypto_list, CORBA::Long &receiving_datareader_crypto_list_index, DDS::Security::SecurityException &ex)
virtual bool encode_datareader_submessage (DDS::OctetSeq &encoded_rtps_submessage, const DDS::OctetSeq &plain_rtps_submessage, DDS::Security::DatareaderCryptoHandle sending_datareader_crypto, const DDS::Security::DatawriterCryptoHandleSeq &receiving_datawriter_crypto_list, DDS::Security::SecurityException &ex)
virtual bool encode_rtps_message (DDS::OctetSeq &encoded_rtps_message, const DDS::OctetSeq &plain_rtps_message, DDS::Security::ParticipantCryptoHandle sending_participant_crypto, const DDS::Security::ParticipantCryptoHandleSeq &receiving_participant_crypto_list, CORBA::Long &receiving_participant_crypto_list_index, DDS::Security::SecurityException &ex)
virtual bool decode_rtps_message (DDS::OctetSeq &plain_buffer, const DDS::OctetSeq &encoded_buffer, DDS::Security::ParticipantCryptoHandle receiving_participant_crypto, DDS::Security::ParticipantCryptoHandle sending_participant_crypto, DDS::Security::SecurityException &ex)
virtual bool preprocess_secure_submsg (DDS::Security::DatawriterCryptoHandle &datawriter_crypto, DDS::Security::DatareaderCryptoHandle &datareader_crypto, DDS::Security::SecureSubmessageCategory_t &secure_submessage_category, const DDS::OctetSeq &encoded_rtps_submessage, DDS::Security::ParticipantCryptoHandle receiving_participant_crypto, DDS::Security::ParticipantCryptoHandle sending_participant_crypto, DDS::Security::SecurityException &ex)
virtual bool decode_datawriter_submessage (DDS::OctetSeq &plain_rtps_submessage, const DDS::OctetSeq &encoded_rtps_submessage, DDS::Security::DatareaderCryptoHandle receiving_datareader_crypto, DDS::Security::DatawriterCryptoHandle sending_datawriter_crypto, DDS::Security::SecurityException &ex)
virtual bool decode_datareader_submessage (DDS::OctetSeq &plain_rtps_submessage, const DDS::OctetSeq &encoded_rtps_submessage, DDS::Security::DatawriterCryptoHandle receiving_datawriter_crypto, DDS::Security::DatareaderCryptoHandle sending_datareader_crypto, DDS::Security::SecurityException &ex)
virtual bool decode_serialized_payload (DDS::OctetSeq &plain_buffer, const DDS::OctetSeq &encoded_buffer, const DDS::OctetSeq &inline_qos, DDS::Security::DatareaderCryptoHandle receiving_datareader_crypto, DDS::Security::DatawriterCryptoHandle sending_datawriter_crypto, DDS::Security::SecurityException &ex)
 CryptoBuiltInImpl (const CryptoBuiltInImpl &)
CryptoBuiltInImploperator= (const CryptoBuiltInImpl &)
DDS::Security::NativeCryptoHandle generate_handle ()
void clear_endpoint_data (DDS::Security::NativeCryptoHandle handle)
bool encode_submessage (DDS::OctetSeq &encoded_rtps_submessage, const DDS::OctetSeq &plain_rtps_submessage, DDS::Security::NativeCryptoHandle sender_handle, DDS::Security::SecurityException &ex)
bool encrypt (const KeyMaterial &master, Session &sess, const DDS::OctetSeq &plain, CryptoHeader &header, CryptoFooter &footer, DDS::OctetSeq &out, DDS::Security::SecurityException &ex)
bool authtag (const KeyMaterial &master, Session &sess, const DDS::OctetSeq &plain, CryptoHeader &header, CryptoFooter &footer, DDS::Security::SecurityException &ex)
void encauth_setup (const KeyMaterial &master, Session &sess, const DDS::OctetSeq &plain, CryptoHeader &header)
bool decode_submessage (DDS::OctetSeq &plain_rtps_submessage, const DDS::OctetSeq &encoded_rtps_submessage, DDS::Security::NativeCryptoHandle sender_handle, DDS::Security::SecurityException &ex)
bool decrypt (const KeyMaterial &master, Session &sess, const char *ciphertext, unsigned int n, const CryptoHeader &header, const CryptoFooter &footer, DDS::OctetSeq &out, DDS::Security::SecurityException &ex)
bool verify (const KeyMaterial &master, Session &sess, const char *in, unsigned int n, const CryptoHeader &header, const CryptoFooter &footer, DDS::OctetSeq &out, DDS::Security::SecurityException &ex)

Private Attributes

ACE_Thread_Mutex mutex_
int next_handle_
KeyTable_t keys_
Writers_t writer_options_
std::multimap
< DDS::Security::ParticipantCryptoHandle,
EntityInfo
participant_to_entity_
SessionTable_t sessions_

Detailed Description

Definition at line 32 of file CryptoBuiltInImpl.h.


Member Typedef Documentation

Definition at line 264 of file CryptoBuiltInImpl.h.

Definition at line 226 of file CryptoBuiltInImpl.h.

Definition at line 227 of file CryptoBuiltInImpl.h.

Definition at line 228 of file CryptoBuiltInImpl.h.

Definition at line 265 of file CryptoBuiltInImpl.h.

Definition at line 239 of file CryptoBuiltInImpl.h.


Constructor & Destructor Documentation

OpenDDS::Security::CryptoBuiltInImpl::CryptoBuiltInImpl (  ) 

Definition at line 40 of file CryptoBuiltInImpl.cpp.

References openssl_init().

00041   : mutex_()
00042   , next_handle_(1)
00043 {
00044   openssl_init();
00045 }

Here is the call graph for this function:

OpenDDS::Security::CryptoBuiltInImpl::~CryptoBuiltInImpl (  )  [virtual]

Definition at line 47 of file CryptoBuiltInImpl.cpp.

References openssl_cleanup().

00048 {
00049   openssl_cleanup();
00050 }

Here is the call graph for this function:

OpenDDS::Security::CryptoBuiltInImpl::CryptoBuiltInImpl ( const CryptoBuiltInImpl  )  [private]

Member Function Documentation

const char * OpenDDS::Security::CryptoBuiltInImpl::_interface_repository_id ( void   )  const [private, virtual]

Reimplemented from CORBA::Object.

Definition at line 59 of file CryptoBuiltInImpl.cpp.

00060 {
00061   return "";
00062 }

bool OpenDDS::Security::CryptoBuiltInImpl::_is_a ( const char *  id  )  [private, virtual]

Reimplemented from CORBA::Object.

Definition at line 52 of file CryptoBuiltInImpl.cpp.

00053 {
00054   return CryptoKeyFactory::_is_a(id)
00055     || CryptoKeyExchange::_is_a(id)
00056     || CryptoTransform::_is_a(id);
00057 }

bool OpenDDS::Security::CryptoBuiltInImpl::authtag ( const KeyMaterial master,
Session sess,
const DDS::OctetSeq plain,
CryptoHeader header,
CryptoFooter footer,
DDS::Security::SecurityException ex 
) [private]

Definition at line 948 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CryptoFooter::common_mac, encauth_setup(), EVP_CTRL_AEAD_GET_TAG, OpenDDS::Security::CryptoBuiltInImpl::Session::id_, OpenDDS::Security::CryptoBuiltInImpl::Session::iv_suffix_, OpenDDS::Security::CryptoBuiltInImpl::Session::key_, and OpenDDS::Security::CommonUtilities::set_security_error().

00953 {
00954   encauth_setup(master, sess, plain, header);
00955   static const int IV_LEN = 12, IV_SUFFIX_IDX = 4;
00956   unsigned char iv[IV_LEN];
00957   std::memcpy(iv, &sess.id_, sizeof sess.id_);
00958   std::memcpy(iv + IV_SUFFIX_IDX, &sess.iv_suffix_, sizeof sess.iv_suffix_);
00959 
00960   CipherContext ctx;
00961   const unsigned char* key = sess.key_.get_buffer();
00962   if (EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), 0, key, iv) != 1) {
00963     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptInit_ex");
00964     return false;
00965   }
00966 
00967   int n;
00968   if (EVP_EncryptUpdate(ctx, 0, &n, plain.get_buffer(), plain.length()) != 1) {
00969     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptUpdate");
00970     return false;
00971   }
00972 
00973   if (EVP_EncryptFinal_ex(ctx, 0, &n) != 1) {
00974     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptFinal_ex");
00975     return false;
00976   }
00977 
00978   if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, sizeof footer.common_mac,
00979                           &footer.common_mac) != 1) {
00980     CommonUtilities::set_security_error(ex, -1, 0, "EVP_CIPHER_CTX_ctrl");
00981     return false;
00982   }
00983 
00984   return true;
00985 }

Here is the call graph for this function:

void OpenDDS::Security::CryptoBuiltInImpl::clear_endpoint_data ( DDS::Security::NativeCryptoHandle  handle  )  [private]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::create_local_datareader_crypto_tokens ( DDS::Security::DatareaderCryptoTokenSeq local_datareader_crypto_tokens,
DDS::Security::DatareaderCryptoHandle  local_datareader_crypto,
DDS::Security::DatawriterCryptoHandle  remote_datawriter_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::create_local_datawriter_crypto_tokens ( DDS::Security::DatawriterCryptoTokenSeq local_datawriter_crypto_tokens,
DDS::Security::DatawriterCryptoHandle  local_datawriter_crypto,
DDS::Security::DatareaderCryptoHandle  remote_datareader_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::create_local_participant_crypto_tokens ( DDS::Security::ParticipantCryptoTokenSeq local_participant_crypto_tokens,
DDS::Security::ParticipantCryptoHandle  local_participant_crypto,
DDS::Security::ParticipantCryptoHandle  remote_participant_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::decode_datareader_submessage ( DDS::OctetSeq plain_rtps_submessage,
const DDS::OctetSeq encoded_rtps_submessage,
DDS::Security::DatawriterCryptoHandle  receiving_datawriter_crypto,
DDS::Security::DatareaderCryptoHandle  sending_datareader_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::decode_datawriter_submessage ( DDS::OctetSeq plain_rtps_submessage,
const DDS::OctetSeq encoded_rtps_submessage,
DDS::Security::DatareaderCryptoHandle  receiving_datareader_crypto,
DDS::Security::DatawriterCryptoHandle  sending_datawriter_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::decode_rtps_message ( DDS::OctetSeq plain_buffer,
const DDS::OctetSeq encoded_buffer,
DDS::Security::ParticipantCryptoHandle  receiving_participant_crypto,
DDS::Security::ParticipantCryptoHandle  sending_participant_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::decode_serialized_payload ( DDS::OctetSeq plain_buffer,
const DDS::OctetSeq encoded_buffer,
const DDS::OctetSeq inline_qos,
DDS::Security::DatareaderCryptoHandle  receiving_datareader_crypto,
DDS::Security::DatawriterCryptoHandle  sending_datawriter_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
bool OpenDDS::Security::CryptoBuiltInImpl::decode_submessage ( DDS::OctetSeq plain_rtps_submessage,
const DDS::OctetSeq encoded_rtps_submessage,
DDS::Security::NativeCryptoHandle  sender_handle,
DDS::Security::SecurityException ex 
) [private]
bool OpenDDS::Security::CryptoBuiltInImpl::decrypt ( const KeyMaterial master,
Session sess,
const char *  ciphertext,
unsigned int  n,
const CryptoHeader header,
const CryptoFooter footer,
DDS::OctetSeq out,
DDS::Security::SecurityException ex 
) [private]

Definition at line 1388 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CryptoFooter::common_mac, OpenDDS::Security::CRYPTO_TRANSFORMATION_KIND_AES256_GCM, OpenDDS::Security::CryptoBuiltInImpl::Session::get_key(), LM_ERROR, OpenDDS::Security::CryptoHeader::session_id, OpenDDS::Security::CommonUtilities::set_security_error(), and OpenDDS::Security::KeyMaterial_AES_GCM_GMAC::transformation_kind.

01394 {
01395   const KeyOctetSeq sess_key = sess.get_key(master, header);
01396   if (!sess_key.length()) {
01397     CommonUtilities::set_security_error(ex, -1, 0, "no session key");
01398     return false;
01399   }
01400 
01401   if (master.transformation_kind[TransformKindIndex] !=
01402       CRYPTO_TRANSFORMATION_KIND_AES256_GCM) {
01403     CommonUtilities::set_security_error(ex, -1, 0,
01404                                         "unsupported transformation kind");
01405     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::decrypt - ERROR "
01406                "unsupported transformation kind %d\n",
01407                master.transformation_kind[TransformKindIndex]));
01408     return false;
01409   }
01410 
01411   CipherContext ctx;
01412   // session_id is start of IV contiguous bytes
01413   if (EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), 0, sess_key.get_buffer(),
01414                          header.session_id) != 1) {
01415     CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptInit_ex");
01416     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::decrypt - ERROR "
01417                "EVP_DecryptInit_ex %Ld\n", ERR_peek_last_error()));
01418     return false;
01419   }
01420 
01421   out.length(n + KEY_LEN_BYTES);
01422   int len;
01423   if (EVP_DecryptUpdate(ctx, out.get_buffer(), &len,
01424                         reinterpret_cast<const unsigned char*>(ciphertext), n)
01425       != 1) {
01426     CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptUpdate");
01427     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::decrypt - ERROR "
01428                "EVP_DecryptUpdate %Ld\n", ERR_peek_last_error()));
01429     return false;
01430   }
01431 
01432   void* tag = const_cast<void*>(static_cast<const void*>(footer.common_mac));
01433   if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, 16, tag)) {
01434     CommonUtilities::set_security_error(ex, -1, 0, "EVP_CIPHER_CTX_ctrl");
01435     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::decrypt - ERROR "
01436                "EVP_CIPHER_CTX_ctrl %Ld\n", ERR_peek_last_error()));
01437     return false;
01438   }
01439 
01440   int len2;
01441   if (EVP_DecryptFinal_ex(ctx, out.get_buffer() + len, &len2) == 1) {
01442     out.length(len + len2);
01443     return true;
01444   }
01445   CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptFinal_ex");
01446   ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::decrypt - ERROR "
01447              "EVP_DecryptFinal_ex %Ld\n", ERR_peek_last_error()));
01448   return false;
01449 }

Here is the call graph for this function:

void OpenDDS::Security::CryptoBuiltInImpl::encauth_setup ( const KeyMaterial master,
Session sess,
const DDS::OctetSeq plain,
CryptoHeader header 
) [private]

Definition at line 878 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CryptoBuiltInImpl::Session::counter_, OpenDDS::Security::CryptoBuiltInImpl::Session::create_key(), OpenDDS::Security::CryptoBuiltInImpl::Session::id_, OpenDDS::Security::CryptoBuiltInImpl::Session::inc_iv(), OpenDDS::Security::CryptoHeader::initialization_vector_suffix, OpenDDS::Security::CryptoBuiltInImpl::Session::iv_suffix_, OpenDDS::Security::CryptoBuiltInImpl::Session::key_, OpenDDS::Security::CryptoBuiltInImpl::Session::next_id(), OpenDDS::Security::KeyMaterial_AES_GCM_GMAC::sender_key_id, OpenDDS::Security::CryptoHeader::session_id, OpenDDS::Security::CryptoHeader::transform_identifier, OpenDDS::Security::CryptoTransformIdentifier::transformation_key_id, OpenDDS::Security::KeyMaterial_AES_GCM_GMAC::transformation_kind, and OpenDDS::Security::CryptoTransformIdentifier::transformation_kind.

Referenced by authtag(), and encrypt().

00881 {
00882   const unsigned int blocks =
00883     (plain.length() + BLOCK_LEN_BYTES - 1) / BLOCK_LEN_BYTES;
00884 
00885   if (!sess.key_.length()) {
00886     sess.create_key(master);
00887 
00888   } else if (sess.counter_ + blocks > MAX_BLOCKS_PER_SESSION) {
00889     sess.next_id(master);
00890 
00891   } else {
00892     sess.inc_iv();
00893     sess.counter_ += blocks;
00894   }
00895 
00896   std::memcpy(&header.transform_identifier.transformation_kind,
00897               &master.transformation_kind, sizeof master.transformation_kind);
00898   std::memcpy(&header.transform_identifier.transformation_key_id,
00899               &master.sender_key_id, sizeof master.sender_key_id);
00900   std::memcpy(&header.session_id, &sess.id_, sizeof sess.id_);
00901   std::memcpy(&header.initialization_vector_suffix, &sess.iv_suffix_,
00902               sizeof sess.iv_suffix_);
00903 }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool OpenDDS::Security::CryptoBuiltInImpl::encode_datareader_submessage ( DDS::OctetSeq encoded_rtps_submessage,
const DDS::OctetSeq plain_rtps_submessage,
DDS::Security::DatareaderCryptoHandle  sending_datareader_crypto,
const DDS::Security::DatawriterCryptoHandleSeq receiving_datawriter_crypto_list,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::encode_datawriter_submessage ( DDS::OctetSeq encoded_rtps_submessage,
const DDS::OctetSeq plain_rtps_submessage,
DDS::Security::DatawriterCryptoHandle  sending_datawriter_crypto,
const DDS::Security::DatareaderCryptoHandleSeq receiving_datareader_crypto_list,
CORBA::Long receiving_datareader_crypto_list_index,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::encode_rtps_message ( DDS::OctetSeq encoded_rtps_message,
const DDS::OctetSeq plain_rtps_message,
DDS::Security::ParticipantCryptoHandle  sending_participant_crypto,
const DDS::Security::ParticipantCryptoHandleSeq receiving_participant_crypto_list,
CORBA::Long receiving_participant_crypto_list_index,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::encode_serialized_payload ( DDS::OctetSeq encoded_buffer,
DDS::OctetSeq extra_inline_qos,
const DDS::OctetSeq plain_buffer,
DDS::Security::DatawriterCryptoHandle  sending_datawriter_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
bool OpenDDS::Security::CryptoBuiltInImpl::encode_submessage ( DDS::OctetSeq encoded_rtps_submessage,
const DDS::OctetSeq plain_rtps_submessage,
DDS::Security::NativeCryptoHandle  sender_handle,
DDS::Security::SecurityException ex 
) [private]
bool OpenDDS::Security::CryptoBuiltInImpl::encrypt ( const KeyMaterial master,
Session sess,
const DDS::OctetSeq plain,
CryptoHeader header,
CryptoFooter footer,
DDS::OctetSeq out,
DDS::Security::SecurityException ex 
) [private]

Definition at line 905 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CryptoFooter::common_mac, encauth_setup(), EVP_CTRL_AEAD_GET_TAG, OpenDDS::Security::CryptoBuiltInImpl::Session::id_, OpenDDS::Security::CryptoBuiltInImpl::Session::iv_suffix_, OpenDDS::Security::CryptoBuiltInImpl::Session::key_, len, and OpenDDS::Security::CommonUtilities::set_security_error().

00909 {
00910   encauth_setup(master, sess, plain, header);
00911   static const int IV_LEN = 12, IV_SUFFIX_IDX = 4;
00912   unsigned char iv[IV_LEN];
00913   std::memcpy(iv, &sess.id_, sizeof sess.id_);
00914   std::memcpy(iv + IV_SUFFIX_IDX, &sess.iv_suffix_, sizeof sess.iv_suffix_);
00915 
00916   CipherContext ctx;
00917   const unsigned char* key = sess.key_.get_buffer();
00918   if (EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), 0, key, iv) != 1) {
00919     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptInit_ex");
00920     return false;
00921   }
00922 
00923   int len;
00924   out.length(plain.length() + BLOCK_LEN_BYTES - 1);
00925   if (EVP_EncryptUpdate(ctx, out.get_buffer(), &len,
00926                         plain.get_buffer(), plain.length()) != 1) {
00927     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptUpdate");
00928     return false;
00929   }
00930 
00931   int padLen;
00932   if (EVP_EncryptFinal_ex(ctx, out.get_buffer() + len, &padLen) != 1) {
00933     CommonUtilities::set_security_error(ex, -1, 0, "EVP_EncryptFinal_ex");
00934     return false;
00935   }
00936 
00937   out.length(len + padLen);
00938 
00939   if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, sizeof footer.common_mac,
00940                           &footer.common_mac) != 1) {
00941     CommonUtilities::set_security_error(ex, -1, 0, "EVP_CIPHER_CTX_ctrl");
00942     return false;
00943   }
00944 
00945   return true;
00946 }

Here is the call graph for this function:

NativeCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::generate_handle (  )  [private]

Definition at line 69 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CommonUtilities::increment_handle(), mutex_, and next_handle_.

Here is the call graph for this function:

bool OpenDDS::Security::CryptoBuiltInImpl::marshal ( TAO_OutputCDR  )  [private, virtual]

Reimplemented from CORBA::Object.

Definition at line 64 of file CryptoBuiltInImpl.cpp.

00065 {
00066   return false;
00067 }

CryptoBuiltInImpl& OpenDDS::Security::CryptoBuiltInImpl::operator= ( const CryptoBuiltInImpl  )  [private]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::preprocess_secure_submsg ( DDS::Security::DatawriterCryptoHandle datawriter_crypto,
DDS::Security::DatareaderCryptoHandle datareader_crypto,
DDS::Security::SecureSubmessageCategory_t secure_submessage_category,
const DDS::OctetSeq encoded_rtps_submessage,
DDS::Security::ParticipantCryptoHandle  receiving_participant_crypto,
DDS::Security::ParticipantCryptoHandle  sending_participant_crypto,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::DatareaderCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_local_datareader ( DDS::Security::ParticipantCryptoHandle  participant_crypto,
const DDS::PropertySeq datareader_properties,
const DDS::Security::EndpointSecurityAttributes datareader_security_attributes,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::DatawriterCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_local_datawriter ( DDS::Security::ParticipantCryptoHandle  participant_crypto,
const DDS::PropertySeq datawriter_properties,
const DDS::Security::EndpointSecurityAttributes datawriter_security_attributes,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::ParticipantCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_local_participant ( DDS::Security::IdentityHandle  participant_identity,
DDS::Security::PermissionsHandle  participant_permissions,
const DDS::PropertySeq participant_properties,
const DDS::Security::ParticipantSecurityAttributes participant_security_attributes,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::DatareaderCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_matched_remote_datareader ( DDS::Security::DatawriterCryptoHandle  local_datawriter_crypto_handle,
DDS::Security::ParticipantCryptoHandle  remote_participant_crypto,
DDS::Security::SharedSecretHandle shared_secret,
bool  relay_only,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::DatawriterCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_matched_remote_datawriter ( DDS::Security::DatareaderCryptoHandle  local_datareader_crypto_handle,
DDS::Security::ParticipantCryptoHandle  remote_participant_crypt,
DDS::Security::SharedSecretHandle shared_secret,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual DDS::Security::ParticipantCryptoHandle OpenDDS::Security::CryptoBuiltInImpl::register_matched_remote_participant ( DDS::Security::ParticipantCryptoHandle  local_participant_crypto_handle,
DDS::Security::IdentityHandle  remote_participant_identity,
DDS::Security::PermissionsHandle  remote_participant_permissions,
DDS::Security::SharedSecretHandle shared_secret,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::return_crypto_tokens ( const DDS::Security::CryptoTokenSeq crypto_tokens,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::set_remote_datareader_crypto_tokens ( DDS::Security::DatawriterCryptoHandle  local_datawriter_crypto,
DDS::Security::DatareaderCryptoHandle  remote_datareader_crypto,
const DDS::Security::DatareaderCryptoTokenSeq remote_datareader_tokens,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::set_remote_datawriter_crypto_tokens ( DDS::Security::DatareaderCryptoHandle  local_datareader_crypto,
DDS::Security::DatawriterCryptoHandle  remote_datawriter_crypto,
const DDS::Security::DatawriterCryptoTokenSeq remote_datawriter_tokens,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::set_remote_participant_crypto_tokens ( DDS::Security::ParticipantCryptoHandle  local_participant_crypto,
DDS::Security::ParticipantCryptoHandle  remote_participant_crypto,
const DDS::Security::ParticipantCryptoTokenSeq remote_participant_tokens,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::unregister_datareader ( DDS::Security::DatareaderCryptoHandle  datareader_crypto_handle,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::unregister_datawriter ( DDS::Security::DatawriterCryptoHandle  datawriter_crypto_handle,
DDS::Security::SecurityException ex 
) [private, virtual]
virtual bool OpenDDS::Security::CryptoBuiltInImpl::unregister_participant ( DDS::Security::ParticipantCryptoHandle  participant_crypto_handle,
DDS::Security::SecurityException ex 
) [private, virtual]
bool OpenDDS::Security::CryptoBuiltInImpl::verify ( const KeyMaterial master,
Session sess,
const char *  in,
unsigned int  n,
const CryptoHeader header,
const CryptoFooter footer,
DDS::OctetSeq out,
DDS::Security::SecurityException ex 
) [private]

Definition at line 1451 of file CryptoBuiltInImpl.cpp.

References OpenDDS::Security::CryptoFooter::common_mac, OpenDDS::Security::CRYPTO_TRANSFORMATION_KIND_AES256_GMAC, OpenDDS::Security::CryptoBuiltInImpl::Session::get_key(), LM_ERROR, OpenDDS::Security::CryptoHeader::session_id, OpenDDS::Security::CommonUtilities::set_security_error(), and OpenDDS::Security::KeyMaterial_AES_GCM_GMAC::transformation_kind.

01457 {
01458   const KeyOctetSeq sess_key = sess.get_key(master, header);
01459   if (!sess_key.length()) {
01460     CommonUtilities::set_security_error(ex, -1, 0, "no session key");
01461     return false;
01462   }
01463 
01464   if (master.transformation_kind[TransformKindIndex] !=
01465       CRYPTO_TRANSFORMATION_KIND_AES256_GMAC) {
01466     CommonUtilities::set_security_error(ex, -1, 0,
01467                                         "unsupported transformation kind");
01468     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::verify - ERROR "
01469                "unsupported transformation kind %d\n",
01470                master.transformation_kind[TransformKindIndex]));
01471     return false;
01472   }
01473 
01474   CipherContext ctx;
01475   // session_id is start of IV contiguous bytes
01476   if (EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), 0, sess_key.get_buffer(),
01477                          header.session_id) != 1) {
01478     CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptInit_ex");
01479     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::verify - ERROR "
01480                "EVP_DecryptInit_ex %Ld\n", ERR_peek_last_error()));
01481     return false;
01482   }
01483 
01484   int len;
01485   if (EVP_DecryptUpdate(ctx, 0, &len,
01486                         reinterpret_cast<const unsigned char*>(in), n) != 1) {
01487     CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptUpdate");
01488     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::verify - ERROR "
01489                "EVP_DecryptUpdate %Ld\n", ERR_peek_last_error()));
01490     return false;
01491   }
01492 
01493   void* tag = const_cast<void*>(static_cast<const void*>(footer.common_mac));
01494   if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, 16, tag)) {
01495     CommonUtilities::set_security_error(ex, -1, 0, "EVP_CIPHER_CTX_ctrl");
01496     ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::verify - ERROR "
01497                "EVP_CIPHER_CTX_ctrl %Ld\n", ERR_peek_last_error()));
01498     return false;
01499   }
01500 
01501   int len2;
01502   if (EVP_DecryptFinal_ex(ctx, 0, &len2) == 1) {
01503     out.length(n);
01504     std::memcpy(out.get_buffer(), in, n);
01505     return true;
01506   }
01507   CommonUtilities::set_security_error(ex, -1, 0, "EVP_DecryptFinal_ex");
01508   ACE_ERROR((LM_ERROR, "(%P|%t) CryptoBuiltInImpl::verify - ERROR "
01509              "EVP_DecryptFinal_ex %Ld\n", ERR_peek_last_error()));
01510   return false;
01511 }

Here is the call graph for this function:


Member Data Documentation

Definition at line 229 of file CryptoBuiltInImpl.h.

Definition at line 223 of file CryptoBuiltInImpl.h.

Referenced by generate_handle().

Definition at line 224 of file CryptoBuiltInImpl.h.

Referenced by generate_handle().

Definition at line 250 of file CryptoBuiltInImpl.h.

Definition at line 266 of file CryptoBuiltInImpl.h.

Definition at line 240 of file CryptoBuiltInImpl.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1