diff --git a/src/libasn1/asn1uper.h b/src/libasn1/asn1uper.h index e94f152..359b194 100644 --- a/src/libasn1/asn1uper.h +++ b/src/libasn1/asn1uper.h @@ -24,6 +24,8 @@ #define uper_get_bits_length(U,S) (uper_get_bits_stream(U,S)+1) #define uper_put_bits_length(U,L,S) uper_put_bits_stream(U,(L)-1,S) +#define uper_get_seq_length(U,S) (uper_get_bits_stream(U,S)+1) + #define uper_init_extension(E) asn1_init_extension(E) #define uper_init_bitstream(E) asn1_init_bitstream(E) diff --git a/src/libasn1/uper_get_ext.c b/src/libasn1/uper_get_ext.c index 789df92..54e273b 100644 --- a/src/libasn1/uper_get_ext.c +++ b/src/libasn1/uper_get_ext.c @@ -74,8 +74,8 @@ uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint noptions, u // check for options if (noptions) { - ext->value = uper_get_bits_stream(uper, noptions); ext->options = noptions; + ext->value = uper_get_bits_stream(uper, noptions); } else ext->options = 0; @@ -120,7 +120,7 @@ uint uper_get_ext_optional(UPER_Extension *ext, uint bit) if (!ext || (bit>=ext->options)) return 0; - return (ext->value & 1<<(ext->options-bit)); + return (ext->value & 1<<(ext->options-bit-1)); } uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext)