亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asn1.c

?? eCos操作系統源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	do {	/* shift and add in low order 7 bits */	    subidentifier = (subidentifier << 7) + (*(u_char *)bufp & ~ASN_BIT8);	    length--;	} while (*(u_char *)bufp++ & ASN_BIT8);	/* last byte has high bit clear *//*?? note, this test will never be true, since the largest value     of subidentifier is the value of MAX_SUBID! */	if (subidentifier > (u_long)MAX_SUBID){	    ERROR_MSG("subidentifier too large");	    return NULL;	}	*oidp++ = (oid)subidentifier;    }    /*     * The first two subidentifiers are encoded into the first component     * with the value (X * 40) + Y, where:     *	X is the value of the first subidentifier.     *  Y is the value of the second subidentifier.     */    subidentifier = (u_long)objid[1];    if (subidentifier == 0x2B){	objid[0] = 1;	objid[1] = 3;    } else {        if (subidentifier < 40) {            objid[0] = 0;	    objid[1] = subidentifier;        } else if (subidentifier < 80) {            objid[0] = 1;            objid[1] = subidentifier - 40;        } else if (subidentifier < 120) {            objid[0] = 2;            objid[1] = subidentifier - 80;        } else {	    objid[1] = (subidentifier % 40);	    objid[0] = ((subidentifier - objid[1]) / 40);        }    }    *objidlength = (int)(oidp - objid);    DEBUGMSG(("dump_recv", "  ASN ObjID: "));    DEBUGMSGOID(("dump_recv", objid, *objidlength));    DEBUGMSG(("dump_recv", "\n"));    return bufp;}/* * asn_build_objid - Builds an ASN object identifier object containing the * input string. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the beginning of the next object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_build_objid(      u_char     *data         IN - pointer to start of object      int        *datalength   IN/OUT - number of valid bytes left in buffer      int        type         IN - asn type of object      oid        *objid        IN - pointer to start of input buffer      int         objidlength  IN - number of sub-id's in objid */u_char *asn_build_objid(u_char *data,		size_t *datalength,		u_char type,		oid *objid,		size_t objidlength){/* * ASN.1 objid ::= 0x06 asnlength subidentifier {subidentifier}* * subidentifier ::= {leadingbyte}* lastbyte * leadingbyte ::= 1 7bitvalue * lastbyte ::= 0 7bitvalue */    size_t asnlength;    register oid *op = objid;    u_char objid_size[MAX_OID_LEN];    register u_long objid_val;    u_long first_objid_val;    register int i;    /* check if there are at least 2 sub-identifiers */    if (objidlength == 0){        /* there are not, so make OID have two with value of zero */        objid_val = 0;	objidlength = 2;    } else if (objidlength == 1){        /* encode the first value */	objid_val = (op[0] * 40);	objidlength = 2;	op++;    } else {        /* combine the first two values */	if ( op[1] > 40 ) {	    ERROR_MSG("build objid: bad second subidentifier");	    return NULL;	}	objid_val = (op[0] * 40) + op[1];	op += 2;    }    first_objid_val = objid_val;    /* calculate the number of bytes needed to store the encoded value */    for (i = 1, asnlength = 0;;) {        if (objid_val < (unsigned)0x80) {            objid_size[i] = 1;            asnlength += 1;        } else if (objid_val < (unsigned)0x4000) {            objid_size[i] = 2;            asnlength += 2;        } else if (objid_val < (unsigned)0x200000) {            objid_size[i] = 3;            asnlength += 3;        } else if (objid_val < (unsigned)0x10000000) {            objid_size[i] = 4;            asnlength += 4;        } else {            objid_size[i] = 5;            asnlength += 5;        }        i++;        if (i >= (int)objidlength)            break;        objid_val = *op++;    }     /* store the ASN.1 tag and length */    data = asn_build_header(data, datalength, type, asnlength);    if (_asn_build_header_check("build objid", data, *datalength, asnlength))	return NULL;    /* store the encoded OID value */    for (i = 1, objid_val = first_objid_val, op = objid+2;				i < (int)objidlength;                i++) {      if (i != 1) objid_val = *op++;        switch (objid_size[i]) {        case 1:            *data++ = (u_char)objid_val;            break;        case 2:            *data++ = (u_char)((objid_val>>7) | 0x80);            *data++ = (u_char)(objid_val & 0x07f);            break;        case 3:            *data++ = (u_char)((objid_val>>14) | 0x80);            *data++ = (u_char)((objid_val>>7 & 0x7f) | 0x80);            *data++ = (u_char)(objid_val & 0x07f);            break;        case 4:            *data++ = (u_char)((objid_val>>21) | 0x80);            *data++ = (u_char)((objid_val>>14 & 0x7f) | 0x80);            *data++ = (u_char)((objid_val>>7 & 0x7f) | 0x80);            *data++ = (u_char)(objid_val & 0x07f);            break;        case 5:            *data++ = (u_char)((objid_val>>28) | 0x80);            *data++ = (u_char)((objid_val>>21 & 0x7f) | 0x80);            *data++ = (u_char)((objid_val>>14 & 0x7f) | 0x80);            *data++ = (u_char)((objid_val>>7 & 0x7f) | 0x80);            *data++ = (u_char)(objid_val & 0x07f);            break;        }    }    /* return the length and data ptr */    *datalength -= asnlength;    return data;}/* * asn_parse_null - Interprets an ASN null type. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the beginning of the next object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_parse_null(      u_char     *data         IN - pointer to start of object      int        *datalength   IN/OUT - number of valid bytes left in buffer      u_char     *type         OUT - asn type of object */u_char *asn_parse_null(u_char *data,	       size_t *datalength,	       u_char *type){/* * ASN.1 null ::= 0x05 0x00 */    register u_char   *bufp = data;    u_long	    asn_length;    *type = *bufp++;    bufp = asn_parse_length(bufp, &asn_length);    if (bufp == NULL){	ERROR_MSG("parse null: bad length");	return NULL;    }    if (asn_length != 0){	ERROR_MSG("parse null: malformed ASN.1 null");	return NULL;    }    *datalength -= (bufp - data);    DEBUGDUMPSETUP("dump_recv", data, bufp - data);    DEBUGMSG(("dump_recv", "  ASN NULL\n"));    return bufp + asn_length;}/* * asn_build_null - Builds an ASN null object. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the beginning of the next object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_build_null(      u_char     *data         IN - pointer to start of object      int        *datalength   IN/OUT - number of valid bytes left in buffer      u_char      type         IN - asn type of object */u_char *asn_build_null(u_char *data,	       size_t *datalength,	       u_char type){/* * ASN.1 null ::= 0x05 0x00 */    return asn_build_header(data, datalength, type, 0);}/* * asn_parse_bitstring - pulls a bitstring out of an ASN bitstring type. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the beginning of the next object. * *  "string" is filled with the bit string. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_parse_bitstring(      u_char     *data         IN - pointer to start of object      size_t     *datalength   IN/OUT - number of valid bytes left in buffer      u_char     *type         OUT - asn type of object      u_char     *string       IN/OUT - pointer to start of output buffer      size_t     *strlength    IN/OUT - size of output buffer */u_char *asn_parse_bitstring(u_char *data,		    size_t *datalength,		    u_char *type,		    u_char *string,		    size_t *strlength){/* * bitstring ::= 0x03 asnlength unused {byte}* */    static const char *errpre = "parse bitstring";    register u_char *bufp = data;    u_long	    asn_length;    *type = *bufp++;    bufp = asn_parse_length(bufp, &asn_length);    if (_asn_parse_length_check(errpre, bufp, data,               asn_length, *datalength))	return NULL;    if ((size_t)asn_length > *strlength){	_asn_length_err(errpre, (size_t)asn_length, *strlength);	return NULL;    }    if (_asn_bitstring_check(errpre, asn_length, *bufp))	return NULL;    DEBUGDUMPSETUP("dump_recv", data, bufp - data);    DEBUGMSG(("dump_recv", "  ASN Bitstring: "));    DEBUGMSGHEX(("dump_recv", data, asn_length));    memmove(string, bufp, asn_length);    *strlength = (int)asn_length;    *datalength -= (int)asn_length + (bufp - data);    return bufp + asn_length;}/* * asn_build_bitstring - Builds an ASN bit string object containing the * input string. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the beginning of the next object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_build_bitstring(      u_char     *data         IN - pointer to start of object      int        *datalength   IN/OUT - number of valid bytes left in buffer      u_char      type         IN - asn type of object      u_char     *string       IN - pointer to start of input buffer      int         strlength    IN - size of input buffer */u_char *asn_build_bitstring(u_char *data,		    size_t *datalength,		    u_char type,		    u_char *string,		    size_t strlength){/* * ASN.1 bit string ::= 0x03 asnlength unused {byte}* */    static const char *errpre = "build bitstring";    if (_asn_bitstring_check(errpre, strlength, *string))	return NULL;    data = asn_build_header(data, datalength, type, strlength);    if (_asn_build_header_check(errpre,data,*datalength,strlength))	return NULL;    memmove(data, string, strlength);    *datalength -= strlength;    return data + strlength;}/* * asn_parse_unsigned_int64 - pulls a 64 bit unsigned long out of an ASN int * type. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the end of this object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_parse_unsigned_int64(      u_char     *data         IN - pointer to start of object      int        *datalength   IN/OUT - number of valid bytes left in buffer      u_char     *type         OUT - asn type of object      struct counter64 *cp     IN/OUT - pointer to counter struct      int         countersize  IN - size of output buffer */u_char *asn_parse_unsigned_int64(u_char *data,			 size_t *datalength,			 u_char *type, 			 struct counter64 *cp,			 size_t countersize){/* * ASN.1 integer ::= 0x02 asnlength byte {byte}* */    static const char *errpre = "parse uint64";    const int uint64sizelimit = (4 * 2) + 1;    register u_char *bufp = data;    u_long	    asn_length;    register u_long low = 0, high = 0;        if (countersize != sizeof(struct counter64)){	_asn_size_err(errpre, countersize, sizeof(struct counter64));	return NULL;    }    *type = *bufp++;    bufp = asn_parse_length(bufp, &asn_length);    if (_asn_parse_length_check(errpre, bufp, data, asn_length, *datalength))        return NULL;    DEBUGDUMPSETUP("dump_recv", data, bufp - data);#ifdef OPAQUE_SPECIAL_TYPES/* 64 bit counters as opaque */    if ((*type == ASN_OPAQUE) &&            (asn_length <= ASN_OPAQUE_COUNTER64_MX_BER_LEN) &&	    (*bufp == ASN_OPAQUE_TAG1) &&	    ((*(bufp+1) == ASN_OPAQUE_COUNTER64) ||             (*(bufp+1) == ASN_OPAQUE_U64))) {        DEBUGMSG(("dump_recv", "Opaque %.2x %.2x: ", *bufp, *(bufp+1)));	/* change type to Counter64 or U64 */        *type = *(bufp+1);        /* value is encoded as special format */	bufp = asn_parse_length(bufp + 2, &asn_length);	if (_asn_parse_length_check("parse opaque uint64", bufp, data,                  asn_length, *datalength))        return NULL;    }#endif /* OPAQUE_SPECIAL_TYPES */    if (((int)asn_length > uint64sizelimit) ||	(((int)asn_length == uint64sizelimit) && *bufp != 0x00)){	_asn_length_err(errpre, (size_t)asn_length, uint64sizelimit);	return NULL;    }    *datalength -= (int)asn_length + (bufp - data);    if (*bufp & 0x80){	low = ~low; /* integer is negative */	high = ~high;    }    while(asn_length--){	high = (high << 8) | ((low & 0xFF000000) >> 24);	low = (low << 8) | *bufp++;    }    cp->low = low;    cp->high = high;    DEBUGIF("dump_recv") {      char i64buf[I64CHARSZ+1];      printU64(i64buf, cp);    }    return bufp;}/* * asn_build_unsigned_int64 - builds an ASN object containing a 64 bit integer. *  On entry, datalength is input as the number of valid bytes following *   "data".  On exit, it is returned as the number of valid bytes *   following the end of this object. * *  Returns a pointer to the first byte past the end *   of this object (i.e. the start of the next object). *  Returns NULL on any error.  u_char * asn_build_unsigned_int64(      u_char     *data         IN - pointer to start of output buffer      size_t     *datalength   IN/OUT - number of valid bytes left in buffer      u_char      type         IN  - asn type of object      struct counter64 *cp     IN - pointer to counter struct      size_t      countersize  IN - size of input buffer */u_char *asn_build_unsigned_int64(u_char *data,			 size_t *datalength,			 u_char type,			 struct counter64 *cp,			 size_t countersize){/* * ASN.1 integer ::= 0x02 asnlength byte {byte}* */    register u_long low, high;    register u_long mask, mask2;    int add_null_byte = 0;    size_t intsize;  if (countersize != sizeof(struct counter64)){    _asn_size_err("build uint64", countersize, sizeof(struct counter64));    return NULL;  }    intsize = 8;    low = cp->low;    high = cp->high;    mask = ((u_long) 0xFF) << (8 * (sizeof(long) - 1));    /* mask is 0xFF000000 on a big-endian machine */    if ((u_char)((high & mask) >> (8 * (sizeof(long) - 1))) & 0x80){	/* if MSB is set */	add_null_byte = 1;	intsize++;    } else {	/*	 * Truncate "unnecessary" bytes off of the most significant end of this 2's	 * complement integer.	 * There should be no sequence of 9 consecutive 1's or 0's at the most	 * significant end of the integer.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区资源| 国产欧美综合在线观看第十页| 国产精品白丝在线| 99久久精品免费精品国产| 亚洲精品伦理在线| 欧美日韩精品一二三区| 精品一区二区综合| 亚洲精品在线观| 成人黄页毛片网站| 亚洲成a人在线观看| 欧美不卡一区二区三区四区| 国内偷窥港台综合视频在线播放| 久久综合网色—综合色88| 成人爽a毛片一区二区免费| 亚洲美女视频一区| 欧美精品一级二级| 国产69精品久久99不卡| 日韩美女久久久| 日韩一卡二卡三卡| 成人黄色在线网站| 日韩av电影天堂| 欧美精品一区二区三区在线播放| 大白屁股一区二区视频| 午夜久久电影网| 欧美国产精品v| 91麻豆精品国产91久久久资源速度| 看片网站欧美日韩| 亚洲人成网站精品片在线观看| 欧美少妇bbb| 成人一区在线看| 天天射综合影视| 国产免费久久精品| 91精品啪在线观看国产60岁| 床上的激情91.| 免费成人结看片| 亚洲精品日韩综合观看成人91| 91精品婷婷国产综合久久性色 | 国产成人亚洲综合色影视| 亚洲图片你懂的| 精品久久久久一区二区国产| 91蜜桃免费观看视频| 波多野结衣精品在线| 婷婷国产在线综合| 综合久久给合久久狠狠狠97色| 欧美一区二区三区四区视频| 波多野结衣中文字幕一区 | 国精品**一区二区三区在线蜜桃| 自拍偷拍亚洲激情| 26uuu久久天堂性欧美| 欧美中文字幕一区二区三区| 成人国产精品免费网站| 精品一区二区综合| 日韩av在线发布| 亚洲一区视频在线观看视频| 国产精品久久久久久久岛一牛影视| 日韩美女主播在线视频一区二区三区| 色呦呦网站一区| 99麻豆久久久国产精品免费| 国产经典欧美精品| 久久精品国产久精国产| 日韩电影在线一区二区三区| 亚洲图片欧美综合| 一区二区三区日韩精品视频| 国产精品美女久久久久久久久| 久久亚洲一级片| 精品久久人人做人人爰| 精品日韩一区二区三区免费视频| 欧美日韩www| 欧美三级午夜理伦三级中视频| 99国产精品99久久久久久| 成人精品国产一区二区4080| 国产精品一区二区久久不卡| 精品一区二区免费在线观看| 免费成人av资源网| 激情综合五月婷婷| 精品综合免费视频观看| 麻豆freexxxx性91精品| 久久精品国产秦先生| 黄色小说综合网站| 国产福利一区二区| av高清不卡在线| av男人天堂一区| 日本乱人伦aⅴ精品| 97久久精品人人做人人爽50路| 9色porny自拍视频一区二区| 91香蕉视频黄| 欧美色爱综合网| 欧美一级二级三级乱码| 欧美成人精品3d动漫h| 日韩免费在线观看| 欧美精品一区二区三区高清aⅴ| 精品日韩在线一区| 国产农村妇女毛片精品久久麻豆 | 三级精品在线观看| 蜜臀久久99精品久久久久久9| 蜜臀va亚洲va欧美va天堂| 狠狠久久亚洲欧美| 99麻豆久久久国产精品免费优播| 日韩丝袜美女视频| 国产欧美一区二区精品仙草咪| 国产精品伦一区| 亚洲在线观看免费| 精品一区二区三区免费毛片爱| 国产成人啪免费观看软件| 91丨九色丨蝌蚪富婆spa| 欧美日韩电影一区| 久久精品视频一区| 最新久久zyz资源站| 亚洲影院久久精品| 免费在线观看日韩欧美| 成人免费视频caoporn| 欧美图区在线视频| 精品奇米国产一区二区三区| 国产精品视频在线看| 一区二区三区免费在线观看| 美女看a上一区| 99久久国产免费看| 日韩欧美在线网站| 中文字幕一区二区三区不卡在线| 午夜精品爽啪视频| 不卡一区二区在线| 欧美色手机在线观看| 国产亚洲综合性久久久影院| 亚洲自拍欧美精品| 国产91在线|亚洲| 欧美一区日韩一区| 综合av第一页| 韩国av一区二区三区| 91久久国产最好的精华液| 久久综合999| 午夜精品123| 一本大道av一区二区在线播放| 精品日韩欧美在线| 亚洲综合在线视频| 成人app网站| 久久你懂得1024| 美日韩一级片在线观看| 色综合久久天天综合网| 欧美韩日一区二区三区四区| 日本欧美肥老太交大片| 在线欧美日韩国产| 自拍偷拍亚洲综合| 成人动漫av在线| 有码一区二区三区| 成人激情av网| 欧美国产一区在线| 国产高清视频一区| 日韩美女在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 欧美性视频一区二区三区| 最近日韩中文字幕| 99久久精品99国产精品| 国产精品美女久久久久久久久久久| 久久99久久久久久久久久久| 欧美日韩小视频| 亚洲已满18点击进入久久| 91高清在线观看| 一区二区久久久久久| gogogo免费视频观看亚洲一| 国产日韩影视精品| 国产精品综合久久| 久久精品夜夜夜夜久久| 国产麻豆成人精品| 国产亚洲人成网站| 丁香婷婷综合色啪| 国产精品三级av在线播放| 成人综合婷婷国产精品久久蜜臀| 精品粉嫩超白一线天av| 国产主播一区二区| 久久久综合精品| 成人美女视频在线看| 日韩一区中文字幕| 色网综合在线观看| 亚洲综合在线电影| 欧美日韩精品专区| 免费观看久久久4p| xvideos.蜜桃一区二区| 国产福利精品导航| 国产精品久久久久久久久免费樱桃 | 911精品产国品一二三产区| 日韩精品国产精品| 337p日本欧洲亚洲大胆色噜噜| 久久成人精品无人区| 久久久99精品久久| 91亚洲午夜精品久久久久久| 一区二区三区不卡视频| 91福利精品第一导航| 日韩激情一二三区| 久久美女高清视频 | 欧美亚洲禁片免费| 日韩精品成人一区二区三区| 日韩免费一区二区| 成人一区二区视频| 亚洲成人免费av| 亚洲精品一区二区三区四区高清| 国产成人午夜精品影院观看视频| 中文字幕色av一区二区三区| 欧美挠脚心视频网站| 国产99久久久国产精品潘金网站| 亚洲精品中文字幕乱码三区|