public class ECDHAuthEnvelopedDataDemo extends StaticStaticECDHDemo
AuthEnvelopedDataStream
,
AuthEnvelopedData
and AuthEnvelopedDataOutputStream
for authenticated encrypting data using the CMS type
AuthEnvelopedData by using Static-Static ECDH according to 6278 as
key agreement method.
Any keys/certificates required for this demo are read from a keystore
file "cmsecc.keystore" located in your current working directory. If
the keystore file does not exist you can create it by running the
SetupCMSEccKeyStore
program.
Additionally to iaik_cms.jar
you also must have
iaik_jce_(full).jar
(IAIK-JCE,
https://sic.tech/products/core-crypto-toolkits/jca-jce/),
and iaik_eccelarate.jar
(IAIK-ECCelerateTM,
https://sic.tech/products/core-crypto-toolkits/eccelerate/)
in your classpath.
AuthEnvelopedDataStream
,
AuthEnvelopedData
,
AuthEnvelopedDataOutputStream
,
RecipientInfo
,
KeyAgreeRecipientInfo
,
SetupCMSEccKeyStore
Constructor and Description |
---|
ECDHAuthEnvelopedDataDemo()
Setup the demo certificate chains.
|
Modifier and Type | Method and Description |
---|---|
byte[] |
createAuthEnvelopedData(byte[] message,
iaik.asn1.structures.AlgorithmID contentAuthEncAlg)
Creates a CMS
AuthEnvelopedData message. |
byte[] |
createAuthEnvelopedDataOutputStream(byte[] message,
iaik.asn1.structures.AlgorithmID contentAuthEncAlg)
Creates a CMS
AuthEnvelopedData message using the
AuthEnvelopedDataOutputStream
class. |
byte[] |
createAuthEnvelopedDataStream(byte[] message,
iaik.asn1.structures.AlgorithmID contentAuthEncAlg)
Creates a CMS
AuthEnvelopedDataStream message. |
byte[] |
getAuthEnvelopedData(byte[] enc,
java.security.Key key,
int recipientInfoIndex)
Decrypts the encrypted content of the given
AuthEnvelopedData object for
the recipient identified by its index into the recipientInfos field. |
byte[] |
getAuthEnvelopedData(byte[] enc,
java.security.Key key,
iaik.cms.KeyIdentifier recipientID)
Decrypts the encrypted content of the given
AuthEnvelopedData object for
the recipient identified by recipient identifier. |
byte[] |
getAuthEnvelopedData(byte[] enc,
java.security.Key key,
iaik.x509.X509Certificate recipientCert)
Decrypts the encrypted content of the given
AuthEnvelopedData object for
the recipient identified by its recipient certificate. |
byte[] |
getAuthEnvelopedDataStream(byte[] encoding,
java.security.Key key,
int recipientInfoIndex)
Decrypts the encrypted content of the given
AuthEnvelopedData object for
the recipient identified by its index into the recipientInfos field. |
byte[] |
getAuthEnvelopedDataStream(byte[] encoding,
java.security.Key key,
iaik.cms.KeyIdentifier recipientID)
Decrypts the encrypted content of the given
AuthEnvelopedData object for
the recipient identified by recipient identifier. |
static void |
main(java.lang.String[] argv)
Main method.
|
void |
parseAuthEnvelopedDataWithRecipientIdentifier(boolean stream,
byte[] encodedAuthEnvelopedData)
Parses an AuthEnvelopedData and decrypts the content for all test recipients
using their recipient identifiers for identifying the recipient.
|
void |
parseAuthEnvelopedDataWithRecipientInfoIndex(boolean stream,
byte[] encodedAuthEnvelopedData)
Parses an AuthEnvelopedData and decrypts the content for all test recipients
using the index into the recipientInfos field for identifying the recipient.
|
void |
start()
Starts the demo.
|
void |
start(iaik.asn1.structures.AlgorithmID contentAuthEncAlg)
Starts the demo for the given content-authenticated encryption algorithm.
|
createRecipients
public ECDHAuthEnvelopedDataDemo() throws java.io.IOException
SetupCMSEccKeyStore
program.java.io.IOException
- if keys/certificates cannot be read from the keystorepublic byte[] createAuthEnvelopedDataStream(byte[] message, iaik.asn1.structures.AlgorithmID contentAuthEncAlg) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedDataStream
message.message
- the message to be authenticated-enveloped, as byte representationcontentAuthEncAlg
- the id of the content-authenticated encryption algorithmAuthEnvelopedData
object just creatediaik.cms.CMSException
- if the AuthEnvelopedData
object cannot
be createdjava.io.IOException
- if an I/O error occurspublic byte[] createAuthEnvelopedDataOutputStream(byte[] message, iaik.asn1.structures.AlgorithmID contentAuthEncAlg) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
message using the
AuthEnvelopedDataOutputStream
class.message
- the message to be authenticated-enveloped, as byte representationcontentAuthEncAlg
- the id of the content-authenticated encryption algorithmAuthEnvelopedData
object just creatediaik.cms.CMSException
- if the AuthEnvelopedData
object cannot
be createdjava.io.IOException
- if an I/O error occurspublic byte[] getAuthEnvelopedDataStream(byte[] encoding, java.security.Key key, int recipientInfoIndex) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
object for
the recipient identified by its index into the recipientInfos field.encoding
- the AuthEnvelopedData
object as DER encoded byte arraykey
- the key to decrypt the messagerecipientInfoIndex
- the index into the RecipientInfo
array
to which the specified key belongsiaik.cms.CMSException
- if the message cannot be recoveredjava.io.IOException
- if a stream read/write error occurspublic byte[] getAuthEnvelopedDataStream(byte[] encoding, java.security.Key key, iaik.cms.KeyIdentifier recipientID) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
object for
the recipient identified by recipient identifier.encoding
- the AuthEnvelopedData
object as DER encoded byte arraykey
- the key to decrypt the messagerecipientID
- the recipient identifier uniquely identifying the key of the
recipientiaik.cms.CMSException
- if the message cannot be recoveredjava.io.IOException
- if a stream read/write error occurspublic byte[] createAuthEnvelopedData(byte[] message, iaik.asn1.structures.AlgorithmID contentAuthEncAlg) throws iaik.cms.CMSException
AuthEnvelopedData
message.message
- the message to be authenticated-enveloped, as byte representationcontentAuthEncAlg
- the id of the content-authenticated encryption algorithmAuthEnvelopedData
, as byte arrayiaik.cms.CMSException
- if the AuthEnvelopedData
object cannot
be createdpublic byte[] getAuthEnvelopedData(byte[] enc, java.security.Key key, int recipientInfoIndex) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
object for
the recipient identified by its index into the recipientInfos field.enc
- the encoded AuthEnvelopedData
key
- the key to decrypt the messagerecipientInfoIndex
- the index into the RecipientInfo
array
to which the specified key belongsiaik.cms.CMSException
- if the message cannot be recoveredjava.io.IOException
- if an I/O error occurspublic byte[] getAuthEnvelopedData(byte[] enc, java.security.Key key, iaik.cms.KeyIdentifier recipientID) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
object for
the recipient identified by recipient identifier.
This way of decrypting the content may be used for any type of RecipientInfo (KeyTransRecipientInfo, KeyAgreeRecipientInfo, KEKRecipientInfo). The recipient in mind is identified by its recipient identifier.
enc
- the encoded AuthenticatedData
key
- the key to decrypt the messagerecipientID
- the recipient identifier uniquely identifying the key of the
recipientiaik.cms.CMSException
- if the message cannot be recoveredjava.io.IOException
- if an I/O error occurspublic byte[] getAuthEnvelopedData(byte[] enc, java.security.Key key, iaik.x509.X509Certificate recipientCert) throws iaik.cms.CMSException, java.io.IOException
AuthEnvelopedData
object for
the recipient identified by its recipient certificate.enc
- the encoded AuthEnvelopedData
key
- the key to decrypt the messagerecipientCert
- the certificate of the recipientiaik.cms.CMSException
- if the message cannot be recoveredjava.io.IOException
public void parseAuthEnvelopedDataWithRecipientInfoIndex(boolean stream, byte[] encodedAuthEnvelopedData) throws java.lang.Exception
stream
- whether to use AuthEnvelopedDataStream or AuthEnvelopedDataencodedAuthEnvelopedData
- the encoded AuthEnvelopedData objectjava.lang.Exception
- if some error occurs during decoding/decryptionpublic void parseAuthEnvelopedDataWithRecipientIdentifier(boolean stream, byte[] encodedAuthEnvelopedData) throws java.lang.Exception
stream
- whether to use AuthEnvelopedDataStream or AuthEnvelopedDataencodedAuthEnvelopedData
- the encoded AuthEnvelopedData objectjava.lang.Exception
- if some error occurs during decoding/decryptionpublic void start()
public void start(iaik.asn1.structures.AlgorithmID contentAuthEncAlg)
contentAuthEncAlg
- the id of the content-authenticated encryption algorithmpublic static void main(java.lang.String[] argv) throws java.lang.Exception
java.io.IOException
- if an I/O error occurs when reading required keys
and certificates from the keystore filejava.lang.Exception