diff --git a/html/Utility_8hpp_source.html b/html/Utility_8hpp_source.html index ae5c1a5..2ae9107 100644 --- a/html/Utility_8hpp_source.html +++ b/html/Utility_8hpp_source.html @@ -77,7 +77,7 @@
- + @@ -125,7 +125,7 @@ - +-Macros | |
-#define | ECDSA_P256_DER_LENGTH_BYTES 72 |
Message signing and cryptomaterial management functions.
diff --git a/html/V2VSecurity_8hpp_source.html b/html/V2VSecurity_8hpp_source.html index 449c2d3..5b23fc3 100644 --- a/html/V2VSecurity_8hpp_source.html +++ b/html/V2VSecurity_8hpp_source.html @@ -73,44 +73,42 @@ - - - - - + + + + + - + - - - - - - - - - - -
+ v2verifier
+
+ |
+
Vehicle::Vehicle | +Vehicle::Vehicle | ( | Vehicle & | v | ) | @@ -139,7 +139,7 @@
Vehicle::Vehicle | +Vehicle::Vehicle | ( | double | latitude, | @@ -203,7 +203,7 @@
Vehicle::Vehicle | +Vehicle::Vehicle | ( | double | latitude, | diff --git a/html/classVehicle_1_1BSM.html b/html/classVehicle_1_1BSM.html new file mode 100644 index 0000000..53812e1 --- /dev/null +++ b/html/classVehicle_1_1BSM.html @@ -0,0 +1,81 @@ + + + + + + + +
+ v2verifier
+
+ |
+
+ v2verifier
+
+ |
+
This is the complete list of members for Vehicle.Vehicle, including all inherited members.
+__init__(self, listen_port, transmit_port, str trace_file) (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
client_socket (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
elevation (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
generate_bsm(self) (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
GUI_PORT (defined in Vehicle.Vehicle) | Vehicle.Vehicle | static |
heading (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
id (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
id_incrementer (defined in Vehicle.Vehicle) | Vehicle.Vehicle | static |
move(self, int update_interval) (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
pos_tracker (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
position (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
recv_port (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
send_port (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
server_socket (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
speed (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
start_listener(self) (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
start_transmitter(self) (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
test_mode (defined in Vehicle.Vehicle) | Vehicle.Vehicle | static |
trace (defined in Vehicle.Vehicle) | Vehicle.Vehicle | |
update_position(self, float elapsed_time) (defined in Vehicle.Vehicle) | Vehicle.Vehicle |
+ v2verifier
+
+ |
+
+Public Member Functions | |
+def | __init__ (self, listen_port, transmit_port, str trace_file) |
+None | move (self, int update_interval) |
+BSM | generate_bsm (self) |
+def | start_listener (self) |
+def | start_transmitter (self) |
+def | update_position (self, float elapsed_time) |
+Public Attributes | |
+ | id |
+ | elevation |
+ | speed |
+ | heading |
+ | send_port |
+ | recv_port |
+ | trace |
+ | pos_tracker |
+ | position |
+ | server_socket |
+ | client_socket |
+Static Public Attributes | |
+int | id_incrementer = 0 |
+bool | test_mode = False |
+int | GUI_PORT = 9999 |
__init__(self) | gui.GUI | |
clear_vehicle_markers(self) (defined in gui.GUI) | gui.GUI | |
render_vehicle_markers(self) (defined in gui.GUI) | gui.GUI | |
recv_port (defined in gui.GUI) | gui.GUI | |
render_vehicle_markers(self) (defined in gui.GUI) | gui.GUI | |
server_socket (defined in gui.GUI) | gui.GUI | |
set_up_vehicle_markers(self) (defined in gui.GUI) | gui.GUI | |
show_vehicles(self) (defined in gui.GUI) | gui.GUI | |
update_vehicle(self, dict vehicle_info) | gui.GUI | |
vehicle_is_known(self, int id) (defined in gui.GUI) | gui.GUI | |
vehicles (defined in gui.GUI) | gui.GUI | |
start_listener(self) (defined in gui.GUI) | gui.GUI | |
update_vehicle(self, dict vehicle_info) | gui.GUI | |
vehicle_is_known(self, int id) (defined in gui.GUI) | gui.GUI | |
vehicles (defined in gui.GUI) | gui.GUI |
Public Attributes | |
vehicles | |
+ | recv_port |
+ | server_socket |
The GUI class to manage the interface.
@@ -143,7 +152,7 @@
+ v2verifier
+
+ |
+
+ v2verifier
+
+ |
+
▼ logger | |
Log.h | |
▼ open-street-map-gui | |
gui.py | Python program to launch and run the OSM-based GUI for V2Verifier |
▼ v2verifier-app | |
▼ include | |
V2VSecurity.hpp | Message signing and cryptomaterial management functions |
Vehicle.hpp | Class to represent a vehicle in the testbed environment |
▼ src | |
main.cpp | Main execution file for the testbed |
V2VSecurity.cpp | Message signing and cryptomaterial management functions |
Vehicle.cpp | Implementation of Vehicle class |
▼ v2xmessage | |
▼ include | |
EccP256CurvePoint.hpp | Implementation of the EccP256CurvePoint ASN.1 defined in IEEE 1609.2-2022 |
EcdsaP256Signature.hpp | Implementation of the EcdsaP256Signature ASN.1 structure defined in IEEE 1609.2-2022 |
HeaderInfo.hpp | Implementation of the HeaderInfo ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2.hpp | |
IEEE1609Dot2Content.hpp | Implementation of the Ieee1609Dot2Content ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2Data.hpp | Implementation of the Ieee1609Dot2Data ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2DataTypes.hpp | Namespace definitions for ASN.1 types defined in IEEE 1609.2-2022 and reused throughout other data structures |
J2735BSM.hpp | |
Signature.hpp | Implementation of the Signature ASN.1 structure defined in IEEE 1609.2-2022 |
SignedData.hpp | Implementation of the SignedData ASN.1 structure defined in IEEE1609.2-2022 |
SignedDataPayload.hpp | Implementation of the SignedDataPayload ASN.1 structure defined in IEEE 1609.2-2022 |
SignerIdentifier.hpp | Implementation of the SignerIdentifier ASN.1 structure defined in IEEE 1609.2-2022 |
ToBeSignedData.hpp | Implementation of the ToBeSignedData ASN.1 structure defined in IEEE 1609.2-2022 |
UnsecuredData.hpp | Implementation of the UnsecuredData ASN.1 structure defined in IEEE1609.2-2022 |
Utility.hpp | Defines the Utility namespace to collect these functions in one spot |
V2XMessage.hpp | Abstract parent class for V2X message classes |
▼ osm-gui | |
▼ open-street-map-gui | |
gui.py | Python program to launch and run the OSM-based GUI for V2Verifier |
▼ v2verifier-app | |
▼ include | |
V2VSecurity.hpp | Message signing and cryptomaterial management functions |
Vehicle.hpp | Class to represent a vehicle in the testbed environment |
▼ src | |
main.cpp | Main execution file for the testbed |
V2VSecurity.cpp | Message signing and cryptomaterial management functions |
Vehicle.cpp | Implementation of Vehicle class |
▼ v2xmessage | |
▼ include | |
EccP256CurvePoint.hpp | Implementation of the EccP256CurvePoint ASN.1 defined in IEEE 1609.2-2022 |
EcdsaP256Signature.hpp | Implementation of the EcdsaP256Signature ASN.1 structure defined in IEEE 1609.2-2022 |
HeaderInfo.hpp | Implementation of the HeaderInfo ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2.hpp | |
IEEE1609Dot2Content.hpp | Implementation of the Ieee1609Dot2Content ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2Data.hpp | Implementation of the Ieee1609Dot2Data ASN.1 structure defined in IEEE 1609.2-2022 |
IEEE1609Dot2DataTypes.hpp | Namespace definitions for ASN.1 types defined in IEEE 1609.2-2022 and reused throughout other data structures |
J2735BSM.hpp | |
Signature.hpp | Implementation of the Signature ASN.1 structure defined in IEEE 1609.2-2022 |
SignedData.hpp | Implementation of the SignedData ASN.1 structure defined in IEEE1609.2-2022 |
SignedDataPayload.hpp | Implementation of the SignedDataPayload ASN.1 structure defined in IEEE 1609.2-2022 |
SignerIdentifier.hpp | Implementation of the SignerIdentifier ASN.1 structure defined in IEEE 1609.2-2022 |
ToBeSignedData.hpp | Implementation of the ToBeSignedData ASN.1 structure defined in IEEE 1609.2-2022 |
UnsecuredData.hpp | Implementation of the UnsecuredData ASN.1 structure defined in IEEE1609.2-2022 |
Utility.hpp | Defines the Utility namespace to collect these functions in one spot |
V2XMessage.hpp | Abstract parent class for V2X message classes |
Please note that V2Verifier is currently undergoing a major redesign. Cloning the master
branch will likely not work - the instructions below are accurate for the latest release, which can be downloaded from the sidebar.
****Important** - this version of V2Verifier is a preliminary release of V2Verifier 3.0. As we await bug fixes in third-party open-source projects that V2Verifier relies on for C-V2X sidelink communication, this version of V2Verifier temporarily does not support C-V2X. We thank you for your patience as we work towards resolving this issue.**
-V2Verifer is an open-source testbed for experimental evaluation of security in vehicle-to-vehicle (V2V) communication. V2Verifier supports a broad range of experimentation with V2V technologies and security protocols using a combination of software-defined radios (e.g., USRPs) and commercial V2V equipment. Among other features, V2Verifier includes implementations of:
Check out our YouTube page for some of our past projects and publications that made use of V2Verifier!
-V2Verifier is developed and maintained in the Wireless and IoT Security and Privacy (WISP) lab at Rochester Institute of Technology's Global Cybersecurity Institute.
-If you use V2Verifier or any of its components in your work, please cite our paper from IEEE ICC 2021. Additional publications involving V2Verifier are listed on the same page.
-V2Verifier is designed for over-the-air experiments with software-defined radios (SDRs). For C-V2X, you must use SDRs with GPSDO modules installed. We recommend the USRP B210 and TCXO GPSDO module from Ettus Research (we have not tested and do not officially support the use of other SDRs for C-V2X). For DSRC, you may use USRP B210s (GPSDO not required for DSRC) or, preferably, USRP N210s (also available from Ettus Research). If you are using N210s, a 6 GHz daughterboard (e.g., UBX 40) is required for each N210 device.
-If you do not have access to SDRs, V2Verifier can also be run as a pure simulation environment that only requires a modern PC to run. With or without SDRs, we strongly discourage the use of virtual machines as this may incur testbed-breaking latency. Ubuntu 20.04 is currently the only supported operating system. Windows operating systems are not supported.
-Installation consists of two parts.
-Follow the instructions for DSRC, C-V2X, or both to install the software needed for your PC to communicate with your software-defined radios and send V2V messages over the air.
-V2Verifier's implementation of C-V2X sidelink communication is based on the open-source srsRAN project.
-C-V2X support has been temporarily removed as we await bug fixes in third-party code that V2Verifier relies on. Thank you for your patience as we work to restore this functionality as soon as possible.
-V2Verifier's implementation of DSRC is based on the open-source GNURadio and WiME Project implementation of IEEE 802.11p.
-GNURadio version 3.10 is required to run DSRC experiments in V2Verifier. Additionally, GNURadio modules from the WiME project are required. Install GNURadio as well as the required WiME modules with the following commands. If you encounter any errors, please visit the GNURadio project on GitHub for their most recent installation instructions and troubleshooting guide.
pip install pybombs -pybombs auto-config -pybombs recipes add-defaults -pybombs prefix init ~/gr-3.10 -R gnuradio-default -
To finish configuring the environment and ensure installation was successful, execute the following commands to run GNURadio Companion.
source ~/gr-3.10/setup_env.sh -gnuradio-companion -
Now, install the WiME project code. You will need to install from source, as the pybombs
installation method (e.g., pybombs install gr-foo
) will likely fail due to Swig issues in GNURadio 3.10.
cd ~ -git clone https://github.com/bastibl/gr-foo.git -cd gr-foo -git checkout maint-3.10 -mkdir build && cd build -cmake ../ -make -sudo make install -sudo ldconfig - -cd ~ -git clone https://github.com/bastibl/gr-ieee802-11.git -cd gr-ieee802-11 -git checkout maint-3.10 -mkdir build && cd build -cmake ../ -make -sudo make install -sudo ldconfig -
You can confirm everything installed correctly by launching GNURadio Companion and opening the flowgraph file at ~/gr-ieee802-11/examples/wifi-loopback.grc
. If you encounter any errors, some of the above commands did not work correctly. Do not proceed until you have fixed any issues running the example flowgraph.
Now that you have installed the communication software, you can install V2Verifier. Begin by installing several dependencies:
sudo apt install -y git cmake libuhd-dev uhd-host swig libgmp3-dev python3-pip python3-tk python3-pil -python3-pil.imagetk -sudo apt install -y libssl-dev -
If you have not already cloned the V2Verifier repository, do so with the commands
cd ~ -git clone https://github.com/twardokus/v2verifier.git -
Move into the V2Verifier directory and build the project using the standard CMake build process:
cd v2verifier -mkdir build -cd build -cmake ../ -make -
If you have missed any dependencies, CMake will warn you at this point. Once V2Verifier is built, proceed to the next section for instructions on how to run experiments in V2Verifier.
-Finally, download the ZIP file for the latest stable release of V2Verifier, extract the project, and you are ready to start using V2Verifier!
-Before running V2Verifier, connect one USRP (with appropriate antennas) to each Ubuntu PC. Assuming you have two PCs with one USRP each, designate one USRP as the "receiver" and the other as the "transmitter." In this configuration, the receiver will show you how a single vehicle responds to V2V transmissions (e.g., using a GUI) while the transmitter can generate V2V traffic for up to ten vehicles. You can specify the number of vehicles by changing the relevant parameter in config.json
.
On each PC, begin by launching the C-V2X or DSRC code (follow the respective instructions below) to run in the background and manage your SDR transmitting or receiving. Then, on each PC, cd
into the build
directory. For the receiver, run the command
./src/v2verifier dsrc receiver [--test] [--gui] -
For the transmitter, run the command
./src/v2verifier dsrc transmitter [--test] -
See the command-line help (./v2verifier -h
) for optional arguments. You should not use the --test
option unless you are not using SDRs (this option allows you to run transmitter and receiver on a single PC with communication via network socket). Use --gui
on the receiver if you want to use a graphical interface on the receiver (see additional instructions for GUIs below).
Note C-V2X communication requires equipment capable of both cellular communication and GPS clock synchronization (e.g., USRP B210 w/ GPSDO or Cohda Wireless MK6c) as well as access to either an outdoor testing environment or synthesized GPS source.
-C-V2X support has been temporarily removed as we await bug fixes in third-party code that V2Verifier relies on. Thank you for your patience as we work to restore this functionality as soon as possible.
-On both PCs, launch GNURadio with pybombs run gnuradio-companion
. On one PC, open the wifi_tx.grc
file from the v2verifier/grc
project subdirectory. On the other PC, open the wifi_rx.grc
file from the same subdirectory. Click the green play button at the top of GNURadio to launch the flowgraphs on both PCs. You will need to configure the communication options (e.g., bandwith, frequency) to suit your needs. The default is a 10 MHz channel on 5.89 GHz.
V2Verifier currently offers two graphical interfaces. The first is a web-based interface that interacts with Google Maps. To use this GUI, you will need to purchase a Google Maps API key through Google Cloud services and create config.js
file in the web
directory of V2Verifier (some familiarity with JavaScript is helpful). Please contact us for assistance if you want to use this GUI.
Our second interface is based on TkGUI. To use this option, open a separate terminal window before running any v2verifier
commands above and run python3 tkgui_execute.py
to launch the TkGUI interface as a separate process.
We encourage you to open a GitHub issue with any questions or problems using either graphical interface.
+WebGL front-end GUI for V2Verifier testbed. This interface shows real-time vehicle location, motion, and direction of travel (as shown below) rendered on a 3D map built from OpenStreetMap data.
+ +You will need a mapbox key in order to render the GUI. Obtain a key (available for free) from mapbox, and store it in a file called key.js
in the osm-gui/open-street-map-gui/webapp/scripts
directory.
Open a terminal and cd
into osm-gui
directory. Create a new Python virtual environment (e.g., with virtualenv
) and activate it.
Install dependencies with
pip install -r requirements.txt +
To run the GUI itself, open a separate terminal and cd
into the open-street-map-gui
subdirectory. Launce the GUI (it will open in Google Chrome, if installed) with
python gui.py +
In the original terminal, run the sample program that renders synthetic vehicle data on the GUI with
python main.py +
This is an in-progress and heavily under development component of the larger V2Verifier project. Currently, our GUI is built largely in Javascript, with data from OpenStreeMaps rendered using WebGL and the mapbox toolkit.
Utility functions to be reused throughout the project. More...
+Classes | |
class | Coordinate |
Functions | |
+list[Coordinate] | generate_coordinate_trace (list[Coordinate] coordinates) |
+list[Coordinate] | interpolate (Coordinate coord1, Coordinate coord2) |
static std::vector< std::byte > | vectorFromUint64 (const uint64_t &val) |
Get the COER encoding for a given uint64_t. More... | |
CIEEE1609Dot2Data | |
NIEEE1609Dot2DataTypes | Data types defined by IEEE 1609.2-2022 that are reused throughout the project |
NIEEE1609Dot2Generation | |
▼NLogger | |
CLog | |
NUtility | Utility functions to be reused throughout the project |
Ninterpolation | |
▼NLogger | |
CLog | |
Nmain | |
▼NUtility | Utility functions to be reused throughout the project |
CCoordinate | |
▼NVehicle | |
CBSM | |
CVehicle |