---
product: Chilkat
product_version: 11.7.0
language: pascal
language_label: Lazarus Pascal
class: Asn
license: bundle
deprecated: false
reference_html: https://www.chilkatsoft.com/refdoc/pascal_AsnRef.html
---
# Chilkat Asn — Lazarus Pascal — v11.7.0

> Chilkat 11.7.0 · language=pascal · class=Asn
> Other versions: replace `11.7.0` in this URL. Other languages: `https://www.chilkatsoft.com/ai-docs/v/11.7.0/<lang>/classes/Asn.md`.
> Language-wide rules (install, unlock, error model, strings/bytes): `https://www.chilkatsoft.com/ai-docs/v/11.7.0/pascal/guide.md`.

## Purpose

**Load, inspect, build, edit, and encode ASN.1 structures in DER or XML form.**

`Chilkat.Asn` represents an ASN.1 item and its optional child items. It can load ASN.1 from binary DER, encoded DER strings, files, or `BinData`; expose tags, tag values, primitive content, boolean and integer values, and child counts; build constructed structures such as `SEQUENCE` and `SET`; append common primitive types such as booleans, integers, big integers, bit strings, octets, OIDs, strings, times, null values, and context-specific items; convert ASN.1 to XML; reload from that XML form; and write the final structure back to DER.

**Load DER data**

Load ASN.1 from binary DER bytes, encoded text such as Base64 or hex, files, or existing `BinData` objects.

**Inspect ASN.1 items**

Read the item tag, tag value, constructed/primitive state, sub-item count, string content, boolean value, or integer value.

**Build sequences and sets**

Append constructed `SEQUENCE` and `SET` items, then add child ASN.1 values beneath them.

**Append primitive values**

Add booleans, integers, big integers, bit strings, octet strings, OIDs, strings, times, null values, and encoded byte content.

**Context-specific tags**

Add context-specific primitive or constructed items when working with ASN.1 formats that use tagged application-specific structures.

**DER and XML conversion**

Convert ASN.1 to XML for inspection or editing, load ASN.1 back from XML, and output the result as binary or encoded DER.

**Common pattern:** Load existing DER with `LoadBinary`, `LoadEncoded`, `LoadBd`, or `LoadBinaryFile`, inspect the tree with `Tag`, `Constructed`, `NumSubItems`, and `GetSubItem`, then extract primitive content or convert to XML with `AsnToXml`. To create ASN.1, start with a constructed item, append child values, and write the final DER with `GetBinaryDer`, `GetEncodedDer`, `WriteBd`, or `WriteBinaryDer`.

## Object creation, unlocking and error handling

**Create / Free**

```pascal
uses
  Chilkat.Asn;

var
  obj: TAsn;
begin
  obj := TAsn.Create;
  try
    if not obj.IsValid then
      raise Exception.Create('Failed to create a TAsn instance.');

    // ... use obj ...

  finally
    obj.Free;
  end;
end;
```

`constructor Create;`

Allocates the underlying CkAsn object and returns a new TAsn instance. Simply adding **Chilkat.Asn** to the unit's `uses` clause is enough to locate and bind to the Chilkat shared library (DLL / .so / .dylib) at runtime — no separate load step is required. Check `obj.IsValid` after calling `Create`; it is `False` if the underlying library could not be found/loaded or the object could not be allocated (for example, when unlicensed).

`destructor Destroy; override;`

Every TAsn created by calling `Create` should eventually be released by calling `.Free` (inherited from `TObject`). The destructor automatically disposes the underlying CkAsn handle. A native (unmanaged) memory leak occurs if the object is never freed.

Call `Global.UnlockBundle` once at the start of the program, before using this or any other Chilkat class. Any string unlocks a fully functional 30-day trial; a purchased unlock code is used in production. See `guide.md` for the exact code in Lazarus Pascal.

## Members common to every Chilkat class

Documented once per language in `common-members.md`; listed here so this page is self-contained.

