From de5c4f910203dd976ad8c17eff90874f548d6bc3 Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Thu, 31 Jan 2008 11:39:39 +0000 Subject: packet and cypher fixes --- encryptedPacket.cpp | 172 ++++++++-------------------------------------------- 1 file changed, 24 insertions(+), 148 deletions(-) (limited to 'encryptedPacket.cpp') diff --git a/encryptedPacket.cpp b/encryptedPacket.cpp index 35ccda0..9c091b5 100644 --- a/encryptedPacket.cpp +++ b/encryptedPacket.cpp @@ -44,9 +44,9 @@ EncryptedPacket::EncryptedPacket(u_int32_t max_payload_length) { header_ = reinterpret_cast(buf_); auth_tag_ = NULL; - buf_ = buf_ + sizeof(struct HeaderStruct); // no authtag yet - length_ = length_ - sizeof(struct HeaderStruct); - size_ = max_payload_length + AUTHTAG_SIZE; + payload_ = buf_ + sizeof(struct HeaderStruct); // no authtag yet + length_ = sizeof(struct HeaderStruct); + max_length_ = max_payload_length + AUTHTAG_SIZE; } @@ -54,9 +54,17 @@ EncryptedPacket::~EncryptedPacket() { buf_ = reinterpret_cast(header_); if( auth_tag_ == NULL ) - length_ = size_ + sizeof(struct HeaderStruct) + AUTHTAG_SIZE; + length_ = max_length_ + sizeof(struct HeaderStruct) + AUTHTAG_SIZE; else - length_ = size_ + sizeof(struct HeaderStruct); + length_ = max_length_ + sizeof(struct HeaderStruct); +} + +void EncryptedPacket::setPayloadLength(u_int8_t payload_length) +{ + if( auth_tag_) + length_= payload_length + sizeof(struct HeaderStruct)+AUTHTAG_SIZE; + else + length_= payload_length + sizeof(struct HeaderStruct); } seq_nr_t EncryptedPacket::getSeqNr() const @@ -74,14 +82,14 @@ mux_t EncryptedPacket::getMux() const return MUX_T_NTOH(header_->mux); } -u_int32_t EncryptedPacket::getSize() const +u_int32_t EncryptedPacket::getMaxLength() const { - return size_; + return max_length_; } void EncryptedPacket::setLength(u_int32_t length) { - if(length > size_) + if(length > max_length_) throw std::out_of_range("can't set length greater then size ofsize of allocated memory"); length_ = length; @@ -120,16 +128,20 @@ void EncryptedPacket::withAuthTag(bool b) { if( b && (auth_tag_ != NULL) ) throw std::runtime_error("packet already has auth tag function enabled"); + //TODO: return instead? + if( ! b && (auth_tag_ == NULL) ) + throw std::runtime_error("packet already has auth tag function disabled"); + //TODO: return instead? if( b ) { auth_tag_ = reinterpret_cast( buf_ + sizeof(struct HeaderStruct) ); - buf_ = buf_ + AUTHTAG_SIZE; + payload_ = payload_ + AUTHTAG_SIZE; length_ -= AUTHTAG_SIZE; - size_ -= AUTHTAG_SIZE; + max_length_ -= AUTHTAG_SIZE; } else { - buf_ = reinterpret_cast( auth_tag_ ); + payload_ = reinterpret_cast( auth_tag_ ); length_ += AUTHTAG_SIZE; - size_ += AUTHTAG_SIZE; + max_length_ += AUTHTAG_SIZE; auth_tag_ = NULL; } } @@ -158,139 +170,3 @@ AuthTag EncryptedPacket::getAuthTag() const return at; } - -//Packet& Packet::addHeader(seq_nr_t seq_nr, sender_id_t sender_id) -//{ -// if(!has_header_) -// { -// if(sizeof(struct HeaderStruct) > resizeFront(length_ + sizeof(struct HeaderStruct))) -// return *this; -// -// has_header_ = true; -// } -// struct HeaderStruct* header; -// header = reinterpret_cast(buf_); -// header->seq_nr = SEQ_NR_T_HTON(seq_nr); -// header->sender_id = SENDER_ID_T_HTON(sender_id); -// return *this; -//} -// -// -//bool Packet::hasPayloadType() const -//{ -// return has_payload_type_; -//} -// -//Packet& Packet::withPayloadType(bool b) -//{ -// if(b && length_ >= sizeof(payload_type_t)) -// has_payload_type_ = true; -// else -// has_payload_type_ = false; -// -// return *this; -//} -// -//payload_type_t Packet::getPayloadType() const -//{ -// if(!has_payload_type_) -// return 0; -// -// if((!has_auth_tag_ && length_ < sizeof(payload_type_t)) || -// (has_auth_tag_ && length_ < (sizeof(payload_type_t) + AUTHTAG_SIZE))) -// return 0; -// -// payload_type_t* payload_type; -// -// if(!has_auth_tag_) -// payload_type = reinterpret_cast(buf_ + length_ - sizeof(payload_type_t)); -// else -// payload_type = reinterpret_cast(buf_ + length_ - sizeof(payload_type_t) - AUTHTAG_SIZE); -// return PAYLOAD_TYPE_T_NTOH(*payload_type); -//} -// -//Packet& Packet::addPayloadType(payload_type_t payload_type) -//{ -// if(has_auth_tag_) -// throw std::runtime_error("can't add payload_type with existing auth_tag"); -// -// if(!has_payload_type_) -// { -// u_int32_t new_length = length_ + sizeof(payload_type_t); -// if(new_length > resizeBack(new_length)) -// return *this; -// -// has_payload_type_ = true; -// } -// payload_type_t* payload_type_ptr; -// payload_type_ptr = reinterpret_cast(buf_ + length_ - sizeof(payload_type_t)); -// *payload_type_ptr = PAYLOAD_TYPE_T_HTON(payload_type); -// return *this; -//} -// -//Packet& Packet::removePayloadType() -//{ -// if(has_auth_tag_) -// throw std::runtime_error("can't remove payload_type with existing auth_tag"); -// -// if(!has_payload_type_) -// return *this; -// -// if(length_ >= sizeof(payload_type_t)) -// resizeBack(length_ - sizeof(payload_type_t)); -// -// has_payload_type_ = false; -// -// return *this; -//} -// -// -// -// -//AuthTag Packet::getAuthTag() const -//{ -// if(!has_auth_tag_) -// return AuthTag(0); -// -// if(length_ < AUTHTAG_SIZE) -// return AuthTag(0); -// -// //AuthTag* auth_tag; -// //auth_tag = reinterpret_cast(buf_ + length_ - AUTHTAG_SIZE); -// //return AUTH_TAG_T_NTOH(*auth_tag); -// AuthTag auth_tag; -// auth_tag = AuthTag(buf_ + length_ - AUTHTAG_SIZE, AUTHTAG_SIZE); -// return auth_tag; -//} -// -//Packet& Packet::addAuthTag(AuthTag auth_tag) -//{ -// if(!has_auth_tag_) -// { -// u_int32_t new_length = length_ + auth_tag.getLength(); -// if(new_length > resizeBack(new_length)) -// return *this; -// -// has_auth_tag_ = true; -// } -// -// AuthTag* auth_tag_ptr; -// auth_tag_ptr = reinterpret_cast(buf_ + length_ - auth_tag.getLength()); -// std::memcpy(auth_tag_ptr, auth_tag.getBuf(), auth_tag.getLength()); -// -// return *this; -//} -// -//Packet& Packet::removeAuthTag() -//{ -// if(!has_auth_tag_) -// return *this; -// -// if(length_ >= AUTHTAG_SIZE) -// resizeBack(length_ - AUTHTAG_SIZE); -// -// has_auth_tag_ = false; -// -// return *this; -//} -// -- cgit v1.2.3