---
name: "sc_asn1_decode"
section: "3"
platform: "linux"
package: "libopensc2-dev"
version: "0.11.13-1.1"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_asn1_decode"
---

# sc\_asn1\_decode(3)

Extract entries from an ASN.1 stream

## NAME

sc\_asn1\_decode - Extract entries from an ASN.1 stream

## SYNOPSIS

```
#include <opensc.h>
int sc_asn1_decode(struct sc_context *ctx, struct sc_asn1_entry *asn1,
                   const unsigned char *inbuf, size_t len,
                   const unsigned char **newbuf, size_t *len_left);
```

## DESCRIPTION

This function extracts information from the ASN.1 stream pointed to by *inbuf* (which is *len* bytes in size) and stores it into the array of struct sc\_asn\_1 entries pointed to by *asn1*. The array must be big enough to contain all the entries that will be found, or an error will be flagged. The last entry in the array must be a NULL entry, i.e. the *name* field must be set to NULL.

The structure of the expected data must be encoded in the entries in *asn1* before calling this function; specifically the *name*, *type*, *tag* and *flags* fields must be filled in.

The function will then scan the stream and fill in the remaining fields. *newbuf* will point to the byte immediately following the extracted record, and *len\_left* will contain the number of bytes left in the buffer. Thus, the *newbuf* and *len\_left* fields may be passed in to sc\_asn1\_decode() again, as the *inbuf* and *len* parameters, until *len* reaches 0.

## RETURN VALUE

Returns 0 if successful, or a negative value in case of error.
