1 /*
2 * Title: S/MIME Project
3 * Description: S/MIME email sending capabilities
4 * @Author Vladimir Radisic
5 * @Version 2.0.1
6 */
7
8
9 package org.webdocwf.util.smime.cms;
10
11
12 import org.webdocwf.util.smime.exception.SMIMEException;
13 import org.webdocwf.util.smime.der.DERSequencePr;
14 import java.security.cert.X509Certificate;
15 import org.webdocwf.util.smime.crypto.AsymmetricEncryption;
16
17
18 /***
19 * KeyTransRecipientInfo class is DER encoded object represented in ASN.1
20 * notation according to RFC2630. It is used for representing information
21 * about particular recipient and for transport encrypted symmetric key.
22 * This class presents one way of transport symmetric key (they are
23 * two more ways). KeyTransRecipientInfo information in ASN.1 notation is
24 * represented as element named RecipientInfo (withouth s at the end!) which
25 * is inner element of RecipientInfos (for details look at RecipientInfo class).<BR>
26 * <BR>
27 * <DL>
28 * KeyTransRecipientInfo ::= SEQUENCE {<BR>
29 * <DD> version CMSVersion, -- always set to 0 or 2<BR>
30 * <DD> rid RecipientIdentifier,<BR>
31 * <DD> keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,<BR>
32 * <DD> encryptedKey EncryptedKey }<BR>
33 * </DL>
34 */
35 public class KeyTransRecipientInfo extends DERSequencePr {
36
37 /***
38 * Storage for symmetric key.
39 */
40 private byte[] symmetricKey;
41
42 /***
43 * Disable adding more than one recipient.
44 */
45 private int enable = 0;
46
47 /***
48 * Symmetric key is only important parameter, other can be null.
49 * @param symKey0 symmetric key represented as byte array
50 * @param parameter0 for future use
51 * @exception SMIMEException thrown by super class constructor.
52 */
53 public KeyTransRecipientInfo(byte[] symKey0) throws SMIMEException {
54 symmetricKey = symKey0; // Before constructing this object symmetric key for encrypting of message content must already exist
55 }
56
57 /***
58 * Adds recipient information. This method can be used just one time in one
59 * instance of this class.
60 * @param recip0 X509 certificate of the recipient
61 * @exception SMIMEException if recipient was already added. Also, exception
62 * could be thrown by super class addContent method.
63 */
64 public void addRecipient(X509Certificate recip0) throws SMIMEException {
65 if (enable == 1)
66 throw new SMIMEException(this, 1022);
67 super.addContent(new CMSVersion(0).getDEREncoded()); // Setting CMS version to 1
68 super.addContent(new RecipientIdentifier(recip0).getDEREncoded()); // Adding issuer distinguish name + certificate serial number
69 super.addContent(new AlgorithmIdentifier("RSA", "NAME_STRING").getDEREncoded()); // Adding asymmetric algorythm object identifier
70 AsymmetricEncryption encrAsymmetric = new AsymmetricEncryption(); // Encrypting symmetric key
71
72 encrAsymmetric.encryption(recip0.getPublicKey(), symmetricKey);
73 EncryptedKey encKey = new EncryptedKey(encrAsymmetric.getEncryptValue());
74
75 super.addContent(encKey.getDEREncoded()); // Adding encrypted symmetric key
76 enable = 1;
77 }
78 }
79
This page was automatically generated by Maven