Use KeyRingUtils#publicKeyRingCollectionFrom to extract public keys (#2009)

This commit is contained in:
Harsh Shandilya 2022-07-16 21:25:04 +05:30 committed by GitHub
parent 205a1d942e
commit db01ed2a2e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 15 deletions

View file

@ -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 =
publicKeyRings.addAll(
KeyRingUtils.publicKeyRingCollectionFrom(
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(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)

View file

@ -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,
)