| Property | Signature | Access | Meaning |
|---|---|---|---|
| `DebugLogFilePath` | `property DebugLogFilePath: string read GetDebugLogFilePath write SetDebugLogFilePath;` | read/write | If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. |
| `LastErrorHtml` | `property LastErrorHtml: string read GetLastErrorHtml;` | read-only | Provides HTML-formatted information about the last called method or property. |
| `LastErrorText` | `property LastErrorText: string read GetLastErrorText;` | read-only | Provides plain text information about the last called method or property. |
| `LastErrorXml` | `property LastErrorXml: string read GetLastErrorXml;` | read-only | Provides XML-formatted information about the last called method or property. |
| `LastMethodSuccess` | `property LastMethodSuccess: Boolean read GetLastMethodSuccess write SetLastMethodSuccess;` | read/write | Indicates the success or failure of the most recent method call: `True` means success, `False` means failure. |
| `VerboseLogging` | `property VerboseLogging: Boolean read GetVerboseLogging write SetVerboseLogging;` | read/write | If set to `True`, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. |
| `Version` | `property Version: string read GetVersion;` | read-only | Version of the component/library, such as "10.1.0" |

## Member index

| Member | Kind | Signature |
|---|---|---|
| `BoolValue` | property, read/write | `property BoolValue: Boolean read GetBoolValue write SetBoolValue;` |
| `Constructed` | property, read-only | `property Constructed: Boolean read GetConstructed;` |
| `ContentStr` | property, read/write | `property ContentStr: string read GetContentStr write SetContentStr;` |
| `IntValue` | property, read/write | `property IntValue: Integer read GetIntValue write SetIntValue;` |
| `NumSubItems` | property, read-only | `property NumSubItems: Integer read GetNumSubItems;` |
| `Tag` | property, read-only | `property Tag: string read GetTag;` |
| `TagValue` | property, read-only | `property TagValue: Integer read GetTagValue;` |
| `AppendBigInt` | method | `function AppendBigInt(const encodedBytes: string;     const encoding: string): Boolean;` |
| `AppendBits` | method | `function AppendBits(const encodedBytes: string;     const encoding: string): Boolean;` |
| `AppendBool` | method | `function AppendBool(value: Boolean): Boolean;` |
| `AppendContextConstructed` | method | `function AppendContextConstructed(tag: Integer): Boolean;` |
| `AppendContextPrimitive` | method | `function AppendContextPrimitive(tag: Integer;     const encodedBytes: string;     const encoding: string): Boolean;` |
| `AppendInt` | method | `function AppendInt(value: Integer): Boolean;` |
| `AppendNull` | method | `function AppendNull: Boolean;` |
| `AppendOctets` | method | `function AppendOctets(const encodedBytes: string;     const encoding: string): Boolean;` |
| `AppendOid` | method | `function AppendOid(const oid: string): Boolean;` |
| `AppendSequence` | method | `function AppendSequence: Boolean;` |
| `AppendSequence2` | method | `function AppendSequence2: Boolean;` |
| `AppendSequenceR` | method | `// Return value is a TAsn object. function AppendSequenceR: TChilkatBase;` |
| `AppendSet` | method | `function AppendSet: Boolean;` |
| `AppendSet2` | method | `function AppendSet2: Boolean;` |
| `AppendSetR` | method | `// Return value is a TAsn object. function AppendSetR: TChilkatBase;` |
| `AppendString` | method | `function AppendString(const strType: string;     const value: string): Boolean;` |
| `AppendTime` | method | `function AppendTime(const timeFormat: string;     const dateTimeStr: string): Boolean;` |
| `AsnToXml` | method | `function AsnToXml: string;` |
| `DeleteSubItem` | method | `function DeleteSubItem(index: Integer): Boolean;` |
| `GetEncodedContent` | method | `function GetEncodedContent(const encoding: string): string;` |
| `GetEncodedDer` | method | `function GetEncodedDer(const encoding: string): string;` |
| `GetLastSubItem` | method | `// Return value is a TAsn object. function GetLastSubItem: TChilkatBase;` |
| `GetSubItem` | method | `// Return value is a TAsn object. function GetSubItem(index: Integer): TChilkatBase;` |
| `LoadAsnXml` | method | `function LoadAsnXml(const xmlStr: string): Boolean;` |
| `LoadBd` | method | `// bd is a TBinData object. function LoadBd(bd: TChilkatBase): Boolean;` |
| `LoadBinaryFile` | method | `function LoadBinaryFile(const path: string): Boolean;` |
| `LoadEncoded` | method | `function LoadEncoded(const asnContent: string;     const encoding: string): Boolean;` |
| `SetEncodedContent` | method | `function SetEncodedContent(const encodedBytes: string;     const encoding: string): Boolean;` |
| `WriteBd` | method | `// bd is a TBinData object. function WriteBd(bd: TChilkatBase): Boolean;` |
| `WriteBinaryDer` | method | `function WriteBinaryDer(const path: string): Boolean;` |

