00001
00007
00008 #include "asn1_node.h"
00009
00010
00011 const char* _ASN1_NODE_CONST[] =
00012 {
00013 "PRIMITIVE",
00014 "CONSTRUCTED"
00015 };
00016
00017
00018 const char* _ASN1_NODE_TYPE[] =
00019 {
00020 "UNIVERSAL",
00021 "APPLICATION",
00022 "CONTEXT-DEFINED",
00023 "PRIVATE"
00024 };
00025
00026
00027 const char* _ASN1_NODE_NAME[] =
00028 {
00029 "DATA END",
00030 "BOOLEAN",
00031 "INTEGER",
00032 "BIT STRING",
00033 "OCTET STRING",
00034 "NULL",
00035 "OBJECT IDENTIFIER",
00036 "OBJECT DESCRITOR",
00037 "EXTERNAL",
00038 "REAL",
00039 "ENUMERATED",
00040 "EMBEDDED PDV",
00041 "UTF8 STRING",
00042 "RELATIVE-OID",
00043 "?",
00044 "?",
00045 "SEQUENCE",
00046 "SET",
00047 "NUMERIC STRING",
00048 "PRINTABLE STRING",
00049 "TELETEX STRING",
00050 "VIDEOTEX STRING",
00051 "IA5 STRING",
00052 "UTC TIME",
00053 "GENERALIZED TIME",
00054 "GRAPHIC STRING",
00055 "VISIBLE STRING",
00056 "GENERAL STRING",
00057 "UNIVERSAL STRING",
00058 "CHARACTER STRING",
00059 "BMP STRING",
00060 "?",
00061 };
00062
00063
00064
00065 void asn1_node_type(int node, int* cnst, int* type, int* name)
00066 {
00067 if (cnst!=NULL) {
00068 if (node & JBXL_ASN1_CNSTRCTD) *cnst = 1;
00069 else *cnst = 0;
00070 }
00071 if (type!=NULL) *type = (node & 0xc0) >> 6;
00072 if (name!=NULL) *name = node & 0x1f;
00073
00074 return;
00075 }
00076
00077
00078 void asn1_print_node(FILE* fp, int node)
00079 {
00080 int cnst, type, name;
00081
00082 asn1_node_type(node, &cnst, &type, &name);
00083
00084 if (cnst==1) fprintf(fp, "%s ", _ASN1_NODE_CONST[cnst]);
00085 fprintf(fp, "%s ", _ASN1_NODE_TYPE[type]);
00086 if (type==0x00) fprintf(fp, "%s ", _ASN1_NODE_NAME[name]);
00087 else fprintf(fp, "%d ", name);
00088 fprintf(fp, "(%02x) ", node);
00089
00090 return;
00091 }
00092
00093
00094
00095 void asn1_print_node_value(FILE* fp, int node, Buffer buf)
00096 {
00097 fprintf(fp, ": ");
00098
00099 if (node==JBXL_ASN1_INT) {
00100 long int n = bin2int_DER(buf);
00101 fprintf(fp, "INT = %ld ", n);
00102 }
00103 else if (node==JBXL_ASN1_OCT) {
00104 if (buf.buf!=NULL) fprintf(fp, "\"%s\" ", buf.buf);
00105 else fprintf(fp, "\"\" ");
00106 }
00107 else if (buf.buf!=NULL) {
00108 fprintf(fp, "....... ");
00109 }
00110
00111 return;
00112 }
00113