identifier = (unsigned char)state->underlying_kind & SEC_ASN1_TAG_MASK;
identifier = (unsigned char) (state->underlying_kind & SEC_ASN1_TAG_MASK);
sec_asn1e_write_contents_from_buf (sec_asn1e_state *state,			  const char *buf, unsigned long len){    PORT_Assert (state->place == duringContents);    PORT_Assert (state->top->from_buf);    PORT_Assert (state->may_stream && !state->disallowStreaming);    /*     * Probably they just turned on "take from buf", but have not     * yet given us any bytes.  If there is nothing in the buffer     * then we have nothing to do but return and wait.     */    if (buf == NULL || len == 0) {	state->top->status = needBytes;	return;    }    /*     * We are streaming, reading from a passed-in buffer.     * This means we are encoding a simple string or an ANY.     * For the former, we need to put out a substring, with its     * own identifier and length.  For an ANY, we just write it     * out as is (our caller is required to ensure that it     * is a properly encoded entity).     */    PORT_Assert (state->is_string);		/* includes ANY */    if (state->underlying_kind != SEC_ASN1_ANY) {	unsigned char identifier;	/*	 * Create the identifier based on underlying_kind.  We cannot	 * use tag_number and tag_modifiers because this can be an	 * implicitly encoded field.  In that case, the underlying	 * substrings *are* encoded with their real tag.	 */	identifier = (unsigned char)state->underlying_kind & SEC_ASN1_TAG_MASK;	/*	 * The underlying kind should just be a simple string; there	 * should be no bits like CONTEXT_SPECIFIC or CONSTRUCTED set.	 */	PORT_Assert ((identifier & SEC_ASN1_TAGNUM_MASK) == identifier);	/*	 * Write out the tag and length for the substring.	 */	sec_asn1e_write_identifier_bytes (state, identifier);	if (state->underlying_kind == SEC_ASN1_BIT_STRING) {	    char byte;	    /*	     * Assume we have a length in bytes but we need to output	     * a proper bit string.  This interface only works for bit	     * strings that are full multiples of 8.  If support for	     * real, variable length bit strings is needed then the	     * caller will have to know to pass in a bit length instead	     * of a byte length and then this code will have to	     * perform the encoding necessary (length written is length	     * in bytes plus 1, and the first octet of string is the	     * number of bits remaining between the end of the bit	     * string and the next byte boundary).	     */	    sec_asn1e_write_length_bytes (state, len + 1, PR_FALSE);	    byte = 0;	    sec_asn1e_write_contents_bytes (state, &byte, 1);	} else {	    sec_asn1e_write_length_bytes (state, len, PR_FALSE);	}    }    sec_asn1e_write_contents_bytes (state, buf, len);    state->top->status = needBytes;}