| Type | Description |
|---|---|
TAsnTag | 식별자 구성과 검증에 쓰이는 universal 태그 상수(BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, 시간 및 문자열 형태)입니다 |
TAsnClass | 식별자 클래스입니다. asnClassUniversal, asnClassApplication, asnClassContextSpecific, asnClassPrivate 중 하나입니다 |
TAsnIdentifier | 식별자 클래스, constructed 플래그, high-tag-number 형태를 포함한 64비트 태그 번호입니다 |
TDerTlv | 소스 버퍼를 복사하지 않으면서 Offset, HeaderLength, ContentOffset, ContentLength, NextOffset, Identifier를 담은 파싱된 TLV입니다 |
TDerWriter | 재사용 가능한 DER 출력 버퍼이자 타입 인코더입니다 |
TDerReader | peek, 전진, 건너뛰기, 예상 태그, 자식 윈도우, 슬라이스, 타입 디코드 연산을 갖춘 한정된 리더입니다 |
TDerByteArrays | ConcatMany 등 다중 버퍼 헬퍼가 사용하는 TBytes의 동적 배열입니다 |
TDerValidationErrorKind | 검증 오류 범주입니다. dvekMalformedTlv, dvekTrailingData, 깊이·노드·콘텐츠 한도(dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, 타입별 정규 형식 실패(dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime), 그리고 dvekSetOrder가 있습니다 |
TDerValidationError | Offset과 Depth를 담고 Kind와 사람이 읽을 수 있는 메시지 텍스트를 갖는 오류 레코드입니다 |
TDerValidationErrors | TDerValidationResult 안에 담겨 반환되는 TDerValidationError의 동적 배열입니다 |
TDerValidationOptions | MaxDepth, MaxNodes, MaxContentLength, MaxErrors 한도와 RequireSingleRoot 플래그, 선택적 ValidateSetOrder, Default 클래스 함수입니다 |
TDerValidationResult | IsValid, NodeCount, MaximumDepth, 오프셋이 담긴 Errors로 검증 상태를 알려주고 ErrorCount와 FirstError 헬퍼를 제공합니다 |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | 버퍼링된 데이터를 리셋하거나 살펴보고, 스냅샷을 복사하거나, 완성된 배열을 넘기고 라이터를 리셋합니다 |
Reserve, Append, AppendMany, AppendByte | 한 번만 늘린 뒤 오버플로 검사와 함께 배열, 호출자 소유 버퍼, 여러 배열, 단일 바이트를 추가합니다 |
Wrap, WrapIdentifier, WrapConstructed | 콘텐츠를 raw identifier 옥텟, 임의의 식별자 클래스와 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 | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | 리더를 초기화하고 한정된 윈도우와 남은 바이트 수를 살펴봅니다 |
TryReadTlvAt, PeekTlv | Position을 바꾸지 않고 낮거나 높은 태그 번호와 최소 definite 길이를 파싱합니다 |
ReadNextTlv, SkipTlv | 완전하고 유효한 TLV가 확인된 뒤에만 전진합니다 |
TryReadExpected | 클래스, constructed 형태, 태그 번호가 모두 일치할 때만 전진합니다 |
EnterConstructed | 콘텐츠를 복사하지 않고 같은 소스 배열 위에 자식 리더 윈도우를 만듭니다 |
ContentBytes, EncodedBytes | 소유권이 필요할 때 검증된 콘텐츠나 완전한 TLV 슬라이스를 복사합니다 |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | 범위와 미사용 비트 검사를 거쳐 정규 primitive 값을 디코드합니다 |
TryReadString, TryReadTime, TryReadNull | 검증된 UTF8String, PrintableString, IA5String, DER 시간, NULL 콘텐츠를 디코드합니다 |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | raw TLV 오프셋 접근과 객체 식별자·부호 있는 정수 디코드를 호환성 목적으로 제공합니다 |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer는 식별자와 길이의 최소성, 버퍼 경계, universal primitive 형태, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, 지원되는 문자열, 정규 시간 값을 검사합니다
기본 한도는 하나의 루트 TLV를 요구하면서 최대 깊이 64, 노드 100000개, 콘텐츠 값당 64 MiB, 보고되는 오류 32개를 허용합니다
스키마 없는 DER는 모든 SET을 SET OF와 구별할 수 없으므로 ValidateSetOrder는 기본적으로 꺼져 있습니다. 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;
| Function | Description |
|---|---|
AsnIdentifier | 클래스, 태그 번호, constructed 플래그로 TAsnIdentifier를 만들며, TDerReader.TryReadExpected를 구동하는 데 쓰입니다 |
EncodeIdentifier | high-tag-number 형태를 포함해 TAsnIdentifier를 DER 식별자 바이트로 인코딩합니다 |
ConcatBytes, Concat3, Concat4, ConcatMany | 두 개, 세 개, 네 개 또는 TBytes의 동적 배열을 한 번의 할당으로 이어 붙입니다. 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을 익스포트합니다