@@ -40,7 +40,7 @@ public class HPKE
4040 private final short kemId ;
4141 private final short kdfId ;
4242 private final short aeadId ;
43- private final DHKEM dhkem ;
43+ private final KEM kem ;
4444 private final HKDF hkdf ;
4545
4646 short Nk ;
@@ -58,7 +58,7 @@ public HPKE(byte mode, short kemId, short kdfId, short aeadId)
5858 this .kdfId = kdfId ;
5959 this .aeadId = aeadId ;
6060 this .hkdf = new HKDF (kdfId );
61- this .dhkem = new DHKEM (kemId );
61+ this .kem = new DHKEM (kemId );
6262 if (aeadId == aead_AES_GCM128 )
6363 {
6464 Nk = 16 ;
@@ -67,25 +67,12 @@ public HPKE(byte mode, short kemId, short kdfId, short aeadId)
6767 {
6868 Nk = 32 ;
6969 }
70+
7071 }
7172
7273 public int getEncSize ()
7374 {
74- switch (kemId )
75- {
76- case HPKE .kem_P256_SHA256 :
77- return 65 ;
78- case HPKE .kem_P384_SHA348 :
79- return 97 ;
80- case HPKE .kem_P521_SHA512 :
81- return 133 ;
82- case HPKE .kem_X25519_SHA256 :
83- return 32 ;
84- case HPKE .kem_X448_SHA512 :
85- return 56 ;
86- default :
87- throw new IllegalArgumentException ("invalid kem id" );
88- }
75+ return kem .getEncryptionSize ();
8976 }
9077 public short getAeadId ()
9178 {
@@ -139,32 +126,32 @@ private HPKEContext keySchedule(byte mode, byte[] sharedSecret, byte[] info, byt
139126
140127 public AsymmetricCipherKeyPair generatePrivateKey ()
141128 {
142- return dhkem .GeneratePrivateKey ();
129+ return kem .GeneratePrivateKey ();
143130 }
144131
145132
146133 public byte [] serializePublicKey (AsymmetricKeyParameter pk )
147134 {
148- return dhkem .SerializePublicKey (pk );
135+ return kem .SerializePublicKey (pk );
149136 }
150137
151138 public byte [] serializePrivateKey (AsymmetricKeyParameter sk )
152139 {
153- return dhkem .SerializePrivateKey (sk );
140+ return kem .SerializePrivateKey (sk );
154141 }
155142 public AsymmetricKeyParameter deserializePublicKey (byte [] pkEncoded )
156143 {
157- return dhkem .DeserializePublicKey (pkEncoded );
144+ return kem .DeserializePublicKey (pkEncoded );
158145 }
159146
160147 public AsymmetricCipherKeyPair deserializePrivateKey (byte [] skEncoded , byte [] pkEncoded )
161148 {
162- return dhkem .DeserializePrivateKey (skEncoded , pkEncoded );
149+ return kem .DeserializePrivateKey (skEncoded , pkEncoded );
163150 }
164151
165152 public AsymmetricCipherKeyPair deriveKeyPair (byte [] ikm )
166153 {
167- return dhkem .DeriveKeyPair (ikm );
154+ return kem .DeriveKeyPair (ikm );
168155 }
169156
170157 public byte [][] sendExport (AsymmetricKeyParameter pkR , byte [] info , byte [] exporterContext , int L ,
@@ -273,7 +260,7 @@ public byte[] open(byte[] enc, AsymmetricCipherKeyPair skR, byte[] info, byte[]
273260
274261 public HPKEContextWithEncapsulation setupBaseS (AsymmetricKeyParameter pkR , byte [] info )
275262 {
276- byte [][] output = dhkem .Encap (pkR ); // sharedSecret, enc
263+ byte [][] output = kem .Encap (pkR ); // sharedSecret, enc
277264 HPKEContext ctx = keySchedule (mode_base , output [0 ], info , default_psk , default_psk_id );
278265
279266 return new HPKEContextWithEncapsulation (ctx , output [1 ]);
@@ -283,21 +270,21 @@ public HPKEContextWithEncapsulation setupBaseS(AsymmetricKeyParameter pkR, byte[
283270 // This should only be used to validate test vectors.
284271 public HPKEContextWithEncapsulation setupBaseS (AsymmetricKeyParameter pkR , byte [] info , AsymmetricCipherKeyPair kpE )
285272 {
286- byte [][] output = dhkem .Encap (pkR , kpE ); // sharedSecret, enc
273+ byte [][] output = kem .Encap (pkR , kpE ); // sharedSecret, enc
287274 HPKEContext ctx = keySchedule (mode_base , output [0 ], info , default_psk , default_psk_id );
288275
289276 return new HPKEContextWithEncapsulation (ctx , output [1 ]);
290277 }
291278
292279 public HPKEContext setupBaseR (byte [] enc , AsymmetricCipherKeyPair skR , byte [] info )
293280 {
294- byte [] sharedSecret = dhkem .Decap (enc , skR );
281+ byte [] sharedSecret = kem .Decap (enc , skR );
295282 return keySchedule (mode_base , sharedSecret , info , default_psk , default_psk_id );
296283 }
297284
298285 public HPKEContextWithEncapsulation SetupPSKS (AsymmetricKeyParameter pkR , byte [] info , byte [] psk , byte [] psk_id )
299286 {
300- byte [][] output = dhkem .Encap (pkR ); // sharedSecret, enc
287+ byte [][] output = kem .Encap (pkR ); // sharedSecret, enc
301288
302289 HPKEContext ctx = keySchedule (mode_psk , output [0 ], info , psk , psk_id );
303290
@@ -306,35 +293,35 @@ public HPKEContextWithEncapsulation SetupPSKS(AsymmetricKeyParameter pkR, byte[]
306293
307294 public HPKEContext setupPSKR (byte [] enc , AsymmetricCipherKeyPair skR , byte [] info , byte [] psk , byte [] psk_id )
308295 {
309- byte [] sharedSecret = dhkem .Decap (enc , skR );
296+ byte [] sharedSecret = kem .Decap (enc , skR );
310297 return keySchedule (mode_psk , sharedSecret , info , psk , psk_id );
311298 }
312299
313300 public HPKEContextWithEncapsulation setupAuthS (AsymmetricKeyParameter pkR , byte [] info , AsymmetricCipherKeyPair skS )
314301 {
315- byte [][] output = dhkem .AuthEncap (pkR , skS );
302+ byte [][] output = kem .AuthEncap (pkR , skS );
316303 HPKEContext ctx = keySchedule (mode_auth , output [0 ], info , default_psk , default_psk_id );
317304
318305 return new HPKEContextWithEncapsulation (ctx , output [1 ]);
319306 }
320307
321308 public HPKEContext setupAuthR (byte [] enc , AsymmetricCipherKeyPair skR , byte [] info , AsymmetricKeyParameter pkS )
322309 {
323- byte [] sharedSecret = dhkem .AuthDecap (enc , skR , pkS );
310+ byte [] sharedSecret = kem .AuthDecap (enc , skR , pkS );
324311 return keySchedule (mode_auth , sharedSecret , info , default_psk , default_psk_id );
325312 }
326313
327314 public HPKEContextWithEncapsulation setupAuthPSKS (AsymmetricKeyParameter pkR , byte [] info , byte [] psk , byte [] psk_id , AsymmetricCipherKeyPair skS )
328315 {
329- byte [][] output = dhkem .AuthEncap (pkR , skS );
316+ byte [][] output = kem .AuthEncap (pkR , skS );
330317 HPKEContext ctx = keySchedule (mode_auth_psk , output [0 ], info , psk , psk_id );
331318
332319 return new HPKEContextWithEncapsulation (ctx , output [1 ]);
333320 }
334321
335322 public HPKEContext setupAuthPSKR (byte [] enc , AsymmetricCipherKeyPair skR , byte [] info , byte [] psk , byte [] psk_id , AsymmetricKeyParameter pkS )
336323 {
337- byte [] sharedSecret = dhkem .AuthDecap (enc , skR , pkS );
324+ byte [] sharedSecret = kem .AuthDecap (enc , skR , pkS );
338325 return keySchedule (mode_auth_psk , sharedSecret , info , psk , psk_id );
339326 }
340327}
0 commit comments