signDetachedSha256RsaFromPem static method
Helper that builds a detached CMS using PEM materials.
Implementation
static Uint8List signDetachedSha256RsaFromPem({
required Uint8List contentDigest,
required String privateKeyPem,
required String certificatePem,
List<String> chainPem = const <String>[],
DateTime? signingTime,
}) {
final signerCertDer =
PdfPemUtils.decodeFirstPem(certificatePem, 'CERTIFICATE');
final extraCertsDer = <Uint8List>[];
for (final pem in chainPem) {
extraCertsDer.addAll(PdfPemUtils.decodePemBlocks(pem, 'CERTIFICATE'));
}
final cms = PdfCmsSigner();
final signedAttrsDer = cms._buildSignedAttributesDer(
contentDigest: contentDigest,
signingTime: (signingTime ?? DateTime.now().toUtc()),
signerCertDer: signerCertDer,
);
final signedAttrsDigest = PdfCrypto.sha256(signedAttrsDer);
final key = PdfPemUtils.rsaPrivateKeyFromPem(privateKeyPem);
final signature = _rsaSignDigestSha256(signedAttrsDigest, key);
return cms._buildCmsSignedData(
contentDigest: contentDigest,
signerCertDer: signerCertDer,
extraCertsDer: extraCertsDer,
signedAttrsDer: signedAttrsDer,
signature: signature,
digestAlgorithmOid: '2.16.840.1.101.3.4.2.1',
signatureAlgorithmOid: '1.2.840.113549.1.1.1',
);
}