| 型 | 説明 |
|---|---|
TAsnTag | 識別子の構築と検証で使用されるユニバーサルタグ定数 (BOOLEAN、INTEGER、OCTET STRING、OID、SEQUENCE、SET、時刻および文字列形式) |
TAsnClass | 識別子クラス: asnClassUniversal、asnClassApplication、asnClassContextSpecific、asnClassPrivate |
TAsnIdentifier | 識別子クラス、constructed フラグ、64 ビットタグ番号を格納します。high-tag-number 形式を含みます |
TDerTlv | ソースバッファをコピーせずに Offset、HeaderLength、ContentOffset、ContentLength、NextOffset、Identifier を持つ解析済み TLV を表します |
TDerWriter | 再利用可能な DER 出力バッファと型付きエンコーダーです |
TDerReader | peek、advance、skip、期待タグ、子ウィンドウ、スライス、型付きデコードの各操作を持つ上限付きリーダーです |
TDerByteArrays | ConcatMany などの複数バッファヘルパーで使用される TBytes の動的配列です |
TDerValidationErrorKind | 検証エラーのカテゴリ: dvekMalformedTlv、dvekTrailingData、深さ/ノード/コンテンツ上限 (dvekDepthLimit、dvekNodeLimit、dvekContentLimit)、dvekUniversalForm、型ごとの正規形違反 (dvekBoolean、dvekInteger、dvekBitString、dvekNull、dvekOid、dvekString、dvekTime)、および dvekSetOrder |
TDerValidationError | オフセットと Depth を保持するエラーレコードで、Kind と人が読めるメッセージテキストを持ちます |
TDerValidationErrors | TDerValidationResult 内で返される TDerValidationError の動的配列です |
TDerValidationOptions | MaxDepth、MaxNodes、MaxContentLength、MaxErrors の上限、RequireSingleRoot フラグ、オプションの ValidateSetOrder、および Default クラス関数からなる上限設定です |
TDerValidationResult | IsValid、NodeCount、MaximumDepth、オフセット付きの Errors による検証ステータスに加え、ErrorCount と FirstError ヘルパーを提供します |
| API | 説明 |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | バッファされたデータをリセットまたは検査し、スナップショットをコピー、あるいは完成した配列を転送してライターをリセットします |
Reserve, Append, AppendMany, AppendByte | 一度だけ拡張を行い、オーバーフローチェック付きで配列、呼び出し側所有のバッファ、複数の配列、または 1 バイトを追記します |
Wrap, WrapIdentifier, WrapConstructed | 生の識別子オクテット、任意の識別子クラスと 64 ビットタグ番号、または constructed 識別子でコンテンツをラップします |
ContextSpecific, ApplicationSpecific, PrivateSpecific | 識別子を切り詰めることなく低いタグ番号と高いタグ番号をエンコードします |
Sequence, SequenceOf, SetOf, SetOfSorted | エンコード済みの値を SEQUENCE または SET コンテナとして組み立てます。SetOfSorted はエンコード済みバイト順でソートします |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | BOOLEAN、符号付き/符号なし INTEGER、検証済みの任意精度 INTEGER コンテンツ、ENUMERATED 値をエンコードします |
OctetString, OctetStringOf, BitString, Null, OID | バイナリ、ビット文字列、NULL、オブジェクト識別子の各値をスタンドアロンの TLV としてエンコードします |
PrintableString, Ia5String, Utf8String | サポートされる ASN.1 文字列形式をエンコードします |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | 正規の時刻テキストまたは UTC の TDateTime 値をエンコードします。TimeOf は正しい DER 時刻型を選択します |
AlgId, AlgIdWithParams | NULL または明示的パラメータを持つ AlgorithmIdentifier SEQUENCE を構築します |
| API | 説明 |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | リーダーを初期化し、上限付きウィンドウと残りバイト数を検査します |
TryReadTlvAt, PeekTlv | Position を変更せずに低い/高いタグ番号と最短の definite 長を解析します |
ReadNextTlv, SkipTlv | 完全で有効な TLV が利用可能な場合にのみ前進します |
TryReadExpected | クラス、constructed 形式、タグ番号がすべて一致した場合にのみ前進します |
EnterConstructed | コンテンツをコピーせずに、同じソース配列上の子リーダーウィンドウを作成します |
ContentBytes, EncodedBytes | 所有権が必要な場合に、検証済みのコンテンツまたは完全な TLV スライスをコピーします |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | 範囲チェックと未使用ビットチェック付きで正規のプリミティブ値をデコードします |
TryReadString, TryReadTime, TryReadNull | 検証済みの UTF8String、PrintableString、IA5String、DER 時刻、NULL コンテンツをデコードします |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | 生の TLV オフセットへの互換アクセスに加え、オブジェクト識別子と符号付き整数のデコードを提供します |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer は識別子と長さの最短性、バッファ境界、ユニバーサルプリミティブ形式、BOOLEAN、INTEGER、ENUMERATED、BIT STRING、NULL、OBJECT IDENTIFIER、サポートされる文字列、正規の時刻値を検査します
既定の上限は、最大深さ 64、ノード数 100000、コンテンツ値あたり 64 MiB、報告エラー数 32 であり、ルート TLV が 1 つであることを要求します
ValidateSetOrder は、スキーマ非依存の DER ではすべての SET を SET OF と区別できないため既定で無効です。CMS 属性コレクションのような既知の SET OF コンテナに対して有効化してください
TDerValidationOptions.Default が上限付きの既定値を供給し、TDerValidationResult.ErrorCount と FirstError が診断処理を簡素化します
function AsnIdentifier(TagClass: TAsnClass; TagNumber: UInt64; Constructed: Boolean = False): TAsnIdentifier;
function EncodeIdentifier(const Identifier: TAsnIdentifier): TBytes;
function ConcatBytes(const A, B: TBytes): TBytes;
function Concat3(const A, B, C: TBytes): TBytes;
function Concat4(const A, B, C, D: TBytes): TBytes;
function ConcatMany(const Values: TDerByteArrays): TBytes;
function EncodeOIDContent(const Dotted: AnsiString): TBytes;
function DerValidationErrorKindName(Kind: TDerValidationErrorKind): string;
| 関数 | 説明 |
|---|---|
AsnIdentifier | クラス、タグ番号、constructed フラグから TAsnIdentifier を構築します。TDerReader.TryReadExpected の駆動に使用します |
EncodeIdentifier | TAsnIdentifier を DER 識別子バイトにエンコードします。high-tag-number 形式を含みます |
ConcatBytes, Concat3, Concat4, ConcatMany | 2 つ、3 つ、4 つ、または動的配列の TBytes を 1 回のアロケーションで連結します。CMS ビルダーで広く使われます |
EncodeOIDContent | ドット区切りの 10 進 OID 文字列をタグと長さを除いたコンテンツバイトにエンコードします。呼び出し側が OID を検査または再ラップできます |
DerValidationErrorKindName | 診断用に TDerValidationErrorKind の表示名を返します |
uses FPdfAsn1;
var
Child: TDerReader;
Data: TBytes;
Reader: TDerReader;
Tlv: TDerTlv;
Validation: TDerValidationResult;
Writer: TDerWriter;
begin
Writer := TDerWriter.Create;
try
Data := Writer.Sequence(Writer.UnsignedIntegerOf(42));
finally
Writer.Free;
end;
Validation := ValidateDer(Data);
if not Validation.IsValid then
raise EConvertError.Create(Validation.Errors[0].MessageText);
Reader.Initialize(Data);
if Reader.TryReadExpected(AsnIdentifier(asnClassUniversal, 16, True), Tlv) then
Reader.EnterConstructed(Tlv, Child);
end;
GeneralizedTime は、小数秒の最後の桁が 0 でない場合にのみ小数秒を受け付けますReadTlv、TryReadOID、符号付きの TryReadInteger は既存の呼び出しコードのために引き続き利用できますFPdfAsn1 をエクスポートします