64 lines
2.0 KiB
Kotlin
64 lines
2.0 KiB
Kotlin
// SPDX-FileCopyrightText: 2024 Paul Schaub <vanitasvitae@fsfe.org>
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package org.pgpainless.sop
|
|
|
|
import java.io.IOException
|
|
import java.io.InputStream
|
|
import java.util.*
|
|
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
|
import sop.operation.Version
|
|
|
|
/** Implementation of the `version` operation using PGPainless. */
|
|
class VersionImpl : Version {
|
|
|
|
companion object {
|
|
const val SOP_VERSION = 10
|
|
const val SOPV_VERSION = "1.0"
|
|
}
|
|
|
|
override fun getBackendVersion(): String = "PGPainless ${getVersion()}"
|
|
|
|
override fun getExtendedVersion(): String {
|
|
val bcVersion =
|
|
String.format(Locale.US, "Bouncy Castle %.2f", BouncyCastleProvider().version)
|
|
val specVersion = String.format("%02d", SOP_VERSION)
|
|
return """${getName()} ${getVersion()}
|
|
https://codeberg.org/PGPainless/pgpainless/src/branch/master/pgpainless-sop
|
|
|
|
Implementation of the Stateless OpenPGP Protocol Version $specVersion
|
|
https://datatracker.ietf.org/doc/html/draft-dkg-openpgp-stateless-cli-$specVersion
|
|
|
|
Based on pgpainless-core ${getVersion()}
|
|
https://pgpainless.org
|
|
|
|
Using $bcVersion
|
|
https://www.bouncycastle.org/java.html"""
|
|
}
|
|
|
|
override fun getName(): String = "PGPainless-SOP"
|
|
|
|
override fun getSopSpecImplementationRemarks(): String? = null
|
|
|
|
override fun getSopSpecRevisionNumber(): Int = SOP_VERSION
|
|
|
|
override fun getSopVVersion(): String = SOPV_VERSION
|
|
|
|
override fun getVersion(): String {
|
|
// See https://stackoverflow.com/a/50119235
|
|
return try {
|
|
val resourceIn: InputStream =
|
|
javaClass.getResourceAsStream("/version.properties")
|
|
?: throw IOException("File version.properties not found.")
|
|
|
|
val properties = Properties().apply { load(resourceIn) }
|
|
properties.getProperty("version")
|
|
} catch (e: IOException) {
|
|
"DEVELOPMENT"
|
|
}
|
|
}
|
|
|
|
override fun isSopSpecImplementationIncomplete(): Boolean = false
|
|
}
|