org.bouncycastle.cms

## Class CMSEnvelopedGenerator

- java.lang.Object
- - org.bouncycastle.cms.CMSEnvelopedGenerator

Direct Known Subclasses:
  CMSAuthenticatedGenerator, CMSEnvelopedDataGenerator, CMSEnvelopedDataStreamGenerator

    public class CMSEnvelopedGenerator
    extends java.lang.Object

General class for generating a CMS enveloped-data message. A simple example of usage.

          CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();

          fact.addKeyTransRecipient(cert);

          CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");

### Field Summary

Fields
`static java.lang.String` `AES128_CBC`
`static java.lang.String` `AES128_WRAP`
`static java.lang.String` `AES192_CBC`
`static java.lang.String` `AES192_WRAP`
`static java.lang.String` `AES256_CBC`
`static java.lang.String` `AES256_WRAP`
`static java.lang.String` `CAMELLIA128_CBC`
`static java.lang.String` `CAMELLIA128_WRAP`
`static java.lang.String` `CAMELLIA192_CBC`
`static java.lang.String` `CAMELLIA192_WRAP`
`static java.lang.String` `CAMELLIA256_CBC`
`static java.lang.String` `CAMELLIA256_WRAP`
`static java.lang.String` `CAST5_CBC`
`static java.lang.String` `DES_EDE3_CBC`
`static java.lang.String` `DES_EDE3_WRAP`
`static java.lang.String` `ECDH_SHA1KDF`
`static java.lang.String` `ECMQV_SHA1KDF`
`static java.lang.String` `IDEA_CBC`
`static java.lang.String` `RC2_CBC`
`static java.lang.String` `SEED_CBC`
`static java.lang.String` `SEED_WRAP`

### Constructor Summary

Constructors
Constructor and Description
`CMSEnvelopedGenerator()` base constructor
`CMSEnvelopedGenerator(java.security.SecureRandom rand)` constructor allowing specific source of randomness

### Method Summary

