version 1.1, 2003/05/11 21:36:33 |
version 1.2, 2005/10/16 18:56:35 |
|
|
#include "gen_locl.h" |
#include "gen_locl.h" |
|
|
/* |
/* |
RCSID("$KTH: gen_decode.c,v 1.18 2002/08/09 15:37:34 joda Exp $"); |
RCSID("$KTH: gen_decode.c,v 1.21 2005/05/29 14:23:01 lha Exp $"); |
*/ |
*/ |
|
|
static void |
static void |
|
|
int pos; |
int pos; |
|
|
fprintf (codefile, |
fprintf (codefile, |
"e = der_match_tag_and_length (p, len, UNIV, PRIM, UT_BitString," |
"e = der_match_tag_and_length (p, len, ASN1_C_UNIV, PRIM, UT_BitString," |
"&reallen, &l);\n" |
"&reallen, &l);\n" |
"FORW;\n" |
"FORW;\n" |
"if(len < reallen)\n" |
"if(len < reallen)\n" |
|
|
break; |
break; |
|
|
fprintf (codefile, |
fprintf (codefile, |
"e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence," |
"e = der_match_tag_and_length (p, len, ASN1_C_UNIV, CONS, UT_Sequence," |
"&reallen, &l);\n" |
"&reallen, &l);\n" |
"FORW;\n" |
"FORW;\n" |
"{\n" |
"{\n" |
|
|
}else{ |
}else{ |
fprintf (codefile, "{\n" |
fprintf (codefile, "{\n" |
"size_t newlen, oldlen;\n\n" |
"size_t newlen, oldlen;\n\n" |
"e = der_match_tag (p, len, CONTEXT, CONS, %d, &l);\n", |
"e = der_match_tag (p, len, ASN1_C_CONTEXT, CONS, %d, &l);\n", |
m->val); |
m->val); |
fprintf (codefile, |
fprintf (codefile, |
"if (e)\n"); |
"if (e)\n"); |
|
|
char *n; |
char *n; |
|
|
fprintf (codefile, |
fprintf (codefile, |
"e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence," |
"e = der_match_tag_and_length (p, len, ASN1_C_UNIV, CONS, UT_Sequence," |
"&reallen, &l);\n" |
"&reallen, &l);\n" |
"FORW;\n" |
"FORW;\n" |
"if(len < reallen)\n" |
"if(len < reallen)\n" |
|
|
case TGeneralString: |
case TGeneralString: |
decode_primitive ("general_string", name); |
decode_primitive ("general_string", name); |
break; |
break; |
|
case TUTF8String: |
|
decode_primitive ("utf8string", name); |
|
break; |
|
case TNull: |
|
fprintf (codefile, |
|
"e = decode_nulltype(p, len, &l);\n" |
|
"FORW;\n"); |
|
break; |
case TApplication: |
case TApplication: |
fprintf (codefile, |
fprintf (codefile, |
"e = der_match_tag_and_length (p, len, APPL, CONS, %d, " |
"e = der_match_tag_and_length (p, len, ASN1_C_APPL, CONS, %d, " |
"&reallen, &l);\n" |
"&reallen, &l);\n" |
"FORW;\n" |
"FORW;\n" |
"{\n" |
"{\n" |
|
|
"}\n"); |
"}\n"); |
|
|
break; |
break; |
|
case TBoolean: |
|
decode_primitive ("boolean", name); |
|
break; |
default : |
default : |
abort (); |
abort (); |
} |
} |
|
|
switch (s->type->type) { |
switch (s->type->type) { |
case TInteger: |
case TInteger: |
case TUInteger: |
case TUInteger: |
|
case TBoolean: |
case TOctetString: |
case TOctetString: |
case TOID: |
case TOID: |
case TGeneralizedTime: |
case TGeneralizedTime: |
case TGeneralString: |
case TGeneralString: |
|
case TUTF8String: |
|
case TNull: |
|
case TEnumerated: |
case TBitString: |
case TBitString: |
case TSequence: |
case TSequence: |
case TSequenceOf: |
case TSequenceOf: |
|
|
"int dce_fix;\n"); |
"int dce_fix;\n"); |
|
|
fprintf (codefile, |
fprintf (codefile, |
"e = der_match_tag(p, len, CONTEXT, CONS, tag, &l);\n" |
"e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, tag, &l);\n" |
"if (e)\n" |
"if (e)\n" |
"return e;\n"); |
"return e;\n"); |
fprintf (codefile, |
fprintf (codefile, |