## Properties

### Asn.BoolValue

`Chilkat 11.7.0 · pascal · Asn · BoolValue · property · read/write · since 9.5.0.49`

```pascal
property BoolValue: Boolean read GetBoolValue write SetBoolValue;
```

The ASN.1 item's boolean value if it is a boolean item.

### Asn.Constructed

`Chilkat 11.7.0 · pascal · Asn · Constructed · property · read-only · since 9.5.0.49`

```pascal
property Constructed: Boolean read GetConstructed;
```

`True` if this ASN.1 item is a constructed item. Sequence and Set items are constructed and can contain sub-items. All other tags (boolean, integer, octets, utf8String, etc.) are primitive (non-constructed).

### Asn.ContentStr

`Chilkat 11.7.0 · pascal · Asn · ContentStr · property · read/write · since 9.5.0.49`

```pascal
property ContentStr: string read GetContentStr write SetContentStr;
```

The ASN.1 item's content if it is an ASN.1 string type (such as Utf8String, BmpString, PrintableString, VisibleString, T61String, IA5String, NumericString, or UniversalString).

### Asn.IntValue

`Chilkat 11.7.0 · pascal · Asn · IntValue · property · read/write · since 9.5.0.49`

```pascal
property IntValue: Integer read GetIntValue write SetIntValue;
```

The ASN.1 item's integer value if it is a small integer item.

### Asn.NumSubItems

`Chilkat 11.7.0 · pascal · Asn · NumSubItems · property · read-only · since 9.5.0.49`

```pascal
property NumSubItems: Integer read GetNumSubItems;
```

The number of sub-items contained within this ASN.1 item. Only constructed items, such as Sequence and Set will contain sub-iitems. Primitive items such as OIDs, octet strings, integers, etc. will never contain sub-items.

### Asn.Tag

`Chilkat 11.7.0 · pascal · Asn · Tag · property · read-only · since 9.5.0.49`

```pascal
property Tag: string read GetTag;
```

The ASN.1 item's tag as a descriptive string. Possible values are:

```
boolean
integer
bitString
octets
null
oid
utf8String
relativeOid
sequence
set
numericString
printableString
t61String
ia5String
utcTime
bmpString
```

### Asn.TagValue

`Chilkat 11.7.0 · pascal · Asn · TagValue · property · read-only · since 9.5.0.49`

```pascal
property TagValue: Integer read GetTagValue;
```

The ASN.1 item's tag as a integer value. The integer values for possible tags are as follows:

```
boolean (1)
integer (2)
bitString (3)
octets (4)
null (5)
oid (6)
utf8String (12)
relativeOid (13)
sequence (16)
set (17)
numericString (18)
printableString (19)
t61String (20)
ia5String (22)
utcTime (23)
bmpString (30)
```

## Methods

