A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
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
src
onion-routing
model
bckp
onion-routing.h
Generated on Mon Feb 7 2022 13:31:58 for ns-3 by
1.8.17