Search in sources :

Example 1 with OID

use of ru.CryptoPro.JCP.params.OID in project diadocsdk-java by diadoc.

the class CertificateHelper method createCMS.

public static byte[] createCMS(byte[] buffer, byte[] sign, Certificate cert, boolean detached, GOSTSignInfoProvider gostSignInfoProvider) throws Exception {
    final ContentInfo all = new ContentInfo();
    all.contentType = new Asn1ObjectIdentifier(new OID(STR_CMS_OID_SIGNED).value);
    final SignedData cms = new SignedData();
    all.content = cms;
    cms.version = new CMSVersion(1);
    // digest
    cms.digestAlgorithms = new DigestAlgorithmIdentifiers(1);
    final DigestAlgorithmIdentifier a = new DigestAlgorithmIdentifier(new OID(gostSignInfoProvider.getDigestOID()).value);
    a.parameters = new Asn1Null();
    cms.digestAlgorithms.elements[0] = a;
    if (detached) {
        cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier(new OID(STR_CMS_OID_DATA).value), null);
    } else {
        cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier(new OID(STR_CMS_OID_DATA).value), new Asn1OctetString(buffer));
    }
    // certificate
    cms.certificates = new CertificateSet(1);
    final ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate certificate = new ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate();
    final Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(cert.getEncoded());
    certificate.decode(decodeBuffer);
    cms.certificates.elements = new CertificateChoices[1];
    cms.certificates.elements[0] = new CertificateChoices();
    cms.certificates.elements[0].set_certificate(certificate);
    // signer info
    cms.signerInfos = new SignerInfos(1);
    cms.signerInfos.elements[0] = new SignerInfo();
    cms.signerInfos.elements[0].version = new CMSVersion(1);
    cms.signerInfos.elements[0].sid = new SignerIdentifier();
    final byte[] encodedName = ((X509Certificate) cert).getIssuerX500Principal().getEncoded();
    final Asn1BerDecodeBuffer nameBuf = new Asn1BerDecodeBuffer(encodedName);
    final Name name = new Name();
    name.decode(nameBuf);
    final CertificateSerialNumber num = new CertificateSerialNumber(((X509Certificate) cert).getSerialNumber());
    cms.signerInfos.elements[0].sid.set_issuerAndSerialNumber(new IssuerAndSerialNumber(name, num));
    cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier(new OID(gostSignInfoProvider.getDigestOID()).value);
    cms.signerInfos.elements[0].digestAlgorithm.parameters = new Asn1Null();
    cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier(new OID(gostSignInfoProvider.getSignOID()).value);
    cms.signerInfos.elements[0].signatureAlgorithm.parameters = new Asn1Null();
    cms.signerInfos.elements[0].signature = new SignatureValue(sign);
    // encode
    final Asn1BerEncodeBuffer asnBuf = new Asn1BerEncodeBuffer();
    all.encode(asnBuf, true);
    return asnBuf.getMsgCopy();
}
Also used : Name(ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Name) CertificateSerialNumber(ru.CryptoPro.JCP.ASN.PKIX1Explicit88.CertificateSerialNumber) OID(ru.CryptoPro.JCP.params.OID) Certificate(java.security.cert.Certificate)

Aggregations

Certificate (java.security.cert.Certificate)1 CertificateSerialNumber (ru.CryptoPro.JCP.ASN.PKIX1Explicit88.CertificateSerialNumber)1 Name (ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Name)1 OID (ru.CryptoPro.JCP.params.OID)1