From 7d2720c952a1c6572e5c838875c441f68d6a342c Mon Sep 17 00:00:00 2001 From: norangebit Date: Fri, 10 Jul 2020 12:26:40 +0200 Subject: [PATCH 1/4] Add bibliography --- bib.bib | 63 ++++++++ documentazione.md | 12 +- header.yaml | 2 + ieee.csl | 400 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 472 insertions(+), 5 deletions(-) create mode 100644 bib.bib create mode 100644 ieee.csl diff --git a/bib.bib b/bib.bib new file mode 100644 index 0000000..5ff3766 --- /dev/null +++ b/bib.bib @@ -0,0 +1,63 @@ + +@online{AdvertiseSettings, + title = {{{AdvertiseSettings}}}, + journaltitle = {Android Developers}, + url = {https://developer.android.com/reference/android/bluetooth/le/AdvertiseSettings?hl=it}, + urldate = {2020-07-08}, + file = {/home/norangebit/Zotero/storage/QA2E8KJT/AdvertiseSettings.html}, + langid = {english} +} + +@online{AdvicePublicCOVID19, + title = {Advice for the Public on {{COVID}}-19 \textendash{} {{World Health Organization}}}, + url = {https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public}, + urldate = {2020-07-08}, + abstract = {Simple precautions to reduce your chances of being infected or spreading COVID-19.}, + file = {/home/norangebit/Zotero/storage/ZY3MFYWP/advice-for-public.html}, + langid = {english} +} + +@online{AndroidBeaconLibrary, + title = {Android {{Beacon Library}}}, + url = {https://altbeacon.github.io/android-beacon-library/}, + urldate = {2020-07-08}, + file = {/home/norangebit/Zotero/storage/RDCN2EQA/android-beacon-library.html} +} + +@online{BroadcastsOverview, + title = {Broadcasts Overview}, + journaltitle = {Android Developers}, + url = {https://developer.android.com/guide/components/broadcasts}, + urldate = {2020-07-09}, + file = {/home/norangebit/Zotero/storage/PVLZYLKD/broadcasts.html}, + langid = {english} +} + +@software{CryptographycafeEd25519elisabeth2020, + title = {Cryptography-Cafe/Ed25519-Elisabeth}, + date = {2020-06-30T09:56:21Z}, + origdate = {2019-03-17T03:50:16Z}, + url = {https://github.com/cryptography-cafe/ed25519-elisabeth}, + urldate = {2020-07-09}, + abstract = {Pure Java implementation of Ed25519. Contribute to cryptography-cafe/ed25519-elisabeth development by creating an account on GitHub.}, + keywords = {cryptography,ed25519,java,signature-scheme}, + organization = {{cryptography-cafe}} +} + +@online{InstallationBetterBibTeX, + title = {Installation :: {{Better BibTeX}} for {{Zotero}}}, + url = {https://retorque.re/zotero-better-bibtex/installation/}, + urldate = {2020-07-07}, + file = {/home/norangebit/Zotero/storage/4SV9VW2H/installation.html} +} + +@online{ServicesOverview, + title = {Services Overview}, + journaltitle = {Android Developers}, + url = {https://developer.android.com/guide/components/services}, + urldate = {2020-07-08}, + file = {/home/norangebit/Zotero/storage/E42F6BVA/services.html}, + langid = {english} +} + + diff --git a/documentazione.md b/documentazione.md index d18a4b4..dfdb16d 100644 --- a/documentazione.md +++ b/documentazione.md @@ -24,7 +24,7 @@ ## Implementazione del protocollo per la JMV Al fine di utilizzare il protocollo precedentemente descritto all'interno dell'applicazione Android, ne è stato sviluppato un'implementazione per la *Java Virtual Machine*. -La gestione della coppia di chiavi derivate dalla curva ellittica *Ed25519* è stata affidata alla libreria ***ed25519-elisabeth*** @CryptographycafeEd25519elisabeth2020. +La gestione della coppia di chiavi derivate dalla curva ellittica *Ed25519* è stata affidata alla libreria ***ed25519-elisabeth*** [@CryptographycafeEd25519elisabeth2020]. Le chiavi private e pubbliche prodotte sono state *wrappate* rispettivamente nelle classi `ReportAuthorizationKey` e `ReportVerificationKey`. Questa scelta non solo ha permesso di utilizzare nomi dal maggiore significato rispetto al dominio applicativo, ma anche di nascondere l'implementazione della curva *Ed25519* in modo da disaccoppiare l'interfaccia della libreria crittografica da quella utilizzata per il protocollo TCN. @@ -142,8 +142,8 @@ Inoltre a differenza delle prime due modalità è previsto l'upload unicamente d ## Bluetooth -L'interazione tra l'hardware bluetooth del dispositivo e l'applicazione è stata gestita attraverso l'impiego della libreria *Android Beacon Library* @AndroidBeaconLibrary che permette di gestire più facilmente le operazioni con beacon bluetooth. -Inoltre per rendere l'applicazione più funzionale, e quindi garantirne il funzionamento anche in background o a schermo spento è stato utilizzato un *foreground service* @ServicesOverview, che consente di mantenere in *primo piano* le operazioni di trasmissione e scansione anche quando l'applicazione non lo è. +L'interazione tra l'hardware bluetooth del dispositivo e l'applicazione è stata gestita attraverso l'impiego della libreria *Android Beacon Library* [@AndroidBeaconLibrary] che permette di gestire più facilmente le operazioni con beacon bluetooth. +Inoltre per rendere l'applicazione più funzionale, e quindi garantirne il funzionamento anche in background o a schermo spento è stato utilizzato un *foreground service* [@ServicesOverview], che consente di mantenere in *primo piano* le operazioni di trasmissione e scansione anche quando l'applicazione non lo è. Data la natura variegata di Android, le diverse implementazioni del sistema operativo adoperate dai vari produttori non si comportano sempre nello stesso modo, motivo per il quale alcuni dispositivi tenderanno a terminare, o mettere in pausa ugualmente l'applicazione[^dont-kill-my-app]. Potendo opera unicamente nello spazio utente non è stato possibile superare questi limiti. @@ -177,7 +177,7 @@ private fun rotateTCN() { } ``` -La scelta della frequenza di *advertising* è stata dettata dai vincoli tracciati dall'API di Android @AdvertiseSettings. +La scelta della frequenza di *advertising* è stata dettata dai vincoli tracciati dall'API di Android [@AdvertiseSettings]. Infatti la libreria permette di trasmettere un beacon con una frequenza di 1 *Hz*, 3 *Hz* o 10 *Hz*. Fortunatamente questi vincoli non si sono rilevati troppo limitanti infatti la frequenza di un Hertz, quindi un beacon trasmetto ogni secondo, permette di avere una buona trasmissione e di risparmiare batteria. Inoltre in fase di scanning evita che siano registrate più interazioni nello stesso ciclo. @@ -194,7 +194,7 @@ Com'è possibile dedurre anche dai nomi dei vari livelli, l'API non fornisce nes L'individuazione del livello più adatto è stata svolta per via sperimentale utilizzando cinque dispositivi differenti. I due livelli più alti sono stati immediatamente scartati in quanto permettevano di rilevare i beacon a distanze elevate cosa che avrebbe minato la bontà dell'applicazione. Con il livello ULTRA_LOW si è notato che venivano rilevate unicamente le interazioni inferiori al metro in contesti *free space*. -Poiché l'organizzazione mondiale della sanità raccomanda una distanza di almeno un metro @AdvicePublicCOVID19 questo livello di trasmissione non consente di rilevare contatti potenzialmente a rischio. +Poiché l'organizzazione mondiale della sanità raccomanda una distanza di almeno un metro [@AdvicePublicCOVID19] questo livello di trasmissione non consente di rilevare contatti potenzialmente a rischio. Per questo motivo si è scelto di utilizzare il livello LOW che permette di rilevare contatti fino a circa due metri. [^dispositivi-non-omogenei]: D'altronde, data la natura non omogenea dei vari dispositivi Android, una stima quantitativa sarebbe stata impossibile da ottenere. @@ -217,3 +217,5 @@ Per questo motivo si è scelto di utilizzare il livello LOW che permette di rile ## Rete + +# Riferimenti diff --git a/header.yaml b/header.yaml index fdd0926..1a7870d 100644 --- a/header.yaml +++ b/header.yaml @@ -7,5 +7,7 @@ author: - Noemi Mincolelli numbersections: true toc: true +bibliography: bib.bib +csl: ieee.csl --- diff --git a/ieee.csl b/ieee.csl new file mode 100644 index 0000000..2089efb --- /dev/null +++ b/ieee.csl @@ -0,0 +1,400 @@ + + From 58743a8bd51172cebfd9e51d3ee709066c486153 Mon Sep 17 00:00:00 2001 From: norangebit Date: Fri, 10 Jul 2020 12:48:24 +0200 Subject: [PATCH 2/4] Add memorizzazione --- bib.bib | 19 +++++++++++++++++++ documentazione.md | 24 ++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/bib.bib b/bib.bib index 5ff3766..85e5ee2 100644 --- a/bib.bib +++ b/bib.bib @@ -24,6 +24,15 @@ file = {/home/norangebit/Zotero/storage/RDCN2EQA/android-beacon-library.html} } +@online{AndroidJetpackAndroid, + title = {Android {{Jetpack}} | {{Android Developers}}}, + url = {https://developer.android.com/jetpack}, + urldate = {2020-07-10}, + abstract = {Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that developers can focus on the code they care about.}, + file = {/home/norangebit/Zotero/storage/X2QST32B/jetpack.html}, + langid = {english} +} + @online{BroadcastsOverview, title = {Broadcasts Overview}, journaltitle = {Android Developers}, @@ -51,6 +60,16 @@ file = {/home/norangebit/Zotero/storage/4SV9VW2H/installation.html} } +@online{RoomPersistenceLibrary, + title = {Room {{Persistence Library}}}, + journaltitle = {Android Developers}, + url = {https://developer.android.com/topic/libraries/architecture/room}, + urldate = {2020-07-10}, + abstract = {Learn to use the Room Library}, + file = {/home/norangebit/Zotero/storage/ZU9BFHZW/room.html}, + langid = {english} +} + @online{ServicesOverview, title = {Services Overview}, journaltitle = {Android Developers}, diff --git a/documentazione.md b/documentazione.md index dfdb16d..5529d82 100644 --- a/documentazione.md +++ b/documentazione.md @@ -213,7 +213,31 @@ Per questo motivo si è scelto di utilizzare il livello LOW che permette di rile ## Memorizzazione +In base alla modalità di funzionamento l'applicazione deve memorizzare diversi tipi di dati. +La gestione della persistenza è stata realizzata attraverso la libreria ***Room*** [@RoomPersistenceLibrary] una componente di *Jetpack* [@AndroidJetpackAndroid], la suite di librerie sopportate da *Google*. +*Room* fornisce un layer astratto che permette di operare più facilmente con il database *SQLite* sottostante. +La memorizzazione dei contatti è avvenuta tramite lo schema riportato nel @lst:contact-data. +Questi dati vengono conservati solo nella modalità di funzionamento *B* e *C* poiché nella modalità *A* il contatto viene comunicano immediatamente al server per cui non è necessaria una memorizzazione locale. + +``` {.markdown #lst:contact-data caption="Schema utilizzato per la memorizzazione dei dati di contatto."} +- `id`: Int [PrimaryKey | AutoGenerate] +- `uuidReceiver`: String +- `uuidSender`: String +- `rssi`: Int +- `txPower`: Int +- `timestamp`: Long +``` + +Nella modalità *C* è necessario memorizzare anche le tck (si veda la @sec:tck per maggiori dettagli) utilizzate nel corso del tempo. +Oltre alla memorizzazione della tck, tramite un array di byte, è necessario memorizzare anche l'indice associato ad essa e il timestamp di primo utilizzo. +Lo schema utilizzato per la memorizzazione di queste informazioni è riportato nel @lst:tck-data. + +``` {.markdown #lst:tck-data caption="Schema utilizzato per la memorizzazione delle tck."} +- `index`: Short [PrimaryKey] +- `timestamp`: Long, +- `tck`: ByteArray +``` ## Rete From d5ac71f2d6b32bcbe8680eecc991eaefd89fc8b6 Mon Sep 17 00:00:00 2001 From: norangebit Date: Fri, 10 Jul 2020 14:41:41 +0200 Subject: [PATCH 3/4] Add DAO --- documentazione.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/documentazione.md b/documentazione.md index 5529d82..f873c1b 100644 --- a/documentazione.md +++ b/documentazione.md @@ -229,9 +229,9 @@ Questi dati vengono conservati solo nella modalità di funzionamento *B* e *C* p - `timestamp`: Long ``` -Nella modalità *C* è necessario memorizzare anche le tck (si veda la @sec:tck per maggiori dettagli) utilizzate nel corso del tempo. +Nella modalità *C* è necessario memorizzare anche le tck utilizzate nel corso del tempo (si veda la @sec:tck per maggiori dettagli). Oltre alla memorizzazione della tck, tramite un array di byte, è necessario memorizzare anche l'indice associato ad essa e il timestamp di primo utilizzo. -Lo schema utilizzato per la memorizzazione di queste informazioni è riportato nel @lst:tck-data. +Lo schema della tabella utilizzata per la memorizzazione di queste informazioni è riportato nel @lst:tck-data. ``` {.markdown #lst:tck-data caption="Schema utilizzato per la memorizzazione delle tck."} - `index`: Short [PrimaryKey] @@ -239,6 +239,32 @@ Lo schema utilizzato per la memorizzazione di queste informazioni è riportato n - `tck`: ByteArray ``` +Questi dati persistenti sono stati acceduti mediante l'utilizzo di due *Data Access Object* (DAO). +Le interfacce dei DAO utilizzati è stata riportata nel @lst:dao. + +``` {.kotlin #lst:dao caption="Interfacce dei Data Access Objects."} +@Dao +interface ContactDataDao { + @Query("SELECT * FROM contact_data") + suspend fun getAllContactData(): List + + @Insert + suspend fun insert(cn: ContactData) +} + +@Dao +interface TCNDataDao { + @Query("SELECT * FROM tcn_data") + suspend fun getAllTCNData(): List + + @Query("SELECT * FROM tcn_data WHERE `index` == :index") + suspend fun getByIndex(index: Short): TCNData + + @Insert + suspend fun insert(tcnData: TCNData) +} +``` + ## Rete From d943975e3c84021dd13757e03f924d6834f9a041 Mon Sep 17 00:00:00 2001 From: norangebit Date: Fri, 10 Jul 2020 17:18:51 +0200 Subject: [PATCH 4/4] Add correction --- documentazione.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentazione.md b/documentazione.md index f873c1b..f6a7771 100644 --- a/documentazione.md +++ b/documentazione.md @@ -214,11 +214,11 @@ Per questo motivo si è scelto di utilizzare il livello LOW che permette di rile ## Memorizzazione In base alla modalità di funzionamento l'applicazione deve memorizzare diversi tipi di dati. -La gestione della persistenza è stata realizzata attraverso la libreria ***Room*** [@RoomPersistenceLibrary] una componente di *Jetpack* [@AndroidJetpackAndroid], la suite di librerie sopportate da *Google*. +La gestione della persistenza è stata realizzata attraverso la libreria ***Room*** [@RoomPersistenceLibrary], una componente di *Jetpack* [@AndroidJetpackAndroid] la suite di librerie supportate da *Google*. *Room* fornisce un layer astratto che permette di operare più facilmente con il database *SQLite* sottostante. La memorizzazione dei contatti è avvenuta tramite lo schema riportato nel @lst:contact-data. -Questi dati vengono conservati solo nella modalità di funzionamento *B* e *C* poiché nella modalità *A* il contatto viene comunicano immediatamente al server per cui non è necessaria una memorizzazione locale. +Questi dati vengono conservati solo nella modalità di funzionamento *B* e *C* poiché nella modalità *A* il contatto viene comunicato immediatamente al server per cui non è necessaria una memorizzazione locale. ``` {.markdown #lst:contact-data caption="Schema utilizzato per la memorizzazione dei dati di contatto."} - `id`: Int [PrimaryKey | AutoGenerate] @@ -240,7 +240,7 @@ Lo schema della tabella utilizzata per la memorizzazione di queste informazioni ``` Questi dati persistenti sono stati acceduti mediante l'utilizzo di due *Data Access Object* (DAO). -Le interfacce dei DAO utilizzati è stata riportata nel @lst:dao. +Le interfacce dei DAO utilizzate sono riportate nel @lst:dao. ``` {.kotlin #lst:dao caption="Interfacce dei Data Access Objects."} @Dao