22 #ifndef SECURITYBLOCK_H_
23 #define SECURITYBLOCK_H_
29 #include <ibrcommon/Exceptions.h>
30 #include <ibrcommon/ssl/AES128Stream.h>
32 #include <sys/types.h>
46 SecurityException(std::string what =
"security has been violated") : ibrcommon::Exception(what)
97 class MutableSerializer;
98 class StrictSerializer;
165 : _type(type), _value(value)
175 friend std::ostream&
operator<<(std::ostream &stream,
const TLV &tlv);
176 friend std::istream&
operator>>(std::istream &stream,
TLV &tlv);
192 const std::string
get(
TLV_TYPES type)
const;
489 T& esb = bundle.
insert<T>(it);
494 std::stringstream ss;
495 ibrcommon::AES128Stream encrypt(ibrcommon::CipherStream::CIPHER_ENCRYPT, ss, ephemeral_key, salt);
499 encrypt << std::flush;
502 unsigned char tag[ibrcommon::AES128Stream::tag_len]; encrypt.getTag(tag);
503 ss.write((
const char*)&tag, ibrcommon::AES128Stream::tag_len);
508 unsigned char iv[ibrcommon::AES128Stream::iv_len]; encrypt.getIV(iv);
dtn::data::Bitset< CIPHERSUITE_FLAGS > _ciphersuite_flags
virtual ~ElementMissingException()
friend std::istream & operator>>(std::istream &stream, TLV &tlv)
VerificationFailedException(std::string what="Verification failed.")
void setCorrelator(const dtn::data::Number &corr)
const dtn::data::EID getSecuritySource() const
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])
EncryptException(std::string what="Encryption failed.")
virtual std::istream & deserialize(std::istream &stream, const dtn::data::Length &length)
void set(ProcFlags flag, const bool &value)
bool isSecurityDestination(const dtn::data::Bundle &, const dtn::data::EID &) const
void set(TLV_TYPES type, std::string value)
TLV(TLV_TYPES type, std::string value)
void setSecurityDestination(const dtn::data::EID &destination)
friend std::ostream & operator<<(std::ostream &stream, const TLVList &tlvlist)
virtual dtn::data::Length getSecurityResultSize() const
virtual ~EncryptException()
SecurityException(std::string what="security has been violated")
VerificationSkippedException(std::string what="Verification skipped.")
TLVList _ciphersuite_params
dtn::data::EID _security_destination
void setCiphersuiteId(const CIPHERSUITE_IDS id)
bool operator<(const TLV &tlv) const
static bool getKey(const TLVList &security_parameter, unsigned char *key, dtn::data::Length key_size, RSA *rsa)
T & insert(iterator before)
dtn::data::Length getLength() const
dtn::data::Length getLength() const
const std::string toString() const
virtual ~DecryptException()
virtual MutableSerializer & serialize_mutable(MutableSerializer &serializer, bool include_security_result=true) const
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])
friend std::istream & operator>>(std::istream &stream, TLVList &tlvlist)
virtual ~SecurityBlock()=0
static void addFragmentRange(TLVList &ciphersuite_params, const dtn::data::Number &fragmentoffset, const dtn::data::Number &payload_length)
virtual ~VerificationFailedException()
static void copyEID(const dtn::data::Block &from, dtn::data::Block &to, dtn::data::Length skip=0)
TLV_TYPES getType() const
dtn::data::Number _correlator
virtual std::ostream & serialize_strict(std::ostream &stream, dtn::data::Length &length) const
static void getFragmentRange(const TLVList &ciphersuite_params, dtn::data::Number &offset, dtn::data::Number &range)
block_list::iterator iterator
virtual std::ostream & serialize(std::ostream &stream, dtn::data::Length &length) const
static bool isCorrelatorPresent(const dtn::data::Bundle &bundle, const dtn::data::Number &correlator)
static void addKey(TLVList &security_parameter, unsigned char const *const key, dtn::data::Length key_size, RSA *rsa)
virtual ~VerificationSkippedException()
virtual ~SecurityException()
friend std::ostream & operator<<(std::ostream &stream, const TLV &tlv)
dtn::data::EID _security_source
static void addSalt(TLVList &security_parameters, const uint32_t &salt)
virtual dtn::data::Length getLength_mutable() const
DecryptException(std::string what="Decryption failed.")
const dtn::data::EID getSecurityDestination() const
SecurityBlock(const SecurityBlock::BLOCK_TYPES type, const CIPHERSUITE_IDS id)
dtn::data::Number _ciphersuite_id
ElementMissingException(std::string what="Requested element is missing.")
static uint32_t getSalt(const TLVList &security_parameters)
bool isSecuritySource(const dtn::data::Bundle &, const dtn::data::EID &) const
static void createSaltAndKey(uint32_t &salt, unsigned char *key, dtn::data::Length key_size)
bool operator==(const TLV &tlv) const
void setSecuritySource(const dtn::data::EID &source)
const std::string getValue() const
void store_security_references()
static dtn::data::Number createCorrelatorValue(const dtn::data::Bundle &bundle)
virtual dtn::data::Length getLength() const