Skip to content

Commit d3d9404

Browse files
committed
Introduce PGPEncryptedDataList.extractSessionKeyEncryptedData(boolean) to allow the user to
choose, whether to enable the legacy 2-octet session-key quick-check in SEIPDv1 packets upon decryption
1 parent ab16374 commit d3d9404

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

‎pg/src/main/java/org/bouncycastle/openpgp/PGPEncryptedDataList.java‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,20 @@ public PGPSessionKeyEncryptedData extractSessionKeyEncryptedData()
202202
{
203203
return new PGPSessionKeyEncryptedData(data);
204204
}
205+
206+
/**
207+
* Create a decryption method using a {@link PGPSessionKey}.
208+
* This method can be used to decrypt messages which do not contain a SKESK or PKESK packet using a session key.
209+
* If <pre>enableQuickCheck</pre> is set to true, upon decryption, the 2-octet quick-check is performed
210+
* to early reject wrong session-keys.
211+
* NOTE: The quick check should only be enabled for symmetrically encrypted data, in order to prevent
212+
* attacks via the Mister-Zuccherato oracle.
213+
*
214+
* @param enableQuickCheck whether to enable the 2-octet SEIPDv1 quick check.
215+
* @return session key encrypted data
216+
*/
217+
public PGPSessionKeyEncryptedData extractSessionKeyEncryptedData(boolean enableQuickCheck)
218+
{
219+
return new PGPSessionKeyEncryptedData(data, enableQuickCheck);
220+
}
205221
}

‎pg/src/main/java/org/bouncycastle/openpgp/PGPSessionKeyEncryptedData.java‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,17 @@
1313
public class PGPSessionKeyEncryptedData
1414
extends PGPSymmetricKeyEncryptedData
1515
{
16+
private final boolean enableQuickCheck;
17+
1618
PGPSessionKeyEncryptedData(InputStreamPacket encData)
19+
{
20+
this(encData, false);
21+
}
22+
23+
PGPSessionKeyEncryptedData(InputStreamPacket encData, boolean enableQuickCheck)
1724
{
1825
super(encData);
26+
this.enableQuickCheck = enableQuickCheck;
1927
}
2028

2129
@Override
@@ -69,6 +77,6 @@ public InputStream getDataStream(
6977
@Override
7078
protected boolean isPublicKeyEncrypted()
7179
{
72-
return true;
80+
return !enableQuickCheck;
7381
}
7482
}

0 commit comments

Comments
 (0)