diff --git a/documentazione.md b/documentazione.md index 0d3f74c..b39700a 100644 --- a/documentazione.md +++ b/documentazione.md @@ -23,7 +23,29 @@ ## Implementazione del protocollo per la JMV +Per poter utilizzare il protocollo all'interno dell'applicazione Android è stato sviluppato un'implementazione di quest'ultimo per la *Java Virtual Machine*. +Come visto nella @sec:rak-rvk il protocollo genera le chiavi di autorizzazione e verifica a partire dalla curva ellittica *Ed25519*. +La nostra implementazione del protocollo per la gestione di questa curva utilizza la libreria NOME_LIBRERIA. +La chiave privata e pubblica prodotte da quest'ultima sono state *wrappate* all'interno delle classi `ReportAuthorizationKey` e `ReportVerificationKey` in questo modo le classi hanno un nome più esplicativo rispetto al contesto di utilizzo e un futuro cambiamento della libreria utilizzata per la crittografia non impatterà l'API della libreria. + +A partire dalla `ReportAuthorizationKey` è possibile ricavare la `TemporaryContactKey` iniziale[^tck-0] attraverso la funzione `baseTemporaryContactKey()` riportata nel @lst:tck-0. + +``` {.kotlin #lst:tck-0 caption="Derivazione della prima tck"} +fun baseTemporaryContactKey(): TemporaryContactKey { + val hmac = MessageDigest.getInstance("SHA-256").apply { + update(Const.H_TCK_DOMAIN_SEPARATOR) + update(key.toByteArray()) +} + + return TemporaryContactKey.createFromByteArray( + hmac.digest(), + 0 + ) +} +``` + +[^tck-0]: La chiave temporanea iniziale viene ricavata a partire dalla sola *rak* e da essa non è generato nessun numero temporaneo di contatto. # Applicazione