### Asn.AppendBigInt

`Chilkat 11.7.0 · pascal · Asn · AppendBigInt · method · since 9.5.0.49`

```pascal
function  AppendBigInt(const encodedBytes: string;
    const encoding: string): Boolean;
```

Appends an ASN.1 integer, but one that is a big (huge) integer that is too large to be represented by an integer variable. The bytes composing the integer are passed in encoded string format (such as base64, hex, etc.). The byte order must be big-endian. The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.AppendBits

`Chilkat 11.7.0 · pascal · Asn · AppendBits · method · since 9.5.0.49`

```pascal
function  AppendBits(const encodedBytes: string;
    const encoding: string): Boolean;
```

Appends an ASN.1 bit string to the caller's sub-items. The bytes containing the bits are passed in encoded string format (such as base64, hex, etc.). The byte order must be big-endian (MSB first). The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.AppendBool

`Chilkat 11.7.0 · pascal · Asn · AppendBool · method · since 9.5.0.49`

```pascal
function  AppendBool(value: Boolean): Boolean;
```

Appends an ASN.1 boolean item to the caller's sub-items. Items may only be appended to constructed data types such as Sequence and Set.

Returns True for success, False for failure.

### Asn.AppendContextConstructed

`Chilkat 11.7.0 · pascal · Asn · AppendContextConstructed · method · since 9.5.0.50`

```pascal
function  AppendContextConstructed(tag: Integer): Boolean;
```

Appends an ASN.1 context-specific constructed item to the caller's sub-items.

Returns True for success, False for failure.

### Asn.AppendContextPrimitive

`Chilkat 11.7.0 · pascal · Asn · AppendContextPrimitive · method · since 9.5.0.50`

```pascal
function  AppendContextPrimitive(tag: Integer;
    const encodedBytes: string;
    const encoding: string): Boolean;
```

Appends an ASN.1 context-specific primitive item to the caller's sub-items. The bytes are passed in encoded string format (such as base64, hex, etc.). The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.AppendInt

`Chilkat 11.7.0 · pascal · Asn · AppendInt · method · since 9.5.0.49`

```pascal
function  AppendInt(value: Integer): Boolean;
```

Appends an ASN.1 integer item to the caller's sub-items. Items may only be appended to constructed data types such as Sequence and Set.

Returns True for success, False for failure.

### Asn.AppendNull

`Chilkat 11.7.0 · pascal · Asn · AppendNull · method · since 9.5.0.49`

```pascal
function  AppendNull: Boolean;
```

Appends an ASN.1 null item to the caller's sub-items. Items may only be appended to constructed data types such as Sequence and Set.

Returns True for success, False for failure.

### Asn.AppendOctets

`Chilkat 11.7.0 · pascal · Asn · AppendOctets · method · since 9.5.0.49`

```pascal
function  AppendOctets(const encodedBytes: string;
    const encoding: string): Boolean;
```

Appends an ASN.1 octet string to the caller's sub-items. The bytes are passed in encoded string format (such as base64, hex, etc.). The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.AppendOid

`Chilkat 11.7.0 · pascal · Asn · AppendOid · method · since 9.5.0.49`

```pascal
function  AppendOid(const oid: string): Boolean;
```

Appends an ASN.1 OID (object identifier) to the caller's sub-items. The OID is passed in string form, such as `1.2.840.113549.1.9.1`.

Returns True for success, False for failure.

### Asn.AppendSequence

`Chilkat 11.7.0 · pascal · Asn · AppendSequence · method · since 9.5.0.49`

```pascal
function  AppendSequence: Boolean;
```

Appends an ASN.1 sequence item to the caller's sub-items.

Returns True for success, False for failure.

### Asn.AppendSequence2

`Chilkat 11.7.0 · pascal · Asn · AppendSequence2 · method · since 9.5.0.50`

```pascal
function  AppendSequence2: Boolean;
```

