Use KeyRingUtils#publicKeyRingCollectionFrom
to extract public keys (#2009)
This commit is contained in:
parent
205a1d942e
commit
db01ed2a2e
2 changed files with 16 additions and 15 deletions
|
@ -25,6 +25,7 @@ import org.pgpainless.encryption_signing.EncryptionOptions
|
|||
import org.pgpainless.encryption_signing.ProducerOptions
|
||||
import org.pgpainless.exception.WrongPassphraseException
|
||||
import org.pgpainless.key.protection.PasswordBasedSecretKeyRingProtector
|
||||
import org.pgpainless.key.util.KeyRingUtils
|
||||
import org.pgpainless.util.Passphrase
|
||||
|
||||
public class PGPainlessCryptoHandler @Inject constructor() : CryptoHandler<PGPKey> {
|
||||
|
@ -71,16 +72,15 @@ public class PGPainlessCryptoHandler @Inject constructor() : CryptoHandler<PGPKe
|
|||
val armoredKeys =
|
||||
keys.joinToString("\n") { key -> key.contents.decodeToString() }.toByteArray()
|
||||
val secKeysStream = ByteArrayInputStream(armoredKeys)
|
||||
val secretKeyRingCollection =
|
||||
PGPainless.readKeyRing().secretKeyRingCollection(secKeysStream)
|
||||
secretKeyRingCollection.forEach { secretKeyRing ->
|
||||
publicKeyRings.add(PGPainless.extractCertificate(secretKeyRing))
|
||||
}
|
||||
if (publicKeyRings.isEmpty()) {
|
||||
val pubKeysStream = ByteArrayInputStream(armoredKeys)
|
||||
val publicKeyRingCollection =
|
||||
PGPainless.readKeyRing().publicKeyRingCollection(pubKeysStream)
|
||||
publicKeyRings.addAll(publicKeyRingCollection)
|
||||
publicKeyRings.addAll(
|
||||
KeyRingUtils.publicKeyRingCollectionFrom(
|
||||
PGPainless.readKeyRing().secretKeyRingCollection(secKeysStream)
|
||||
)
|
||||
)
|
||||
val pubKeysStream = ByteArrayInputStream(armoredKeys)
|
||||
publicKeyRings.addAll(PGPainless.readKeyRing().publicKeyRingCollection(pubKeysStream))
|
||||
require(keys.size == publicKeyRings.size) {
|
||||
"Failed to parse all keys: keys=${keys.size},parsed=${publicKeyRings.size}"
|
||||
}
|
||||
require(publicKeyRings.isNotEmpty()) { "No public keys to encrypt message to" }
|
||||
val publicKeyRingCollection = PGPPublicKeyRingCollection(publicKeyRings)
|
||||
|
|
|
@ -19,9 +19,10 @@ import kotlin.test.assertTrue
|
|||
import org.junit.runner.RunWith
|
||||
|
||||
@Suppress("Unused") // Test runner handles it internally
|
||||
enum class EncryptionKey(val key: PGPKey) {
|
||||
PUBLIC(PGPKey(TestUtils.getArmoredPublicKey())),
|
||||
SECRET(PGPKey(TestUtils.getArmoredPrivateKey())),
|
||||
enum class EncryptionKey(val keySet: List<PGPKey>) {
|
||||
PUBLIC(listOf(PGPKey(TestUtils.getArmoredPublicKey()))),
|
||||
SECRET(listOf(PGPKey(TestUtils.getArmoredPrivateKey()))),
|
||||
ALL(listOf(PGPKey(TestUtils.getArmoredPublicKey()), PGPKey(TestUtils.getArmoredPrivateKey()))),
|
||||
}
|
||||
|
||||
@RunWith(TestParameterInjector::class)
|
||||
|
@ -35,7 +36,7 @@ class PGPainlessCryptoHandlerTest {
|
|||
fun encryptAndDecrypt() {
|
||||
val ciphertextStream = ByteArrayOutputStream()
|
||||
cryptoHandler.encrypt(
|
||||
listOf(encryptionKey.key),
|
||||
encryptionKey.keySet,
|
||||
CryptoConstants.PLAIN_TEXT.byteInputStream(Charsets.UTF_8),
|
||||
ciphertextStream,
|
||||
)
|
||||
|
@ -53,7 +54,7 @@ class PGPainlessCryptoHandlerTest {
|
|||
fun decryptWithWrongPassphrase() {
|
||||
val ciphertextStream = ByteArrayOutputStream()
|
||||
cryptoHandler.encrypt(
|
||||
listOf(encryptionKey.key),
|
||||
encryptionKey.keySet,
|
||||
CryptoConstants.PLAIN_TEXT.byteInputStream(Charsets.UTF_8),
|
||||
ciphertextStream,
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue