Skip to content
This repository has been archived by the owner on Oct 15, 2024. It is now read-only.

Commit

Permalink
fix null pointer exception when using public only keys (#3143)
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Renda committed Jul 30, 2024
1 parent f1cb72a commit c55c2da
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public class PGPainlessCryptoHandler @Inject constructor() :
}
val keyringCollection =
keys
.map { key -> PGPainless.readKeyRing().secretKeyRing(key.contents) }
.mapNotNull { key -> PGPainless.readKeyRing().secretKeyRing(key.contents) }
.run(::PGPSecretKeyRingCollection)
val protector = SecretKeyRingProtector.unlockAnyKeyWith(Passphrase.fromPassword(passphrase))
val decryptionStream =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,4 +181,40 @@ class PGPainlessCryptoHandlerTest {
assertTrue { cryptoHandler.canHandle("example.com.gpg") }
assertFalse { cryptoHandler.canHandle("example.com.asc") }
}

@Test
fun decryptWithPublicKeys() {
val alice =
PGPainless.generateKeyRing().modernKeyRing("Alice <[email protected]>", KEY_PASSPHRASE)
val bob = PGPainless.generateKeyRing().modernKeyRing("Bob <[email protected]>", KEY_PASSPHRASE)
val bobCertificate = PGPainless.extractCertificate(bob)
val aliceKey = PGPKey(PGPainless.asciiArmor(alice).encodeToByteArray())
val bobPublicKey = PGPKey(PGPainless.asciiArmor(bobCertificate).encodeToByteArray())
val ciphertextStream = ByteArrayOutputStream()
val encryptRes =
cryptoHandler.encrypt(
listOf(aliceKey, bobPublicKey),
PLAIN_TEXT.byteInputStream(Charsets.UTF_8),
ciphertextStream,
PGPEncryptOptions.Builder().withAsciiArmor(true).build(),
)
assertTrue(encryptRes.isOk)
val message = ciphertextStream.toByteArray().decodeToString()
val info = MessageInspector.determineEncryptionInfoForMessage(message)
assertTrue(info.isEncrypted)
assertEquals(2, info.keyIds.size)
assertFalse(info.isSignedOnly)

val ciphertextStreamCopy = message.byteInputStream()
val plaintextStream = ByteArrayOutputStream()
val res =
cryptoHandler.decrypt(
listOf(aliceKey, bobPublicKey),
KEY_PASSPHRASE,
ciphertextStreamCopy,
plaintextStream,
PGPDecryptOptions.Builder().build(),
)
assertTrue(res.isOk)
}
}

0 comments on commit c55c2da

Please sign in to comment.