diff --git a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt new file mode 100644 index 00000000..e0f9fffa --- /dev/null +++ b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2023 Heiko Schaefer +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.wot.network + +data class Root(val fingerprint: Fingerprint, val amount: Int) { + + constructor(fingerprint: Fingerprint) : this(fingerprint, 120) + + override fun toString() = "$fingerprint [$amount]" +} \ No newline at end of file diff --git a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt new file mode 100644 index 00000000..7db9f290 --- /dev/null +++ b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2023 Heiko Schaefer +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.wot.network + +/** + * A set of `Root`s (that can be used as the basis for authentication lookups). + */ +class Roots { + + // Map for efficient lookup by Fingerprint + private val roots: Map + + constructor(roots: List) { + this.roots = roots.associateBy { it.fingerprint } + } + + constructor() : this(listOf()) + + /** + * Returns the specified root. + */ + fun get(fpr: Fingerprint): Root? = roots[fpr] + + /** + * Check if `fpr` is contained in this set of roots. + */ + fun isRoot(fpr: Fingerprint) = roots.containsKey(fpr) + + /** + * The set of fingerprints of all roots. + */ + fun fingerprints() = roots.keys + + /** + * A collection of all roots. + */ + fun roots() = roots.values + + /** + * The number of roots + */ + fun size() = roots.size + + override fun toString() = roots.keys.sorted().joinToString(", ") + +}