From cac6d9890890777825784a21767b4c331c769341 Mon Sep 17 00:00:00 2001 From: Florian Hoss Date: Fri, 29 Jul 2022 10:15:48 +0200 Subject: [PATCH] Cleanup --- .gitmodules | 3 - ESPFirewall/.gitignore | 6 - ESPFirewall/README.md | 9 - ESPFirewall/include/README | 39 - ESPFirewall/include/theCerts-example.h | 59 - ESPFirewall/include/theSecrets-example.h | 9 - ESPFirewall/lib/Firewall/docs/.gitignore | 368 ----- ESPFirewall/lib/Firewall/docs/api/api.tex | 170 -- ESPFirewall/lib/Firewall/docs/bib/book.bib | 9 - ESPFirewall/lib/Firewall/docs/bib/online.bib | 55 - .../lib/Firewall/docs/firewall/firewall.tex | 265 ---- .../Firewall/docs/firststeps/firststeps.tex | 57 - .../lib/Firewall/docs/images/chart.png | Bin 88129 -> 0 bytes .../lib/Firewall/docs/images/hs-esslingen.eps | 1400 ----------------- ESPFirewall/lib/Firewall/docs/images/pio.png | Bin 48902 -> 0 bytes ESPFirewall/lib/Firewall/docs/images/ufw.png | Bin 28900 -> 0 bytes ESPFirewall/lib/Firewall/docs/main.tex | 131 -- .../lib/Firewall/docs/storage/storage.tex | 32 - .../lib/Firewall/docs/titlepage/titlepage.tex | 30 - ESPFirewall/lib/Firewall/src/API.cpp | 276 ---- ESPFirewall/lib/Firewall/src/API.hpp | 65 - ESPFirewall/lib/Firewall/src/Firewall.cpp | 133 -- ESPFirewall/lib/Firewall/src/Firewall.hpp | 31 - ESPFirewall/lib/Firewall/src/Storage.cpp | 124 -- ESPFirewall/lib/Firewall/src/Storage.hpp | 41 - ESPFirewall/lib/Firewall/src/Utils.cpp | 62 - ESPFirewall/lib/Firewall/src/Utils.hpp | 84 - ESPFirewall/lib/README | 46 - ESPFirewall/platformio.ini | 24 - ESPFirewall/src/main.cpp | 71 - ESPFirewall/test/README | 11 - tester.py | 54 - 32 files changed, 3664 deletions(-) delete mode 100644 .gitmodules delete mode 100644 ESPFirewall/.gitignore delete mode 100644 ESPFirewall/README.md delete mode 100644 ESPFirewall/include/README delete mode 100644 ESPFirewall/include/theCerts-example.h delete mode 100644 ESPFirewall/include/theSecrets-example.h delete mode 100644 ESPFirewall/lib/Firewall/docs/.gitignore delete mode 100644 ESPFirewall/lib/Firewall/docs/api/api.tex delete mode 100644 ESPFirewall/lib/Firewall/docs/bib/book.bib delete mode 100644 ESPFirewall/lib/Firewall/docs/bib/online.bib delete mode 100644 ESPFirewall/lib/Firewall/docs/firewall/firewall.tex delete mode 100644 ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex delete mode 100644 ESPFirewall/lib/Firewall/docs/images/chart.png delete mode 100644 ESPFirewall/lib/Firewall/docs/images/hs-esslingen.eps delete mode 100644 ESPFirewall/lib/Firewall/docs/images/pio.png delete mode 100644 ESPFirewall/lib/Firewall/docs/images/ufw.png delete mode 100644 ESPFirewall/lib/Firewall/docs/main.tex delete mode 100644 ESPFirewall/lib/Firewall/docs/storage/storage.tex delete mode 100644 ESPFirewall/lib/Firewall/docs/titlepage/titlepage.tex delete mode 100644 ESPFirewall/lib/Firewall/src/API.cpp delete mode 100644 ESPFirewall/lib/Firewall/src/API.hpp delete mode 100644 ESPFirewall/lib/Firewall/src/Firewall.cpp delete mode 100644 ESPFirewall/lib/Firewall/src/Firewall.hpp delete mode 100644 ESPFirewall/lib/Firewall/src/Storage.cpp delete mode 100644 ESPFirewall/lib/Firewall/src/Storage.hpp delete mode 100644 ESPFirewall/lib/Firewall/src/Utils.cpp delete mode 100644 ESPFirewall/lib/Firewall/src/Utils.hpp delete mode 100644 ESPFirewall/lib/README delete mode 100644 ESPFirewall/platformio.ini delete mode 100644 ESPFirewall/src/main.cpp delete mode 100644 ESPFirewall/test/README delete mode 100644 tester.py diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 7692a74..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "ESP32Firewall/components/arduino"] - path = ESP32Firewall/components/arduino - url = https://github.com/espressif/arduino-esp32.git diff --git a/ESPFirewall/.gitignore b/ESPFirewall/.gitignore deleted file mode 100644 index 5571465..0000000 --- a/ESPFirewall/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.pio -.vscode - -lib/esp32_https_server/ -include/theSecrets.h -include/theCerts.h \ No newline at end of file diff --git a/ESPFirewall/README.md b/ESPFirewall/README.md deleted file mode 100644 index f09c2b4..0000000 --- a/ESPFirewall/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# IoT Firewall on ESP8266/ESP32 - -Student: Florian Hoss - -[flhoit00@hs-esslingen.de](mailto:flhoit00@hs-esslingen.de) - -Professor: Prof. Dr. rer. nat. Tobias Heer - -[tobias.heer@hs-esslingen.de](mailto:tobias.heer@hs-esslingen.de) diff --git a/ESPFirewall/include/README b/ESPFirewall/include/README deleted file mode 100644 index 194dcd4..0000000 --- a/ESPFirewall/include/README +++ /dev/null @@ -1,39 +0,0 @@ - -This directory is intended for project header files. - -A header file is a file containing C declarations and macro definitions -to be shared between several project source files. You request the use of a -header file in your project source file (C, C++, etc) located in `src` folder -by including it, with the C preprocessing directive `#include'. - -```src/main.c - -#include "header.h" - -int main (void) -{ - ... -} -``` - -Including a header file produces the same results as copying the header file -into each source file that needs it. Such copying would be time-consuming -and error-prone. With a header file, the related declarations appear -in only one place. If they need to be changed, they can be changed in one -place, and programs that include the header file will automatically use the -new version when next recompiled. The header file eliminates the labor of -finding and changing all the copies as well as the risk that a failure to -find one copy will result in inconsistencies within a program. - -In C, the usual convention is to give header files names that end with `.h'. -It is most portable to use only letters, digits, dashes, and underscores in -header file names, and at most one dot. - -Read more about using header files in official GCC documentation: - -* Include Syntax -* Include Operation -* Once-Only Headers -* Computed Includes - -https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/ESPFirewall/include/theCerts-example.h b/ESPFirewall/include/theCerts-example.h deleted file mode 100644 index 5523ed9..0000000 --- a/ESPFirewall/include/theCerts-example.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef THECERTS_H -#define THECERTS_H - -#include "pgmspace.h" - -const char cert[] PROGMEM = R"EOF( ------BEGIN CERTIFICATE----- -MIIDSzCCAjMCCQD2ahcfZAwXxDANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMC -VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU9yYW5nZSBDb3VudHkx -EDAOBgNVBAoMB1ByaXZhZG8xGjAYBgNVBAMMEXNlcnZlci56bGFiZWwuY29tMR8w -HQYJKoZIhvcNAQkBFhBlYXJsZUB6bGFiZWwuY29tMB4XDTE4MDMwNjA1NDg0NFoX -DTE5MDMwNjA1NDg0NFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3Rh -dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAPVKBwbZ+KDSl40YCDkP6y8Sv4iNGvEOZg8Y -X7sGvf/xZH7UiCBWPFIRpNmDSaZ3yjsmFqm6sLiYSGSdrBCFqdt9NTp2r7hga6Sj -oASSZY4B9pf+GblDy5m10KDx90BFKXdPMCLT+o76Nx9PpCvw13A848wHNG3bpBgI -t+w/vJCX3bkRn8yEYAU6GdMbYe7v446hX3kY5UmgeJFr9xz1kq6AzYrMt/UHhNzO -S+QckJaY0OGWvmTNspY3xCbbFtIDkCdBS8CZAw+itnofvnWWKQEXlt6otPh5njwy -+O1t/Q+Z7OMDYQaH02IQx3188/kW3FzOY32knER1uzjmRO+jhA8CAwEAATANBgkq -hkiG9w0BAQsFAAOCAQEAnDrROGRETB0woIcI1+acY1yRq4yAcH2/hdq2MoM+DCyM -E8CJaOznGR9ND0ImWpTZqomHOUkOBpvu7u315blQZcLbL1LfHJGRTCHVhvVrcyEb -fWTnRtAQdlirUm/obwXIitoz64VSbIVzcqqfg9C6ZREB9JbEX98/9Wp2gVY+31oC -JfUvYadSYxh3nblvA4OL+iEZiW8NE3hbW6WPXxvS7Euge0uWMPc4uEcnsE0ZVG3m -+TGimzSdeWDvGBRWZHXczC2zD4aoE5vrl+GD2i++c6yjL/otHfYyUpzUfbI2hMAA -5tAF1D5vAAwA8nfPysumlLsIjohJZo4lgnhB++AlOg== ------END CERTIFICATE----- -)EOF"; - -const char key[] PROGMEM = R"EOF( ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA9UoHBtn4oNKXjRgIOQ/rLxK/iI0a8Q5mDxhfuwa9//FkftSI -IFY8UhGk2YNJpnfKOyYWqbqwuJhIZJ2sEIWp2301OnavuGBrpKOgBJJljgH2l/4Z -uUPLmbXQoPH3QEUpd08wItP6jvo3H0+kK/DXcDzjzAc0bdukGAi37D+8kJfduRGf -zIRgBToZ0xth7u/jjqFfeRjlSaB4kWv3HPWSroDNisy39QeE3M5L5ByQlpjQ4Za+ -ZM2yljfEJtsW0gOQJ0FLwJkDD6K2eh++dZYpAReW3qi0+HmePDL47W39D5ns4wNh -BofTYhDHfXzz+RbcXM5jfaScRHW7OOZE76OEDwIDAQABAoIBAQDKov5NFbNFQNR8 -djcM1O7Is6dRaqiwLeH4ZH1pZ3d9QnFwKanPdQ5eCj9yhfhJMrr5xEyCqT0nMn7T -yEIGYDXjontfsf8WxWkH2TjvrfWBrHOIOx4LJEvFzyLsYxiMmtZXvy6YByD+Dw2M -q2GH/24rRdI2klkozIOyazluTXU8yOsSGxHr/aOa9/sZISgLmaGOOuKI/3Zqjdhr -eHeSqoQFt3xXa8jw01YubQUDw/4cv9rk2ytTdAoQUimiKtgtjsggpP1LTq4xcuqN -d4jWhTcnorWpbD2cVLxrEbnSR3VuBCJEZv5axg5ZPxLEnlcId8vMtvTRb5nzzszn -geYUWDPhAoGBAPyKVNqqwQl44oIeiuRM2FYenMt4voVaz3ExJX2JysrG0jtCPv+Y -84R6Cv3nfITz3EZDWp5sW3OwoGr77lF7Tv9tD6BptEmgBeuca3SHIdhG2MR+tLyx -/tkIAarxQcTGsZaSqra3gXOJCMz9h2P5dxpdU+0yeMmOEnAqgQ8qtNBfAoGBAPim -RAtnrd0WSlCgqVGYFCvDh1kD5QTNbZc+1PcBHbVV45EmJ2fLXnlDeplIZJdYxmzu -DMOxZBYgfeLY9exje00eZJNSj/csjJQqiRftrbvYY7m5njX1kM5K8x4HlynQTDkg -rtKO0YZJxxmjRTbFGMegh1SLlFLRIMtehNhOgipRAoGBAPnEEpJGCS9GGLfaX0HW -YqwiEK8Il12q57mqgsq7ag7NPwWOymHesxHV5mMh/Dw+NyBi4xAGWRh9mtrUmeqK -iyICik773Gxo0RIqnPgd4jJWN3N3YWeynzulOIkJnSNx5BforOCTc3uCD2s2YB5X -jx1LKoNQxLeLRN8cmpIWicf/AoGBANjRSsZTKwV9WWIDJoHyxav/vPb+8WYFp8lZ -zaRxQbGM6nn4NiZI7OF62N3uhWB/1c7IqTK/bVHqFTuJCrCNcsgld3gLZ2QWYaMV -kCPgaj1BjHw4AmB0+EcajfKilcqtSroJ6MfMJ6IclVOizkjbByeTsE4lxDmPCDSt -/9MKanBxAoGAY9xo741Pn9WUxDyRplww606ccdNf/ksHWNc/Y2B5SPwxxSnIq8nO -j01SmsCUYVFAgZVOTiiycakjYLzxlc6p8BxSVqy6LlJqn95N8OXoQ+bkwUux/ekg -gz5JWYhbD6c38khSzJb0pNXCo3EuYAVa36kDM96k1BtWuhRS10Q1VXk= ------END RSA PRIVATE KEY----- -)EOF"; - -#endif diff --git a/ESPFirewall/include/theSecrets-example.h b/ESPFirewall/include/theSecrets-example.h deleted file mode 100644 index 9ae7cdd..0000000 --- a/ESPFirewall/include/theSecrets-example.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef THESECRETS_H -#define THESECRETS_H - -const char *ssid = "Wifi"; -const char *psk = "password"; -const char *username = "username"; -const char *password = "password"; - -#endif diff --git a/ESPFirewall/lib/Firewall/docs/.gitignore b/ESPFirewall/lib/Firewall/docs/.gitignore deleted file mode 100644 index fcbc1d8..0000000 --- a/ESPFirewall/lib/Firewall/docs/.gitignore +++ /dev/null @@ -1,368 +0,0 @@ -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -*.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs -*.lzo -*.lzs -*.slg -*.slo -*.sls - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplot -*.gnuplot -*.table - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.glog -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files -# *.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# newpax -*.newpax - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# svg -svg-inkscape/ - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# titletoc -*.ptc - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices and outlines -*.xyc -*.xyd - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# gummi -.*.swp - -# KBibTeX -*~[0-9]* - -# TeXnicCenter -*.tps - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -# Makeindex log files -*.lpz - -# xwatermark package -*.xwm - -# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib -# option is specified. Footnotes are the stored in a file with suffix Notes.bib. -# Uncomment the next line to have this generated file ignored. -#*Notes.bib - -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* diff --git a/ESPFirewall/lib/Firewall/docs/api/api.tex b/ESPFirewall/lib/Firewall/docs/api/api.tex deleted file mode 100644 index 63b2b4a..0000000 --- a/ESPFirewall/lib/Firewall/docs/api/api.tex +++ /dev/null @@ -1,170 +0,0 @@ -\section{API} - -\subsection{REST Endpoints} \label{api} - -Managing the firewall rules can be done over a REST API\footnote{\href{https://www.ibm.com/cloud/learn/rest-apis}{What is a REST API}}. Available routes are following and can be retrieved by visiting the API (e.g. \verb|https://10.93.0.224:8080/api|) of the device. - -\lstset{style=json} -\begin{lstlisting} -[ - { - "endpoint": "http://10.93.0.246:8080/api/firewall/rules", - "description": "Get all Firewall Rules", - "method": "GET" - }, - { - "endpoint": "http://10.93.0.246:8080/api/firewall/rules/", - "description": "Get Firewall Rule by key", - "method": "GET" - }, - { - "endpoint": "http://10.93.0.246:8080/api/firewall/rules", - "description": "Create Firewall Rule", - "method": "POST" - }, - { - "endpoint": "http://10.93.0.246:8080/api/firewall/rules/", - "description": "Update Firewall Rule by key", - "method": "PUT" - }, - { - "endpoint": "http://10.93.0.246:8080/api/firewall/rules/", - "description": "Delete Firewall Rule by key", - "method": "DELETE" - } -] -\end{lstlisting} - -Available protocols are \verb|TCP, UDP & ALL| - -Available targets are \verb|ACCEPT & DROP| - -\newpage - -\subsection{Get rules} - -\begin{verbatim} -curl -u username:password http://10.93.0.246:8080/api/firewall/rules -\end{verbatim} - -\lstset{style=json} -\begin{lstlisting} -// HTTP/1.1 200 OK -// Content-Type: application/json; charset=utf-8 -// Content-Length: 109 -[ - { - "key": "1", - "ip": "10.93.0.211", - "port_from": "8080", - "port_to": "8080", - "protocol": "TCP", - "target": "ACCEPT" - } -] -\end{lstlisting} - -\subsection{Get rule} - -\begin{verbatim} -curl -u username:password http://10.93.0.246:8080/api/firewall/rules/1 -\end{verbatim} - -\lstset{style=json} -\begin{lstlisting} -// HTTP/1.1 200 OK -// Content-Type: application/json; charset=utf-8 -// Content-Length: 107 -{ - "key": "1", - "ip": "10.93.0.211", - "port_from": "8080", - "port_to": "8080", - "protocol": "TCP", - "target": "ACCEPT" -} -\end{lstlisting} - -\subsection{Create rule} - -\begin{verbatim} -curl -X POST -u username:password \ -http://10.93.0.246:8080/api/firewall/rules - ?ip=10.93.0.200&port_from=10&port_to=50&protocol=UDP&target=ACCEPT -\end{verbatim} - -\lstset{style=json} -\begin{lstlisting} -// HTTP/1.1 201 Created -// Content-Type: application/json; charset=utf-8 -// Content-Length: 104 -{ - "key": "2", - "ip": "10.93.0.200", - "port_from": "10", - "port_to": "50", - "protocol": "UDP", - "target": "ACCEPT" -} -\end{lstlisting} - -\subsection{Update rule} - -\begin{verbatim} -curl -X PUT -u username:password \ -http://10.93.0.246:8080/api/firewall/rules/2 - ?ip=10.93.0.100&port_from=20&port_to=100&protocol=ALL&target=DROP -\end{verbatim} - -\lstset{style=json} -\begin{lstlisting} -// HTTP/1.1 200 OK -// Content-Type: application/json; charset=utf-8 -// Content-Length: 103 -{ - "key": "2", - "ip": "10.93.0.100", - "port_from": "20", - "port_to": "100", - "protocol": "ALL", - "target": "DROP" -} -\end{lstlisting} - -\subsection{Delete rule} - -\begin{verbatim} -curl -X DELETE -u username:password \ -http://10.93.0.246:8080/api/firewall/rules/2 -\end{verbatim} - -\lstset{style=json} -\begin{lstlisting} -// HTTP/1.1 200 OK -// Content-Type: application/json; charset=utf-8 -// Content-Length: 36 -{ - "message": "firewall rule deleted" -} -\end{lstlisting} - -\subsection{HTTPS} \label{https} - -To connect to the ESP over HTTPS (Hypertext Transfer Protocol Secure) the Webserver can be setup to use certificates that need to be included in the constructor as seen in section \ref{authentication}. This only works for the esp8266 with the Arduino library but can be added as an external library (\verb|esp32_https_server_combat|\footnote{\href{https://github.com/fhessel/esp32_https_server_compat}{https://github.com/fhessel/esp32\_https\_server\_compat}}) for the esp32 if needed. - -\newpage - -\subsection{Authentication} \label{authentication} - -To authenticate the API uses basic auth. Communication should therefore be encrypted to protect the process from eavesdropping. Another solution would be to setup the rules in a private network and setup the esp without the API enabled. Therefore the rules will still apply, but cannot be changed over the network. Example certificates for the esp8266 are included in the repository and encryption can be added to the esp32 as described in section \ref{https}. Setting the username and password is done via the constructor of the api class. To create the api class to setup the firewall rules a firewall class instance is needed. - -\lstset{style=c++} -\begin{lstlisting} - #include "Firewall.hpp" - #include "API.hpp" - - firewall = new fw::Firewall(); - firewallApi = new fw::API(firewall, cert, key, username, password); -\end{lstlisting} - -After this all endpoints shown in section \ref{api} will be protected. \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/docs/bib/book.bib b/ESPFirewall/lib/Firewall/docs/bib/book.bib deleted file mode 100644 index c9cf6ac..0000000 --- a/ESPFirewall/lib/Firewall/docs/bib/book.bib +++ /dev/null @@ -1,9 +0,0 @@ -@book{example-book, - title = {{Example Book}}, - author = {Lastname, Surname}, - isbn = {123456789}, - address = {Germany}, - publisher = {Goverment}, - year = {2019}, - edition = {Second} -} \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/docs/bib/online.bib b/ESPFirewall/lib/Firewall/docs/bib/online.bib deleted file mode 100644 index b388646..0000000 --- a/ESPFirewall/lib/Firewall/docs/bib/online.bib +++ /dev/null @@ -1,55 +0,0 @@ -@online{pio-install, - author = {PlatformIO}, - title = {Installation}, - urldate = {2022-03-24}, - year = {2022}, - url = {https://docs.platformio.org/en/latest//core/installation.html} -} - -@online{pio-about, - author = {PlatformIO}, - title = {What is PlatformIO}, - urldate = {2022-03-24}, - year = {2022}, - url = {https://docs.platformio.org/en/latest//what-is-platformio.html} -} - -@online{vscode-about, - author = {{Visual Studio Code}}, - title = {Getting Started}, - urldate = {2022-03-24}, - year = {2022}, - url = {https://docs.platformio.org/en/latest//what-is-platformio.html} -} - -@online{eeprom-doc, - author = {Arduino}, - title = {EEPROM Library}, - urldate = {2022-07-19}, - year = {2022}, - url = {https://docs.arduino.cc/learn/built-in-libraries/eeprom} -} - -@online{espressif-wifi, - author = {Espressif}, - title = {Wi-Fi Driver}, - urldate = {2022-07-20}, - year = {2022}, - url = {https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html#wi-fi-driver} -} - -@online{lwip, - author = {LwIP}, - title = {LwIP}, - urldate = {2022-07-25}, - year = {2022}, - url = {https://www.nongnu.org/lwip/2_1_x/index.html} -} - -@online{arduino-esp-idf, - author = {Espressif}, - title = {Arduino as an ESP-IDF component}, - urldate = {2022-07-27}, - year = {2022}, - url = {https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/esp-idf_component.html} -} diff --git a/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex b/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex deleted file mode 100644 index dd98ccd..0000000 --- a/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex +++ /dev/null @@ -1,265 +0,0 @@ -\section{Firewall} - -\subsection{Software Firewall} - -A software firewall is inspecting data that goes in and out of the device. It has to be installed on each device in the network. Therefore, can only protect one device at a time. Looking at already existing solutions for linux and other operating systems, rules and settings can be identified that need to be implemented for this firewall. - -\subsection{UFW (Uncomplicated Firewall)} - -To see how a firewall works, UFW was analyzed. A look at the table provides following information: - -\begin{figure}[H] - \begin{center} - \includegraphics[width=0.6\textwidth]{ufw} - \caption{UFW} - \label{fig:UFW} - \end{center} -\end{figure} - -A destination port on the device, the action of the firewall and the IP-Address from where the request originated can be setup. Also the protocol that the rule applies to, can be chosen with TCP or UDP. - -\newpage - -\subsection{Parameter} - -After analyzing existing solutions following firewall parameters were implemented: - -\lstset{style=c++} -\begin{lstlisting} - typedef enum firewall_targets : uint8_t - { - TARGET_DROP = 1, - TARGET_ACCEPT = 2, - } firewall_target_t; - - typedef enum firewall_protocols : uint8_t - { - PROTOCOL_TCP = 6, - PROTOCOL_UDP = 17, - PROTOCOL_ALL = 255, - } firewall_protocol_t; - - static const uint8_t IPV4ADDRESS_LENGTH = 16; - typedef struct firewall_rules - { - uint8_t key; - char ip[IPV4ADDRESS_LENGTH]; - uint16_t port_from; - uint16_t port_to; - firewall_protocol_t protocol; - firewall_target_t target; - struct firewall_rules *next; - } firewall_rule_t; -\end{lstlisting} - -A port can be a maximum of 65535, and was chosen because LwIP (Section \ref{lwip}) uses it for the ports in the respective header. Target as well as protocol are enums for the available options. LwIP uses the same specified values for their protocols (Section \ref{lwip_analysis}). To block a range of ports, there is a \verb|port_from| and \verb|port_to|. The firewall will store all the rules as linked list to dynamically add and remove rules. - -\subsection{IwIP} \label{lwip} - -lwIP is a small independent implementation of the TCP/IP protocol suite and is used in the esp-core for network communication. This is the place the firewall need to check for the incoming traffic in order to drop, reject or pass packets based on the rules. - -\cite[cf.][]{lwip} - -\newpage - -\subsubsection{Analysing} \label{lwip_analysis} - -First step is to analyze the code to find out where the packets are getting handled. Looking in - -\verb|~/.platformio/packages/framework-espidf/components/lwip/lwip/src/core/ipv4| - -there is a function: - -\verb|err_t ip4_input(struct pbuf *p, struct netif *inp)| - -to consume all incoming packages. Simply placing a logger can quickly show that this is the place to put the firewall filter. - -\begin{verbatim} -if (ip4_addr4_16_val(iphdr->src) == 211) -{ - ESP_LOGI("HOOK", "%3" U16_F, "% " U16_F "% " U16_F "% " U16_F "% " U16_F, - (u16_t)IPH_PROTO(iphdr) - ip4_addr1_16_val(iphdr->src), - ip4_addr2_16_val(iphdr->src), - ip4_addr3_16_val(iphdr->src), - ip4_addr4_16_val(iphdr->src)); -} -\end{verbatim} - -Following output can be seen when sending a ping from the machine with IP-Address \verb|10.93.0.211| to the esp. ICMP is therefore marked with protocol 1. - -\begin{verbatim} - I (x) HOOK: 1 10 93 0 211 -\end{verbatim} - -Sending a UDP or TCP package to the ESP (IP-Address: \verb|10.93.0.246|) can be done by executing the python code in the repository, or simply executing an nmap\footnote{\href{https://nmap.org/}{https://nmap.org/}} scan with UDP and TCP. - -\begin{verbatim} - python3 tester.py -i 10.93.0.246 -p 80 -t TCP - python3 tester.py -i 10.93.0.246 -p 22 -t UPD -\end{verbatim} - -Following output can be registered. - -\begin{verbatim} - I (x) HOOK: 6 10 93 0 211 - I (x) HOOK: 17 10 93 0 211 -\end{verbatim} - -Looking at the printed protocols this means evidentially how protocols are identified in LwIP: -$$ "ICMP" \equiv 1 $$ -$$ "TCP" \equiv 6 $$ -$$ "UDP" \equiv 17 $$ - -\subsubsection{Arduino as an ESP-IDF component} - -LwIP needs to be recompiled to register hooks (Section \ref{sec:hooks}). Therefore the following steps are performed to compile our code with Arduino as an ESP-IDF component on an ESP32. - -After initializing an empty ESP-IDF project with PlatformIO the \verb|platformio.ini| file would look like this: - -\begin{verbatim} -[platformio] -default_envs = esp32 - -[env:esp32] -platform = espressif32 -board = az-delivery-devkit-v4 -framework = espidf -monitor_speed = 115200 -\end{verbatim} - -Following commands need to be executed inside a fresh ESP-IDF project folder, in order to add Arduino into the setup: - -\lstset{style=shell} -\begin{lstlisting} -mkdir -p components && \ -cd components && \ -git clone https://github.com/espressif/arduino-esp32.git arduino && \ -cd arduino && \ -git submodule update --init --recursive && \ -cd ../.. -\end{lstlisting} - -After successful cloning of the git repository, some changes need to be written into the ESP-IDF config file with the help of \verb|menuconfig|: - -\begin{verbatim} - platformio run --target menuconfig --environment esp32 -\end{verbatim} - -Navigating to the section Arduino Configuration, usage of setup() and loop() functions can be turned on with the option ``Autostart Arduino setup and loop on boot''. - -After these steps Arduino code can be written and executed like expected, but with the advantages of compiling the whole esp32-core with the specified settings and hooks. - -\cite[][]{arduino-esp-idf} - -\newpage - -\subsubsection{Using a Hook} \label{sec:hooks} - -After learning the protocols, a hook needs to be registered in order to filter the packets based on our rules. To register the hook that suits our project, \verb|LWIP_HOOK_IP4_INPUT| needs to be set as \verb|build_flag| in the \verb|platformio.ini| file to overwrite it in LwIP. This is an easy way of testing if it works as expected, but should be written in a function for any other use-case. - -\begin{verbatim} -build_flags = - '-DLWIP_HOOK_IP4_INPUT(pbuf, input_netif)=({ESP_LOGI("HOOK","TEST");0;})' -\end{verbatim} - -\cite[cf.][]{lwip} - -After the successful test of the logging hook, an implementation of a function is needed in order to integrate it with the firewall API written to change and create rules. - -In order to register a function LwIP needs to know where the prototypes are declared. Therefore, in the \verb|platformio.ini| file, the \verb|build_flags| need to be adjusted. - -\begin{verbatim} -build_flags = - '-Iinclude' - '-DESP_IDF_LWIP_HOOK_FILENAME="lwip_hooks.h"' -\end{verbatim} - -The file \verb|lwip_hooks.h| has the necessary information for LwIP to know how the function will be called. - -\lstset{style=c++} -\begin{lstlisting} -int lwip_hook_ip4_input(struct pbuf *pbuf, struct netif *input_netif); -#define LWIP_HOOK_IP4_INPUT lwip_hook_ip4_input -\end{lstlisting} - -After specifying the prototype the function can be placed in the main.cpp file to be compiled and run. - -\newpage - -\subsection{Benchmark} - -To test the performance of the firewall with rules and without rules, as well as many rules, the time is stopped at the beginning and the end of the hook. - -\subsubsection{Code} - -\lstset{style=c++} -\begin{lstlisting} -void print_time_taken(struct timeval start, - fw::firewall_target_t target) -{ - struct timeval stop; - gettimeofday(&stop, NULL); - u32_t time_taken = (stop.tv_sec - start.tv_sec) * 1000000 + - stop.tv_usec - start.tv_usec; - Serial.println(time_taken); -} - -int lwip_hook_ip4_input(struct pbuf *pbuf, struct netif *input_netif) -{ - // Firewall is not setup yet - if (firewall != NULL) - { - struct timeval start; - gettimeofday(&start, NULL); - if (firewall->is_packet_allowed(pbuf)) - { - print_time_taken(start, fw::TARGET_ACCEPT); - return 0; - } - else - { - print_time_taken(start, fw::TARGET_DROP); - pbuf_free(pbuf); - return 1; - } - } - return 0; -} -\end{lstlisting} - -\newpage - -\subsubsection{Result} - -The results in milliseconds are copied into a spreadsheet to create an chart with the measured processing time of a packet in the hook. The tests were done with 1,5,10 and 15 rules. As the linear trendlines indicate, the amount of rules are heavily responsible for a longer processing time. - -\begin{figure}[H] - \begin{center} - \includegraphics[width=\textwidth]{chart} - \caption{Benchmark graph} - \label{fig:Benchmark graph} - \end{center} -\end{figure} - -Without any rule, the processing of the included hook takes between 23 to 24 milliseconds. No comparison or preparing of the packet is necessary. - -With a single rule, the processing time already increases rapidly. The amount of time it takes for the packet to be prepared, comparing it to the rules and releasing it, is already between 67 and 99 milliseconds. - -\begin{figure}[H] -\begin{center} -\begin{tabular}{|l|l|l|l|l|l|} - \hline - & 0 rule & 1 rule & 5 rules & 10 rules & 15 rules \\ - \hline - \textbf{Average} & 23,81 ms & 74,94 ms & 78,81 ms & 87,07 ms & 94,63 ms \\ - \textbf{Minimum} & 23 ms & 67 ms & 72 ms & 77 ms & 85 ms \\ - \textbf{Maximum} & 24 ms & 99 ms & 98 ms & 115 ms & 124 ms \\ - \hline -\end{tabular} -\end{center} -\caption{Benchmark table} -\label{fig:Benchmark table} -\end{figure} - -$$ 0\ rule\ \textcolor{red}{\leftarrow 51,13 ms \rightarrow}\ 1\ rule\ \textcolor{teal}{\leftarrow 3,87 ms \rightarrow}\ 5\ rules\ \textcolor{orange}{\leftarrow 8,26 ms \rightarrow}\ 10\ rules\ \textcolor{orange}{\leftarrow 7,56 ms \rightarrow}\ 15\ rules $$ \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex b/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex deleted file mode 100644 index a123880..0000000 --- a/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex +++ /dev/null @@ -1,57 +0,0 @@ -\section{PlatformIO} - -There are several ways to compile and upload code to a micro-controller. The first tests where written and compiled in the Arduino IDE\footnote{\href{https://www.arduino.cc/en/software}{https://www.arduino.cc/en/software}}. Because references and cross-platform developing was not easy with this approach, developing in this project will be done with the help of PlatformIO. - -``PlatformIO is a must-have tool for professional embedded systems engineers who develop solutions on more than one specific platform. In addition, by having a decentralized architecture, PlatformIO offers both new and existing developers a quick integration path for developing commercial-ready products, and reduces the overall time-to-market. [...] The build system structure automatically tags software dependencies and applies them using a modular hierarchy that takes away the usual complexity and pain. Developers no longer have to manually find and assemble an environment of tool-chains, compilers, and library dependencies to develop applications for a specific target. With PlatformIO, clicking the compile button will bring in all necessary dependencies automatically.'' - -\cite[cf.][]{pio-about} - -\subsubsection{Install} - -A dependency of PlatformIO is Python\footnote{\href{https://www.python.org/}{https://www.python.org/}}. To install the latest version of python, follow the installation instructions on their \href{https://www.python.org/}{website}. - -PlatformIO can now simply installed by downloading a script called ``get-platformio.py'' and executing it. On Apple MacOS\footnote{\href{https://en.wikipedia.org/wiki/MacOS}{https://en.wikipedia.org/wiki/MacOS}} it can simply be installed with the help of Homebrew Packages Manager\footnote{\href{https://brew.sh/}{https://brew.sh/}}. - -It is integrated into Visual Studio Code (Section \ref{sec:vsc}) and can be used with the official Plugin\footnote{\href{https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide}{https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide}} (Abbildung \ref{fig:PlatformIO in VSC}). - -\subsubsection{Example configuration} - -The configuration can be initialized with PIO Home or directly written into a \verb|plaftormio.ini| file. Following configuration can be used for simultaneous \verb|esp8266| and \verb|ESP32| usage: - -\lstset{style=platform-io} -\begin{lstlisting} - [platformio] - default_envs = esp8266 - - [env:esp32] - platform = espressif32 - board = az-delivery-devkit-v4 - framework = arduino - monitor_speed = 115200 - - [env:esp8266] - platform = espressif8266 - board = d1_mini - framework = arduino - monitor_speed = 115200 -\end{lstlisting} - -\subsection{IDE} \label{sec:vsc} - -Developing and writing code for this project will be done in Visual Studio Code\footnote{\href{https://code.visualstudio.com/}{https://code.visualstudio.com/}}. - -``Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages (such as C++, C\#, Java, Python, PHP, Go) and runtimes (such as .NET and Unity).'' - -\cite[][]{vscode-about} - -\begin{figure}[H] - \begin{center} - \includegraphics[width=0.3\textwidth]{pio} - \caption{PlatformIO in VSC} - \label{fig:PlatformIO in VSC} - \end{center} -\end{figure} - -\subsection{Documentation} - -Documentation is written in \LaTeX and will be added to the library as source-code only. diff --git a/ESPFirewall/lib/Firewall/docs/images/chart.png b/ESPFirewall/lib/Firewall/docs/images/chart.png deleted file mode 100644 index 3b78dee19b3ec961ce040b35fbeaf7198cf0521f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88129 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -% &&end EPS XMP packet marker&& -[/Document -1 dict begin /Metadata {eps_metadata_stream} def -currentdict end /BDC EPSHandler1_pdfmark -[/NamespacePop EPSHandler1_pdfmark - -gsave - - % Layer - - % Curve - newpath - 4.369 48.837 m - 4.369 48.837 1.369 48.837 1.369 48.837 c - 1.369 48.837 1.369 61.899 1.369 61.899 c - 1.369 61.899 14.43 61.899 14.43 61.899 c - 14.43 61.899 14.43 58.899 14.43 58.899 c - 14.43 58.899 4.369 58.899 4.369 58.899 c - 4.369 58.899 4.369 48.837 4.369 48.837 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 18.164 37.77 m - 18.164 37.77 18.164 35.127 18.164 35.127 c - 18.164 35.127 11.721 35.127 11.721 35.127 c - 11.721 35.127 11.721 31.683 11.721 31.683 c - 11.721 31.683 17.498 31.683 17.498 31.683 c - 17.498 31.683 17.498 29.061 17.498 29.061 c - 17.498 29.061 11.721 29.061 11.721 29.061 c - 11.721 29.061 11.721 25.063 11.721 25.063 c - 11.721 25.063 18.164 25.063 18.164 25.063 c - 18.164 25.063 18.164 22.441 18.164 22.441 c - 18.164 22.441 8.611 22.441 8.611 22.441 c - 8.611 22.441 8.611 37.77 8.611 37.77 c - 8.611 37.77 18.164 37.77 18.164 37.77 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 28.742 33.794 m - 28.076 34.839 27.276 35.349 25.72 35.349 c - 24.321 35.349 23.566 34.705 23.566 33.661 c - 23.566 32.461 24.543 31.927 26.587 31.417 c - 29.787 30.617 31.23 29.417 31.23 26.707 c - 31.23 24.196 29.542 22.241 25.943 22.241 c - 23.254 22.241 21.388 22.974 20.033 24.752 c - 20.033 24.752 22.41 26.395 22.41 26.395 c - 23.232 25.374 24.166 24.863 25.743 24.863 c - 27.52 24.863 28.12 25.64 28.12 26.573 c - 28.12 27.639 27.476 28.24 24.988 28.883 c - 21.966 29.684 20.455 31.128 20.455 33.661 c - 20.455 36.083 22.054 37.97 25.699 37.97 c - 28.142 37.97 29.986 37.149 31.075 35.46 c - 31.075 35.46 28.742 33.794 28.742 33.794 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 41.964 33.794 m - 41.298 34.839 40.499 35.349 38.943 35.349 c - 37.544 35.349 36.789 34.705 36.789 33.661 c - 36.789 32.461 37.765 31.927 39.81 31.417 c - 43.009 30.617 44.453 29.417 44.453 26.707 c - 44.453 24.196 42.764 22.241 39.166 22.241 c - 36.477 22.241 34.611 22.974 33.255 24.752 c - 33.255 24.752 35.632 26.395 35.632 26.395 c - 36.455 25.374 37.388 24.863 38.965 24.863 c - 40.743 24.863 41.342 25.64 41.342 26.573 c - 41.342 27.639 40.699 28.24 38.211 28.883 c - 35.189 29.684 33.677 31.128 33.677 33.661 c - 33.677 36.083 35.277 37.97 38.921 37.97 c - 41.365 37.97 43.209 37.149 44.297 35.46 c - 44.297 35.46 41.964 33.794 41.964 33.794 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 50.322 25.063 m - 50.322 25.063 56.765 25.063 56.765 25.063 c - 56.765 25.063 56.765 22.441 56.765 22.441 c - 56.765 22.441 47.212 22.441 47.212 22.441 c - 47.212 22.441 47.212 37.77 47.212 37.77 c - 47.212 37.77 50.322 37.77 50.322 37.77 c - 50.322 37.77 50.322 25.063 50.322 25.063 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 62.188 22.441 m - 62.188 22.441 59.078 22.441 59.078 22.441 c - 59.078 22.441 59.078 37.77 59.078 37.77 c - 59.078 37.77 62.188 37.77 62.188 37.77 c - 62.188 37.77 62.188 22.441 62.188 22.441 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 77.409 37.77 m - 77.409 37.77 77.409 22.441 77.409 22.441 c - 77.409 22.441 74.81 22.441 74.81 22.441 c - 74.81 22.441 68.834 31.927 68.834 31.927 c - 68.834 31.927 68.834 22.441 68.834 22.441 c - 68.834 22.441 65.878 22.441 65.878 22.441 c - 65.878 22.441 65.878 37.77 65.878 37.77 c - 65.878 37.77 68.456 37.77 68.456 37.77 c - 68.456 37.77 74.455 28.151 74.455 28.151 c - 74.455 28.151 74.455 37.77 74.455 37.77 c - 74.455 37.77 77.409 37.77 77.409 37.77 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 91.943 30.417 m - 91.943 30.417 91.943 29.017 91.943 29.017 c - 91.943 24.33 89.765 22.241 86.299 22.241 c - 82.856 22.241 80.434 24.33 80.434 29.017 c - 80.434 29.017 80.434 30.972 80.434 30.972 c - 80.434 35.926 82.856 37.97 86.299 37.97 c - 89.521 37.97 91.454 36.149 91.92 33.016 c - 91.92 33.016 88.943 33.016 88.943 33.016 c - 88.677 34.416 87.855 35.349 86.299 35.349 c - 84.5 35.349 83.545 34.128 83.545 31.194 c - 83.545 31.194 83.545 29.017 83.545 29.017 c - 83.545 26.085 84.5 24.863 86.299 24.863 c - 88.054 24.863 88.765 25.952 88.943 27.796 c - 88.943 27.796 86.367 27.796 86.367 27.796 c - 86.367 27.796 86.367 30.417 86.367 30.417 c - 86.367 30.417 91.943 30.417 91.943 30.417 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 104.5 37.77 m - 104.5 37.77 104.5 35.127 104.5 35.127 c - 104.5 35.127 98.056 35.127 98.056 35.127 c - 98.056 35.127 98.056 31.683 98.056 31.683 c - 98.056 31.683 103.833 31.683 103.833 31.683 c - 103.833 31.683 103.833 29.061 103.833 29.061 c - 103.833 29.061 98.056 29.061 98.056 29.061 c - 98.056 29.061 98.056 25.063 98.056 25.063 c - 98.056 25.063 104.5 25.063 104.5 25.063 c - 104.5 25.063 104.5 22.441 104.5 22.441 c - 104.5 22.441 94.946 22.441 94.946 22.441 c - 94.946 22.441 94.946 37.77 94.946 37.77 c - 94.946 37.77 104.5 37.77 104.5 37.77 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 118.631 37.77 m - 118.631 37.77 118.631 22.441 118.631 22.441 c - 118.631 22.441 116.033 22.441 116.033 22.441 c - 116.033 22.441 110.056 31.927 110.056 31.927 c - 110.056 31.927 110.056 22.441 110.056 22.441 c - 110.056 22.441 107.101 22.441 107.101 22.441 c - 107.101 22.441 107.101 37.77 107.101 37.77 c - 107.101 37.77 109.678 37.77 109.678 37.77 c - 109.678 37.77 115.677 28.151 115.677 28.151 c - 115.677 28.151 115.677 37.77 115.677 37.77 c - 115.677 37.77 118.631 37.77 118.631 37.77 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 15.938 49.042 m - 15.938 49.042 9.681 49.042 9.681 49.042 c - 9.681 49.042 9.681 54.622 9.681 54.622 c - 9.681 54.622 8.62 54.622 8.62 54.622 c - 8.62 54.622 8.62 41.998 8.62 41.998 c - 8.62 41.998 9.681 41.998 9.681 41.998 c - 9.681 41.998 9.681 48.054 9.681 48.054 c - 9.681 48.054 15.938 48.054 15.938 48.054 c - 15.938 48.054 15.938 41.998 15.938 41.998 c - 15.938 41.998 16.999 41.998 16.999 41.998 c - 16.999 41.998 16.999 54.622 16.999 54.622 c - 16.999 54.622 15.938 54.622 15.938 54.622 c - 15.938 54.622 15.938 49.042 15.938 49.042 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curves - 24.287 54.73 m - 21.58 54.73 19.804 53.03 19.804 49.06 c - 19.804 49.06 19.804 47.56 19.804 47.56 c - 19.804 43.571 21.58 41.889 24.287 41.889 c - 26.995 41.889 28.769 43.571 28.769 47.56 c - 28.769 47.56 28.769 49.06 28.769 49.06 c - 28.769 53.03 26.995 54.73 24.287 54.73 c - closepath - 27.709 47.56 m - 27.709 44.139 26.354 42.876 24.287 42.876 c - 22.219 42.876 20.866 44.139 20.866 47.56 c - 20.866 47.56 20.866 49.06 20.866 49.06 c - 20.866 52.463 22.219 53.743 24.287 53.743 c - 26.354 53.743 27.709 52.463 27.709 49.06 c - 27.709 49.06 27.709 47.56 27.709 47.56 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 36.057 53.743 m - 37.777 53.743 39.04 52.938 39.461 50.798 c - 39.461 50.798 40.504 50.798 40.504 50.798 c - 40.101 53.561 38.308 54.73 36.057 54.73 c - 33.313 54.73 31.575 53.14 31.575 49.06 c - 31.575 49.06 31.575 47.56 31.575 47.56 c - 31.575 43.479 33.313 41.889 36.057 41.889 c - 38.216 41.889 40.083 43.022 40.485 45.858 c - 40.485 45.858 39.461 45.858 39.461 45.858 c - 39.058 43.846 37.887 42.876 36.057 42.876 c - 33.917 42.876 32.636 44.102 32.636 47.56 c - 32.636 47.56 32.636 49.06 32.636 49.06 c - 32.636 52.5 33.899 53.743 36.057 53.743 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 50.628 49.042 m - 50.628 49.042 44.371 49.042 44.371 49.042 c - 44.371 49.042 44.371 54.622 44.371 54.622 c - 44.371 54.622 43.309 54.622 43.309 54.622 c - 43.309 54.622 43.309 41.998 43.309 41.998 c - 43.309 41.998 44.371 41.998 44.371 41.998 c - 44.371 41.998 44.371 48.054 44.371 48.054 c - 44.371 48.054 50.628 48.054 50.628 48.054 c - 50.628 48.054 50.628 41.998 50.628 41.998 c - 50.628 41.998 51.688 41.998 51.688 41.998 c - 51.688 41.998 51.688 54.622 51.688 54.622 c - 51.688 54.622 50.628 54.622 50.628 54.622 c - 50.628 54.622 50.628 49.042 50.628 49.042 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 59.122 48.804 m - 57.292 49.206 55.847 49.664 55.847 51.475 c - 55.847 53.03 57 53.743 58.738 53.743 c - 60.476 53.743 61.354 53.03 62.013 52.061 c - 62.013 52.061 62.855 52.664 62.855 52.664 c - 61.976 54.055 60.732 54.73 58.775 54.73 c - 55.939 54.73 54.786 53.25 54.786 51.475 c - 54.786 49.225 56.396 48.31 58.756 47.853 c - 61.134 47.395 62.013 46.663 62.013 45.145 c - 62.013 43.919 61.171 42.876 58.921 42.876 c - 57.036 42.876 56.159 43.571 55.371 44.56 c - 55.371 44.56 54.512 43.956 54.512 43.956 c - 55.445 42.584 56.909 41.889 58.921 41.889 c - 61.939 41.889 63.074 43.571 63.074 45.182 c - 63.074 47.56 61.5 48.292 59.122 48.804 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 69.865 53.743 m - 71.584 53.743 72.847 52.938 73.268 50.798 c - 73.268 50.798 74.311 50.798 74.311 50.798 c - 73.909 53.561 72.116 54.73 69.865 54.73 c - 67.12 54.73 65.382 53.14 65.382 49.06 c - 65.382 49.06 65.382 47.56 65.382 47.56 c - 65.382 43.479 67.12 41.889 69.865 41.889 c - 72.024 41.889 73.89 43.022 74.292 45.858 c - 74.292 45.858 73.268 45.858 73.268 45.858 c - 72.866 43.846 71.695 42.876 69.865 42.876 c - 67.724 42.876 66.444 44.102 66.444 47.56 c - 66.444 47.56 66.444 49.06 66.444 49.06 c - 66.444 52.5 67.706 53.743 69.865 53.743 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 84.322 49.042 m - 84.322 49.042 78.065 49.042 78.065 49.042 c - 78.065 49.042 78.065 54.622 78.065 54.622 c - 78.065 54.622 77.003 54.622 77.003 54.622 c - 77.003 54.622 77.003 41.998 77.003 41.998 c - 77.003 41.998 78.065 41.998 78.065 41.998 c - 78.065 41.998 78.065 48.054 78.065 48.054 c - 78.065 48.054 84.322 48.054 84.322 48.054 c - 84.322 48.054 84.322 41.998 84.322 41.998 c - 84.322 41.998 85.382 41.998 85.382 41.998 c - 85.382 41.998 85.382 54.622 85.382 54.622 c - 85.382 54.622 84.322 54.622 84.322 54.622 c - 84.322 54.622 84.322 49.042 84.322 49.042 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 96.949 47.157 m - 96.949 44.23 95.742 42.876 93.528 42.876 c - 91.314 42.876 90.107 44.23 90.107 47.157 c - 90.107 47.157 90.107 54.622 90.107 54.622 c - 90.107 54.622 89.045 54.622 89.045 54.622 c - 89.045 54.622 89.045 47.157 89.045 47.157 c - 89.045 43.443 90.784 41.889 93.528 41.889 c - 96.272 41.889 98.01 43.443 98.01 47.157 c - 98.01 47.157 98.01 54.622 98.01 54.622 c - 98.01 54.622 96.949 54.622 96.949 54.622 c - 96.949 54.622 96.949 47.157 96.949 47.157 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 102.521 54.622 m - 102.521 54.622 101.46 54.622 101.46 54.622 c - 101.46 54.622 101.46 41.998 101.46 41.998 c - 101.46 41.998 108.888 41.998 108.888 41.998 c - 108.888 41.998 108.888 42.986 108.888 42.986 c - 108.888 42.986 102.521 42.986 102.521 42.986 c - 102.521 42.986 102.521 54.622 102.521 54.622 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 118.615 53.633 m - 118.615 53.633 118.615 54.622 118.615 54.622 c - 118.615 54.622 111.187 54.622 111.187 54.622 c - 111.187 54.622 111.187 41.998 111.187 41.998 c - 111.187 41.998 118.615 41.998 118.615 41.998 c - 118.615 41.998 118.615 42.986 118.615 42.986 c - 118.615 42.986 112.248 42.986 112.248 42.986 c - 112.248 42.986 112.248 48.035 112.248 48.035 c - 112.248 48.035 118.066 48.035 118.066 48.035 c - 118.066 48.035 118.066 49.023 118.066 49.023 c - 118.066 49.023 112.248 49.023 112.248 49.023 c - 112.248 49.023 112.248 53.633 112.248 53.633 c - 112.248 53.633 118.615 53.633 118.615 53.633 c - closepath - /DeviceRGB setcolorspace - 0 0.176 0.345 setcolor - fill - - % Curve - 12.152 7.112 m - 12.152 7.112 14.013 7.112 14.013 7.112 c - 14.071 7.112 14.1 7.083 14.1 7.025 c - 14.1 7.025 14.1 6.347 14.1 6.347 c - 14.1 6.289 14.071 6.26 14.013 6.26 c - 14.013 6.26 13.596 6.26 13.596 6.26 c - 13.561 6.26 13.544 6.242 13.544 6.207 c - 13.544 6.207 13.544 1.283 13.544 1.283 c - 13.544 1.226 13.514 1.196 13.457 1.196 c - 13.457 1.196 12.673 1.196 12.673 1.196 c - 12.61 1.196 12.56 1.226 12.526 1.283 c - 12.526 1.283 10.125 5.354 10.125 5.354 c - 10.125 5.354 10.089 5.354 10.089 5.354 c - 10.089 5.354 10.089 2.102 10.089 2.102 c - 10.089 2.066 10.107 2.049 10.142 2.049 c - 10.142 2.049 10.559 2.049 10.559 2.049 c - 10.618 2.049 10.646 2.019 10.646 1.962 c - 10.646 1.962 10.646 1.283 10.646 1.283 c - 10.646 1.226 10.618 1.196 10.559 1.196 c - 10.559 1.196 8.698 1.196 8.698 1.196 c - 8.639 1.196 8.611 1.226 8.611 1.283 c - 8.611 1.283 8.611 1.962 8.611 1.962 c - 8.611 2.019 8.639 2.049 8.698 2.049 c - 8.698 2.049 9.116 2.049 9.116 2.049 c - 9.15 2.049 9.168 2.066 9.168 2.102 c - 9.168 2.102 9.168 6.207 9.168 6.207 c - 9.168 6.242 9.15 6.26 9.116 6.26 c - 9.116 6.26 8.698 6.26 8.698 6.26 c - 8.639 6.26 8.611 6.289 8.611 6.347 c - 8.611 6.347 8.611 7.025 8.611 7.025 c - 8.611 7.083 8.639 7.112 8.698 7.112 c - 8.698 7.112 10.046 7.112 10.046 7.112 c - 10.11 7.112 10.16 7.083 10.194 7.025 c - 10.194 7.025 12.587 2.945 12.587 2.945 c - 12.587 2.945 12.622 2.945 12.622 2.945 c - 12.622 2.945 12.622 6.207 12.622 6.207 c - 12.622 6.242 12.604 6.26 12.569 6.26 c - 12.569 6.26 12.152 6.26 12.152 6.26 c - 12.093 6.26 12.065 6.289 12.065 6.347 c - 12.065 6.347 12.065 7.025 12.065 7.025 c - 12.065 7.083 12.093 7.112 12.152 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 16.536 5.485 m - 17.168 5.485 17.616 5.372 17.88 5.146 c - 18.144 4.92 18.276 4.546 18.276 4.023 c - 18.276 4.023 18.276 2.102 18.276 2.102 c - 18.276 2.066 18.294 2.049 18.328 2.049 c - 18.328 2.049 18.702 2.049 18.702 2.049 c - 18.76 2.049 18.789 2.019 18.789 1.962 c - 18.789 1.962 18.789 1.283 18.789 1.283 c - 18.789 1.226 18.76 1.196 18.702 1.196 c - 18.702 1.196 17.458 1.196 17.458 1.196 c - 17.4 1.196 17.371 1.226 17.371 1.283 c - 17.371 1.283 17.371 1.588 17.371 1.588 c - 17.371 1.588 17.362 1.588 17.362 1.588 c - 17.136 1.263 16.748 1.101 16.197 1.101 c - 15.791 1.101 15.456 1.211 15.192 1.432 c - 14.927 1.651 14.795 1.971 14.795 2.389 c - 14.795 2.835 14.942 3.17 15.235 3.393 c - 15.528 3.616 15.938 3.727 16.466 3.727 c - 16.466 3.727 17.301 3.727 17.301 3.727 c - 17.337 3.727 17.354 3.745 17.354 3.78 c - 17.354 3.78 17.354 3.945 17.354 3.945 c - 17.354 4.2 17.292 4.386 17.167 4.502 c - 17.042 4.618 16.817 4.677 16.493 4.677 c - 16.341 4.677 16.191 4.659 16.04 4.624 c - 16.011 4.618 15.997 4.598 15.997 4.563 c - 15.997 4.563 15.997 4.189 15.997 4.189 c - 15.997 4.131 15.967 4.102 15.91 4.102 c - 15.91 4.102 15.153 4.102 15.153 4.102 c - 15.094 4.102 15.066 4.131 15.066 4.189 c - 15.066 4.189 15.066 5.076 15.066 5.076 c - 15.066 5.129 15.088 5.166 15.135 5.189 c - 15.546 5.387 16.014 5.485 16.536 5.485 c - closepath - 17.301 2.997 m - 17.301 2.997 16.623 2.997 16.623 2.997 c - 16.025 2.997 15.727 2.806 15.727 2.423 c - 15.727 2.069 15.964 1.893 16.44 1.893 c - 17.049 1.893 17.354 2.13 17.354 2.605 c - 17.354 2.605 17.354 2.945 17.354 2.945 c - 17.354 2.979 17.337 2.997 17.301 2.997 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 19.486 7.112 m - 19.486 7.112 20.799 7.112 20.799 7.112 c - 20.857 7.112 20.886 7.083 20.886 7.025 c - 20.886 7.025 20.886 4.998 20.886 4.998 c - 20.886 4.998 20.895 4.998 20.895 4.998 c - 21.122 5.323 21.484 5.485 21.983 5.485 c - 22.418 5.485 22.767 5.341 23.031 5.051 c - 23.295 4.761 23.427 4.386 23.427 3.928 c - 23.427 3.928 23.427 2.102 23.427 2.102 c - 23.427 2.066 23.444 2.049 23.479 2.049 c - 23.479 2.049 23.836 2.049 23.836 2.049 c - 23.894 2.049 23.922 2.019 23.922 1.962 c - 23.922 1.962 23.922 1.283 23.922 1.283 c - 23.922 1.226 23.894 1.196 23.836 1.196 c - 23.836 1.196 22.026 1.196 22.026 1.196 c - 21.968 1.196 21.939 1.226 21.939 1.283 c - 21.939 1.283 21.939 1.962 21.939 1.962 c - 21.939 2.019 21.968 2.049 22.026 2.049 c - 22.026 2.049 22.4 2.049 22.4 2.049 c - 22.435 2.049 22.453 2.066 22.453 2.102 c - 22.453 2.102 22.453 3.702 22.453 3.702 c - 22.453 3.98 22.385 4.202 22.253 4.367 c - 22.119 4.533 21.924 4.615 21.67 4.615 c - 21.42 4.615 21.227 4.533 21.091 4.367 c - 20.955 4.202 20.886 3.98 20.886 3.702 c - 20.886 3.702 20.886 2.102 20.886 2.102 c - 20.886 2.066 20.904 2.049 20.939 2.049 c - 20.939 2.049 21.313 2.049 21.313 2.049 c - 21.371 2.049 21.4 2.019 21.4 1.962 c - 21.4 1.962 21.4 1.283 21.4 1.283 c - 21.4 1.226 21.371 1.196 21.313 1.196 c - 21.313 1.196 19.486 1.196 19.486 1.196 c - 19.427 1.196 19.399 1.226 19.399 1.283 c - 19.399 1.283 19.399 1.962 19.399 1.962 c - 19.399 2.019 19.427 2.049 19.486 2.049 c - 19.486 2.049 19.86 2.049 19.86 2.049 c - 19.895 2.049 19.912 2.066 19.912 2.102 c - 19.912 2.102 19.912 6.207 19.912 6.207 c - 19.912 6.242 19.895 6.26 19.86 6.26 c - 19.86 6.26 19.486 6.26 19.486 6.26 c - 19.427 6.26 19.399 6.289 19.399 6.347 c - 19.399 6.347 19.399 7.025 19.399 7.025 c - 19.399 7.083 19.427 7.112 19.486 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 27.542 5.485 m - 28.173 5.485 28.622 5.372 28.886 5.146 c - 29.15 4.92 29.282 4.546 29.282 4.023 c - 29.282 4.023 29.282 2.102 29.282 2.102 c - 29.282 2.066 29.299 2.049 29.334 2.049 c - 29.334 2.049 29.707 2.049 29.707 2.049 c - 29.766 2.049 29.795 2.019 29.795 1.962 c - 29.795 1.962 29.795 1.283 29.795 1.283 c - 29.795 1.226 29.766 1.196 29.707 1.196 c - 29.707 1.196 28.463 1.196 28.463 1.196 c - 28.406 1.196 28.377 1.226 28.377 1.283 c - 28.377 1.283 28.377 1.588 28.377 1.588 c - 28.377 1.588 28.368 1.588 28.368 1.588 c - 28.142 1.263 27.753 1.101 27.203 1.101 c - 26.796 1.101 26.462 1.211 26.198 1.432 c - 25.933 1.651 25.801 1.971 25.801 2.389 c - 25.801 2.835 25.948 3.17 26.241 3.393 c - 26.534 3.616 26.944 3.727 27.472 3.727 c - 27.472 3.727 28.307 3.727 28.307 3.727 c - 28.342 3.727 28.36 3.745 28.36 3.78 c - 28.36 3.78 28.36 3.945 28.36 3.945 c - 28.36 4.2 28.297 4.386 28.172 4.502 c - 28.047 4.618 27.823 4.677 27.499 4.677 c - 27.347 4.677 27.197 4.659 27.045 4.624 c - 27.017 4.618 27.003 4.598 27.003 4.563 c - 27.003 4.563 27.003 4.189 27.003 4.189 c - 27.003 4.131 26.973 4.102 26.916 4.102 c - 26.916 4.102 26.159 4.102 26.159 4.102 c - 26.1 4.102 26.072 4.131 26.072 4.189 c - 26.072 4.189 26.072 5.076 26.072 5.076 c - 26.072 5.129 26.094 5.166 26.141 5.189 c - 26.552 5.387 27.02 5.485 27.542 5.485 c - closepath - 28.307 2.997 m - 28.307 2.997 27.628 2.997 27.628 2.997 c - 27.031 2.997 26.733 2.806 26.733 2.423 c - 26.733 2.069 26.97 1.893 27.446 1.893 c - 28.055 1.893 28.36 2.13 28.36 2.605 c - 28.36 2.605 28.36 2.945 28.36 2.945 c - 28.36 2.979 28.342 2.997 28.307 2.997 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 32.979 5.485 m - 33.42 5.485 33.772 5.341 34.036 5.051 c - 34.299 4.761 34.432 4.386 34.432 3.928 c - 34.432 3.928 34.432 2.102 34.432 2.102 c - 34.432 2.066 34.449 2.049 34.484 2.049 c - 34.484 2.049 34.84 2.049 34.84 2.049 c - 34.899 2.049 34.927 2.019 34.927 1.962 c - 34.927 1.962 34.927 1.283 34.927 1.283 c - 34.927 1.226 34.899 1.196 34.84 1.196 c - 34.84 1.196 33.031 1.196 33.031 1.196 c - 32.973 1.196 32.944 1.226 32.944 1.283 c - 32.944 1.283 32.944 1.962 32.944 1.962 c - 32.944 2.019 32.973 2.049 33.031 2.049 c - 33.031 2.049 33.405 2.049 33.405 2.049 c - 33.44 2.049 33.458 2.066 33.458 2.102 c - 33.458 2.102 33.458 3.702 33.458 3.702 c - 33.458 3.98 33.39 4.202 33.257 4.367 c - 33.124 4.533 32.929 4.615 32.674 4.615 c - 32.425 4.615 32.232 4.533 32.096 4.367 c - 31.96 4.202 31.891 3.98 31.891 3.702 c - 31.891 3.702 31.891 2.102 31.891 2.102 c - 31.891 2.066 31.909 2.049 31.944 2.049 c - 31.944 2.049 32.318 2.049 32.318 2.049 c - 32.376 2.049 32.405 2.019 32.405 1.962 c - 32.405 1.962 32.405 1.283 32.405 1.283 c - 32.405 1.226 32.376 1.196 32.318 1.196 c - 32.318 1.196 30.491 1.196 30.491 1.196 c - 30.432 1.196 30.404 1.226 30.404 1.283 c - 30.404 1.283 30.404 1.962 30.404 1.962 c - 30.404 2.019 30.432 2.049 30.491 2.049 c - 30.491 2.049 30.865 2.049 30.865 2.049 c - 30.9 2.049 30.917 2.066 30.917 2.102 c - 30.917 2.102 30.917 4.485 30.917 4.485 c - 30.917 4.519 30.9 4.537 30.865 4.537 c - 30.865 4.537 30.491 4.537 30.491 4.537 c - 30.432 4.537 30.404 4.566 30.404 4.624 c - 30.404 4.624 30.404 5.303 30.404 5.303 c - 30.404 5.36 30.432 5.39 30.491 5.39 c - 30.491 5.39 31.804 5.39 31.804 5.39 c - 31.862 5.39 31.891 5.36 31.891 5.303 c - 31.891 5.303 31.891 4.998 31.891 4.998 c - 31.891 4.998 31.9 4.998 31.9 4.998 c - 32.127 5.323 32.486 5.485 32.979 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 42.114 7.112 m - 42.114 7.112 43.411 7.112 43.411 7.112 c - 43.468 7.112 43.498 7.083 43.498 7.025 c - 43.498 7.025 43.498 6.347 43.498 6.347 c - 43.498 6.289 43.468 6.26 43.411 6.26 c - 43.411 6.26 42.993 6.26 42.993 6.26 c - 42.959 6.26 42.941 6.242 42.941 6.207 c - 42.941 6.207 42.941 2.102 42.941 2.102 c - 42.941 2.066 42.959 2.049 42.993 2.049 c - 42.993 2.049 43.411 2.049 43.411 2.049 c - 43.468 2.049 43.498 2.019 43.498 1.962 c - 43.498 1.962 43.498 1.283 43.498 1.283 c - 43.498 1.226 43.468 1.196 43.411 1.196 c - 43.411 1.196 41.566 1.196 41.566 1.196 c - 41.508 1.196 41.479 1.226 41.479 1.283 c - 41.479 1.283 41.479 1.962 41.479 1.962 c - 41.479 2.019 41.508 2.049 41.566 2.049 c - 41.566 2.049 41.966 2.049 41.966 2.049 c - 42.002 2.049 42.018 2.066 42.018 2.102 c - 42.018 2.102 42.018 4.902 42.018 4.902 c - 42.018 4.902 41.984 4.902 41.984 4.902 c - 41.984 4.902 40.722 2.118 40.722 2.118 c - 40.687 2.043 40.632 2.006 40.557 2.006 c - 40.557 2.006 40.052 2.006 40.052 2.006 c - 39.977 2.006 39.921 2.043 39.887 2.118 c - 39.887 2.118 38.626 4.902 38.626 4.902 c - 38.626 4.902 38.59 4.902 38.59 4.902 c - 38.59 4.902 38.59 2.102 38.59 2.102 c - 38.59 2.066 38.608 2.049 38.643 2.049 c - 38.643 2.049 39.008 2.049 39.008 2.049 c - 39.066 2.049 39.095 2.019 39.095 1.962 c - 39.095 1.962 39.095 1.283 39.095 1.283 c - 39.095 1.226 39.066 1.196 39.008 1.196 c - 39.008 1.196 37.199 1.196 37.199 1.196 c - 37.14 1.196 37.112 1.226 37.112 1.283 c - 37.112 1.283 37.112 1.962 37.112 1.962 c - 37.112 2.019 37.14 2.049 37.199 2.049 c - 37.199 2.049 37.617 2.049 37.617 2.049 c - 37.651 2.049 37.669 2.066 37.669 2.102 c - 37.669 2.102 37.669 6.207 37.669 6.207 c - 37.669 6.242 37.651 6.26 37.617 6.26 c - 37.617 6.26 37.199 6.26 37.199 6.26 c - 37.14 6.26 37.112 6.289 37.112 6.347 c - 37.112 6.347 37.112 7.025 37.112 7.025 c - 37.112 7.083 37.14 7.112 37.199 7.112 c - 37.199 7.112 38.503 7.112 38.503 7.112 c - 38.579 7.112 38.628 7.083 38.652 7.025 c - 38.652 7.025 40.304 3.337 40.304 3.337 c - 40.304 3.337 40.339 3.337 40.339 3.337 c - 40.339 3.337 41.966 7.025 41.966 7.025 c - 41.99 7.083 42.039 7.112 42.114 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 46.082 5.485 m - 46.51 5.485 46.876 5.383 47.177 5.177 c - 47.479 4.971 47.688 4.687 47.804 4.328 c - 47.896 4.044 47.943 3.624 47.943 3.066 c - 47.943 3.009 47.911 2.979 47.847 2.979 c - 47.847 2.979 45.263 2.979 45.263 2.979 c - 45.228 2.979 45.212 2.962 45.212 2.928 c - 45.212 2.823 45.231 2.716 45.272 2.605 c - 45.417 2.183 45.73 1.971 46.212 1.971 c - 46.624 1.971 46.951 2.103 47.195 2.371 c - 47.241 2.417 47.285 2.423 47.326 2.389 c - 47.326 2.389 47.838 1.936 47.838 1.936 c - 47.879 1.901 47.882 1.86 47.847 1.814 c - 47.441 1.338 46.867 1.101 46.125 1.101 c - 45.684 1.101 45.311 1.203 45.006 1.409 c - 44.703 1.615 44.492 1.901 44.376 2.267 c - 44.277 2.574 44.228 2.916 44.228 3.293 c - 44.228 3.693 44.274 4.038 44.368 4.328 c - 44.483 4.693 44.694 4.977 44.998 5.181 c - 45.302 5.384 45.664 5.485 46.082 5.485 c - closepath - 46.089 4.659 m - 45.661 4.659 45.385 4.479 45.263 4.119 c - 45.228 4.015 45.212 3.896 45.212 3.763 c - 45.212 3.727 45.228 3.711 45.263 3.711 c - 45.263 3.711 46.908 3.711 46.908 3.711 c - 46.943 3.711 46.96 3.727 46.96 3.763 c - 46.96 3.896 46.943 4.015 46.908 4.119 c - 46.849 4.288 46.748 4.42 46.603 4.516 c - 46.459 4.611 46.287 4.659 46.089 4.659 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 51.249 5.485 m - 51.689 5.485 52.042 5.341 52.305 5.051 c - 52.569 4.761 52.702 4.386 52.702 3.928 c - 52.702 3.928 52.702 2.102 52.702 2.102 c - 52.702 2.066 52.718 2.049 52.753 2.049 c - 52.753 2.049 53.11 2.049 53.11 2.049 c - 53.169 2.049 53.197 2.019 53.197 1.962 c - 53.197 1.962 53.197 1.283 53.197 1.283 c - 53.197 1.226 53.169 1.196 53.11 1.196 c - 53.11 1.196 51.3 1.196 51.3 1.196 c - 51.243 1.196 51.213 1.226 51.213 1.283 c - 51.213 1.283 51.213 1.962 51.213 1.962 c - 51.213 2.019 51.243 2.049 51.3 2.049 c - 51.3 2.049 51.674 2.049 51.674 2.049 c - 51.71 2.049 51.727 2.066 51.727 2.102 c - 51.727 2.102 51.727 3.702 51.727 3.702 c - 51.727 3.98 51.66 4.202 51.527 4.367 c - 51.393 4.533 51.199 4.615 50.944 4.615 c - 50.695 4.615 50.502 4.533 50.366 4.367 c - 50.229 4.202 50.161 3.98 50.161 3.702 c - 50.161 3.702 50.161 2.102 50.161 2.102 c - 50.161 2.066 50.178 2.049 50.213 2.049 c - 50.213 2.049 50.587 2.049 50.587 2.049 c - 50.645 2.049 50.674 2.019 50.674 1.962 c - 50.674 1.962 50.674 1.283 50.674 1.283 c - 50.674 1.226 50.645 1.196 50.587 1.196 c - 50.587 1.196 48.76 1.196 48.76 1.196 c - 48.702 1.196 48.673 1.226 48.673 1.283 c - 48.673 1.283 48.673 1.962 48.673 1.962 c - 48.673 2.019 48.702 2.049 48.76 2.049 c - 48.76 2.049 49.134 2.049 49.134 2.049 c - 49.17 2.049 49.186 2.066 49.186 2.102 c - 49.186 2.102 49.186 4.485 49.186 4.485 c - 49.186 4.519 49.17 4.537 49.134 4.537 c - 49.134 4.537 48.76 4.537 48.76 4.537 c - 48.702 4.537 48.673 4.566 48.673 4.624 c - 48.673 4.624 48.673 5.303 48.673 5.303 c - 48.673 5.36 48.702 5.39 48.76 5.39 c - 48.76 5.39 50.074 5.39 50.074 5.39 c - 50.131 5.39 50.161 5.36 50.161 5.303 c - 50.161 5.303 50.161 4.998 50.161 4.998 c - 50.161 4.998 50.17 4.998 50.17 4.998 c - 50.396 5.323 50.755 5.485 51.249 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 55.529 5.485 m - 56.074 5.485 56.564 5.387 56.999 5.189 c - 57.045 5.166 57.069 5.126 57.069 5.067 c - 57.069 5.067 57.069 4.198 57.069 4.198 c - 57.069 4.14 57.04 4.11 56.982 4.11 c - 56.982 4.11 56.277 4.11 56.277 4.11 c - 56.218 4.11 56.19 4.14 56.19 4.198 c - 56.19 4.198 56.19 4.519 56.19 4.519 c - 56.19 4.555 56.175 4.577 56.146 4.589 c - 55.996 4.653 55.787 4.685 55.52 4.685 c - 55.05 4.685 54.815 4.542 54.815 4.259 c - 54.815 4.125 54.866 4.022 54.967 3.95 c - 55.069 3.877 55.253 3.826 55.52 3.798 c - 55.52 3.798 55.981 3.745 55.981 3.745 c - 56.451 3.693 56.791 3.561 56.999 3.35 c - 57.208 3.138 57.312 2.85 57.312 2.484 c - 57.312 2.049 57.157 1.71 56.846 1.466 c - 56.537 1.223 56.091 1.101 55.511 1.101 c - 54.92 1.101 54.398 1.211 53.945 1.432 c - 53.905 1.448 53.884 1.483 53.884 1.535 c - 53.884 1.535 53.884 2.476 53.884 2.476 c - 53.884 2.533 53.914 2.562 53.971 2.562 c - 53.971 2.562 54.711 2.562 54.711 2.562 c - 54.769 2.562 54.797 2.533 54.797 2.476 c - 54.797 2.476 54.797 2.093 54.797 2.093 c - 54.797 2.063 54.812 2.043 54.841 2.031 c - 55.039 1.956 55.282 1.918 55.572 1.918 c - 56.094 1.918 56.355 2.081 56.355 2.405 c - 56.355 2.551 56.303 2.661 56.199 2.736 c - 56.094 2.811 55.906 2.863 55.633 2.893 c - 55.633 2.893 55.171 2.945 55.171 2.945 c - 54.307 3.044 53.876 3.458 53.876 4.189 c - 53.876 4.589 54.019 4.905 54.306 5.138 c - 54.593 5.369 55.001 5.485 55.529 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 60.001 5.485 m - 60.581 5.485 61.062 5.375 61.445 5.155 c - 61.491 5.132 61.514 5.094 61.514 5.042 c - 61.514 5.042 61.514 4.085 61.514 4.085 c - 61.514 4.026 61.485 3.998 61.426 3.998 c - 61.426 3.998 60.688 3.998 60.688 3.998 c - 60.629 3.998 60.601 4.026 60.601 4.085 c - 60.601 4.085 60.601 4.468 60.601 4.468 c - 60.601 4.49 60.587 4.511 60.557 4.528 c - 60.441 4.586 60.264 4.615 60.027 4.615 c - 59.574 4.615 59.287 4.433 59.166 4.067 c - 59.107 3.894 59.079 3.635 59.079 3.293 c - 59.079 2.945 59.107 2.684 59.166 2.51 c - 59.287 2.15 59.574 1.971 60.027 1.971 c - 60.276 1.971 60.453 1.997 60.557 2.049 c - 60.587 2.061 60.601 2.081 60.601 2.109 c - 60.601 2.109 60.601 2.501 60.601 2.501 c - 60.601 2.56 60.629 2.588 60.688 2.588 c - 60.688 2.588 61.426 2.588 61.426 2.588 c - 61.485 2.588 61.514 2.56 61.514 2.501 c - 61.514 2.501 61.514 1.535 61.514 1.535 c - 61.514 1.483 61.491 1.445 61.445 1.423 c - 61.033 1.208 60.551 1.101 60.001 1.101 c - 59.055 1.101 58.461 1.477 58.217 2.231 c - 58.13 2.492 58.087 2.847 58.087 3.293 c - 58.087 3.722 58.13 4.067 58.217 4.328 c - 58.338 4.699 58.555 4.985 58.865 5.186 c - 59.175 5.386 59.554 5.485 60.001 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 62.402 7.112 m - 62.402 7.112 63.715 7.112 63.715 7.112 c - 63.773 7.112 63.802 7.083 63.802 7.025 c - 63.802 7.025 63.802 4.998 63.802 4.998 c - 63.802 4.998 63.811 4.998 63.811 4.998 c - 64.038 5.323 64.4 5.485 64.899 5.485 c - 65.334 5.485 65.683 5.341 65.947 5.051 c - 66.211 4.761 66.343 4.386 66.343 3.928 c - 66.343 3.928 66.343 2.102 66.343 2.102 c - 66.343 2.066 66.36 2.049 66.395 2.049 c - 66.395 2.049 66.752 2.049 66.752 2.049 c - 66.81 2.049 66.838 2.019 66.838 1.962 c - 66.838 1.962 66.838 1.283 66.838 1.283 c - 66.838 1.226 66.81 1.196 66.752 1.196 c - 66.752 1.196 64.942 1.196 64.942 1.196 c - 64.884 1.196 64.855 1.226 64.855 1.283 c - 64.855 1.283 64.855 1.962 64.855 1.962 c - 64.855 2.019 64.884 2.049 64.942 2.049 c - 64.942 2.049 65.316 2.049 65.316 2.049 c - 65.351 2.049 65.369 2.066 65.369 2.102 c - 65.369 2.102 65.369 3.702 65.369 3.702 c - 65.369 3.98 65.301 4.202 65.169 4.367 c - 65.035 4.533 64.84 4.615 64.586 4.615 c - 64.337 4.615 64.143 4.533 64.007 4.367 c - 63.871 4.202 63.802 3.98 63.802 3.702 c - 63.802 3.702 63.802 2.102 63.802 2.102 c - 63.802 2.066 63.82 2.049 63.855 2.049 c - 63.855 2.049 64.229 2.049 64.229 2.049 c - 64.287 2.049 64.316 2.019 64.316 1.962 c - 64.316 1.962 64.316 1.283 64.316 1.283 c - 64.316 1.226 64.287 1.196 64.229 1.196 c - 64.229 1.196 62.402 1.196 62.402 1.196 c - 62.342 1.196 62.314 1.226 62.314 1.283 c - 62.314 1.283 62.314 1.962 62.314 1.962 c - 62.314 2.019 62.342 2.049 62.402 2.049 c - 62.402 2.049 62.776 2.049 62.776 2.049 c - 62.811 2.049 62.828 2.066 62.828 2.102 c - 62.828 2.102 62.828 6.207 62.828 6.207 c - 62.828 6.242 62.811 6.26 62.776 6.26 c - 62.776 6.26 62.402 6.26 62.402 6.26 c - 62.342 6.26 62.314 6.289 62.314 6.347 c - 62.314 6.347 62.314 7.025 62.314 7.025 c - 62.314 7.083 62.342 7.112 62.402 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 71.328 5.39 m - 71.328 5.39 72.65 5.39 72.65 5.39 c - 72.708 5.39 72.737 5.36 72.737 5.303 c - 72.737 5.303 72.737 2.102 72.737 2.102 c - 72.737 2.066 72.754 2.049 72.789 2.049 c - 72.789 2.049 73.164 2.049 73.164 2.049 c - 73.221 2.049 73.251 2.019 73.251 1.962 c - 73.251 1.962 73.251 1.283 73.251 1.283 c - 73.251 1.226 73.221 1.196 73.164 1.196 c - 73.164 1.196 71.849 1.196 71.849 1.196 c - 71.792 1.196 71.762 1.226 71.762 1.283 c - 71.762 1.283 71.762 1.588 71.762 1.588 c - 71.762 1.588 71.753 1.588 71.753 1.588 c - 71.499 1.263 71.139 1.101 70.675 1.101 c - 70.234 1.101 69.884 1.245 69.627 1.535 c - 69.369 1.825 69.24 2.199 69.24 2.658 c - 69.24 2.658 69.24 4.485 69.24 4.485 c - 69.24 4.519 69.222 4.537 69.187 4.537 c - 69.187 4.537 68.813 4.537 68.813 4.537 c - 68.755 4.537 68.726 4.566 68.726 4.624 c - 68.726 4.624 68.726 5.303 68.726 5.303 c - 68.726 5.36 68.755 5.39 68.813 5.39 c - 68.813 5.39 70.127 5.39 70.127 5.39 c - 70.185 5.39 70.213 5.36 70.213 5.303 c - 70.213 5.303 70.213 2.884 70.213 2.884 c - 70.213 2.605 70.279 2.384 70.41 2.219 c - 70.541 2.054 70.733 1.971 70.988 1.971 c - 71.232 1.971 71.421 2.054 71.558 2.219 c - 71.694 2.384 71.762 2.602 71.762 2.875 c - 71.762 2.875 71.762 4.485 71.762 4.485 c - 71.762 4.519 71.745 4.537 71.711 4.537 c - 71.711 4.537 71.328 4.537 71.328 4.537 c - 71.269 4.537 71.241 4.566 71.241 4.624 c - 71.241 4.624 71.241 5.303 71.241 5.303 c - 71.241 5.36 71.269 5.39 71.328 5.39 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 76.478 5.485 m - 76.919 5.485 77.271 5.341 77.535 5.051 c - 77.798 4.761 77.931 4.386 77.931 3.928 c - 77.931 3.928 77.931 2.102 77.931 2.102 c - 77.931 2.066 77.948 2.049 77.983 2.049 c - 77.983 2.049 78.339 2.049 78.339 2.049 c - 78.398 2.049 78.426 2.019 78.426 1.962 c - 78.426 1.962 78.426 1.283 78.426 1.283 c - 78.426 1.226 78.398 1.196 78.339 1.196 c - 78.339 1.196 76.53 1.196 76.53 1.196 c - 76.472 1.196 76.443 1.226 76.443 1.283 c - 76.443 1.283 76.443 1.962 76.443 1.962 c - 76.443 2.019 76.472 2.049 76.53 2.049 c - 76.53 2.049 76.904 2.049 76.904 2.049 c - 76.939 2.049 76.957 2.066 76.957 2.102 c - 76.957 2.102 76.957 3.702 76.957 3.702 c - 76.957 3.98 76.889 4.202 76.756 4.367 c - 76.623 4.533 76.428 4.615 76.173 4.615 c - 75.924 4.615 75.731 4.533 75.595 4.367 c - 75.459 4.202 75.39 3.98 75.39 3.702 c - 75.39 3.702 75.39 2.102 75.39 2.102 c - 75.39 2.066 75.408 2.049 75.443 2.049 c - 75.443 2.049 75.817 2.049 75.817 2.049 c - 75.875 2.049 75.904 2.019 75.904 1.962 c - 75.904 1.962 75.904 1.283 75.904 1.283 c - 75.904 1.226 75.875 1.196 75.817 1.196 c - 75.817 1.196 73.99 1.196 73.99 1.196 c - 73.931 1.196 73.903 1.226 73.903 1.283 c - 73.903 1.283 73.903 1.962 73.903 1.962 c - 73.903 2.019 73.931 2.049 73.99 2.049 c - 73.99 2.049 74.364 2.049 74.364 2.049 c - 74.399 2.049 74.416 2.066 74.416 2.102 c - 74.416 2.102 74.416 4.485 74.416 4.485 c - 74.416 4.519 74.399 4.537 74.364 4.537 c - 74.364 4.537 73.99 4.537 73.99 4.537 c - 73.931 4.537 73.903 4.566 73.903 4.624 c - 73.903 4.624 73.903 5.303 73.903 5.303 c - 73.903 5.36 73.931 5.39 73.99 5.39 c - 73.99 5.39 75.303 5.39 75.303 5.39 c - 75.361 5.39 75.39 5.36 75.39 5.303 c - 75.39 5.303 75.39 4.998 75.39 4.998 c - 75.39 4.998 75.399 4.998 75.399 4.998 c - 75.626 5.323 75.985 5.485 76.478 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 81.42 7.112 m - 81.42 7.112 82.733 7.112 82.733 7.112 c - 82.791 7.112 82.82 7.083 82.82 7.025 c - 82.82 7.025 82.82 2.102 82.82 2.102 c - 82.82 2.066 82.837 2.049 82.873 2.049 c - 82.873 2.049 83.247 2.049 83.247 2.049 c - 83.304 2.049 83.334 2.019 83.334 1.962 c - 83.334 1.962 83.334 1.283 83.334 1.283 c - 83.334 1.226 83.304 1.196 83.247 1.196 c - 83.247 1.196 81.932 1.196 81.932 1.196 c - 81.875 1.196 81.845 1.226 81.845 1.283 c - 81.845 1.283 81.845 1.597 81.845 1.597 c - 81.845 1.597 81.837 1.597 81.837 1.597 c - 81.605 1.266 81.234 1.101 80.723 1.101 c - 79.975 1.101 79.491 1.436 79.27 2.109 c - 79.171 2.411 79.123 2.806 79.123 3.293 c - 79.123 3.78 79.171 4.175 79.27 4.477 c - 79.491 5.149 79.975 5.485 80.723 5.485 c - 81.234 5.485 81.605 5.32 81.837 4.989 c - 81.837 4.989 81.845 4.989 81.845 4.989 c - 81.845 4.989 81.845 6.207 81.845 6.207 c - 81.845 6.242 81.829 6.26 81.794 6.26 c - 81.794 6.26 81.42 6.26 81.42 6.26 c - 81.361 6.26 81.333 6.289 81.333 6.347 c - 81.333 6.347 81.333 7.025 81.333 7.025 c - 81.333 7.083 81.361 7.112 81.42 7.112 c - closepath - 80.975 4.615 m - 80.576 4.615 80.317 4.436 80.202 4.076 c - 80.143 3.896 80.114 3.635 80.114 3.293 c - 80.114 2.951 80.143 2.689 80.202 2.51 c - 80.317 2.15 80.576 1.971 80.975 1.971 c - 81.381 1.971 81.642 2.15 81.758 2.51 c - 81.817 2.689 81.845 2.951 81.845 3.293 c - 81.845 3.635 81.817 3.896 81.758 4.076 c - 81.642 4.436 81.381 4.615 80.975 4.615 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 85.465 7.112 m - 85.465 7.112 90.146 7.112 90.146 7.112 c - 90.204 7.112 90.233 7.083 90.233 7.025 c - 90.233 7.025 90.233 5.633 90.233 5.633 c - 90.233 5.575 90.204 5.546 90.146 5.546 c - 90.146 5.546 89.398 5.546 89.398 5.546 c - 89.339 5.546 89.311 5.575 89.311 5.633 c - 89.311 5.633 89.311 6.155 89.311 6.155 c - 89.311 6.19 89.294 6.207 89.258 6.207 c - 89.258 6.207 88.371 6.207 88.371 6.207 c - 88.337 6.207 88.319 6.19 88.319 6.155 c - 88.319 6.155 88.319 2.102 88.319 2.102 c - 88.319 2.066 88.337 2.049 88.371 2.049 c - 88.371 2.049 88.824 2.049 88.824 2.049 c - 88.881 2.049 88.911 2.019 88.911 1.962 c - 88.911 1.962 88.911 1.283 88.911 1.283 c - 88.911 1.226 88.881 1.196 88.824 1.196 c - 88.824 1.196 86.788 1.196 86.788 1.196 c - 86.73 1.196 86.701 1.226 86.701 1.283 c - 86.701 1.283 86.701 1.962 86.701 1.962 c - 86.701 2.019 86.73 2.049 86.788 2.049 c - 86.788 2.049 87.24 2.049 87.24 2.049 c - 87.275 2.049 87.293 2.066 87.293 2.102 c - 87.293 2.102 87.293 6.155 87.293 6.155 c - 87.293 6.19 87.275 6.207 87.24 6.207 c - 87.24 6.207 86.353 6.207 86.353 6.207 c - 86.318 6.207 86.3 6.19 86.3 6.155 c - 86.3 6.155 86.3 5.633 86.3 5.633 c - 86.3 5.575 86.271 5.546 86.213 5.546 c - 86.213 5.546 85.465 5.546 85.465 5.546 c - 85.407 5.546 85.378 5.575 85.378 5.633 c - 85.378 5.633 85.378 7.025 85.378 7.025 c - 85.378 7.083 85.407 7.112 85.465 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 92.634 5.485 m - 93.063 5.485 93.428 5.383 93.73 5.177 c - 94.032 4.971 94.241 4.687 94.357 4.328 c - 94.449 4.044 94.496 3.624 94.496 3.066 c - 94.496 3.009 94.463 2.979 94.4 2.979 c - 94.4 2.979 91.816 2.979 91.816 2.979 c - 91.781 2.979 91.764 2.962 91.764 2.928 c - 91.764 2.823 91.784 2.716 91.825 2.605 c - 91.969 2.183 92.283 1.971 92.764 1.971 c - 93.176 1.971 93.503 2.103 93.748 2.371 c - 93.794 2.417 93.837 2.423 93.878 2.389 c - 93.878 2.389 94.391 1.936 94.391 1.936 c - 94.432 1.901 94.435 1.86 94.4 1.814 c - 93.994 1.338 93.42 1.101 92.677 1.101 c - 92.237 1.101 91.864 1.203 91.559 1.409 c - 91.255 1.615 91.045 1.901 90.928 2.267 c - 90.83 2.574 90.781 2.916 90.781 3.293 c - 90.781 3.693 90.827 4.038 90.92 4.328 c - 91.036 4.693 91.247 4.977 91.55 5.181 c - 91.855 5.384 92.216 5.485 92.634 5.485 c - closepath - 92.642 4.659 m - 92.213 4.659 91.938 4.479 91.816 4.119 c - 91.781 4.015 91.764 3.896 91.764 3.763 c - 91.764 3.727 91.781 3.711 91.816 3.711 c - 91.816 3.711 93.461 3.711 93.461 3.711 c - 93.496 3.711 93.512 3.727 93.512 3.763 c - 93.512 3.896 93.496 4.015 93.461 4.119 c - 93.402 4.288 93.3 4.42 93.156 4.516 c - 93.011 4.611 92.839 4.659 92.642 4.659 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 97.219 5.485 m - 97.799 5.485 98.281 5.375 98.664 5.155 c - 98.71 5.132 98.733 5.094 98.733 5.042 c - 98.733 5.042 98.733 4.085 98.733 4.085 c - 98.733 4.026 98.704 3.998 98.646 3.998 c - 98.646 3.998 97.907 3.998 97.907 3.998 c - 97.848 3.998 97.82 4.026 97.82 4.085 c - 97.82 4.085 97.82 4.468 97.82 4.468 c - 97.82 4.49 97.805 4.511 97.776 4.528 c - 97.66 4.586 97.483 4.615 97.246 4.615 c - 96.793 4.615 96.505 4.433 96.384 4.067 c - 96.326 3.894 96.297 3.635 96.297 3.293 c - 96.297 2.945 96.326 2.684 96.384 2.51 c - 96.505 2.15 96.793 1.971 97.246 1.971 c - 97.495 1.971 97.671 1.997 97.776 2.049 c - 97.805 2.061 97.82 2.081 97.82 2.109 c - 97.82 2.109 97.82 2.501 97.82 2.501 c - 97.82 2.56 97.848 2.588 97.907 2.588 c - 97.907 2.588 98.646 2.588 98.646 2.588 c - 98.704 2.588 98.733 2.56 98.733 2.501 c - 98.733 2.501 98.733 1.535 98.733 1.535 c - 98.733 1.483 98.71 1.445 98.664 1.423 c - 98.252 1.208 97.77 1.101 97.219 1.101 c - 96.274 1.101 95.679 1.477 95.436 2.231 c - 95.349 2.492 95.305 2.847 95.305 3.293 c - 95.305 3.722 95.349 4.067 95.436 4.328 c - 95.557 4.699 95.774 4.985 96.084 5.186 c - 96.394 5.386 96.773 5.485 97.219 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 99.62 7.112 m - 99.62 7.112 100.933 7.112 100.933 7.112 c - 100.991 7.112 101.02 7.083 101.02 7.025 c - 101.02 7.025 101.02 4.998 101.02 4.998 c - 101.02 4.998 101.029 4.998 101.029 4.998 c - 101.255 5.323 101.618 5.485 102.117 5.485 c - 102.551 5.485 102.901 5.341 103.165 5.051 c - 103.428 4.761 103.561 4.386 103.561 3.928 c - 103.561 3.928 103.561 2.102 103.561 2.102 c - 103.561 2.066 103.578 2.049 103.613 2.049 c - 103.613 2.049 103.969 2.049 103.969 2.049 c - 104.028 2.049 104.056 2.019 104.056 1.962 c - 104.056 1.962 104.056 1.283 104.056 1.283 c - 104.056 1.226 104.028 1.196 103.969 1.196 c - 103.969 1.196 102.16 1.196 102.16 1.196 c - 102.102 1.196 102.073 1.226 102.073 1.283 c - 102.073 1.283 102.073 1.962 102.073 1.962 c - 102.073 2.019 102.102 2.049 102.16 2.049 c - 102.16 2.049 102.534 2.049 102.534 2.049 c - 102.569 2.049 102.587 2.066 102.587 2.102 c - 102.587 2.102 102.587 3.702 102.587 3.702 c - 102.587 3.98 102.519 4.202 102.386 4.367 c - 102.253 4.533 102.058 4.615 101.803 4.615 c - 101.554 4.615 101.361 4.533 101.225 4.367 c - 101.088 4.202 101.02 3.98 101.02 3.702 c - 101.02 3.702 101.02 2.102 101.02 2.102 c - 101.02 2.066 101.038 2.049 101.073 2.049 c - 101.073 2.049 101.447 2.049 101.447 2.049 c - 101.504 2.049 101.534 2.019 101.534 1.962 c - 101.534 1.962 101.534 1.283 101.534 1.283 c - 101.534 1.226 101.504 1.196 101.447 1.196 c - 101.447 1.196 99.62 1.196 99.62 1.196 c - 99.561 1.196 99.533 1.226 99.533 1.283 c - 99.533 1.283 99.533 1.962 99.533 1.962 c - 99.533 2.019 99.561 2.049 99.62 2.049 c - 99.62 2.049 99.994 2.049 99.994 2.049 c - 100.029 2.049 100.045 2.066 100.045 2.102 c - 100.045 2.102 100.045 6.207 100.045 6.207 c - 100.045 6.242 100.029 6.26 99.994 6.26 c - 99.994 6.26 99.62 6.26 99.62 6.26 c - 99.561 6.26 99.533 6.289 99.533 6.347 c - 99.533 6.347 99.533 7.025 99.533 7.025 c - 99.533 7.083 99.561 7.112 99.62 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 107.241 5.485 m - 107.681 5.485 108.034 5.341 108.297 5.051 c - 108.561 4.761 108.694 4.386 108.694 3.928 c - 108.694 3.928 108.694 2.102 108.694 2.102 c - 108.694 2.066 108.711 2.049 108.746 2.049 c - 108.746 2.049 109.102 2.049 109.102 2.049 c - 109.161 2.049 109.189 2.019 109.189 1.962 c - 109.189 1.962 109.189 1.283 109.189 1.283 c - 109.189 1.226 109.161 1.196 109.102 1.196 c - 109.102 1.196 107.293 1.196 107.293 1.196 c - 107.235 1.196 107.206 1.226 107.206 1.283 c - 107.206 1.283 107.206 1.962 107.206 1.962 c - 107.206 2.019 107.235 2.049 107.293 2.049 c - 107.293 2.049 107.667 2.049 107.667 2.049 c - 107.702 2.049 107.719 2.066 107.719 2.102 c - 107.719 2.102 107.719 3.702 107.719 3.702 c - 107.719 3.98 107.652 4.202 107.519 4.367 c - 107.385 4.533 107.191 4.615 106.936 4.615 c - 106.687 4.615 106.494 4.533 106.358 4.367 c - 106.221 4.202 106.153 3.98 106.153 3.702 c - 106.153 3.702 106.153 2.102 106.153 2.102 c - 106.153 2.066 106.17 2.049 106.206 2.049 c - 106.206 2.049 106.58 2.049 106.58 2.049 c - 106.637 2.049 106.667 2.019 106.667 1.962 c - 106.667 1.962 106.667 1.283 106.667 1.283 c - 106.667 1.226 106.637 1.196 106.58 1.196 c - 106.58 1.196 104.753 1.196 104.753 1.196 c - 104.694 1.196 104.666 1.226 104.666 1.283 c - 104.666 1.283 104.666 1.962 104.666 1.962 c - 104.666 2.019 104.694 2.049 104.753 2.049 c - 104.753 2.049 105.127 2.049 105.127 2.049 c - 105.162 2.049 105.178 2.066 105.178 2.102 c - 105.178 2.102 105.178 4.485 105.178 4.485 c - 105.178 4.519 105.162 4.537 105.127 4.537 c - 105.127 4.537 104.753 4.537 104.753 4.537 c - 104.694 4.537 104.666 4.566 104.666 4.624 c - 104.666 4.624 104.666 5.303 104.666 5.303 c - 104.666 5.36 104.694 5.39 104.753 5.39 c - 104.753 5.39 106.066 5.39 106.066 5.39 c - 106.124 5.39 106.153 5.36 106.153 5.303 c - 106.153 5.303 106.153 4.998 106.153 4.998 c - 106.153 4.998 106.162 4.998 106.162 4.998 c - 106.388 5.323 106.748 5.485 107.241 5.485 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curves - 109.886 5.39 m - 109.886 5.39 111.2 5.39 111.2 5.39 c - 111.257 5.39 111.287 5.36 111.287 5.303 c - 111.287 5.303 111.287 2.102 111.287 2.102 c - 111.287 2.066 111.304 2.049 111.339 2.049 c - 111.339 2.049 111.713 2.049 111.713 2.049 c - 111.771 2.049 111.8 2.019 111.8 1.962 c - 111.8 1.962 111.8 1.283 111.8 1.283 c - 111.8 1.226 111.771 1.196 111.713 1.196 c - 111.713 1.196 109.886 1.196 109.886 1.196 c - 109.828 1.196 109.799 1.226 109.799 1.283 c - 109.799 1.283 109.799 1.962 109.799 1.962 c - 109.799 2.019 109.828 2.049 109.886 2.049 c - 109.886 2.049 110.26 2.049 110.26 2.049 c - 110.295 2.049 110.312 2.066 110.312 2.102 c - 110.312 2.102 110.312 4.485 110.312 4.485 c - 110.312 4.519 110.295 4.537 110.26 4.537 c - 110.26 4.537 109.886 4.537 109.886 4.537 c - 109.828 4.537 109.799 4.566 109.799 4.624 c - 109.799 4.624 109.799 5.303 109.799 5.303 c - 109.799 5.36 109.828 5.39 109.886 5.39 c - closepath - 110.4 7.112 m - 110.4 7.112 111.2 7.112 111.2 7.112 c - 111.257 7.112 111.287 7.083 111.287 7.025 c - 111.287 7.025 111.287 6.269 111.287 6.269 c - 111.287 6.21 111.257 6.182 111.2 6.182 c - 111.2 6.182 110.4 6.182 110.4 6.182 c - 110.341 6.182 110.312 6.21 110.312 6.269 c - 110.312 6.269 110.312 7.025 110.312 7.025 c - 110.312 7.083 110.341 7.112 110.4 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 112.504 7.112 m - 112.504 7.112 113.818 7.112 113.818 7.112 c - 113.876 7.112 113.905 7.083 113.905 7.025 c - 113.905 7.025 113.905 3.685 113.905 3.685 c - 113.905 3.685 115.323 5.303 115.323 5.303 c - 115.376 5.36 115.43 5.39 115.489 5.39 c - 115.489 5.39 116.376 5.39 116.376 5.39 c - 116.434 5.39 116.462 5.36 116.462 5.303 c - 116.462 5.303 116.462 4.624 116.462 4.624 c - 116.462 4.566 116.434 4.537 116.376 4.537 c - 116.376 4.537 115.81 4.537 115.81 4.537 c - 115.776 4.537 115.744 4.519 115.714 4.485 c - 115.714 4.485 115.123 3.815 115.123 3.815 c - 115.123 3.815 116.132 2.102 116.132 2.102 c - 116.156 2.066 116.184 2.049 116.219 2.049 c - 116.219 2.049 116.637 2.049 116.637 2.049 c - 116.695 2.049 116.724 2.019 116.724 1.962 c - 116.724 1.962 116.724 1.283 116.724 1.283 c - 116.724 1.226 116.695 1.196 116.637 1.196 c - 116.637 1.196 115.671 1.196 115.671 1.196 c - 115.613 1.196 115.567 1.226 115.532 1.283 c - 115.532 1.283 114.479 3.093 114.479 3.093 c - 114.479 3.093 113.905 2.44 113.905 2.44 c - 113.905 2.44 113.905 2.102 113.905 2.102 c - 113.905 2.066 113.922 2.049 113.958 2.049 c - 113.958 2.049 114.332 2.049 114.332 2.049 c - 114.389 2.049 114.419 2.019 114.419 1.962 c - 114.419 1.962 114.419 1.283 114.419 1.283 c - 114.419 1.226 114.389 1.196 114.332 1.196 c - 114.332 1.196 112.504 1.196 112.504 1.196 c - 112.446 1.196 112.418 1.226 112.418 1.283 c - 112.418 1.283 112.418 1.962 112.418 1.962 c - 112.418 2.019 112.446 2.049 112.504 2.049 c - 112.504 2.049 112.878 2.049 112.878 2.049 c - 112.914 2.049 112.93 2.066 112.93 2.102 c - 112.93 2.102 112.93 6.207 112.93 6.207 c - 112.93 6.242 112.914 6.26 112.878 6.26 c - 112.878 6.26 112.504 6.26 112.504 6.26 c - 112.446 6.26 112.418 6.289 112.418 6.347 c - 112.418 6.347 112.418 7.025 112.418 7.025 c - 112.418 7.083 112.446 7.112 112.504 7.112 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - - % Curve - 117.542 2.258 m - 117.542 2.258 118.412 2.258 118.412 2.258 c - 118.469 2.258 118.499 2.228 118.499 2.171 c - 118.499 2.171 118.499 1.283 118.499 1.283 c - 118.499 1.226 118.469 1.196 118.412 1.196 c - 118.412 1.196 117.542 1.196 117.542 1.196 c - 117.484 1.196 117.455 1.226 117.455 1.283 c - 117.455 1.283 117.455 2.171 117.455 2.171 c - 117.455 2.228 117.484 2.258 117.542 2.258 c - closepath - /DeviceRGB setcolorspace - 0.843 0.059 0.235 setcolor - fill - grestore -showpage -end -/currentdistillerparams where -{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse -{userdict /EPSHandler1_pdfmark /cleartomark load put} -{ userdict /EPSHandler1_pdfmark /pdfmark load put} ifelse -[/EMC EPSHandler1_pdfmark diff --git a/ESPFirewall/lib/Firewall/docs/images/pio.png b/ESPFirewall/lib/Firewall/docs/images/pio.png deleted file mode 100644 index 48f5aa5337ca9ed9488919cf62bd154dc96737aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48902 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%0AC7eq?)#B;w=}ZK3pXzu4^M2K#d%N8fahWH~Et- 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 diff --git a/ESPFirewall/lib/Firewall/docs/main.tex b/ESPFirewall/lib/Firewall/docs/main.tex deleted file mode 100644 index 305bec9..0000000 --- a/ESPFirewall/lib/Firewall/docs/main.tex +++ /dev/null @@ -1,131 +0,0 @@ -\documentclass[ - a4paper, - oneside, - parskip=half, - listof=entryprefix, - listof=totoc, - index=totoc, - bibliography=totoc -]{scrartcl} - -\usepackage{silence} -\WarningFilter{biblatex}{File 'british-iso.lbx'} -\WarningFilter{biblatex}{'\mainlang'} - -\usepackage[utf8]{inputenc} -\usepackage[british]{babel} -\usepackage[T1]{fontenc} - -\usepackage{pdfpages,graphicx,subcaption,lastpage} -\graphicspath{ {./images} } - -\usepackage{geometry} -\geometry{a4paper, top=2.5cm, left=2.5cm, right=2.5cm, bottom=2.5cm} -\usepackage{float,listings,xcolor,csquotes,microtype,scrlayer-scrpage,etoolbox} -\usepackage[official]{eurosym} - -\definecolor{codegreen}{rgb}{0,0.6,0} -\definecolor{codepurple}{rgb}{0.58,0,0.82} -\lstdefinestyle{c++}{ - language=C++, - directivestyle={\color{codepurple}}, - emph={firewall_rule_t,uint8_t,uint16_t,firewall_protocol_t,firewall_target_t,fw,Firewall,API}, - emphstyle={\color{codegreen}}, -} -\lstdefinestyle{shell}{ - emph={cd,mkdir,git}, - emphstyle={\color{codepurple}}, -} -\lstdefinestyle{platform-io}{ - emph={platformio,esp32,esp8266,arduino}, - emphstyle={\color{codegreen}}, -} -\definecolor{delim}{RGB}{20,105,176} -\definecolor{numb}{RGB}{106, 109, 32} -\definecolor{string}{rgb}{0.64,0.08,0.08} -\lstdefinestyle{json}{ - rulecolor=\color{black}, - showspaces=false, - showtabs=false, - breaklines=true, - postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{gray}\hookrightarrow\space}}, - breakatwhitespace=true, - basicstyle=\ttfamily\small, - upquote=true, - morestring=[b]", - stringstyle=\color{string}, - literate= - *{0}{{{\color{numb}0}}}{1} - {1}{{{\color{numb}1}}}{1} - {2}{{{\color{numb}2}}}{1} - {3}{{{\color{numb}3}}}{1} - {4}{{{\color{numb}4}}}{1} - {5}{{{\color{numb}5}}}{1} - {6}{{{\color{numb}6}}}{1} - {7}{{{\color{numb}7}}}{1} - {8}{{{\color{numb}8}}}{1} - {9}{{{\color{numb}9}}}{1} - {\{}{{{\color{delim}{\{}}}}{1} - {\}}{{{\color{delim}{\}}}}}{1} - {[}{{{\color{delim}{[}}}}{1} - {]}{{{\color{delim}{]}}}}{1}, -} - -\setuptoc{toc}{totoc} - -\usepackage[ - backend=biber, - urldate=long, - style=iso-authoryear, - natbib=true, - useauthor=true, - mincitenames=1, - maxcitenames=3 -]{biblatex} -\addbibresource{bib/online.bib} -\addbibresource{bib/book.bib} - -\DeclareNameAlias{default}{family-given/given-family} - -\renewcommand*{\finalnamedelim}{\addspace{}und\space} -\AtEveryCite{ - \renewcommand*{\multinamedelim}{,\space} - \renewcommand*{\nameyeardelim}{\space} -} - -\AtBeginBibliography{ - \renewcommand*{\multinamedelim}{,\space} -} -\AfterTOCHead[lof]{\appto\autodot{:}} - -\definecolor{must-have-brown}{RGB}{51, 22, 18} -\definecolor{should-have-red}{RGB}{229, 24, 31} -\definecolor{could-have-orange}{RGB}{246, 121, 28} -\definecolor{wont-have-blue}{RGB}{32, 169, 215} -\newcommand{\morequirement}[1]{\paragraph{#1}\hfill\textbf{\textcolor{must-have-brown}{must-have}}\\} -\newcommand{\srequirement}[1]{\paragraph{#1}\hfill\textbf{\textcolor{should-have-red}{should-have}}\\} -\newcommand{\corequirement}[1]{\paragraph{#1}\hfill\textbf{\textcolor{could-have-orange}{could-have}}\\} -\newcommand{\wrequirement}[1]{\paragraph{#1}\hfill\textbf{\textcolor{wont-have-blue}{won't-have}}\\} - -\ihead{IoT Firewall - ESP8266/ESP32} -\chead{} -\ohead{Florian Hoss} -\ofoot{Page~\thepage{}/\pageref{LastPage}} -\cfoot{} -\title{IoT Firewall - ESP8266/ESP32} -\usepackage[breaklinks,colorlinks,linkcolor=black,citecolor=black,filecolor=black,urlcolor=black]{hyperref} - -\begin{document} - - \include{titlepage/titlepage} - \tableofcontents - \newpage - \listoffigures - \include{firststeps/firststeps} - \include{storage/storage} - \include{firewall/firewall} - \include{api/api} - - \printbibliography[title=Bibliography] - -\end{document} \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/docs/storage/storage.tex b/ESPFirewall/lib/Firewall/docs/storage/storage.tex deleted file mode 100644 index 1e418f3..0000000 --- a/ESPFirewall/lib/Firewall/docs/storage/storage.tex +++ /dev/null @@ -1,32 +0,0 @@ -\section{Storage} - -To store the firewall rules there will be a class to handle storing and retrieving of the currently active rules. For each board there is a library available that will handle most of the work. - -\subsection{esp8266} - -A library called EEPROM can be used to access the memory that will be kept when the board is powered off. With this library we can easily write and read from this area. - -``The supported micro-controllers on the various Arduino [...] boards have different amounts of EEPROM: [...] The Arduino [...] boards have an emulated EEPROM space of 1024 bytes.'' - -\cite[][]{eeprom-doc} - -\subsection{esp32} - -To save and retrieve data on the esp32, the Preferences.h\footnote{\href{https://github.com/espressif/arduino-esp32/blob/master/libraries/Preferences/src/Preferences.h}{preferences.h on github}} library will be used. It is a replacement for the deprecated EEPROM library that is used with the esp8266. - -\subsection{Storage class} - -To use the individual library with the firewall rules the firewall can be extended with the storage class. Following protected methods will be available to store and retrieve firewall rules: - -\lstset{style=c++} -\begin{lstlisting} - uint8_t retrieve_amount_of_rules(); - void store_amount_of_rules(const uint8_t new_amount); - firewall_rule_t *retrieve_firewall_rule(const uint8_t key); - void store_all_firewall_rules(firewall_rule_t *rule_head); - void store_firewall_rule(firewall_rule_t *rule_ptr); -\end{lstlisting} - -\subsection{Space Allocation} - -Each rule will get exactly the space it needs (\verb|firewall_rule_t|). Therefore a maximum of rules of \textbf{15} is specified in the constructor of the class. At the lowest storage space, there will be an 8 bit class variable for the current amount of rules, to keep track how many rules need to be restored at power up. \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/docs/titlepage/titlepage.tex b/ESPFirewall/lib/Firewall/docs/titlepage/titlepage.tex deleted file mode 100644 index 57a6d1b..0000000 --- a/ESPFirewall/lib/Firewall/docs/titlepage/titlepage.tex +++ /dev/null @@ -1,30 +0,0 @@ -\newcommand{\HRule}[2]{\noindent\rule[#1]{\linewidth}{#2}} -\newcommand{\vlinespace}[1]{\vspace*{#1\baselineskip}} -\newcommand{\titleemph}[1]{\textbf{#1}} -\begin{titlepage} - \sffamily - \hfill - \includegraphics[width=5cm]{hs-esslingen} - \HRule{13pt}{1pt} - \centering - \Large - \vlinespace{5}\\ - Student research project\\ - \huge - \textbf{IoT Firewall\\for ESP8266/ESP32}\\ - \Large - \vlinespace{5} - Software Engineering course\\ - of the Faculty of Information Technology\\ - in the 6th semester\\ - \vlinespace{6} - \huge - \textbf{Florian Hoss}\\ - \Large - \vfill - \raggedright{} - \HRule{13pt}{1pt} \\ - \titleemph{Git:} \href{https://github.com/flohoss/esp8266\_firewall\_api}{https://github.com/flohoss/esp8266\_firewall\_api} \\ - \titleemph{Git:} \href{https://github.com/flohoss/esp32\_firewall\_api}{https://github.com/flohoss/esp32\_firewall\_api} \\ - \titleemph{Professor:} Prof. Dr. rer. nat. Tobias Heer -\end{titlepage} \ No newline at end of file diff --git a/ESPFirewall/lib/Firewall/src/API.cpp b/ESPFirewall/lib/Firewall/src/API.cpp deleted file mode 100644 index cacdba9..0000000 --- a/ESPFirewall/lib/Firewall/src/API.cpp +++ /dev/null @@ -1,276 +0,0 @@ -#include "API.hpp" - -namespace fw -{ - API::API(fw::Firewall *firewall, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port) - { - this->firewall = firewall; - this->api_ip = ip; - this->api_port = port; - if (this->setup_auth(username, password) == ERROR) - endless_loop(); -#ifdef ESP32 - this->server = new WebServer(port); -#elif defined(ESP8266) - this->server = new ESP8266WebServerSecure(port); - this->serverCache = new ServerSessions(5); -#endif - this->setup_routing(cert, key); - this->server->begin(); - Serial.printf("%s listening on port %i\n", log, port); - } - - API::~API() - { - this->server->stop(); - } - - void API::handle_client() - { - this->server->handleClient(); - } - - String API::get_url_base() - { -#ifdef ESP32 - return "http://" + this->api_ip + ":" + this->api_port; -#elif defined(ESP8266) - return "https://" + this->api_ip + ":" + this->api_port; -#endif - } - - ok_t API::setup_auth(const char *username, const char *password) - { - if (!username || *username == 0x00 || strlen(username) > CREDENTIALS_LENGTH) - { - Serial.printf("%s Username too long or missing!\n", log); - return ERROR; - } - strncpy(credentials.username, username, CREDENTIALS_LENGTH); - if (!password || *password == 0x00 || strlen(password) > CREDENTIALS_LENGTH) - { - Serial.printf("%s Password too long or missing!\n", log); - return ERROR; - } - strncpy(credentials.password, password, CREDENTIALS_LENGTH); - return SUCCESS; - } - - auth_t API::check_auth() - { - if (server->authenticate(this->credentials.username, this->credentials.password)) - { - return AUTHENTICATED; - } - else - { - this->json_message_response("unauthorised", 403); - return DENIED; - } - } - - void API::setup_routing(const char *cert, const char *key) - { -#ifdef ESP8266 - this->server->getServer().setRSACert(new BearSSL::X509List(cert), new BearSSL::PrivateKey(key)); - this->server->getServer().setCache(serverCache); -#endif - this->server->on("/api/firewall/rules", HTTP_GET, std::bind(&API::get_firewall_rules_handler, this)); - this->server->on(UriRegex("/api/firewall/rules/([0-9]+)"), HTTP_GET, std::bind(&API::get_firewall_rule_handler, this)); - this->server->on("/api/firewall/rules", HTTP_POST, std::bind(&API::post_firewall_handler, this)); - this->server->on(UriRegex("/api/firewall/rules/([0-9]+)"), HTTP_DELETE, std::bind(&API::delete_firewall_handler, this)); - this->server->on("/api", HTTP_GET, std::bind(&API::get_endpoint_list_handler, this)); - this->server->onNotFound(std::bind(&API::not_found_handler, this)); - - add_endpoint_to_list("/api/firewall/rules", "GET", "Get all Firewall Rules"); - add_endpoint_to_list("/api/firewall/rules/", "GET", "Get Firewall Rule by key"); - add_endpoint_to_list("/api/firewall/rules", "POST", "Create Firewall Rule"); - add_endpoint_to_list("/api/firewall/rules/", "DELETE", "Delete Firewall Rule by key"); - } - - void API::add_endpoint_to_list(const String uri, const char *method, const char *description) - { - api_endpoint_t *temp; - const String url = get_url_base() + uri; - - api_endpoint_t *api_ptr = (api_endpoint_t *)malloc(sizeof(api_endpoint_t)); - strncpy(api_ptr->uri, url.c_str(), sizeof(api_ptr->uri)); - strncpy(api_ptr->method, method, sizeof(api_ptr->method)); - strncpy(api_ptr->description, description, sizeof(api_ptr->description)); - - if (this->endpoint_head == NULL) - { - this->endpoint_head = api_ptr; - api_ptr->next = NULL; - return; - } - temp = this->endpoint_head; - while (temp->next != NULL) - { - temp = temp->next; - } - temp->next = api_ptr; - api_ptr->next = NULL; - return; - } - - void API::not_found_handler() - { - this->json_message_response("see " + get_url_base() + "/api for available routes", 404); - } - - void API::get_endpoint_list_handler() - { - this->json_array_response(this->construct_json_api(), 200); - } - - void API::get_firewall_rule_handler() - { - if (this->check_auth() == DENIED) - return; - String param = this->server->pathArg(0); - int rule_number = atoi(param.c_str()); - firewall_rule_t *rule_ptr = firewall->get_rule_from_firewall(rule_number); - if (rule_ptr == NULL) - this->json_message_response("rule does not exist", 404); - else - this->json_generic_response(this->construct_json_firewall_rule(rule_ptr), 200); - } - - void API::get_firewall_rules_handler() - { - if (this->check_auth() == DENIED) - return; - this->json_array_response(this->construct_json_firewall(), 200); - } - - void API::post_firewall_handler() - { - if (this->check_auth() == DENIED) - return; - if (request_has_all_firewall_parameter()) - { - String args[IPV4ADDRESS_LENGTH] = {}; - for (uint8_t i = 0; i < firewall_fields_amount; i++) - { - args[i] = this->server->arg(firewall_fields[i]); - } - firewall_rule_t *rule_ptr = firewall->add_rule_to_firewall(args); - this->json_generic_response(this->construct_json_firewall_rule(rule_ptr), 201); - } - else - { - this->json_message_response("not enough parameter provided", 400); - } - } - - void API::delete_firewall_handler() - { - if (this->check_auth() == DENIED) - return; - String param = this->server->pathArg(0); - int rule_number = atoi(param.c_str()); - if (firewall->delete_rule_from_firewall(rule_number) == SUCCESS) - this->json_message_response("firewall rule deleted", 200); - else - this->json_message_response("cannot delete firewall rule", 500); - } - - bool API::request_has_all_firewall_parameter() - { - if (!this->server->args()) - return false; - else - { - for (uint8_t i = 0; i < firewall_fields_amount; i++) - { - if (i != KEY && !this->server->hasArg(firewall_fields[i])) - return false; - } - return true; - } - } - - String API::json_new_attribute(String key, String value, bool last) - { - String json_string; - json_string += "\"" + key + "\": \"" + value + "\""; - if (!last) - json_string += ","; - return json_string; - } - - String API::json_new_attribute(String key, uint32_t value, bool last) - { - return json_new_attribute(key, String(value), last); - } - - void API::json_generic_response(String serialized_string, const uint16_t response_code) - { - this->server->send(response_code, json_response_type, serialized_string); - } - - void API::json_array_response(String serialized_string, const uint16_t response_code) - { - this->server->send(response_code, json_response_type, "[" + serialized_string + "]"); - } - - void API::json_message_response(String message, const uint16_t response_code) - { - String serialized_string = "{"; - serialized_string += json_new_attribute("message", message, true); - serialized_string += "}"; - this->server->send(response_code, json_response_type, serialized_string); - } - - String API::construct_json_firewall_rule(firewall_rule_t *rule_ptr) - { - String serialized_string = "{"; - serialized_string += json_new_attribute(firewall_fields[KEY], rule_ptr->key); - serialized_string += json_new_attribute(firewall_fields[IP], rule_ptr->ip); - serialized_string += json_new_attribute(firewall_fields[PORT_FROM], rule_ptr->port_from); - serialized_string += json_new_attribute(firewall_fields[PORT_TO], rule_ptr->port_to); - serialized_string += json_new_attribute(firewall_fields[PROTOCOL], protocol_to_string(rule_ptr->protocol)); - serialized_string += json_new_attribute(firewall_fields[TARGET], target_to_string(rule_ptr->target), true); - serialized_string += "}"; - return serialized_string; - } - - String API::construct_json_firewall() - { - firewall_rule_t *rule_ptr = firewall->get_rule_head(); - String serialized_string; - while (rule_ptr != NULL) - { - serialized_string += construct_json_firewall_rule(rule_ptr); - rule_ptr = rule_ptr->next; - if (rule_ptr != NULL) - serialized_string += ","; - } - return serialized_string; - } - - String API::construct_json_api_endpoint(api_endpoint_t *api_ptr) - { - String serialized_string = "{"; - serialized_string += json_new_attribute("endpoint", api_ptr->uri); - serialized_string += json_new_attribute("description", api_ptr->description); - serialized_string += json_new_attribute("method", api_ptr->method, true); - serialized_string += "}"; - return serialized_string; - } - - String API::construct_json_api() - { - api_endpoint_t *api_ptr = this->endpoint_head; - String serialized_string; - while (api_ptr != NULL) - { - serialized_string += construct_json_api_endpoint(api_ptr); - api_ptr = api_ptr->next; - if (api_ptr != NULL) - serialized_string += ","; - } - return serialized_string; - } -} diff --git a/ESPFirewall/lib/Firewall/src/API.hpp b/ESPFirewall/lib/Firewall/src/API.hpp deleted file mode 100644 index c583b12..0000000 --- a/ESPFirewall/lib/Firewall/src/API.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef ESP32_API_HPP -#define ESP32_API_HPP - -#ifdef ESP32 -#include "WebServer.h" -#elif defined(ESP8266) -#include "ESP8266WebServerSecure.h" -#endif - -#include "uri/UriRegex.h" -#include "Firewall.hpp" -#include "Utils.hpp" - -namespace fw -{ - class API - { - public: - API(Firewall *, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port = 8080); - ~API(); - void handle_client(); - - private: -#ifdef ESP32 - WebServer *server; -#elif defined(ESP8266) - BearSSL::ESP8266WebServerSecure *server; - BearSSL::ServerSessions *serverCache; -#endif - Firewall *firewall; - credential_t credentials; - api_endpoint_t *endpoint_head = NULL; - String api_ip = "0.0.0.0"; - uint16_t api_port; - String json_response_type = "application/json; charset=utf-8"; - String log = "[API]"; - - String get_url_base(); - ok_t setup_auth(const char *username, const char *password); - auth_t check_auth(); - - void setup_routing(const char *cert, const char *key); - void add_endpoint_to_list(const String uri, const char *method, const char *description); - void not_found_handler(); - void get_endpoint_list_handler(); - void get_firewall_rule_handler(); - void get_firewall_rules_handler(); - void post_firewall_handler(); - void delete_firewall_handler(); - - bool request_has_all_firewall_parameter(); - String json_new_attribute(String key, String value, bool last = false); - String json_new_attribute(String key, uint32_t value, bool last = false); - void json_generic_response(String serialized_string, const uint16_t response_code); - void json_array_response(String serialized_string, const uint16_t response_code); - void json_message_response(String message, const uint16_t response_code); - - String construct_json_firewall_rule(firewall_rule_t *rule_ptr); - String construct_json_firewall(); - String construct_json_api_endpoint(api_endpoint_t *api_ptr); - String construct_json_api(); - }; -} - -#endif diff --git a/ESPFirewall/lib/Firewall/src/Firewall.cpp b/ESPFirewall/lib/Firewall/src/Firewall.cpp deleted file mode 100644 index 45c6bf1..0000000 --- a/ESPFirewall/lib/Firewall/src/Firewall.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "Firewall.hpp" - -namespace fw -{ - Firewall::Firewall() - { - this->amount_of_rules = retrieve_amount_of_rules(); - for (uint8_t i = 1; i <= this->amount_of_rules; i++) - { - firewall_rule_t *rule_ptr = retrieve_firewall_rule(i); - this->add_rule_to_firewall(rule_ptr, false); - } - } - - Firewall::~Firewall() - { - } - - firewall_rule_t *Firewall::get_rule_head() - { - return this->rule_head; - } - - void Firewall::add_rule_to_firewall(firewall_rule_t *rule_ptr, const bool save_in_eeprom) - { - store_amount_of_rules(this->amount_of_rules); - if (save_in_eeprom) - Storage::store_firewall_rule(rule_ptr); - if (this->rule_head == NULL) - { - this->rule_head = rule_ptr; - rule_ptr->next = NULL; - return; - } - firewall_rule_t *current_rule; - current_rule = this->rule_head; - while (current_rule->next != NULL) - current_rule = current_rule->next; - current_rule->next = rule_ptr; - rule_ptr->next = NULL; - } - - firewall_rule_t *Firewall::add_rule_to_firewall(String *args) - { - firewall_rule_t *rule_ptr = (firewall_rule_t *)malloc(sizeof(firewall_rule_t)); - rule_ptr->key = ++this->amount_of_rules; - - strncpy(rule_ptr->ip, args[IP].c_str(), sizeof(rule_ptr->ip)); - rule_ptr->port_from = args[PORT_FROM].toInt(); - rule_ptr->port_to = args[PORT_TO].toInt(); - rule_ptr->protocol = string_to_protocol(args[PROTOCOL]); - rule_ptr->target = string_to_target(args[TARGET]); - - add_rule_to_firewall(rule_ptr); - return rule_ptr; - } - - firewall_rule_t *Firewall::get_rule_from_firewall(const uint8_t key) - { - firewall_rule_t *rule_ptr = this->rule_head; - if (this->rule_head == NULL) - return NULL; - while (rule_ptr->key != key) - { - if (rule_ptr->next == NULL) - return NULL; - else - rule_ptr = rule_ptr->next; - } - return rule_ptr; - } - - ok_t Firewall::delete_rule_from_firewall(const uint8_t key) - { - if (this->rule_head == NULL) - return NO_ACTION; - firewall_rule_t *current_rule = this->rule_head; - firewall_rule_t *previous_rule = NULL; - firewall_rule_t *temp = NULL; - while (current_rule->key != key) - { - if (current_rule->next == NULL) - return NO_ACTION; - else - { - previous_rule = current_rule; - current_rule = current_rule->next; - } - } - if (current_rule == this->rule_head) - { - this->rule_head = rule_head->next; - temp = this->rule_head; - } - else - { - previous_rule->next = current_rule->next; - temp = previous_rule->next; - } - while (temp != NULL) - { - temp->key--; - temp = temp->next; - } - free(current_rule); - this->amount_of_rules--; - Storage::store_amount_of_rules(this->amount_of_rules); - if (this->amount_of_rules != 0) - Storage::store_all_firewall_rules(rule_head); - return SUCCESS; - } - - bool Firewall::is_included_in_firewall(String &ip, const uint32_t &port) - { - firewall_rule_t *rule_ptr = this->rule_head; - while (rule_ptr != NULL) - { - if (ip == String(rule_ptr->ip) && - is_in_range(port, rule_ptr->port_from, rule_ptr->port_to) && - rule_ptr->target != TARGET_ACCEPT) - return true; - rule_ptr = rule_ptr->next; - } - return false; - } - - bool Firewall::is_client_allowed(WiFiClient client) - { - String ip = client.remoteIP().toString(); - const uint32_t port = client.remotePort(); - return !is_included_in_firewall(ip, port); - } -} diff --git a/ESPFirewall/lib/Firewall/src/Firewall.hpp b/ESPFirewall/lib/Firewall/src/Firewall.hpp deleted file mode 100644 index 47cc64d..0000000 --- a/ESPFirewall/lib/Firewall/src/Firewall.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ESP32_FIREWALL_HPP -#define ESP32_FIREWALL_HPP - -#include "Utils.hpp" -#include "Storage.hpp" -#include "WiFiClient.h" - -namespace fw -{ - class Firewall : public Storage - { - public: - Firewall(); - ~Firewall(); - - firewall_rule_t *get_rule_head(); - void add_rule_to_firewall(firewall_rule_t *rule_ptr, const bool save_in_eeprom = true); - firewall_rule_t *add_rule_to_firewall(String *args); - firewall_rule_t *get_rule_from_firewall(const uint8_t key); - ok_t delete_rule_from_firewall(const uint8_t key); - - bool is_included_in_firewall(String &ip, const uint32_t &port); - bool is_client_allowed(WiFiClient client); - - protected: - uint8_t amount_of_rules = 0; - firewall_rule_t *rule_head = NULL; - }; -} - -#endif diff --git a/ESPFirewall/lib/Firewall/src/Storage.cpp b/ESPFirewall/lib/Firewall/src/Storage.cpp deleted file mode 100644 index 4504ae4..0000000 --- a/ESPFirewall/lib/Firewall/src/Storage.cpp +++ /dev/null @@ -1,124 +0,0 @@ -#include "Storage.hpp" - -namespace fw -{ - Storage::Storage() - { -#if defined(ESP8266) - this->max_rules = 15; - this->eeprom_amount_of_rules = 0; - this->eeprom_rules_head = 1; - this->eeprom_size = this->max_rules * sizeof(firewall_rule_t) + eeprom_rules_head; - EEPROM.begin(this->eeprom_size); -#endif - } - - Storage::~Storage() - { - } - - uint16_t Storage::eeprom_rule_position(uint8_t key) - { -#ifdef ESP32 - return 0; -#elif defined(ESP8266) - return eeprom_rules_head + (key - 1) * sizeof(firewall_rule_t); -#endif - } - - uint8_t Storage::retrieve_amount_of_rules() - { -#ifdef ESP32 - this->memory.begin("settings", true); - const uint8_t value = memory.getUChar("amount_of_rules", 0); - this->memory.end(); - - return value; -#elif defined(ESP8266) - const uint8_t amount_of_rules = EEPROM.read(this->eeprom_amount_of_rules); - - if (amount_of_rules > this->max_rules) - return 0; - return amount_of_rules; -#endif - } - - void Storage::store_amount_of_rules(const uint8_t new_amount) - { -#ifdef ESP32 - this->memory.begin("settings", false); - this->memory.putUChar("amount_of_rules", new_amount); - this->memory.end(); -#elif defined(ESP8266) - EEPROM.put(this->eeprom_amount_of_rules, new_amount); - EEPROM.commit(); -#endif - } - - firewall_rule_t *Storage::retrieve_firewall_rule(const uint8_t key) - { - firewall_rule_t *rule_ptr = (firewall_rule_t *)malloc(sizeof(firewall_rule_t)); - rule_ptr->key = key; -#ifdef ESP32 - char rulename[9]; // fwRule99\n - sprintf(rulename, "fwRule%i", key); - - this->memory.begin(rulename, true); - strncpy(rule_ptr->ip, this->memory.getString(firewall_fields[IP], "0.0.0.0").c_str(), sizeof(rule_ptr->ip)); - rule_ptr->port_from = this->memory.getULong(firewall_fields[PORT_FROM], 0); - rule_ptr->port_to = this->memory.getULong(firewall_fields[PORT_TO], 0); - rule_ptr->protocol = static_cast(this->memory.getUChar(firewall_fields[PROTOCOL], PROTOCOL_ALL)); - rule_ptr->target = static_cast(this->memory.getUChar(firewall_fields[TARGET], TARGET_REJECT)); - this->memory.end(); - -#elif defined(ESP8266) - uint16_t eespom_position = eeprom_rule_position(key); - - EEPROM.get(eespom_position, rule_ptr->ip); - EEPROM.get(eespom_position += sizeof(rule_ptr->ip), rule_ptr->port_from); - EEPROM.get(eespom_position += sizeof(rule_ptr->port_from), rule_ptr->port_to); - EEPROM.get(eespom_position += sizeof(rule_ptr->port_to), rule_ptr->protocol); - EEPROM.get(eespom_position += sizeof(rule_ptr->protocol), rule_ptr->target); -#endif - return rule_ptr; - } - - void Storage::store_all_firewall_rules(firewall_rule_t *rule_head) - { -#ifdef ESP32 - firewall_rule_t *temp = rule_head; - while (temp != NULL) - { - store_firewall_rule(temp); - temp = temp->next; - } -#endif - } - - void Storage::store_firewall_rule(firewall_rule_t *rule_ptr) - { -#ifdef ESP32 - char rulename[9]; // fwRule99\n - sprintf(rulename, "fwRule%i", rule_ptr->key); - - this->memory.begin(rulename, false); - this->memory.putString(firewall_fields[IP], rule_ptr->ip); - this->memory.putULong(firewall_fields[PORT_FROM], rule_ptr->port_from); - this->memory.putULong(firewall_fields[PORT_TO], rule_ptr->port_to); - this->memory.putUChar(firewall_fields[PROTOCOL], rule_ptr->protocol); - this->memory.putUChar(firewall_fields[TARGET], rule_ptr->target); - - this->memory.end(); -#elif defined(ESP8266) - uint16_t eespom_position = eeprom_rule_position(rule_ptr->key); - - EEPROM.put(eespom_position, rule_ptr->ip); - EEPROM.put(eespom_position += sizeof(rule_ptr->ip), rule_ptr->port_from); - EEPROM.put(eespom_position += sizeof(rule_ptr->port_from), rule_ptr->port_to); - EEPROM.put(eespom_position += sizeof(rule_ptr->port_to), rule_ptr->protocol); - EEPROM.put(eespom_position += sizeof(rule_ptr->protocol), rule_ptr->target); - - EEPROM.commit(); -#endif - } -} diff --git a/ESPFirewall/lib/Firewall/src/Storage.hpp b/ESPFirewall/lib/Firewall/src/Storage.hpp deleted file mode 100644 index ec69548..0000000 --- a/ESPFirewall/lib/Firewall/src/Storage.hpp +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef ESP32_STORAGE_HPP -#define ESP32_STORAGE_HPP - -#ifdef ESP32 -#include "Preferences.h" -#elif defined(ESP8266) -#include "EEPROM.h" -#endif - -#include "Utils.hpp" - -namespace fw -{ - class Storage - { - public: - Storage(); - ~Storage(); - - private: -#ifdef ESP32 - Preferences memory; -#elif defined(ESP8266) - uint8_t max_rules; - uint16_t eeprom_size; - uint16_t eeprom_amount_of_rules; - uint16_t eeprom_rules_head; - -#endif - uint16_t eeprom_rule_position(uint8_t key); - - protected: - uint8_t retrieve_amount_of_rules(); - void store_amount_of_rules(const uint8_t new_amount); - firewall_rule_t *retrieve_firewall_rule(const uint8_t key); - void store_all_firewall_rules(firewall_rule_t *rule_head); - void store_firewall_rule(firewall_rule_t *rule_ptr); - }; -} - -#endif diff --git a/ESPFirewall/lib/Firewall/src/Utils.cpp b/ESPFirewall/lib/Firewall/src/Utils.cpp deleted file mode 100644 index 9be85ba..0000000 --- a/ESPFirewall/lib/Firewall/src/Utils.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "Utils.hpp" - -namespace fw -{ - String protocol_to_string(firewall_protocol_t &protocol) - { - switch (protocol) - { - case PROTOCOL_TCP: - return "TCP"; - case PROTOCOL_UDP: - return "UDP"; - default: - return "ALL"; - } - } - - firewall_protocol_t string_to_protocol(String &protocol) - { - if (protocol.equals("TCP")) - return PROTOCOL_TCP; - else if (protocol.equals("UDP")) - return PROTOCOL_UDP; - else - return PROTOCOL_ALL; - } - - String target_to_string(firewall_target_t &target) - { - switch (target) - { - case TARGET_REJECT: - return "REJECT"; - case TARGET_DROP: - return "DROP"; - default: - return "ACCEPT"; - } - } - - firewall_target_t string_to_target(String &target) - { - if (target.equals("REJECT")) - return TARGET_REJECT; - else if (target.equals("DROP")) - return TARGET_DROP; - else - return TARGET_ACCEPT; - } - - void endless_loop() - { - Serial.printf("Something went wrong. Running endless loop until fixed..."); - while (true) - delay(500); - } - - bool is_in_range(const uint32_t number, const uint32_t lower, const uint32_t upper) - { - return lower <= number && number <= upper; - } -} diff --git a/ESPFirewall/lib/Firewall/src/Utils.hpp b/ESPFirewall/lib/Firewall/src/Utils.hpp deleted file mode 100644 index db8e5d5..0000000 --- a/ESPFirewall/lib/Firewall/src/Utils.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef UTILS_HPP -#define UTILS_HPP - -#include "Arduino.h" -#include "WString.h" - -namespace fw -{ - typedef enum firewall_targets : uint8_t - { - TARGET_REJECT = 0, - TARGET_DROP = 1, - TARGET_ACCEPT = 2, - } firewall_target_t; - - typedef enum firewall_protocols : uint8_t - { - PROTOCOL_TCP = 0, - PROTOCOL_UDP = 1, - PROTOCOL_ALL = 255, - } firewall_protocol_t; - - typedef enum ok : uint8_t - { - SUCCESS = 0, - ERROR = 1, - NO_ACTION = 2, - } ok_t; - - typedef enum auth : uint8_t - { - AUTHENTICATED = 0, - DENIED = 1, - } auth_t; - - static const uint8_t IPV4ADDRESS_LENGTH = 16; - typedef struct firewall_rules - { - uint8_t key; - char ip[IPV4ADDRESS_LENGTH]; - uint32_t port_from; // port can be max 65565 - uint32_t port_to; // range of uint16_t: 0 to 65535 - firewall_protocol_t protocol; - firewall_target_t target; - struct firewall_rules *next; - } firewall_rule_t; - - static const uint8_t firewall_fields_amount = 6; - const char firewall_fields[firewall_fields_amount][10] = {"key", "ip", "port_from", "port_to", "protocol", "target"}; - typedef enum firewall_fields : uint8_t - { - KEY, - IP, - PORT_FROM, - PORT_TO, - PROTOCOL, - TARGET, - } firewall_fields_t; - - static const uint8_t CREDENTIALS_LENGTH = 32; - typedef struct credentials - { - char password[CREDENTIALS_LENGTH]; - char username[CREDENTIALS_LENGTH]; - } credential_t; - - typedef struct api_endpoints - { - char uri[60]; - char method[7]; - char description[30]; - struct api_endpoints *next; - } api_endpoint_t; - - String protocol_to_string(firewall_protocol_t &protocol); - firewall_protocol_t string_to_protocol(String &protocol); - String target_to_string(firewall_target_t &target); - firewall_target_t string_to_target(String &target); - String response_code_to_string(const uint16_t response_code); - void endless_loop(); - bool is_in_range(const uint32_t number, const uint32_t lower, const uint32_t upper); -} - -#endif diff --git a/ESPFirewall/lib/README b/ESPFirewall/lib/README deleted file mode 100644 index 6debab1..0000000 --- a/ESPFirewall/lib/README +++ /dev/null @@ -1,46 +0,0 @@ - -This directory is intended for project specific (private) libraries. -PlatformIO will compile them to static libraries and link into executable file. - -The source code of each library should be placed in a an own separate directory -("lib/your_library_name/[here are source files]"). - -For example, see a structure of the following two libraries `Foo` and `Bar`: - -|--lib -| | -| |--Bar -| | |--docs -| | |--examples -| | |--src -| | |- Bar.c -| | |- Bar.h -| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html -| | -| |--Foo -| | |- Foo.c -| | |- Foo.h -| | -| |- README --> THIS FILE -| -|- platformio.ini -|--src - |- main.c - -and a contents of `src/main.c`: -``` -#include -#include - -int main (void) -{ - ... -} - -``` - -PlatformIO Library Dependency Finder will find automatically dependent -libraries scanning project source files. - -More information about PlatformIO Library Dependency Finder -- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/ESPFirewall/platformio.ini b/ESPFirewall/platformio.ini deleted file mode 100644 index 76d7d7e..0000000 --- a/ESPFirewall/platformio.ini +++ /dev/null @@ -1,24 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; https://docs.platformio.org/page/projectconf.html - -[platformio] -default_envs = esp8266 - -[env:esp32] -platform = espressif32 -board = esp32dev -framework = arduino -monitor_speed = 115200 - -[env:esp8266] -platform = espressif8266 -board = d1_mini -framework = arduino -monitor_speed = 115200 diff --git a/ESPFirewall/src/main.cpp b/ESPFirewall/src/main.cpp deleted file mode 100644 index 9324a7b..0000000 --- a/ESPFirewall/src/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "theSecrets.h" -#include "theCerts.h" - -#ifdef ESP32 -#include "WiFi.h" -#include "esp_wifi.h" -#elif defined(ESP8266) -#include "ESP8266WiFi.h" -#define LED 2 -#endif - -#include "Firewall.hpp" -#include "API.hpp" - -fw::Firewall *firewall; -fw::API *firewallApi; - -WiFiServer wifiServer(80); - -#ifdef ESP8266 -void toggleLED() -{ - if (digitalRead(LED) == LOW) - digitalWrite(LED, HIGH); - else - digitalWrite(LED, LOW); -} -#endif - -void setup() -{ -#ifdef ESP8266 - pinMode(LED, OUTPUT); -#endif - Serial.begin(115200); - Serial.println(); - WiFi.begin(ssid, psk); - while (!WiFi.isConnected()) - { -#ifdef ESP8266 - toggleLED(); -#endif - Serial.print("."); - delay(200); - } - Serial.println(); - Serial.print("[WiFi] IP: "); - Serial.println(WiFi.localIP()); - firewall = new fw::Firewall(); - firewallApi = new fw::API(firewall, cert, key, username, password, WiFi.localIP().toString()); - wifiServer.begin(); -} - -void loop() -{ - firewallApi->handle_client(); - WiFiClient client = wifiServer.available(); - if (client) - { - if (firewall->is_client_allowed(client)) - { - Serial.println("allowed"); - client.stop(); - } - else - { - Serial.println("rejected"); - client.flush(); - } - } -} \ No newline at end of file diff --git a/ESPFirewall/test/README b/ESPFirewall/test/README deleted file mode 100644 index b94d089..0000000 --- a/ESPFirewall/test/README +++ /dev/null @@ -1,11 +0,0 @@ - -This directory is intended for PlatformIO Unit Testing and project tests. - -Unit Testing is a software testing method by which individual units of -source code, sets of one or more MCU program modules together with associated -control data, usage procedures, and operating procedures, are tested to -determine whether they are fit for use. Unit testing finds problems early -in the development cycle. - -More information about PlatformIO Unit Testing: -- https://docs.platformio.org/page/plus/unit-testing.html diff --git a/tester.py b/tester.py deleted file mode 100644 index 096e736..0000000 --- a/tester.py +++ /dev/null @@ -1,54 +0,0 @@ -import socket -import sys -import argparse - -message = "test" - - -def main(argv): - parser = argparse.ArgumentParser( - description='Send socket message to ip and port with protocol.') - parser.add_argument('-i', '--ip', - default='localhost', - dest='ip', - help='Provide destination ip. Defaults to localhost', - type=str - ) - parser.add_argument('-p', '--port', - default=80, - dest='port', - help='Provide destination port. Defaults to 80', - type=int - ) - parser.add_argument('-t', '--type', choices=['UDP', 'TCP'], - default='UDP', - dest='proto', - help='Provide protocol. Defaults to UDP', - type=str - ) - args = parser.parse_args() - - print(f'Sending message to {args.ip}:{args.port} width {args.proto}') - - if args.proto == 'TCP': - sock = socket.socket() - try: - sock.connect((args.ip, args.port)) - sock.send(message.encode()) - print("Message sent.") - sock.close() - except: - print("Cannot send message...") - - else: - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - try: - sock.sendto(message.encode('utf-8'), (args.ip, args.port)) - print("Message sent.") - sock.close() - except: - print("Cannot send message...") - - -if __name__ == "__main__": - main(sys.argv[1:])