Methods
`void` `addKEKRecipient(javax.crypto.SecretKey key, byte[] keyIdentifier)` add a KEK recipient.
`void` `addKeyAgreementRecipient(java.lang.String agreementAlgorithm, java.security.PrivateKey senderPrivateKey, java.security.PublicKey senderPublicKey, java.security.cert.X509Certificate recipientCert, java.lang.String cekWrapAlgorithm, java.security.Provider provider)` Add a key agreement based recipient.
`void` `addKeyAgreementRecipient(java.lang.String agreementAlgorithm, java.security.PrivateKey senderPrivateKey, java.security.PublicKey senderPublicKey, java.security.cert.X509Certificate recipientCert, java.lang.String cekWrapAlgorithm, java.lang.String provider)` Add a key agreement based recipient.
`void` `addKeyTransRecipient(java.security.PublicKey key, byte[] subKeyId)` add a recipient
`void` `addKeyTransRecipient(java.security.cert.X509Certificate cert)` add a recipient.
`void` `addPasswordRecipient(CMSPBEKey pbeKey, java.lang.String kekAlgorithmOid)`
`protected java.security.AlgorithmParameters` `generateParameters(java.lang.String encryptionOID, javax.crypto.SecretKey encKey, java.security.Provider encProvider)`
`protected org.bouncycastle.asn1.x509.AlgorithmIdentifier` `getAlgorithmIdentifier(java.lang.String encryptionOID, java.security.AlgorithmParameters params)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DES_EDE3_CBC

    public static final java.lang.String DES_EDE3_CBC

#### RC2_CBC

    public static final java.lang.String RC2_CBC

#### IDEA_CBC

    public static final java.lang.String IDEA_CBC

See Also:
  Constant Field Values

#### CAST5_CBC

    public static final java.lang.String CAST5_CBC

See Also:
  Constant Field Values

#### AES128_CBC

    public static final java.lang.String AES128_CBC

#### AES192_CBC

    public static final java.lang.String AES192_CBC

#### AES256_CBC

    public static final java.lang.String AES256_CBC

#### CAMELLIA128_CBC

    public static final java.lang.String CAMELLIA128_CBC

#### CAMELLIA192_CBC

    public static final java.lang.String CAMELLIA192_CBC

#### CAMELLIA256_CBC

    public static final java.lang.String CAMELLIA256_CBC

#### SEED_CBC

    public static final java.lang.String SEED_CBC

#### DES_EDE3_WRAP

    public static final java.lang.String DES_EDE3_WRAP

#### AES128_WRAP

    public static final java.lang.String AES128_WRAP

#### AES192_WRAP

    public static final java.lang.String AES192_WRAP

#### AES256_WRAP

    public static final java.lang.String AES256_WRAP

#### CAMELLIA128_WRAP

    public static final java.lang.String CAMELLIA128_WRAP

#### CAMELLIA192_WRAP

    public static final java.lang.String CAMELLIA192_WRAP

#### CAMELLIA256_WRAP

    public static final java.lang.String CAMELLIA256_WRAP

#### SEED_WRAP

    public static final java.lang.String SEED_WRAP

#### ECDH_SHA1KDF

    public static final java.lang.String ECDH_SHA1KDF

#### ECMQV_SHA1KDF

    public static final java.lang.String ECMQV_SHA1KDF

### Constructor Detail

#### CMSEnvelopedGenerator

    public CMSEnvelopedGenerator()

base constructor

#### CMSEnvelopedGenerator

    public CMSEnvelopedGenerator(java.security.SecureRandom rand)

constructor allowing specific source of randomness

Parameters:
  `rand` - instance of SecureRandom to use

### Method Detail

#### addKeyTransRecipient

    public void addKeyTransRecipient(java.security.cert.X509Certificate cert)
                              throws java.lang.IllegalArgumentException

add a recipient.

Parameters:
  `cert` - recipient's public key certificate
Throws:
  `java.lang.IllegalArgumentException` - if there is a problem with the certificate

#### addKeyTransRecipient

    public void addKeyTransRecipient(java.security.PublicKey key,
                            byte[] subKeyId)
                              throws java.lang.IllegalArgumentException

add a recipient

Parameters:
  `key` - the public key used by the recipient
  `subKeyId` - the identifier for the recipient's public key
Throws:
  `java.lang.IllegalArgumentException` - if there is a problem with the key

#### addKEKRecipient

    public void addKEKRecipient(javax.crypto.SecretKey key,
                       byte[] keyIdentifier)

add a KEK recipient.

Parameters:
  `key` - the secret key to use for wrapping
  `keyIdentifier` - the byte string that identifies the key

#### addPasswordRecipient

    public void addPasswordRecipient(CMSPBEKey pbeKey,
                            java.lang.String kekAlgorithmOid)

#### addKeyAgreementRecipient

    public void addKeyAgreementRecipient(java.lang.String agreementAlgorithm,
                                java.security.PrivateKey senderPrivateKey,
                                java.security.PublicKey senderPublicKey,
                                java.security.cert.X509Certificate recipientCert,
                                java.lang.String cekWrapAlgorithm,
                                java.lang.String provider)
                                  throws java.security.NoSuchProviderException,
                                         java.security.NoSuchAlgorithmException,
                                         java.security.InvalidKeyException

Add a key agreement based recipient.

Parameters:
  `agreementAlgorithm` - key agreement algorithm to use.
  `senderPrivateKey` - private key to initialise sender side of agreement with.
  `senderPublicKey` - sender public key to include with message.
  `recipientCert` - recipient's public key certificate.
  `cekWrapAlgorithm` - OID for key wrapping algorithm to use.
  `provider` - provider to use for the agreement calculation.
Throws:
  `java.security.NoSuchProviderException` - if the specified provider cannot be found
  `java.security.NoSuchAlgorithmException` - if the algorithm requested cannot be found
  `java.security.InvalidKeyException` - if the keys are inappropriate for the algorithm specified

#### addKeyAgreementRecipient

    public void addKeyAgreementRecipient(java.lang.String agreementAlgorithm,
                                java.security.PrivateKey senderPrivateKey,
                                java.security.PublicKey senderPublicKey,
                                java.security.cert.X509Certificate recipientCert,
                                java.lang.String cekWrapAlgorithm,
                                java.security.Provider provider)
                                  throws java.security.NoSuchAlgorithmException,
                                         java.security.InvalidKeyException

Add a key agreement based recipient.

Parameters:
  `agreementAlgorithm` - key agreement algorithm to use.
  `senderPrivateKey` - private key to initialise sender side of agreement with.
  `senderPublicKey` - sender public key to include with message.
  `recipientCert` - recipient's public key certificate.
  `cekWrapAlgorithm` - OID for key wrapping algorithm to use.
  `provider` - provider to use for the agreement calculation.
Throws:
  `java.security.NoSuchAlgorithmException` - if the algorithm requested cannot be found
  `java.security.InvalidKeyException` - if the keys are inappropriate for the algorithm specified

#### getAlgorithmIdentifier

    protected org.bouncycastle.asn1.x509.AlgorithmIdentifier getAlgorithmIdentifier(java.lang.String encryptionOID,
                                                                        java.security.AlgorithmParameters params)
                                                                             throws java.io.IOException

Throws:
  `java.io.IOException`

#### generateParameters

    protected java.security.AlgorithmParameters generateParameters(java.lang.String encryptionOID,
                                                       javax.crypto.SecretKey encKey,
                                                       java.security.Provider encProvider)
                                                            throws CMSException

Throws:
  `CMSException`