A Discrete-Event Network Simulator
API
onion-routing.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 #ifndef ONION_ROUTING_H
3 #define ONION_ROUTING_H
4 
5 
6 #include <fstream>
7 #include <iostream>
8 #include <string.h>
9 #include <sodium.h>
10 #include <stdio.h>
11 
12 #include "ns3/core-module.h"
13 #include "ns3/network-module.h"
14 #include "ns3/internet-module.h"
15 #include "ns3/address.h"
16 #include "ns3/ipv4-address.h"
17 
18 
19 namespace ns3 {
20 
21 //struct containing the content of one onion layer
22 struct orLayer {
23  uint8_t * nextHopIP;
24  uint8_t * innerLayer;
25  uint16_t innerLayerLen;
26 };
27 
28 
29 class OnionRouting : public Object {
30  public:
31  static TypeId GetTypeId (void);
32  OnionRouting ();
33  OnionRouting (uint16_t keySize, uint16_t sealPadding, uint16_t addressSize);
34  virtual ~OnionRouting ();
35 
36  int BuildOnion(uint8_t * cipher, uint8_t ** route, uint16_t routeLen, uint8_t ** keys, uint8_t * content , uint16_t contentLen); //setup creation of the onion
37  int CreateOnion(uint8_t * cipher, uint8_t ** route, uint16_t index, uint16_t routeLen, uint8_t ** keys, uint8_t * content , uint16_t contentLen); //create the onion
38 
39  orLayer * PeelOnion(uint8_t * onion, uint16_t onionLen, uint8_t * pk, uint8_t * sk); //peel one layer of the onion
40 
41  virtual void EncryptLayer(uint8_t * ciphertext, uint8_t* message, int len, uint8_t * key) const = 0;
42  virtual void DecryptLayer(uint8_t * innerLayer, uint8_t* onion, uint16_t onionLen, uint8_t * pk, uint8_t * sk) const = 0;
43 
44  //Helper methods
45  uint16_t OnionLength(uint16_t routeLen, uint16_t contentLen);
46  void AddressToStream(uint8_t* ip);
47 
48 
49  //other useful variables
50  uint16_t m_sealPadding; //in libsodium is 48B, 32 public key, and 16B of zeros
51  uint16_t m_keySize; // key size in bytzes
52  uint16_t m_addressSize;
53 
54 
55  //VErbosity of onion
56  std::stringstream m_onionStream;
57  };
58 
59 
60 }
61 
62 #endif /* ONION_ROUTING_H */
63 
ns3::OnionRouting::GetTypeId
static TypeId GetTypeId(void)
Definition: onion-routing.cc:17
ns3::OnionRouting::m_keySize
uint16_t m_keySize
Definition: onion-routing.h:51
ns3::OnionRouting
Abstract class for creation and decryption of Onion messages.
Definition: onion-routing.h:29
ns3
Definition: sensornode-helper.cc:26
ns3::orLayer::nextHopIP
uint8_t * nextHopIP
ip address given in the serialized form
Definition: onion-routing.h:23
ns3::OnionRouting::OnionLength
uint16_t OnionLength(uint16_t routeLen, uint16_t contentLen)
Definition: onion-routing.cc:180
ns3::OnionRouting::PeelOnion
orLayer * PeelOnion(uint8_t *onion, uint16_t onionLen, uint8_t *pk, uint8_t *sk)
Definition: onion-routing.cc:158
ns3::OnionRouting::DecryptLayer
virtual void DecryptLayer(uint8_t *innerLayer, uint8_t *onion, uint16_t onionLen, uint8_t *pk, uint8_t *sk) const =0
ns3::OnionRouting::CreateOnion
int CreateOnion(uint8_t *cipher, uint8_t **route, uint16_t index, uint16_t routeLen, uint8_t **keys, uint8_t *content, uint16_t contentLen)
Definition: onion-routing.cc:103
ns3::OnionRouting::m_sealPadding
uint16_t m_sealPadding
size increase of the ciphertext in bytes, intorduced by the encryption method
Definition: onion-routing.h:50
ns3::OnionRouting::m_addressSize
uint16_t m_addressSize
size in bytes of the used address type (4-Ipv4, 16-Ipv6)
Definition: onion-routing.h:52
ns3::orLayer
structure holding details resulting from layer decryption of an onion message
Definition: onion-routing.h:22
ns3::orLayer::innerLayer
uint8_t * innerLayer
inner content of the onion message without the next hop address
Definition: onion-routing.h:24
ns3::OnionRouting::AddressToStream
void AddressToStream(uint8_t *ip)
Definition: onion-routing.cc:200
ns3::orLayer::innerLayerLen
uint16_t innerLayerLen
length of the inner content of the onion message
Definition: onion-routing.h:25
ns3::OnionRouting::~OnionRouting
virtual ~OnionRouting()
Definition: onion-routing.cc:50
ns3::OnionRouting::BuildOnion
int BuildOnion(uint8_t *cipher, uint8_t **route, uint16_t routeLen, uint8_t **keys, uint8_t *content, uint16_t contentLen)
Definition: onion-routing.cc:63
ns3::OnionRouting::EncryptLayer
virtual void EncryptLayer(uint8_t *ciphertext, uint8_t *message, int len, uint8_t *key) const =0
ns3::OnionRouting::m_onionStream
std::stringstream m_onionStream
stringstream used to LOG onion construction
Definition: onion-routing.h:56
ns3::OnionRouting::OnionRouting
OnionRouting()
Definition: onion-routing.cc:27