Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attestation Chaining, Revocation, and Communication Protocols #65

Draft
wants to merge 161 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
b563c14
Rename arrayutils to better reflect usage + refactor Token to correct…
InvictusRMC Mar 12, 2021
f1c5e09
Add tokentree
InvictusRMC Mar 12, 2021
0fa6be6
Add identitycommunity
InvictusRMC Mar 12, 2021
ea6275f
Add identity database
InvictusRMC Mar 12, 2021
c3aca80
Add identity manager
InvictusRMC Mar 12, 2021
dbb9459
Add pesudonymmanager
InvictusRMC Mar 12, 2021
3eac2c7
Add identity payloads
InvictusRMC Mar 12, 2021
8f30728
Add communication manager
InvictusRMC Mar 12, 2021
42759f7
Rename tokentree package
InvictusRMC Mar 12, 2021
a22fd8c
fix metadata type usage
InvictusRMC Mar 12, 2021
8195ec1
Make signature nullable
InvictusRMC Mar 12, 2021
72ed083
Add tokey extension to bytearray
InvictusRMC Mar 12, 2021
65562a7
Rename identitystore
InvictusRMC Mar 17, 2021
650cc49
Add logic for secondary overlays + make attestation value synchronous.
InvictusRMC Mar 19, 2021
25731fa
Add RevocationCommunity
InvictusRMC Mar 29, 2021
b38933c
Update AuthorityManager
InvictusRMC Mar 29, 2021
bc4c08b
Add payload definitions
InvictusRMC Mar 29, 2021
d3d7efa
Add revocation cache
InvictusRMC Mar 29, 2021
6552c4d
Add authority database definitions
InvictusRMC Mar 29, 2021
843b272
Make revocation update per version and public key
InvictusRMC Mar 31, 2021
73f465f
Add key hash to revocation blob structure
InvictusRMC Mar 31, 2021
417957f
Force concurrent insertion of revocations
InvictusRMC Mar 31, 2021
179be17
Add cache timeouts
InvictusRMC Mar 31, 2021
f565499
Add identityPair method definitions
InvictusRMC Mar 31, 2021
d699e77
Simplify HashCache id generation
InvictusRMC Mar 31, 2021
0d0cf63
Add bytearray serializaiton for Long
InvictusRMC Mar 31, 2021
210b14d
Rename parameter in PeerCache
InvictusRMC Mar 31, 2021
f7bdf17
Add required authorityManager in CommunicationManager
InvictusRMC Mar 31, 2021
087fd95
Make logger statement in PseudonymManager readable
InvictusRMC Mar 31, 2021
cc301d6
Fix typos + missing information in Overlay
InvictusRMC Mar 31, 2021
b828061
Remove unused import in RevocationUpdatePreviewPayload
InvictusRMC Mar 31, 2021
4cd0051
Remove unused import in TrustChainCommunity
InvictusRMC Mar 31, 2021
f3040cc
Remove authority notions from attestation store + update usage in Att…
InvictusRMC Mar 31, 2021
1bb44a2
Remove unused logic
InvictusRMC Mar 31, 2021
bc7c333
Fix liniting issues
InvictusRMC Apr 1, 2021
ea1d423
Merge pull request #2 from InvictusRMC/gossip-community
InvictusRMC Apr 2, 2021
b43f46a
Make secondary overlays initialize properly
InvictusRMC Apr 15, 2021
dfef72d
Make SignedObject init after children
InvictusRMC Apr 17, 2021
7d24d95
Make database type more apparent in AuthorityManager
InvictusRMC Apr 17, 2021
c40ceef
Set signature variable in SignedObject when signing
InvictusRMC Apr 17, 2021
a51d54f
Correctly extract metadata in Metadata
InvictusRMC Apr 17, 2021
93f6b10
Use toKey() in IdentityManager
InvictusRMC Apr 17, 2021
659e1b2
Correctly increment metadata offset when deserializing
InvictusRMC Apr 17, 2021
4d3e450
Remove unnecessary val in PeerCache
InvictusRMC Apr 17, 2021
a0ec92a
Correctly init Token when deserializing
InvictusRMC Apr 17, 2021
d0d2993
Use toKey() + break when correct hash is found in TokenTree
InvictusRMC Apr 17, 2021
254f8bc
serialize tokens in DisclosePayload
InvictusRMC Apr 17, 2021
c72f911
Add SettableDeferred class
InvictusRMC Apr 17, 2021
f83ed0c
Make boolean result nullable
InvictusRMC Apr 17, 2021
c0a1c8e
Disable printing of raw bytes
InvictusRMC Apr 17, 2021
5e83113
Make lists and sets mutable in PseudonymManager
InvictusRMC Apr 17, 2021
add82ae
Make i/o functions be set on object initialization in CommunicationMa…
InvictusRMC Apr 17, 2021
d6fc8bd
Correctly initialize overlays in CommunicationManager
InvictusRMC Apr 17, 2021
58b6c00
Use correct peer when requesting attestations
InvictusRMC Apr 17, 2021
ee06d48
Use setResult method from SettableDeferred
InvictusRMC Apr 17, 2021
9df9033
Use SettableDeferred
InvictusRMC Apr 17, 2021
0938264
Fix formatting + supress unimplemented method
InvictusRMC Apr 17, 2021
747bbfa
Use mutable types + correctly init peer and network
InvictusRMC Apr 17, 2021
2ce7826
Use external padhash function + add elements correctly to collections
InvictusRMC Apr 17, 2021
fc70c20
Fitler out fields used by AttestationCommunity
InvictusRMC Apr 17, 2021
b5b9ca9
Correctly parse metadata
InvictusRMC Apr 17, 2021
e9c7dd8
Correctly trim tokens
InvictusRMC Apr 17, 2021
7b5705d
Check if data is valid to sign + use correct hash from token
InvictusRMC Apr 17, 2021
3383f30
Fix sha3 + add hash padding
InvictusRMC Apr 17, 2021
c4d7ba0
Update klint
InvictusRMC Apr 17, 2021
e6ba282
Adhere to klint styling
InvictusRMC Apr 18, 2021
16fadec
Merge branch 'wallet_community' into identity_community
InvictusRMC Apr 18, 2021
3ac95aa
Apply correct EOF + remove unnecessary initialization checks
InvictusRMC Apr 19, 2021
63afcfd
Merge branch 'master' of https://github.com/Tribler/kotlin-ipv8 into …
InvictusRMC Apr 19, 2021
d591551
Add value to AttestationStore
InvictusRMC Apr 25, 2021
dc5d8f2
Add value to AttestationCommunity and AttestationChunkPayload + remov…
InvictusRMC Apr 25, 2021
1e45a09
Optimize AttestPayload serialization logic
InvictusRMC Apr 25, 2021
f9f6345
Format Serialization + add sha3 serialization logic
InvictusRMC Apr 25, 2021
2203966
Format Metadata + make signature non nullable
InvictusRMC Apr 25, 2021
c9014f1
Add method for listing Trusted Authorities
InvictusRMC Apr 25, 2021
76f9a1f
Add offline veriafiability to CommunicationManager + change types
InvictusRMC Apr 25, 2021
0a0eecd
Change default timeout in CommunicationManager + remove metadata depe…
InvictusRMC Apr 25, 2021
8d94641
Format IdentityManager + make signature non nullable in Identity data…
InvictusRMC Apr 25, 2021
c060e07
Format IdentityAttestation
InvictusRMC Apr 25, 2021
d2a4106
Add toMap function for JSONObject
InvictusRMC Apr 25, 2021
8fb97fd
Add signature and value fields in ReceiveAttestationRequestCache
InvictusRMC Apr 25, 2021
a304004
Set parameters correctly in Token initialization in Token
InvictusRMC Apr 25, 2021
f3d103a
Change ZKP values to booleans
InvictusRMC Apr 25, 2021
57f1615
Refactor CommunicationManager + add proposed value
InvictusRMC Apr 26, 2021
fad3905
Clean up code + add proposed value to AttestationCommunity
InvictusRMC Apr 26, 2021
362286b
Fix default timeout type + add vaue to attestation presentation
InvictusRMC Apr 26, 2021
38ee68d
Add returns in local verification logic
InvictusRMC Apr 26, 2021
6a3ef67
Remove signature from AttestationCommunity
InvictusRMC Apr 29, 2021
232f7f3
Verify value in metadata
InvictusRMC Apr 29, 2021
79efec4
Add debug log + change default value types
InvictusRMC Apr 29, 2021
734d3bb
Remove signature from attestation logic
InvictusRMC Apr 29, 2021
b95f196
Remove signature and public key from attestation db
InvictusRMC Apr 29, 2021
8f3dbae
Change BonehAttestation serialization
InvictusRMC Apr 29, 2021
3fea5fb
Create JSONArray toList method
InvictusRMC Apr 29, 2021
a8c4f6a
Implement unload method in CommunicationManager
InvictusRMC Apr 30, 2021
20a10a8
Format IdentitySQLiteStore
InvictusRMC Apr 30, 2021
0599cda
Fix equals method
InvictusRMC Apr 30, 2021
2e7905f
Merge pull request #3 from InvictusRMC/identity_community
InvictusRMC May 3, 2021
ab7273c
Format code + add method for fetching attestation signed by a peer
InvictusRMC May 3, 2021
ad095f0
Move RequestCache
InvictusRMC May 5, 2021
49a7b44
Update RequestCache references
InvictusRMC May 5, 2021
4035af5
Add method for selecting all revocations
InvictusRMC May 5, 2021
45839df
Add method for fetching all known identities
InvictusRMC May 5, 2021
62ee19c
Chec for revocations when verifying signatures
InvictusRMC May 5, 2021
eb19130
Add tokentree tests
InvictusRMC May 6, 2021
f1aaa0c
Add IdentityManagerTests
InvictusRMC May 6, 2021
6b09bad
Use correct hash in receive content method
InvictusRMC May 6, 2021
fa9bdb3
Remove last unchained token instead of first
InvictusRMC May 6, 2021
5b33ea4
Deserialize authorities correctly
InvictusRMC May 6, 2021
f61813b
Update RequestCache import in AttestationCommunity
InvictusRMC May 7, 2021
eea95a2
Add AttestationPresentation logic
InvictusRMC May 7, 2021
ed86431
Add disclosure information to callback + make checks optional in veri…
InvictusRMC May 10, 2021
63d60c2
Strip sha1 padding + update callback
InvictusRMC May 10, 2021
2ce0850
Add method for presentation + add method for fetching attributes by name
InvictusRMC May 10, 2021
25d92c3
Clean up presentation method + strip sha1 padding
InvictusRMC May 10, 2021
1ad495e
Merge branch 'attestation-presentation' of github.com:InvictusRMC/kot…
InvictusRMC May 10, 2021
ea889e2
Merge pull request #5 from InvictusRMC/attestation-presentation
InvictusRMC May 10, 2021
42c6c06
Merge pull request #4 from InvictusRMC/usability-fixes
InvictusRMC May 10, 2021
657a52e
Merge pull request #6 from InvictusRMC/identity_community
InvictusRMC May 10, 2021
88e3132
Cleanup attestation community
InvictusRMC May 10, 2021
182df86
Improve code structures + replace strings with consts
InvictusRMC May 10, 2021
1562a9d
Format tests + make test values private
InvictusRMC May 10, 2021
57379da
Refactor SimpleChurn constructor in Tracker
InvictusRMC May 10, 2021
59f4f06
Remove authorityManager dependency from AttestationCommunity
InvictusRMC May 11, 2021
868d14e
Add revocation community to CommunicationManager
InvictusRMC May 11, 2021
5ca64ae
Allow peers of other communities + use sha3 + allow nonsequential rev…
InvictusRMC May 11, 2021
37f9dba
Format queries + add revocation queries
InvictusRMC May 11, 2021
1a1d589
Add BloomFilter
InvictusRMC May 11, 2021
a2f7f97
Update AuthorityStore for new queries
InvictusRMC May 11, 2021
4550264
Add sent update preview cache
InvictusRMC May 11, 2021
a7f4597
Format cache and payload
InvictusRMC May 11, 2021
38b1ee1
Use BloomFilter in AuthorityManager + fix member checking
InvictusRMC May 11, 2021
8d479c2
Rename AllowedRevocationUpdateRequestCache
InvictusRMC May 11, 2021
d0e60d2
Use defined authorityManager in CommunicationChannel
InvictusRMC May 11, 2021
2df123a
Add revocation update callback + initialize fetchPeers per default
InvictusRMC May 12, 2021
00d0d7d
Do not short circuit boolean operators
InvictusRMC May 12, 2021
8dec498
Fix token ordering + verify metadata correctly
InvictusRMC May 12, 2021
b9f663b
Decrease cache timeouts + check for network initialization
InvictusRMC May 13, 2021
5a3ce5a
Add method for checking revocations per authority
InvictusRMC May 13, 2021
ec09928
Add verification per authority
InvictusRMC May 13, 2021
0fd3aeb
Add revocation check + empty attestations check
InvictusRMC May 13, 2021
304c580
Format IdentityCommunity + use mutablemaps
InvictusRMC May 13, 2021
0a2a199
Format + use mutable map + change hash method in SignedObject
InvictusRMC May 13, 2021
2ccf724
Clean up unnecessary comments
InvictusRMC May 13, 2021
6e6082e
Remove unused logic
InvictusRMC May 13, 2021
a26469f
Merge pull request #7 from InvictusRMC/revocation
InvictusRMC May 13, 2021
9672c98
Merge branch 'wallet_community' into documentation
InvictusRMC May 13, 2021
691fd79
Implement identity removal
InvictusRMC May 14, 2021
4dbcb34
Format + use consts in cryptography
InvictusRMC May 14, 2021
692761d
Remove refactor artifect
InvictusRMC May 14, 2021
1c2ae08
Add import alias for decode function
InvictusRMC May 14, 2021
2eca510
Merge pull request #8 from InvictusRMC/documentation
InvictusRMC May 14, 2021
ed8113f
Merge pull request #9 from InvictusRMC/identity-deletion
InvictusRMC May 14, 2021
f1e5ef7
Merge pull request #10 from InvictusRMC/documentation
InvictusRMC May 14, 2021
38703c1
Add identity attestation callback
InvictusRMC May 17, 2021
fb88f45
Merge pull request #11 from InvictusRMC/attestation-callback
InvictusRMC May 17, 2021
59fd5aa
optimize revocation performance
InvictusRMC Jun 14, 2022
7d652be
Update libsodium and recyclerview dependencies
InvictusRMC Jun 14, 2022
6176958
Merge branch 'master' into wallet_community
InvictusRMC Jun 14, 2022
613aa2b
Merge remote-tracking branch 'origin/master' into wallet_community
InvictusRMC Jun 14, 2022
4c7e37c
Merge branch 'wallet_community' of github.com:Tribler/kotlin-ipv8 int…
InvictusRMC Jun 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

