SSE4E

Home

GPError
GPSystem
ByteString
ByteBuffer
TLV
TLVList
Card
Atr
Key
Crypto
Application GPApplication GPSecDomain

ASN1
CardFile
IsoSecureChannel
ApplFactory
GPXML
JsScript
CardSim

X509
CRL
KeyStore
CMSSignedData
CMSGenerator
XMLSignature
OCSPQuery
LDAP
SOAP
URLConnection

PKCS11Provider
PKCS11Session
PKCS11Object

OutlineNode

OpenSCDP

CMSGenerator - Reference Documentation

Class for CMS generation according to RFC 3852

Index of Methods

Constants

TypeNameDescription
NumberTYPE_SIGNED_DATAIndicator for signed data content
NumberTYPE_ENVELOPED_DATAIndictator for enveloped data
StringTYPE_DIGESTED_DATAIndicator for digested data
StringTYPE_ENCRYPTED_DATAIndicator for encrypted data
StringTYPE_AUTHENTICATED_DATAIndicator for authenticated data

Constructor

Prototype

CMSGenerator(Number type)

Description

Create a CMS generator object for the specified type

Note: The current implementation only supports signed data

Arguments

TypeNameDescription
NumbertypeType of CMS object that should be generated

Exceptions

NameValueDescription
GPErrorGPError.GPError.INVALID_TYPEArgument type is invalid
GPErrorGPError.INVALID_DATAArgument contains no valid encoded CMS signed data object

Example


try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_ENVELOPED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_DIGESTED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_ENCRYPTED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_AUTHENTICATED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

var gen = new CMSGenerator(CMSGenerator.TYPE_SIGNED_DATA);
assert(gen != null);

setDataContent()

Prototype

void setDataContent(ByteString data)

Description

Set the data content of the CMS object.

Arguments

TypeNameDescription
ByteStringdataData content

Return

Exceptions

NameValueDescription
GPErrorGPError.INVALID_ARGUMENTSToo many or missing arguments in call

Example


var content = new ByteString("Hello World!", ASCII);
gen.setDataContent(content);

addSigner()

Prototype

void addSigner(Key privateKey, X509 certificate, String digestOID)

Description

Add a signer key for the object.

Arguments

TypeNameDescription
KeyprivateKeyPrivate key of the signer
X509certificateCertificate of the signer
ByteStringdigestOIDOID of the corresponding digest algorithm

Return

Exceptions

NameValueDescription
GPErrorGPError.INVALID_ARGUMENTSToo many or missing arguments in call

Example



var crypto = new Crypto();

// Generate an asymmetric key pair and a certificate for A
print("Generating generating key pair and X509 certificate for Signer A...\n");

var privKeyA = new Key();
privKeyA.setType(Key.PRIVATE);

var pubKeyA = new Key();
pubKeyA.setType(Key.PUBLIC);
pubKeyA.setSize(2048);
	
crypto.generateKeyPair(Crypto.RSA, pubKeyA, privKeyA);
	
var x = new X509CertificateGenerator(crypto);

x.reset();
x.setSerialNumber(new ByteString("01", HEX));
x.setSignatureAlgorithm(Crypto.RSA);
var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
x.setIssuer(issuer);
x.setNotBefore("060825120000Z");
x.setNotAfter("160825120000Z");
var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Signer #A" };
x.setSubject(subject);
x.setPublicKey(pubKeyA);
x.addKeyUsageExtension(	X509CertificateGenerator.digitalSignature |
							X509CertificateGenerator.keyCertSign |
							X509CertificateGenerator.cRLSign );
							
x.addBasicConstraintsExtension(true, 0);
x.addSubjectKeyIdentifierExtension();
x.addAuthorityKeyIdentifierExtension(pubKeyA);

var certA = x.generateX509Certificate(privKeyA);

gen.addSigner(privKeyA, certA, new ByteString("id-sha256", OID), true);

generate()

Prototype

ByteString generate()

ByteString generate(ByteString contentOID)

Description

Generate the CMS object

Return

ByteStringThe ASN.1 encoded cms object

Exceptions

NameValueDescription
GPErrorGPError.INVALID_ARGUMENTSToo many or missing arguments in call

Example


var contentOID = new ByteString("0.4.0.127.0.7.3.2.2", OID);

var cms = gen.generate(contentOID);

var t = new CMSSignedData(cms);

var contentTypeOID = t.getEContentType();
assert(contentTypeOID.equals(contentOID));

certs = t.getSignedDataCertificates();

assert(certs != null);

print("Number of certificates: " + certs.length);

for (i = 0; i < certs.length; i++) {
	print("#" + i+ ": " + certs[i].toString());
}

print("Signed content: " + t.getSignedContent().toString(ASCII));


ns = t.getNumberOfSigners();
for (i = 0; i < ns; i++) {

	signature = t.getSignerInfoSignature(i);
	assert(signature != null);
	print("Signature [" + i + "]: " + signature.toString());
}

ns = t.getNumberOfSigners();
assert(ns != null);

print("Number of signers:" + ns);

for (i = 0; i < ns; i++) {

	valid = t.isSignerInfoSignatureValid(i);
	assert(valid != null);
	print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));
}