Appends an ASN.1 sequence item to the caller's sub-items, and updates the internal reference to point to the newly appended sequence item.

Returns True for success, False for failure.

### Asn.AppendSequenceR

`Chilkat 11.7.0 · pascal · Asn · AppendSequenceR · method · since 9.5.0.50`

```pascal
// Return value is a TAsn object.

function  AppendSequenceR: TChilkatBase;
```

Appends an ASN.1 sequence item to the caller's sub-items, and returns the newly appended sequence item.

Returns `nil` on failure

### Asn.AppendSet

`Chilkat 11.7.0 · pascal · Asn · AppendSet · method · since 9.5.0.49`

```pascal
function  AppendSet: Boolean;
```

Appends an ASN.1 set item to the caller's sub-items.

Returns True for success, False for failure.

### Asn.AppendSet2

`Chilkat 11.7.0 · pascal · Asn · AppendSet2 · method · since 9.5.0.50`

```pascal
function  AppendSet2: Boolean;
```

Appends an ASN.1 set item to the caller's sub-items, and updates the internal reference to point to the newly appended set item.

Returns True for success, False for failure.

### Asn.AppendSetR

`Chilkat 11.7.0 · pascal · Asn · AppendSetR · method · since 9.5.0.50`

```pascal
// Return value is a TAsn object.

function  AppendSetR: TChilkatBase;
```

Appends an ASN.1 set item to the caller's sub-items, and returns the newly appended set item.

Returns `nil` on failure

### Asn.AppendString

`Chilkat 11.7.0 · pascal · Asn · AppendString · method · since 9.5.0.49`

```pascal
function  AppendString(const strType: string;
    const value: string): Boolean;
```

Appends a string item to the caller's sub-items. The `strType` specifies the type of string to be added. It may be `utf8`, `ia5`, `t61`, `printable`, `visible`, `numeric`, `universal`, or `bmp`. The `value` must conform to the ASN.1 restrictions imposed for a given string type. The `utf8`, `bmp`, and `universal` types have no restrictions on what characters are allowed. In general, unless a specific type of string is required, choose the `utf8` type.

Returns True for success, False for failure.

### Asn.AppendTime

`Chilkat 11.7.0 · pascal · Asn · AppendTime · method · since 9.5.0.49`

```pascal
function  AppendTime(const timeFormat: string;
    const dateTimeStr: string): Boolean;
```

Appends a UTCTime item to the caller's sub-items. The `timeFormat` specifies the format of the `dateTimeStr`. It should be set to `utc`. (In the future, this method will be expanded to append GeneralizedTime items by using `generalized` for `timeFormat`.) To append the current date/time, set `dateTimeStr` equal to the empty string or the keyword `now`. Otherwise, the `dateTimeStr` should be in the UTC time format `YYMMDDhhmm[ss]Z` or `YYMMDDhhmm[ss](+|-)hhmm`.

Returns True for success, False for failure.

### Asn.AsnToXml

`Chilkat 11.7.0 · pascal · Asn · AsnToXml · method · since 9.5.0.49`

```pascal
function  AsnToXml: string;
```

Converts ASN.1 to XML and returns the XML string.

Returns True for success, False for failure.

### Asn.DeleteSubItem

`Chilkat 11.7.0 · pascal · Asn · DeleteSubItem · method · since 9.5.0.49`

```pascal
function  DeleteSubItem(index: Integer): Boolean;
```

Discards the Nth sub-item. (The 1st sub-item is at index 0.)

Returns True for success, False for failure.

### Asn.GetEncodedContent

`Chilkat 11.7.0 · pascal · Asn · GetEncodedContent · method · since 9.5.0.49`

```pascal
function  GetEncodedContent(const encoding: string): string;
```

Returns the content of the ASN.1 item in encoded string form. The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.GetEncodedDer

`Chilkat 11.7.0 · pascal · Asn · GetEncodedDer · method · since 9.5.0.49`

