Skip to content

Commit 2dadaa5

Browse files
author
gefeili
committed
Separate getEskAndTag into two functions
1 parent 47a2464 commit 2dadaa5

File tree

3 files changed

+28
-25
lines changed

3 files changed

+28
-25
lines changed

pg/src/main/java/org/bouncycastle/openpgp/operator/PBEKeyEncryptionMethodGenerator.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public byte[] getKey(int encAlgorithm)
163163

164164
@Override
165165
public ContainedPacket generateV5(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo)
166-
throws PGPException
166+
throws PGPException
167167
{
168168
return generate(kekAlgorithm, sessionInfo);
169169
// TODO: Implement v5 SKESK creation properly.
@@ -180,44 +180,46 @@ public ContainedPacket generateV6(int kekAlgorithm, int aeadAlgorithm, byte[] se
180180
// If we use this method, roundtripping v5 AEAD is broken.
181181
// TODO: Investigate
182182
private ContainedPacket generateV5ESK(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo)
183-
throws PGPException
183+
throws PGPException
184184
{
185185
byte[] ikm = getKey(kekAlgorithm);
186-
byte[] info = new byte[] {
187-
(byte) 0xC3,
188-
(byte) SymmetricKeyEncSessionPacket.VERSION_5,
189-
(byte) kekAlgorithm,
190-
(byte) aeadAlgorithm
186+
byte[] info = new byte[]{
187+
(byte)0xC3,
188+
(byte)SymmetricKeyEncSessionPacket.VERSION_5,
189+
(byte)kekAlgorithm,
190+
(byte)aeadAlgorithm
191191
};
192192

193193
byte[] iv = new byte[AEADUtils.getIVLength(aeadAlgorithm)];
194194
random.nextBytes(iv);
195195

196196
int tagLen = AEADUtils.getAuthTagLength(aeadAlgorithm);
197-
byte[] eskAndTag = getEskAndTag(kekAlgorithm, aeadAlgorithm, sessionInfo, ikm, iv, info);
197+
byte[] sessionKey = getSessionKey(sessionInfo);
198+
byte[] eskAndTag = getEskAndTag(kekAlgorithm, aeadAlgorithm, sessionKey, ikm, iv, info);
198199
byte[] esk = Arrays.copyOfRange(eskAndTag, 0, eskAndTag.length - tagLen);
199200
byte[] tag = Arrays.copyOfRange(eskAndTag, esk.length, eskAndTag.length);
200201

201202
return SymmetricKeyEncSessionPacket.createV5Packet(kekAlgorithm, aeadAlgorithm, iv, s2k, esk, tag);
202203
}
203204

204205
private ContainedPacket generateV6ESK(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo)
205-
throws PGPException
206+
throws PGPException
206207
{
207208
byte[] ikm = getKey(kekAlgorithm);
208-
byte[] info = new byte[] {
209-
(byte) 0xC3,
210-
(byte) SymmetricKeyEncSessionPacket.VERSION_6,
211-
(byte) kekAlgorithm,
212-
(byte) aeadAlgorithm
209+
byte[] info = new byte[]{
210+
(byte)0xC3,
211+
(byte)SymmetricKeyEncSessionPacket.VERSION_6,
212+
(byte)kekAlgorithm,
213+
(byte)aeadAlgorithm
213214
};
214215
byte[] kek = generateV6KEK(kekAlgorithm, ikm, info);
215216

216217
byte[] iv = new byte[AEADUtils.getIVLength(aeadAlgorithm)];
217218
random.nextBytes(iv);
218219

219220
int tagLen = AEADUtils.getAuthTagLength(aeadAlgorithm);
220-
byte[] eskAndTag = getEskAndTag(kekAlgorithm, aeadAlgorithm, sessionInfo, kek, iv, info);
221+
byte[] sessionKey = getSessionKey(sessionInfo);
222+
byte[] eskAndTag = getEskAndTag(kekAlgorithm, aeadAlgorithm, sessionKey, ikm, iv, info);
221223
byte[] esk = Arrays.copyOfRange(eskAndTag, 0, eskAndTag.length - tagLen);
222224
byte[] tag = Arrays.copyOfRange(eskAndTag, esk.length, eskAndTag.length);
223225

@@ -228,7 +230,7 @@ private ContainedPacket generateV6ESK(int kekAlgorithm, int aeadAlgorithm, byte[
228230
* Generate a V4 SKESK packet.
229231
*
230232
* @param encAlgorithm the {@link SymmetricKeyAlgorithmTags encryption algorithm} being used
231-
* @param sessionInfo session data generated by the encrypted data generator.
233+
* @param sessionInfo session data generated by the encrypted data generator.
232234
* @return v4 SKESK packet
233235
* @throws PGPException
234236
*/
@@ -251,10 +253,17 @@ public ContainedPacket generate(int encAlgorithm, byte[] sessionInfo)
251253
return SymmetricKeyEncSessionPacket.createV4Packet(encAlgorithm, s2k, encryptSessionInfo(encAlgorithm, key, nSessionInfo));
252254
}
253255

256+
protected byte[] getSessionKey(byte[] sessionInfo)
257+
{
258+
byte[] sessionKey = new byte[sessionInfo.length - 3];
259+
System.arraycopy(sessionInfo, 1, sessionKey, 0, sessionKey.length);
260+
return sessionKey;
261+
}
262+
254263
abstract protected byte[] encryptSessionInfo(int encAlgorithm, byte[] key, byte[] sessionInfo)
255264
throws PGPException;
256265

257-
abstract protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo, byte[] key, byte[] iv, byte[] info)
266+
abstract protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionKey, byte[] key, byte[] iv, byte[] info)
258267
throws PGPException;
259268

260269
abstract protected byte[] generateV6KEK(int kekAlgorithm, byte[] ikm, byte[] info)

pg/src/main/java/org/bouncycastle/openpgp/operator/bc/BcPBEKeyEncryptionMethodGenerator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,9 @@ protected byte[] generateV6KEK(int kekAlgorithm, byte[] ikm, byte[] info)
113113
return BcAEADUtil.generateHKDFBytes(ikm, null, info, SymmetricKeyUtils.getKeyLengthInOctets(kekAlgorithm));
114114
}
115115

116-
protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo, byte[] key, byte[] iv, byte[] info)
116+
protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionKey, byte[] key, byte[] iv, byte[] info)
117117
throws PGPException
118118
{
119-
byte[] sessionKey = new byte[sessionInfo.length - 3];
120-
System.arraycopy(sessionInfo, 1, sessionKey, 0, sessionKey.length);
121-
122119
AEADCipher aeadCipher = BcAEADUtil.createAEADCipher(kekAlgorithm, aeadAlgorithm);
123120
aeadCipher.init(true, new AEADParameters(new KeyParameter(key), 128, iv, info));
124121
int outLen = aeadCipher.getOutputSize(sessionKey.length);

pg/src/main/java/org/bouncycastle/openpgp/operator/jcajce/JcePBEKeyEncryptionMethodGenerator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,9 @@ protected byte[] generateV6KEK(int kekAlgorithm, byte[] ikm, byte[] info)
151151
return JceAEADUtil.generateHKDFBytes(ikm, null, info, SymmetricKeyUtils.getKeyLengthInOctets(kekAlgorithm));
152152
}
153153

154-
protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionInfo, byte[] key, byte[] iv, byte[] info)
154+
protected byte[] getEskAndTag(int kekAlgorithm, int aeadAlgorithm, byte[] sessionKey, byte[] key, byte[] iv, byte[] info)
155155
throws PGPException
156156
{
157-
byte[] sessionKey = new byte[sessionInfo.length - 3];
158-
System.arraycopy(sessionInfo, 1, sessionKey, 0, sessionKey.length);
159-
160157
AEADCipher aeadCipher = BcAEADUtil.createAEADCipher(kekAlgorithm, aeadAlgorithm);
161158
aeadCipher.init(true, new AEADParameters(new KeyParameter(key), 128, iv, info));
162159
int outLen = aeadCipher.getOutputSize(sessionKey.length);

0 commit comments

Comments
 (0)