22 #ifndef ONION_ROUTING_H
23 #define ONION_ROUTING_H
25 #include "ns3/core-module.h"
26 #include "ns3/ipv4-l3-protocol.h"
27 #include "ns3/ipv6-l3-protocol.h"
90 class OnionRouting :
public Object
121 OnionRouting (uint16_t sealPadding,
const uint16_t protocolNumber);
143 void BuildOnion (uint8_t *cipher, uint8_t **route, uint8_t **keys, uint16_t routeLen);
166 void BuildOnion (uint8_t *cipher, uint8_t **route, uint8_t **keys, uint16_t routeLen,
167 uint8_t *endContent, uint16_t endContentLen);
189 void BuildOnion (uint8_t *cipher, uint8_t **route, uint8_t **keys, uint8_t **layerContent,
190 uint16_t layerContentLen, uint16_t routeLen);
212 void BuildOnion (uint8_t *cipher, uint8_t **route, uint8_t **keys, uint8_t **layerContent,
213 uint16_t layerContentLen, uint16_t routeLen, uint8_t *endContent,
214 uint16_t endContentLen);
232 void CreateOnion (uint8_t *cipher, uint8_t **route, uint8_t **keys, uint16_t index,
233 uint16_t routeLen, uint8_t **layerContent, uint16_t layerContentLen,
234 uint8_t *endContent, uint16_t endContentLen);
263 virtual void EncryptLayer (uint8_t *ciphertext, uint8_t *plaintext,
int len,
264 uint8_t *key)
const = 0;
278 virtual void DecryptLayer (uint8_t *plaintext, uint8_t *ciphertext, uint16_t len,
279 uint8_t *publicKey, uint8_t *secretKey)
const = 0;
293 uint16_t
OnionLength (uint16_t routeLen, uint16_t layerContentLen, uint16_t endContentLen);
377 virtual void EncryptLayer (uint8_t *ciphertext, uint8_t *message,
int len, uint8_t *key)
const;
378 virtual void DecryptLayer (uint8_t *innerLayer, uint8_t *onion, uint16_t onionLen, uint8_t *pk,