buildscript {
ext.kotlin_version = '1.4.21'
ext.ktlint_version = '0.36.0'
ext.ktlint_version = '0.41.0'
ext.coroutines_version = '1.4.2'
ext.ktlint_gradle_version = '9.1.1'
// https://github.com/cashapp/sqldelight/issues/1574
Expand All @@ -18,7 +18,7 @@ buildscript {
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jlleitschuh.gradle:ktlint-gradle:$ktlint_gradle_version"
classpath "com.squareup.sqldelight:gradle-plugin:$sqldelight_version"
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Tue Jan 12 11:23:56 CET 2021
#Tue May 11 09:51:47 CEST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ private val logger = KotlinLogging.logger {}
* A strategy for selecting discovered Bluetooth peers we should connect to.
*/
class BluetoothLeDiscovery(
private val overlay: Overlay,
override val overlay: Overlay,
private val peers: Int
) : DiscoveryStrategy {
override fun takeStep() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ private val logger = KotlinLogging.logger {}
*/
class NetworkServiceDiscovery(
private val nsdManager: NsdManager,
private val overlay: Overlay
override val overlay: Overlay
) : DiscoveryStrategy {
private var serviceName: String? = null

Expand Down
10 changes: 10 additions & 0 deletions ipv8/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ apply plugin: 'org.jlleitschuh.gradle.ktlint'

apply plugin: 'com.squareup.sqldelight'

apply plugin: 'kotlin-kapt'

dokka {
outputFormat = 'html'
outputDirectory = "$buildDir/dokka"
Expand Down Expand Up @@ -78,6 +80,13 @@ dependencies {
testImplementation "com.squareup.sqldelight:sqlite-driver:$sqldelight_version"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"

implementation "org.openjdk.jmh:jmh-core:1.21"
kapt "org.openjdk.jmh:jmh-generator-annprocess:1.21"

// Guava
implementation "com.google.guava:guava:30.1.1-jre"
implementation "com.squareup.sqldelight:sqlite-driver:$sqldelight_version"


// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15to18', version: '1.63'
Expand All @@ -88,6 +97,7 @@ dependencies {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions.freeCompilerArgs += [
"-Xuse-experimental=kotlin.Experimental,kotlin.ExperimentalUnsignedTypes",
"-Xopt-in=kotlin.RequiresOptIn",
"-Werror" // Set Kotlin compiler warnings as errors
]
}
3 changes: 1 addition & 2 deletions ipv8/src/main/java/nl/tudelft/ipv8/Community.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,8 @@ abstract class Community : Overlay {
}

override fun unload() {
super.unload()

job.cancel()
super.unload()
}

override fun bootstrap() {
Expand Down
60 changes: 59 additions & 1 deletion ipv8/src/main/java/nl/tudelft/ipv8/IPv8.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,21 @@ class IPv8(
private val endpoint: EndpointAggregator,
private val configuration: IPv8Configuration,
val myPeer: Peer,
val network: Network = Network()
val network: Network = Network(),
) {
private val overlayLock = Object()

/*
* Primary Overlays. Should not contain duplicates.
*/
val overlays = mutableMapOf<Class<out Overlay>, Overlay>()

/*
* Secondary Overlays. These contain alternative channels of an Overlay.
* Ensure unique Service IDs. TODO: remove Overlays singleton constraint.
*/
val secondaryOverlays = mutableMapOf<String, Overlay>()

private val strategies = mutableListOf<DiscoveryStrategy>()

private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
Expand All @@ -31,6 +41,10 @@ class IPv8(
return overlays[T::class.java] as? T
}

inline fun <reified T : Overlay> getSecondaryOverlay(serviceId: String): T? {
return secondaryOverlays[serviceId] as? T
}

fun start() {
if (isStarted()) throw IllegalStateException("IPv8 has already started")

Expand Down Expand Up @@ -68,6 +82,45 @@ class IPv8(
startLoopingCall()
}

/*
* Method for adding secondary overlays. These allow for multiple class instances, however, service IDs must be unique.
* As a consequence, the used peer, endpoint and network can be different than the main ones.
*/
fun addSecondaryOverlayStrategy(overlayConfiguration: SecondaryOverlayConfiguration<*>): Overlay {
synchronized(overlayLock) {
val overlay = overlayConfiguration.factory.create()
if (!this.secondaryOverlays.containsKey(overlay.serviceId)) {
overlay.myPeer = overlayConfiguration.myPeer ?: myPeer
overlay.endpoint = overlayConfiguration.endpoint ?: endpoint
overlay.network = overlayConfiguration.network ?: network
overlay.maxPeers = overlayConfiguration.maxPeers
overlay.load()

this.secondaryOverlays[overlay.serviceId] = overlay

for (strategyFactory in overlayConfiguration.walkers) {
val strategy = strategyFactory
.setOverlay(overlay)
.create()
strategy.load()
strategies.add(strategy)
}
}
return secondaryOverlays[overlay.serviceId]!!
}
}

fun unloadSecondaryOverlayStrategy(serviceId: String) {
synchronized(overlayLock) {
val overlay = this.secondaryOverlays.remove(serviceId)
for (strategy in strategies) {
if (strategy.overlay == overlay) {
this.strategies.remove(strategy)
}
}
}
}

private fun onTick() {
if (endpoint.isOpen()) {
synchronized(overlayLock) {
Expand Down Expand Up @@ -104,6 +157,11 @@ class IPv8(
}
overlays.clear()

for ((_, overlay) in secondaryOverlays) {
overlay.unload()
}
secondaryOverlays.clear()

for (strategy in strategies) {
strategy.unload()
}
Expand Down
13 changes: 12 additions & 1 deletion ipv8/src/main/java/nl/tudelft/ipv8/IPv8Configuration.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package nl.tudelft.ipv8

import nl.tudelft.ipv8.messaging.EndpointAggregator
import nl.tudelft.ipv8.peerdiscovery.Network
import nl.tudelft.ipv8.peerdiscovery.strategy.DiscoveryStrategy

class IPv8Configuration(
Expand All @@ -9,8 +11,17 @@ class IPv8Configuration(
val overlays: List<OverlayConfiguration<*>>
)

class OverlayConfiguration<T : Overlay>(
open class OverlayConfiguration<T : Overlay>(
val factory: Overlay.Factory<T>,
val walkers: List<DiscoveryStrategy.Factory<*>>,
val maxPeers: Int = 30
)

class SecondaryOverlayConfiguration<T : Overlay>(
factory: Overlay.Factory<T>,
walkers: List<DiscoveryStrategy.Factory<*>>,
maxPeers: Int = 30,
val myPeer: Peer? = null,
val endpoint: EndpointAggregator? = null,
val network: Network? = null
) : OverlayConfiguration<T>(factory, walkers, maxPeers)
4 changes: 2 additions & 2 deletions ipv8/src/main/java/nl/tudelft/ipv8/Overlay.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ interface Overlay : EndpointListener {
get() = myPeer.lamportTimestamp

/**
* Called to inintialize this overlay.
* Called to initialize this overlay.
*/
fun load() {
endpoint.addListener(this)
Expand Down Expand Up @@ -84,7 +84,7 @@ interface Overlay : EndpointListener {
/**
* Get a peer for introduction.
*
* @param Optionally specify a peer that is not considered eligible for introduction.
* @param exclude Optionally specify a peer that is not considered eligible for introduction.
* @return A peer to send an introduction request to, or null if are none available.
*/
fun getPeerForIntroduction(exclude: Peer? = null): Peer?
Expand Down

This file was deleted.

Loading