PdfDigitalSignatureIdentity.fromFiles constructor
PdfDigitalSignatureIdentity.fromFiles({})
Implementation
factory PdfDigitalSignatureIdentity.fromFiles({
required Uint8List privateKey,
required List<Uint8List> certificates,
}) {
if (certificates.isEmpty) {
throw const PdfSignatureIdentityException(
PdfSignatureIdentityError.noCertificateSelected,
'Select at least one X.509 certificate.',
);
}
final key = _parsePrivateKey(privateKey);
final ders = _parseCertificates(certificates);
final parsed = <X509Certificate>[];
for (var i = 0; i < ders.length; i++) {
try {
parsed.add(X509Certificate.parse(ders[i]));
} catch (_) {
throw PdfSignatureIdentityException(
PdfSignatureIdentityError.invalidCertificate,
'Certificate ${i + 1} is not valid X.509.',
certificateIndex: i + 1,
);
}
}
var signerIndex = -1;
for (var i = 0; i < parsed.length; i++) {
final publicKey = parsed[i].publicKey;
if (publicKey is RsaPublicKey &&
publicKey.modulus == key.modulus &&
publicKey.exponent == key.publicExponent) {
signerIndex = i;
break;
}
}
if (signerIndex < 0) {
throw const PdfSignatureIdentityException(
PdfSignatureIdentityError.keyCertificateMismatch,
'The private key does not match any selected RSA certificate.',
);
}
final ordered = <Uint8List>[
ders[signerIndex],
for (var i = 0; i < ders.length; i++)
if (i != signerIndex) ders[i],
];
return PdfDigitalSignatureIdentity._(
key,
List.unmodifiable(ordered),
parsed[signerIndex],
);
}