mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-26 14:22:05 +01:00
Adopt new PublicKeyDataDecryptorFactory API
This commit is contained in:
parent
0196e3ce65
commit
4911816b7d
3 changed files with 11 additions and 7 deletions
|
@ -27,10 +27,11 @@ class CachingBcPublicKeyDataDecryptorFactory(
|
|||
|
||||
override fun recoverSessionData(
|
||||
keyAlgorithm: Int,
|
||||
secKeyData: Array<out ByteArray>
|
||||
secKeyData: Array<out ByteArray>,
|
||||
pkeskVersion: Int
|
||||
): ByteArray =
|
||||
lookupSessionKeyData(secKeyData)
|
||||
?: costlyRecoverSessionData(keyAlgorithm, secKeyData).also {
|
||||
?: costlyRecoverSessionData(keyAlgorithm, secKeyData, pkeskVersion).also {
|
||||
cacheSessionKeyData(secKeyData, it)
|
||||
}
|
||||
|
||||
|
@ -39,8 +40,9 @@ class CachingBcPublicKeyDataDecryptorFactory(
|
|||
|
||||
private fun costlyRecoverSessionData(
|
||||
keyAlgorithm: Int,
|
||||
secKeyData: Array<out ByteArray>
|
||||
): ByteArray = super.recoverSessionData(keyAlgorithm, secKeyData)
|
||||
secKeyData: Array<out ByteArray>,
|
||||
pkeskVersion: Int
|
||||
): ByteArray = super.recoverSessionData(keyAlgorithm, secKeyData, pkeskVersion)
|
||||
|
||||
private fun cacheSessionKeyData(secKeyData: Array<out ByteArray>, sessionKey: ByteArray) {
|
||||
cachedSessions[toKey(secKeyData)] = sessionKey.clone()
|
||||
|
|
|
@ -9,6 +9,7 @@ import org.bouncycastle.bcpg.AEADEncDataPacket
|
|||
import org.bouncycastle.bcpg.SymmetricEncIntegrityPacket
|
||||
import org.bouncycastle.openpgp.PGPException
|
||||
import org.bouncycastle.openpgp.PGPSessionKey
|
||||
import org.bouncycastle.openpgp.operator.AbstractPublicKeyDataDecryptorFactory
|
||||
import org.bouncycastle.openpgp.operator.PGPDataDecryptor
|
||||
import org.bouncycastle.openpgp.operator.PublicKeyDataDecryptorFactory
|
||||
import org.bouncycastle.openpgp.operator.bc.BcPublicKeyDataDecryptorFactory
|
||||
|
@ -44,7 +45,7 @@ class HardwareSecurity {
|
|||
class HardwareDataDecryptorFactory(
|
||||
override val subkeyIdentifier: SubkeyIdentifier,
|
||||
private val callback: DecryptionCallback,
|
||||
) : CustomPublicKeyDataDecryptorFactory {
|
||||
) : AbstractPublicKeyDataDecryptorFactory(), CustomPublicKeyDataDecryptorFactory {
|
||||
|
||||
// luckily we can instantiate the BcPublicKeyDataDecryptorFactory with null as argument.
|
||||
private val factory: PublicKeyDataDecryptorFactory = BcPublicKeyDataDecryptorFactory(null)
|
||||
|
@ -73,7 +74,8 @@ class HardwareSecurity {
|
|||
|
||||
override fun recoverSessionData(
|
||||
keyAlgorithm: Int,
|
||||
secKeyData: Array<out ByteArray>
|
||||
secKeyData: Array<out ByteArray>,
|
||||
pkeskVersion: Int
|
||||
): ByteArray {
|
||||
return try {
|
||||
callback.decryptSessionKey(subkeyIdentifier.subkeyId, keyAlgorithm, secKeyData[0])
|
||||
|
|
|
@ -62,7 +62,7 @@ public class CustomPublicKeyDataDecryptorFactoryTest {
|
|||
PGPSecretKey decryptionKey = secretKey.getSecretKey(encryptionKey.getKeyID());
|
||||
PGPPrivateKey privateKey = UnlockSecretKey.unlockSecretKey(decryptionKey, Passphrase.emptyPassphrase());
|
||||
PublicKeyDataDecryptorFactory internal = new BcPublicKeyDataDecryptorFactory(privateKey);
|
||||
return internal.recoverSessionData(keyAlgorithm, new byte[][] {sessionKeyData});
|
||||
return internal.recoverSessionData(keyAlgorithm, new byte[][] {sessionKeyData}, 3);
|
||||
} catch (PGPException e) {
|
||||
throw new HardwareSecurity.HardwareSecurityException();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue