@@ -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 )
0 commit comments