1 package org.bouncycastle.dvcs;
2 
3 import java.io.IOException;
4 
5 import org.bouncycastle.asn1.ASN1Encoding;
6 import org.bouncycastle.cms.CMSException;
7 import org.bouncycastle.cms.CMSProcessableByteArray;
8 import org.bouncycastle.cms.CMSSignedData;
9 import org.bouncycastle.cms.CMSSignedDataGenerator;
10 
11 public class SignedDVCSMessageGenerator
12 {
13     private final CMSSignedDataGenerator signedDataGen;
14 
SignedDVCSMessageGenerator(CMSSignedDataGenerator signedDataGen)15     public SignedDVCSMessageGenerator(CMSSignedDataGenerator signedDataGen)
16     {
17         this.signedDataGen = signedDataGen;
18     }
19 
20     /**
21      * Creates a CMSSignedData object containing the passed in DVCSMessage
22      *
23      * @param message the request to be signed.
24      * @return an encapsulating SignedData object.
25      * @throws DVCSException in the event of failure to encode the request or sign it.
26      */
build(DVCSMessage message)27     public CMSSignedData build(DVCSMessage message)
28         throws DVCSException
29     {
30         try
31         {
32             byte[] encapsulatedData = message.getContent().toASN1Primitive().getEncoded(ASN1Encoding.DER);
33 
34             return signedDataGen.generate(new CMSProcessableByteArray(message.getContentType(), encapsulatedData), true);
35         }
36         catch (CMSException e)
37         {
38             throw new DVCSException("Could not sign DVCS request", e);
39         }
40         catch (IOException e)
41         {
42             throw new DVCSException("Could not encode DVCS request", e);
43         }
44     }
45 }
46