@@ -146,19 +146,19 @@ public JceKeyAgreeRecipientInfoGenerator addRecipient(byte[] subjectKeyID, Publi
146146 return this ;
147147 }
148148
149- public ASN1Sequence generateRecipientEncryptedKeys (AlgorithmIdentifier keyAgreeAlgorithm , AlgorithmIdentifier keyEncryptionAlgorithm , GenericKey contentEncryptionKey )
150- throws CMSException
149+ public ASN1Sequence generateRecipientEncryptedKeys (AlgorithmIdentifier keyAgreeAlgorithm ,
150+ AlgorithmIdentifier keyEncryptionAlgorithm , GenericKey contentEncryptionKey ) throws CMSException
151151 {
152152 if (recipientIDs .isEmpty ())
153153 {
154154 throw new CMSException ("No recipients associated with generator - use addRecipient()" );
155155 }
156156
157- init ( keyAgreeAlgorithm .getAlgorithm () );
157+ ASN1ObjectIdentifier keyAgreementOID = keyAgreeAlgorithm .getAlgorithm ();
158158
159- PrivateKey senderPrivateKey = this . senderPrivateKey ;
159+ init ( keyAgreementOID ) ;
160160
161- ASN1ObjectIdentifier keyAgreementOID = keyAgreeAlgorithm . getAlgorithm () ;
161+ PrivateKey senderPrivateKey = this . senderPrivateKey ;
162162
163163 ASN1EncodableVector recipientEncryptedKeys = new ASN1EncodableVector ();
164164 for (int i = 0 ; i != recipientIDs .size (); i ++)
@@ -169,15 +169,16 @@ public ASN1Sequence generateRecipientEncryptedKeys(AlgorithmIdentifier keyAgreeA
169169 try
170170 {
171171 AlgorithmParameterSpec agreementParamSpec ;
172- ASN1ObjectIdentifier keyEncAlg = keyEncryptionAlgorithm .getAlgorithm ();
172+ ASN1ObjectIdentifier keyEncryptionOID = keyEncryptionAlgorithm .getAlgorithm ();
173173
174174 if (CMSUtils .isMQV (keyAgreementOID ))
175175 {
176176 agreementParamSpec = new MQVParameterSpec (ephemeralKP , recipientPublicKey , userKeyingMaterial );
177177 }
178178 else if (CMSUtils .isEC (keyAgreementOID ))
179179 {
180- byte [] ukmKeyingMaterial = ecc_cms_Generator .generateKDFMaterial (keyEncryptionAlgorithm , keySizeProvider .getKeySize (keyEncAlg ), userKeyingMaterial );
180+ byte [] ukmKeyingMaterial = ecc_cms_Generator .generateKDFMaterial (keyEncryptionAlgorithm ,
181+ keySizeProvider .getKeySize (keyEncryptionOID ), userKeyingMaterial );
181182
182183 agreementParamSpec = new UserKeyingMaterialSpec (ukmKeyingMaterial );
183184 }
@@ -217,37 +218,36 @@ else if (CMSUtils.isGOST(keyAgreementOID))
217218 keyAgreement .init (senderPrivateKey , agreementParamSpec , random );
218219 keyAgreement .doPhase (recipientPublicKey , true );
219220
220- SecretKey keyEncryptionKey = keyAgreement .generateSecret (keyEncAlg .getId ());
221+ SecretKey keyEncryptionKey = keyAgreement .generateSecret (keyEncryptionOID .getId ());
221222
222223 EnvelopedDataHelper keyWrapHelper = (wrappingHelper != null ) ? wrappingHelper : helper ;
223224
224225 // Wrap the content encryption key with the agreement key
225- Cipher keyEncryptionCipher = keyWrapHelper .createCipher (keyEncAlg );
226- ASN1OctetString encryptedKey ;
226+ Cipher keyEncryptionCipher = keyWrapHelper .createCipher (keyEncryptionOID );
227227
228- if (keyEncAlg .equals (CryptoProObjectIdentifiers .id_Gost28147_89_None_KeyWrap )
229- || keyEncAlg .equals (CryptoProObjectIdentifiers .id_Gost28147_89_CryptoPro_KeyWrap ))
228+ byte [] encryptedKeyOctets ;
229+ if (CryptoProObjectIdentifiers .id_Gost28147_89_None_KeyWrap .equals (keyEncryptionOID ) ||
230+ CryptoProObjectIdentifiers .id_Gost28147_89_CryptoPro_KeyWrap .equals (keyEncryptionOID ))
230231 {
231- keyEncryptionCipher .init (Cipher .WRAP_MODE , keyEncryptionKey , new GOST28147WrapParameterSpec (CryptoProObjectIdentifiers .id_Gost28147_89_CryptoPro_A_ParamSet , userKeyingMaterial ));
232+ keyEncryptionCipher .init (Cipher .WRAP_MODE , keyEncryptionKey ,
233+ new GOST28147WrapParameterSpec (CryptoProObjectIdentifiers .id_Gost28147_89_CryptoPro_A_ParamSet , userKeyingMaterial ));
232234
233235 byte [] encKeyBytes = keyEncryptionCipher .wrap (keyWrapHelper .getJceKey (contentEncryptionKey ));
234236
235237 Gost2814789EncryptedKey encKey = new Gost2814789EncryptedKey (
236238 Arrays .copyOfRange (encKeyBytes , 0 , encKeyBytes .length - 4 ),
237239 Arrays .copyOfRange (encKeyBytes , encKeyBytes .length - 4 , encKeyBytes .length ));
238240
239- encryptedKey = new DEROctetString ( encKey .getEncoded (ASN1Encoding .DER ) );
241+ encryptedKeyOctets = encKey .getEncoded (ASN1Encoding .DER );
240242 }
241243 else
242244 {
243245 keyEncryptionCipher .init (Cipher .WRAP_MODE , keyEncryptionKey , random );
244246
245- byte [] encryptedKeyBytes = keyEncryptionCipher .wrap (keyWrapHelper .getJceKey (contentEncryptionKey ));
246-
247- encryptedKey = new DEROctetString (encryptedKeyBytes );
247+ encryptedKeyOctets = keyEncryptionCipher .wrap (keyWrapHelper .getJceKey (contentEncryptionKey ));
248248 }
249249
250- recipientEncryptedKeys .add (new RecipientEncryptedKey (karId , encryptedKey ));
250+ recipientEncryptedKeys .add (new RecipientEncryptedKey (karId , new DEROctetString ( encryptedKeyOctets ) ));
251251 }
252252 catch (GeneralSecurityException e )
253253 {
@@ -274,7 +274,7 @@ protected byte[] getUserKeyingMaterial(AlgorithmIdentifier keyAgreeAlg)
274274
275275 try
276276 {
277- ASN1OctetString addedukm = DEROctetString .withContentsOptional (userKeyingMaterial );
277+ ASN1OctetString addedukm = DEROctetString .fromContentsOptional (userKeyingMaterial );
278278
279279 return new MQVuserKeyingMaterial (originatorPublicKey , addedukm ).getEncoded ();
280280 }
0 commit comments