```pascal
function  GetEncodedDer(const encoding: string): string;
```

Returns the binary DER in encoded string form. The `encoding` indicates the encoding and can be `base64`, `hex`, `uu`, `quoted-printable`, `base32`, or `modbase64`.

Returns True for success, False for failure.

### Asn.GetLastSubItem

`Chilkat 11.7.0 · pascal · Asn · GetLastSubItem · method · since 9.5.0.49`

```pascal
// Return value is a TAsn object.

function  GetLastSubItem: TChilkatBase;
```

Returns the last ASN.1 sub-item. This method can be called immediately after any Append\* method to access the appended item.

Returns `nil` on failure

### Asn.GetSubItem

`Chilkat 11.7.0 · pascal · Asn · GetSubItem · method · since 9.5.0.49`

```pascal
// Return value is a TAsn object.

function  GetSubItem(index: Integer): TChilkatBase;
```

Returns the Nth ASN.1 sub-item. The 1st sub-item is at index 0.

Returns `nil` on failure

### Asn.LoadAsnXml

`Chilkat 11.7.0 · pascal · Asn · LoadAsnXml · method · since 9.5.0.49`

```pascal
function  LoadAsnXml(const xmlStr: string): Boolean;
```

Loads ASN.1 from the XML representation (such as that created by the AsnToXml method).

Returns True for success, False for failure.

### Asn.LoadBd

`Chilkat 11.7.0 · pascal · Asn · LoadBd · method · since 9.5.0.77`

```pascal
// bd is a TBinData object.

function  LoadBd(bd: TChilkatBase): Boolean;
```

Loads ASN.1 from the binary DER contained in `bd`.

Returns True for success, False for failure.

### Asn.LoadBinaryFile

`Chilkat 11.7.0 · pascal · Asn · LoadBinaryFile · method · since 9.5.0.49`

```pascal
function  LoadBinaryFile(const path: string): Boolean;
```

Loads ASN.1 from a binary DER file.

Returns True for success, False for failure.

### Asn.LoadEncoded

`Chilkat 11.7.0 · pascal · Asn · LoadEncoded · method · since 9.5.0.49`

```pascal
function  LoadEncoded(const asnContent: string;
    const encoding: string): Boolean;
```

Loads ASN.1 from an encoded string. The `encoding` can be `base64`, `hex`, `uu`, `quoted-printable`, `base32`, or `modbase64`.

Returns True for success, False for failure.

### Asn.SetEncodedContent

`Chilkat 11.7.0 · pascal · Asn · SetEncodedContent · method · since 9.5.0.49`

```pascal
function  SetEncodedContent(const encodedBytes: string;
    const encoding: string): Boolean;
```

Sets the content of this primitive ASN.1 item. The `encoding` may be any of the following encodings: `Base64`, `Hex`, `Base58`, `modBase64`, `Base32`, `UU`, `QP` (for quoted-printable), `URL` (for url-encoding), `Q`, `B`, `url_oath`, `url_rfc1738`, `url_rfc2396`, and `url_rfc3986`. The `encoding` name is case insensitive (for example, both `Base64` and `base64` are treated the same).

Returns True for success, False for failure.

### Asn.WriteBd

`Chilkat 11.7.0 · pascal · Asn · WriteBd · method · since 9.5.0.77`

```pascal
// bd is a TBinData object.

function  WriteBd(bd: TChilkatBase): Boolean;
```

Appends the ASN.1 in binary DER format to `bd`.

Returns True for success, False for failure.

### Asn.WriteBinaryDer

`Chilkat 11.7.0 · pascal · Asn · WriteBinaryDer · method · since 9.5.0.49`

```pascal
function  WriteBinaryDer(const path: string): Boolean;
```

Writes the ASN.1 in binary DER form to a file.

Returns True for success, False for failure.

## Related classes

[`BinData`](https://www.chilkatsoft.com/ai-docs/v/11.7.0/pascal/classes/BinData.md)

