IBR-DTNSuite  0.10
dtn::security::ExtensionSecurityBlock Class Reference

#include <ExtensionSecurityBlock.h>

Inheritance diagram for dtn::security::ExtensionSecurityBlock:
Inheritance graph
Collaboration diagram for dtn::security::ExtensionSecurityBlock:
Collaboration graph

Classes

class  Factory
 

Public Member Functions

virtual ~ExtensionSecurityBlock ()
 
- Public Member Functions inherited from dtn::security::SecurityBlock
virtual ~SecurityBlock ()=0
 
virtual dtn::data::Length getLength () const
 
virtual dtn::data::Length getLength_mutable () const
 
virtual std::ostream & serialize (std::ostream &stream, dtn::data::Length &length) const
 
virtual std::ostream & serialize_strict (std::ostream &stream, dtn::data::Length &length) const
 
virtual std::istream & deserialize (std::istream &stream, const dtn::data::Length &length)
 
const dtn::data::EID getSecuritySource () const
 
const dtn::data::EID getSecurityDestination () const
 
void setSecuritySource (const dtn::data::EID &source)
 
void setSecurityDestination (const dtn::data::EID &destination)
 
bool isSecuritySource (const dtn::data::Bundle &, const dtn::data::EID &) const
 
bool isSecurityDestination (const dtn::data::Bundle &, const dtn::data::EID &) const
 
const dtn::data::EID getSecuritySource (const dtn::data::Bundle &) const
 
const dtn::data::EID getSecurityDestination (const dtn::data::Bundle &) const
 
template<class T >
T & encryptBlock (dtn::data::Bundle &bundle, dtn::data::Bundle::iterator &it, uint32_t salt, const unsigned char ephemeral_key[ibrcommon::AES128Stream::key_size_in_bytes])
 
- Public Member Functions inherited from dtn::data::Block
virtual ~Block ()
 
Blockoperator= (const Block &block)
 
bool operator== (const block_t &id) const
 
virtual void addEID (const dtn::data::EID &eid)
 
virtual void clearEIDs ()
 
virtual const eid_listgetEIDList () const
 
const block_tgetType () const
 
void set (ProcFlags flag, const bool &value)
 
bool get (ProcFlags flag) const
 
const Bitset< ProcFlags > & getProcessingFlags () const
 
virtual Length getLength_strict () const
 

Static Public Member Functions

static void encrypt (dtn::data::Bundle &bundle, const SecurityKey &key, dtn::data::Bundle::iterator it, const dtn::data::EID &source, const dtn::data::EID &destination)
 
static void decrypt (dtn::data::Bundle &bundle, const SecurityKey &key, dtn::data::Bundle::iterator it)
 
static void decrypt (dtn::data::Bundle &bundle, const SecurityKey &key, const dtn::data::Number &correlator=0)
 

Static Public Attributes

static const dtn::data::block_t BLOCK_TYPE = SecurityBlock::EXTENSION_SECURITY_BLOCK
 

Protected Member Functions

 ExtensionSecurityBlock ()
 
- Protected Member Functions inherited from dtn::security::SecurityBlock
void store_security_references ()
 
 SecurityBlock (const SecurityBlock::BLOCK_TYPES type, const CIPHERSUITE_IDS id)
 
 SecurityBlock (const SecurityBlock::BLOCK_TYPES type)
 
void setCiphersuiteId (const CIPHERSUITE_IDS id)
 
void setCorrelator (const dtn::data::Number &corr)
 
virtual MutualSerializerserialize_mutable (MutualSerializer &serializer) const
 
virtual MutualSerializerserialize_mutable_without_security_result (MutualSerializer &serializer) const
 
virtual dtn::data::Length getSecurityResultSize () const
 
- Protected Member Functions inherited from dtn::data::Block
 Block (block_t blocktype)
 

Friends

class dtn::data::Bundle
 

Additional Inherited Members

- Public Types inherited from dtn::security::SecurityBlock
enum  BLOCK_TYPES { BUNDLE_AUTHENTICATION_BLOCK = 0x02, PAYLOAD_INTEGRITY_BLOCK = 0x03, PAYLOAD_CONFIDENTIAL_BLOCK = 0x04, EXTENSION_SECURITY_BLOCK = 0x09 }
 
enum  TLV_TYPES {
  not_set = 0, initialization_vector = 1, key_information = 3, fragment_range = 4,
  integrity_signature = 5, salt = 7, PCB_integrity_check_value = 8, encapsulated_block = 10,
  block_type_of_encapsulated_block = 11
}
 
enum  CIPHERSUITE_FLAGS {
  CONTAINS_SECURITY_RESULT = 1 << 0, CONTAINS_CORRELATOR = 1 << 1, CONTAINS_CIPHERSUITE_PARAMS = 1 << 2, CONTAINS_SECURITY_DESTINATION = 1 << 3,
  CONTAINS_SECURITY_SOURCE = 1 << 4, BIT5_RESERVED = 1 << 5, BIT6_RESERVED = 1 << 6
}
 
enum  CIPHERSUITE_IDS { BAB_HMAC = 0x001, PIB_RSA_SHA256 = 0x002, PCB_RSA_AES128_PAYLOAD_PIB_PCB = 0x003, ESB_RSA_AES128_EXT = 0x004 }
 
- Static Protected Member Functions inherited from dtn::security::SecurityBlock
static bool isCorrelatorPresent (const dtn::data::Bundle &bundle, const dtn::data::Number &correlator)
 
static dtn::data::Number createCorrelatorValue (const dtn::data::Bundle &bundle)
 
