mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-14 00:12:06 +01:00
Separate EdgeComponents in Certifications and Delegations
This commit is contained in:
parent
cee061d01c
commit
0325122a31
2 changed files with 75 additions and 45 deletions
|
@ -7,10 +7,7 @@ package org.pgpainless.wot.util
|
|||
import org.bouncycastle.openpgp.PGPSignature
|
||||
import org.pgpainless.algorithm.SignatureType
|
||||
import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil
|
||||
import org.pgpainless.wot.network.Node
|
||||
import org.pgpainless.wot.network.EdgeComponent
|
||||
import org.pgpainless.wot.network.Depth
|
||||
import org.pgpainless.wot.network.RegexSet
|
||||
import org.pgpainless.wot.network.*
|
||||
import org.pgpainless.wot.network.RegexSet.Companion.fromExpressionList
|
||||
|
||||
class CertificationFactory {
|
||||
|
@ -20,7 +17,15 @@ class CertificationFactory {
|
|||
fun fromDelegation(issuer: Node,
|
||||
target: Node,
|
||||
signature: PGPSignature): EdgeComponent {
|
||||
return fromSignature(issuer, target, null, signature)
|
||||
return Delegation(issuer,
|
||||
target,
|
||||
SignatureSubpacketsUtil.getSignatureCreationTime(signature)!!.time,
|
||||
SignatureSubpacketsUtil.getSignatureExpirationTimeAsDate(signature),
|
||||
SignatureSubpacketsUtil.isExportable(signature),
|
||||
getTrustAmountFrom(signature),
|
||||
getTrustDepthFrom(signature),
|
||||
regexSetFrom(signature)
|
||||
)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
|
@ -28,48 +33,32 @@ class CertificationFactory {
|
|||
target: Node,
|
||||
targetUserId: String,
|
||||
signature: PGPSignature): EdgeComponent {
|
||||
return fromSignature(issuer, target, targetUserId, signature)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromSignature(issuer: Node,
|
||||
target: Node,
|
||||
targetUserId: String?,
|
||||
signature: PGPSignature): EdgeComponent {
|
||||
if (signature.signatureType == SignatureType.CERTIFICATION_REVOCATION.code) {
|
||||
// Revocations equate to trust of 0/0
|
||||
return EdgeComponent(
|
||||
issuer,
|
||||
target,
|
||||
targetUserId,
|
||||
SignatureSubpacketsUtil.getSignatureCreationTime(signature)!!.time,
|
||||
SignatureSubpacketsUtil.getSignatureExpirationTimeAsDate(signature),
|
||||
SignatureSubpacketsUtil.isExportable(signature),
|
||||
0,
|
||||
Depth.limited(0),
|
||||
regexSetFrom(signature))
|
||||
} else {
|
||||
return EdgeComponent(
|
||||
issuer,
|
||||
target,
|
||||
targetUserId,
|
||||
SignatureSubpacketsUtil.getSignatureCreationTime(signature)!!.time,
|
||||
SignatureSubpacketsUtil.getSignatureExpirationTimeAsDate(signature),
|
||||
SignatureSubpacketsUtil.isExportable(signature),
|
||||
getTrustAmountFrom(signature),
|
||||
getTrustDepthFrom(signature),
|
||||
regexSetFrom(signature))
|
||||
}
|
||||
return Certification(issuer,
|
||||
target,
|
||||
targetUserId,
|
||||
SignatureSubpacketsUtil.getSignatureCreationTime(signature)!!.time,
|
||||
SignatureSubpacketsUtil.getSignatureExpirationTimeAsDate(signature),
|
||||
SignatureSubpacketsUtil.isExportable(signature),
|
||||
getTrustAmountFrom(signature),
|
||||
getTrustDepthFrom(signature))
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
private fun getTrustAmountFrom(signature: PGPSignature): Int {
|
||||
if (signature.signatureType in intArrayOf(PGPSignature.KEY_REVOCATION, PGPSignature.CERTIFICATION_REVOCATION)) {
|
||||
return 0
|
||||
}
|
||||
|
||||
val packet = SignatureSubpacketsUtil.getTrustSignature(signature)
|
||||
return packet?.trustAmount ?: 120
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
private fun getTrustDepthFrom(signature: PGPSignature): Depth {
|
||||
if (signature.signatureType in intArrayOf(PGPSignature.KEY_REVOCATION, PGPSignature.CERTIFICATION_REVOCATION)) {
|
||||
return Depth.auto(0)
|
||||
}
|
||||
|
||||
val packet = SignatureSubpacketsUtil.getTrustSignature(signature)
|
||||
return if (packet != null) {
|
||||
Depth.auto(packet.depth)
|
||||
|
|
|
@ -20,7 +20,7 @@ import java.util.*
|
|||
* @param trustDepth degree to which the issuer trusts the target as trusted introducer
|
||||
* @param regexes regular expressions for user-ids which the target is allowed to introduce
|
||||
*/
|
||||
data class EdgeComponent(
|
||||
open class EdgeComponent(
|
||||
val issuer: Node,
|
||||
val target: Node,
|
||||
val userId: String?,
|
||||
|
@ -30,14 +30,55 @@ data class EdgeComponent(
|
|||
val trustAmount: Int,
|
||||
val trustDepth: Depth,
|
||||
val regexes: RegexSet
|
||||
) {
|
||||
)
|
||||
|
||||
class Certification(
|
||||
issuer: Node,
|
||||
target: Node,
|
||||
userId: String,
|
||||
creationTime: Date,
|
||||
expirationTime: Date?,
|
||||
exportable: Boolean,
|
||||
trustAmount: Int?,
|
||||
trustDepth: Depth?,
|
||||
): EdgeComponent(
|
||||
issuer,
|
||||
target,
|
||||
userId,
|
||||
creationTime,
|
||||
expirationTime,
|
||||
exportable,
|
||||
trustAmount ?: 120,
|
||||
trustDepth ?: Depth.limited(0),
|
||||
RegexSet.wildcard()) {
|
||||
|
||||
override fun toString(): String {
|
||||
return if (trustDepth > 0) {
|
||||
val scope = if (regexes.regexStrings.isEmpty()) "" else ", scope: $regexes"
|
||||
"${issuer.fingerprint} delegates to ${target.fingerprint} [$trustAmount, depth $trustDepth$scope]"
|
||||
} else {
|
||||
"${issuer.fingerprint} certifies binding: $userId <-> ${target.fingerprint} [$trustAmount]"
|
||||
}
|
||||
return "${issuer.fingerprint} certifies binding: $userId <-> ${target.fingerprint} [$trustAmount]"
|
||||
}
|
||||
}
|
||||
|
||||
class Delegation(
|
||||
issuer: Node,
|
||||
target: Node,
|
||||
creationTime: Date,
|
||||
expirationTime: Date?,
|
||||
exportable: Boolean,
|
||||
trustAmount: Int,
|
||||
trustDepth: Depth,
|
||||
regexes: RegexSet
|
||||
): EdgeComponent(
|
||||
issuer,
|
||||
target,
|
||||
null,
|
||||
creationTime,
|
||||
expirationTime,
|
||||
exportable,
|
||||
trustAmount,
|
||||
trustDepth,
|
||||
regexes) {
|
||||
|
||||
override fun toString(): String {
|
||||
val scope = if (regexes.regexStrings.isEmpty()) "" else ", scope: $regexes"
|
||||
return "${issuer.fingerprint} delegates to ${target.fingerprint} [$trustAmount, depth $trustDepth$scope]"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue