buildDetachedCms method
Future<Uint8List>
buildDetachedCms({
- required Uint8List contentDigest,
- required Uint8List signerCertDer,
- List<
Uint8List> extraCertsDer = const <Uint8List>[], - DateTime? signingTime,
- String digestAlgorithmOid = '2.16.840.1.101.3.4.2.1',
- String signatureAlgorithmOid = '1.2.840.113549.1.1.1',
- required Future<
Uint8List> signCallback(), - Future<
Uint8List> timestampProvider(- Uint8List signature
Builds a detached CMS/PKCS#7 signature.
Implementation
Future<Uint8List> buildDetachedCms({
required Uint8List contentDigest,
required Uint8List signerCertDer,
List<Uint8List> extraCertsDer = const <Uint8List>[],
DateTime? signingTime,
String digestAlgorithmOid = '2.16.840.1.101.3.4.2.1',
String signatureAlgorithmOid = '1.2.840.113549.1.1.1',
required Future<Uint8List> Function(
Uint8List signedAttrsDer,
Uint8List signedAttrsDigest,
) signCallback,
Future<Uint8List> Function(Uint8List signature)? timestampProvider,
}) async {
final signedAttrsDer = _buildSignedAttributesDer(
contentDigest: contentDigest,
signingTime: signingTime ?? DateTime.now().toUtc(),
signerCertDer: signerCertDer,
);
final signedAttrsDigest = PdfCrypto.sha256(signedAttrsDer);
final signature = await signCallback(signedAttrsDer, signedAttrsDigest);
if (signature.isEmpty) {
throw StateError('Assinatura externa retornou vazio.');
}
Uint8List? timestampToken;
if (timestampProvider != null) {
timestampToken = await timestampProvider(signature);
if (timestampToken.isEmpty) {
throw StateError('Timestamp retornou vazio.');
}
}
return _buildCmsSignedData(
contentDigest: contentDigest,
signerCertDer: signerCertDer,
extraCertsDer: extraCertsDer,
signedAttrsDer: signedAttrsDer,
signature: signature,
timestampToken: timestampToken,
digestAlgorithmOid: digestAlgorithmOid,
signatureAlgorithmOid: signatureAlgorithmOid,
);
}