static void createSaltAndKey (uint32_t &salt, unsigned char *key, dtn::data::Length key_size)
 
static void addKey (TLVList &security_parameter, unsigned char const *const key, dtn::data::Length key_size, RSA *rsa)
 
static bool getKey (const TLVList &security_parameter, unsigned char *key, dtn::data::Length key_size, RSA *rsa)
 
static void addSalt (TLVList &security_parameters, const uint32_t &salt)
 
static uint32_t getSalt (const TLVList &security_parameters)
 
static void copyEID (const dtn::data::Block &from, dtn::data::Block &to, dtn::data::Length skip=0)
 
template<class T >
static T & encryptBlock (dtn::data::Bundle &bundle, dtn::data::Bundle::iterator &it, uint32_t salt, const unsigned char ephemeral_key[ibrcommon::AES128Stream::key_size_in_bytes])
 
static void decryptBlock (dtn::data::Bundle &bundle, dtn::data::Bundle::iterator &it, uint32_t salt, const unsigned char key[ibrcommon::AES128Stream::key_size_in_bytes])
 
static void addFragmentRange (TLVList &ciphersuite_params, const dtn::data::Number &fragmentoffset, const dtn::data::Number &payload_length)
 
- Protected Attributes inherited from dtn::security::SecurityBlock
dtn::data::Number _ciphersuite_id
 
dtn::data::Bitset
< CIPHERSUITE_FLAGS
_ciphersuite_flags
 
dtn::data::Number _correlator
 
TLVList _ciphersuite_params
 
TLVList _security_result
 
dtn::data::EID _security_destination
 
dtn::data::EID _security_source
 

Detailed Description

Encrypts ExtensionBlocks and replaces them with an ExtensionSecurityBlock, which stores the ciphertext in its security result, which means that there should not be a payloadblock encrypted. You can instantiate a factory of this class with a rsa key and the node belonging to this key. Encryption is done with AES128. The AES-Key will be encrypted using the rsa key and placed into the security parameters.
You can encrypt one or a series of blocks using the encryptBlock() method. Encryption is done with the decryptBlock() method.
Take care which kind of rsa key is given to this class. You can instantiate it with a public rsa key, but decryption will fail with it and you only notice it, when your programm breaks.

Definition at line 45 of file ExtensionSecurityBlock.h.

Constructor & Destructor Documentation

dtn::security::ExtensionSecurityBlock::~ExtensionSecurityBlock ( )
virtual

does nothing

Definition at line 50 of file ExtensionSecurityBlock.cpp.

dtn::security::ExtensionSecurityBlock::ExtensionSecurityBlock ( )
protected

Creates an empty ExtensionSecurityBlock and sets its ciphersuite id to ESB_RSA_AES128_EXT

Definition at line 45 of file ExtensionSecurityBlock.cpp.

Referenced by dtn::security::ExtensionSecurityBlock::Factory::create().

Member Function Documentation

void dtn::security::ExtensionSecurityBlock::decrypt ( dtn::data::Bundle bundle,
const SecurityKey key,
dtn::data::Bundle::iterator  it 
)
static

Decrypts the given block and replaces the ESB with the original block in the bundle. This block must carry the symmetric AES key, which was used to decrypt, and not be correlated.

Parameters
bundlethe bundle to which block belongs
blockthe to be decrypted block
Returns
true if block decryption succeeded and the block has been replaced, false otherwise. when false the encrypted block will remain as it was

Definition at line 80 of file ExtensionSecurityBlock.cpp.

References dtn::security::SecurityBlock::_ciphersuite_params, ibrcommon::LogLevel::critical, dtn::security::SecurityBlock::decryptBlock(), dtn::security::SecurityBlock::getKey(), dtn::security::SecurityKey::getRSA(), dtn::security::SecurityBlock::getSalt(), IBRCOMMON_LOGGER_ENDL, IBRCOMMON_LOGGER_ex, ibrcommon::AES128Stream::key_size_in_bytes, and dtn::security::SecurityBlock::salt.

Referenced by decrypt().

Here is the call graph for this function:

void dtn::security::ExtensionSecurityBlock::decrypt ( dtn::data::Bundle bundle,
const SecurityKey key,
const dtn::data::Number correlator = 0 
)
static

Decrypts all blocks in the bundle which have correlator as their correlatorvalue set. Assuming that they belong together, with first block carrying the key information.

Parameters
bundlethe bundle to which the blocks belong to
correlatorthe correlator which have the blocks set
Returns
true if block decryption succeeded and the blocks have been replaced, false otherwise. when false the old blocks will remain intakt. But be carefull. If from a series of blocks one block fails, this single block will remain encrypted inside the bundle. the other blocks will decrypted, so recovering the failed block may be impossible.

Definition at line 102 of file ExtensionSecurityBlock.cpp.

References dtn::security::SecurityBlock::_correlator, dtn::data::Bundle::begin(), BLOCK_TYPE, decrypt(), and dtn::data::Bundle::end().

Here is the call graph for this function:

Friends And Related Function Documentation

friend class dtn::data::Bundle
friend

This class is allowed to call the parameterless contructor and the constructor with the bundle parameter.

Definition at line 51 of file ExtensionSecurityBlock.h.

Member Data Documentation

const dtn::data::block_t dtn::security::ExtensionSecurityBlock::BLOCK_TYPE = SecurityBlock::EXTENSION_SECURITY_BLOCK
static

The block type of this class.

Definition at line 62 of file ExtensionSecurityBlock.h.

Referenced by decrypt().


The documentation for this class was generated from the following files: