Wei Shao wrote:

> can someone explain how the ASN1 template works in general, 

http://www.google.com/search?hl=en&q=asn.1+template+site%3Amozilla.org
will show you the available documentation on NSS's ASN.1 templates.
See especially 
http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn1.html

The same template arrays are used by the encoder and decoders.  The
template documentation is presently included in the decoder documents.
The encoders and decoders have essentially the same APIs, but work in
opposite directions (i.e. the encoded buffer is input to the decoder
and output from the encoder).

There is generally a one-to-one correspondence between a template
array and a structure that contains the decoded (or not-yet-encoded)
contents.  The template arrays describe the structure to the encoder
and decoder.

> and in particular, if the template definition for the field is
> 
> SEC_ASN1_OPTIONAL | SEC_ASN1_ANY

These symbols correspond to the ASN.1 symbols OPTIONAL and ANY.

An missing optional item is decoded to a NULL data ptr in the corresponding
SECItem.  An optional item with a NULL data ptr in the SECItem will not
be encoded.

An "ANY" item is not decoded or encoded, but is placed into (or taken from)
the corresponding SECItem's buffer in encoded form.

Prior to calling the encoder to encode an ANY, the caller must have already
DER/BER encoded the buffer containing the ANY.  This is usually accomplished
with a separate call to the encoder.

> In this case, if I want to put a SEC_ASN1_OCTET_STRING data to the
> filed, will the encoding/decoding work? or do I need to change the
> template definition?

Most of NSS's template arrays are used in multiple places in NSS.  Therefore,
You should not change any of NSS's template arrays.  If you need a different
template, you should make your own new one(s).

> Also, how does encoding maps from a C object?  e.g, if I have the data
> in the SECItem structure (which has type, len, data fields), what do I
> need to do if I want to encode that data into the above field in the
> SEC_ASN1Template?

I suggest you look at this function for an example of a very simple use
of the encoder.

http://lxr.mozilla.org/security/ident?i=CERT_EncodeSubjectKeyID

> Finally,  In secasn1e.c, SEC_ASN1EncodeItem uses SEC_ASN1Encode. But I
> have not found where that function (SEC_ASN1Encode()  ) is defined.

http://lxr.mozilla.org/security/ident?i=SEC_ASN1Encode

> Thanks, 
> Wei

-- 
Nelson B
_______________________________________________
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to