diff options
author | Alberto Compagno <acompagn+fdio@cisco.com> | 2019-02-07 13:12:19 +0100 |
---|---|---|
committer | Alberto Compagno <acompagn+fdio@cisco.com> | 2019-02-07 13:15:40 +0000 |
commit | db1afad8749fce983636456c16c9df9c24d73af4 (patch) | |
tree | d78492674a1fbc5b923941991542d8115e11493d /libtransport/src/hicn/transport/core | |
parent | 216e35ba535efa00af39b7624f363ca832836e3f (diff) |
[HICN-39] Added api that return a pointer to the signature hold in a packet
[HICN-40] Fixed signature calculation by allocating a contiguous portion of
memory that holds the entire hICN header (IP+TCP+AH)
Change-Id: I9d40bab0e3ecb82949b8b3a00e2cc1214457e4e3
Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/core')
-rw-r--r-- | libtransport/src/hicn/transport/core/packet.cc | 30 | ||||
-rw-r--r-- | libtransport/src/hicn/transport/core/packet.h | 2 |
2 files changed, 21 insertions, 11 deletions
diff --git a/libtransport/src/hicn/transport/core/packet.cc b/libtransport/src/hicn/transport/core/packet.cc index dd150d723..3872510ec 100644 --- a/libtransport/src/hicn/transport/core/packet.cc +++ b/libtransport/src/hicn/transport/core/packet.cc @@ -32,7 +32,7 @@ namespace core { const core::Name Packet::base_name("0::0|0"); Packet::Packet(Format format) - : packet_(utils::MemBuf::create(getHeaderSizeFromFormat(format)).release()), + : packet_(utils::MemBuf::create(getHeaderSizeFromFormat(format, 256)).release()), packet_start_(packet_->writableData()), header_head_(packet_.get()), payload_head_(nullptr), @@ -50,28 +50,22 @@ Packet::Packet(MemBufPtr &&buffer) header_head_(packet_.get()), payload_head_(nullptr), format_(getFormatFromBuffer(packet_start_)) { - auto header_size = getHeaderSizeFromFormat(format_); - int signature_size = 0; + int signature_size = 0; if (_is_ah(format_)) { signature_size = getSignatureSize(); } + auto header_size = getHeaderSizeFromFormat(format_, signature_size); + auto payload_length = packet_->length() - header_size - signature_size; - if (!payload_length && !signature_size) { + if (!payload_length) { return; } packet_->trimEnd(packet_->length()); - if (signature_size) { - auto sig = packet_->cloneOne(); - sig->advance(header_size); - sig->append(signature_size); - packet_->appendChain(std::move(sig)); - } - if (payload_length) { auto payload = packet_->cloneOne(); payload_head_ = payload.get(); @@ -285,6 +279,20 @@ void Packet::setSignatureSize(std::size_t size_bytes) { if (ret < 0) { throw errors::RuntimeException("Packet without Authentication Header."); } + + packet_->append(size_bytes); +} + +uint8_t * Packet::getSignature() const { + uint8_t * signature; + int ret = hicn_packet_get_signature( + format_, (hicn_header_t *)packet_start_, &signature); + + if (ret < 0) { + throw errors::RuntimeException("Packet without Authentication Header."); + } + + return signature; } std::size_t Packet::getSignatureSize() const { diff --git a/libtransport/src/hicn/transport/core/packet.h b/libtransport/src/hicn/transport/core/packet.h index bc23588dc..038676540 100644 --- a/libtransport/src/hicn/transport/core/packet.h +++ b/libtransport/src/hicn/transport/core/packet.h @@ -133,6 +133,8 @@ class Packet : public std::enable_shared_from_this<Packet> { std::size_t getSignatureSize() const; + uint8_t * getSignature() const; + void setSignatureTimestamp(const uint64_t ×tamp); uint64_t getSignatureTimestamp() const; |