parsing support for CONSTRAINED BY

diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index b379667..f9c7ed4 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -1388,12 +1388,11 @@
 
 Opaque:
 	TOK_opaque {
-		$$.len = $1.len + 2;
+		$$.len = $1.len + 1;
 		$$.buf = malloc($$.len + 1);
 		checkmem($$.buf);
 		$$.buf[0] = '{';
-		$$.buf[1] = ' ';
-		memcpy($$.buf + 2, $1.buf, $1.len);
+		memcpy($$.buf + 1, $1.buf, $1.len);
 		$$.buf[$$.len] = '\0';
 		free($1.buf);
 	}
@@ -1623,6 +1622,15 @@
 	| WithComponents {
 		$$ = $1;
 	}
+	| TOK_CONSTRAINED TOK_BY '{'
+		{ asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
+		$$ = asn1p_constraint_new(yylineno);
+		checkmem($$);
+		$$->type = ACT_CT_CTDBY;
+		$$->value = asn1p_value_frombuf($5.buf, $5.len, 0);
+		checkmem($$->value);
+		$$->value->type = ATV_UNPARSED;
+	}
 	;
 
 ConstraintRangeSpec: