PDFium Delphi Component Docs

FPdfCms الوحدة

الوحدة: FPdfCms
يبني بنى SignedData في RFC 5652 CMS / CAdES، ويتحقق من وثائق سياسة التوقيع، ويضمّن طوابع RFC 3161 الزمنية الاختيارية

الصياغة

TCmsSignerIdKind = (sidIssuerAndSerial, sidSubjectKeyIdentifier);

TCmsSignerId = record
  Kind: TCmsSignerIdKind;
  IssuerDer: TBytes;
  SerialDer: TBytes;
  SubjectKeyId: TBytes;
end;

ICmsSigner = interface
  function GetDigestAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmParams: TBytes;
  function GetSignerId: TCmsSignerId;
  function SignSignedAttrsDigest(const Digest: TSHA256Digest): TBytes;
end;

TCmsBuildOptions = record
  SigningTimeUtc: TDateTime;
  CommitmentTypeOid: AnsiString;
  SignaturePolicyOid: AnsiString;
  SignaturePolicyHash: TBytes;
  SignaturePolicyUri: AnsiString;
  SignaturePolicyDocument: TBytes;
  class function Default: TCmsBuildOptions; static;
end;

function CertKeyAlgorithmOid(const CertDer: TBytes): AnsiString;
function ExtractIssuerAndSerial(const CertDer: TBytes;
  out IssuerTlv, SerialTlv: TBytes): Boolean;
function EcDsaP1363ToDer(const Raw: TBytes): TBytes;
function VerifyCmsSignaturePolicyDocument(const Options: TCmsBuildOptions;
  const PolicyDocument: TBytes; out ErrorText: string): Boolean;
function BuildSignedData(const DetachedDigest: TSHA256Digest;
  const Signer: ICmsSigner; const SignerCertDer: TBytes;
  const ChainCertDer: array of TBytes;
  const Options: TCmsBuildOptions): TBytes;
function ExtractSignatureValue(const CmsDer: TBytes;
  out SignatureValueOctets: TBytes): Boolean;
procedure AddSignatureTimestampToCms(var CmsDer: TBytes;
  const TimestampTokenDer: TBytes);

الوصف

FPdfCms هو باني CMS منخفض المستوى الذي تستهلكه داخليًا مسارات توقيع PAdES. وهو يمكّن المستخدم المتقدم من تجميع قيمة CMS SignedData من ملخص رسالة SHA-256 للسمات الموقَّعة، وتجريد موقِّع، وشهادة الموقِّع، وسلسلة شهادات اختيارية

واجهة ICmsSigner هي عقد خلفية التعمية: يزوِّد المستدعي معرفات OID لخوارزمية التجزئة والتوقيع، ومعرِّف الموقِّع، وينفذ عملية المفتاح الخاص الفعلية على ملخص السمات الموقَّعة. وهذا يفصل ترميز CMS عن أي مزود تعمية بعينه

يستطيع TCmsBuildOptions إضافة وقت التوقيع ونوع الالتزام ومعرِّف سياسة توقيع صريح مع تجزئة سياسة SHA-256 و URI ووثيقة سياسة في الذاكرة اختيارية

يسحب ExtractSignatureValue ثمانيات التوقيع الخام من قيمة CMS مكتملة لتُرسل إلى سلطة الطابع الزمني؛ ثم يضمّن AddSignatureTimestampToCms رمز الطابع الزمني المُعاد كسمة غير موقَّعة، منتِجًا الصيغة المطابقة لـ B-T/B-LTA

أساليب ICmsSigner

الطريقةالوصف
GetDigestAlgorithmOidيعيد معرف OID لخوارزمية التجزئة المستخدمة على السمات الموقَّعة (مثلًا 2.16.840.1.101.3.4.2.1 لـ SHA-256)
GetSignatureAlgorithmOidيعيد معرف OID لخوارزمية التوقيع المطبقة على الملخص
GetSignatureAlgorithmParamsيعيد معاملات الخوارزمية (غالبًا فارغة في ECDSA؛ وتحمل كتلة معاملات RSA-PSS في PSS)
GetSignerIdيعيد TCmsSignerId الذي يعرِّف الموقِّع بالمُصدِر/الرقم التسلسلي أو بمعرِّف مفتاح صاحب الشهادة
SignSignedAttrsDigestينفذ توقيع المفتاح الخاص على الملخص المُزوَّد ويعيد ثمانيات التوقيع

الدوال والإجراءات

الروتينالوصف
CertKeyAlgorithmOidيقرأ معرف OID لخوارزمية SubjectPublicKeyInfo من الشهادة، وهو ما يفصل بين خوارزمية توقيع RSA وأخرى ECDSA؛ وكل خلفية توقيع تحتاج إليه، لذا فهو يسكن هنا بدلًا من أن يكون داخل إحداها
ExtractIssuerAndSerialيستخرج TLVs الخام للمُصدِر و serialNumber اللذين يحملهما SignerIdentifier داخل IssuerTlv و SerialTlv
EcDsaP1363ToDerيغلّف توقيع ECDSA خام بصيغة P1363 r||s داخل SEQUENCE بترميز DER من عددين INTEGER كما يتوقع CMS؛ والرموز وواجهات تعمية المنصات تعيد الصيغة الخام
VerifyCmsSignaturePolicyDocumentيشترط SignaturePolicyOid غير فارغ و SignaturePolicyHash بطول 32 بايتًا، ثم يتحقق من وثيقة السياسة المُزوَّدة بـ SHA-256 ويعيد نصًا تشخيصيًا عند الفشل
BuildSignedDataيبني CMS ContentInfo منفصلًا مكتملًا وفق RFC 5652 مع CAdES SignerInfo واحد، وشهادة الموقِّع، وسلسلة اختيارية، والسمات الموقَّعة المُعدَّة
ExtractSignatureValueيستخرج ثمانيات توقيع SignerInfo الخام المستخدمة كمدخل بصمة رسالة طابع RFC 3161 الزمني
AddSignatureTimestampToCmsيضيف TimeStampToken كاملًا وفق RFC 3161 كسمة signature-time-stamp غير الموقَّعة ويعيد ترميز الأطوال المحيطة

الأنواع

النوعالوصف
TCmsSignerIdKindينتقي sidIssuerAndSerial اسم المُصدِر مع TLV الرقم التسلسلي وينتقي sidSubjectKeyIdentifier ثمانيات معرِّف مفتاح صاحب الشهادة الخام
TCmsSignerIdتحمل Kind و IssuerDer و SerialDer و SubjectKeyId صيغة معرِّف SignerInfo المنتقاة
TCmsBuildOptionsتُعدّ SigningTimeUtc و CommitmentTypeOid و SignaturePolicyOid و SignaturePolicyHash و SignaturePolicyUri و SignaturePolicyDocument السمات الموقَّعة؛ ويمسح Default كل قيمة اختيارية

ملاحظات

انظر أيضًا

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades