pgpainless/pgpainless-core/src/main/kotlin/org/pgpainless/signature/consumer/SignatureValidityComparator.kt

33 lines
1.2 KiB
Kotlin

// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
package org.pgpainless.signature.consumer
import org.bouncycastle.openpgp.PGPSignature
import org.pgpainless.bouncycastle.extensions.isHardRevocation
/**
* Comparator which sorts signatures based on an ordering and on revocation hardness.
*
* If a list of signatures gets ordered using this comparator, hard revocations will always come
* first. Further, signatures are ordered by date according to the
* [SignatureCreationDateComparator.Order].
*/
class SignatureValidityComparator(
order: SignatureCreationDateComparator.Order = SignatureCreationDateComparator.Order.OLD_TO_NEW
) : Comparator<PGPSignature> {
private val creationDateComparator: SignatureCreationDateComparator =
SignatureCreationDateComparator(order)
override fun compare(one: PGPSignature, two: PGPSignature): Int {
return if (one.isHardRevocation == two.isHardRevocation) {
// Both have the same hardness, so compare creation time
creationDateComparator.compare(one, two)
}
// else favor the "harder" signature
else if (one.isHardRevocation) -1 else 1
}
}