Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
asn1c
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
asn1c
Commits
b5b524b1
Commit
b5b524b1
authored
7 years ago
by
Lev Walkin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OBJECT IDENTIFIER and RELATIVE-OID OER encoding and randomized testing
parent
1ff89d3f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
133 additions
and
17 deletions
+133
-17
skeletons/OBJECT_IDENTIFIER.c
skeletons/OBJECT_IDENTIFIER.c
+15
-9
skeletons/OBJECT_IDENTIFIER.h
skeletons/OBJECT_IDENTIFIER.h
+2
-0
skeletons/RELATIVE-OID.c
skeletons/RELATIVE-OID.c
+13
-8
skeletons/RELATIVE-OID.h
skeletons/RELATIVE-OID.h
+2
-0
skeletons/oer_decoder.c
skeletons/oer_decoder.c
+56
-0
skeletons/oer_decoder.h
skeletons/oer_decoder.h
+5
-0
skeletons/oer_encoder.c
skeletons/oer_encoder.c
+33
-0
skeletons/oer_encoder.h
skeletons/oer_encoder.h
+5
-0
tests/tests-randomized/Makefile.am
tests/tests-randomized/Makefile.am
+2
-0
No files found.
skeletons/OBJECT_IDENTIFIER.c
View file @
b5b524b1
...
...
@@ -27,8 +27,8 @@ asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
0
,
0
,
#else
0
,
0
,
OBJECT_IDENTIFIER_decode_oer
,
OBJECT_IDENTIFIER_encode_oer
,
#endif
/* ASN_DISABLE_OER_SUPPORT */
#ifdef ASN_DISABLE_PER_SUPPORT
0
,
...
...
@@ -784,17 +784,23 @@ OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length,
* value up to the upper limit.
*/
static
uint32_t
OBJECT_IDENTIFIER__biased_random_arc
(
int32_t
upper_bound
)
{
OBJECT_IDENTIFIER__biased_random_arc
(
u
int32_t
upper_bound
)
{
static
const
uint16_t
values
[]
=
{
0
,
1
,
127
,
128
,
129
,
254
,
255
,
256
};
size_t
idx
;
size_t
idx
=
asn_random_between
(
0
,
2
*
sizeof
(
values
)
/
sizeof
(
values
[
0
]));
if
(
idx
<
sizeof
(
values
)
/
sizeof
(
values
[
0
]))
{
switch
(
asn_random_between
(
0
,
2
))
{
case
0
:
idx
=
asn_random_between
(
0
,
sizeof
(
values
)
/
sizeof
(
values
[
0
])
-
1
);
if
(
values
[
idx
]
<
upper_bound
)
{
return
values
[
idx
];
}
/* Fall through */
case
1
:
return
asn_random_between
(
0
,
upper_bound
);
case
2
:
default:
return
upper_bound
;
}
return
asn_random_between
(
0
,
upper_bound
);
}
asn_random_fill_result_t
...
...
@@ -821,9 +827,9 @@ OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
arcs
[
0
]
=
asn_random_between
(
0
,
2
);
arcs
[
1
]
=
OBJECT_IDENTIFIER__biased_random_arc
(
arcs
[
0
]
<=
1
?
39
:
INT32
_MAX
);
OBJECT_IDENTIFIER__biased_random_arc
(
arcs
[
0
]
<=
1
?
39
:
UINT
_MAX
);
for
(
i
=
2
;
i
<
arcs_len
;
i
++
)
{
arcs
[
i
]
=
OBJECT_IDENTIFIER__biased_random_arc
(
INT32
_MAX
);
arcs
[
i
]
=
OBJECT_IDENTIFIER__biased_random_arc
(
UINT
_MAX
);
}
if
(
OBJECT_IDENTIFIER_set_arcs
(
st
,
arcs
,
sizeof
(
arcs
[
0
]),
arcs_len
))
{
...
...
This diff is collapsed.
Click to expand it.
skeletons/OBJECT_IDENTIFIER.h
View file @
b5b524b1
...
...
@@ -30,6 +30,8 @@ asn_random_fill_f OBJECT_IDENTIFIER_random_fill;
#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare
#define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive
#define OBJECT_IDENTIFIER_encode_der der_encode_primitive
#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive
#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive
#define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper
#define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper
...
...
This diff is collapsed.
Click to expand it.
skeletons/RELATIVE-OID.c
View file @
b5b524b1
...
...
@@ -28,8 +28,8 @@ asn_TYPE_operation_t asn_OP_RELATIVE_OID = {
0
,
0
,
#else
0
,
0
,
RELATIVE_OID_decode_oer
,
RELATIVE_OID_encode_oer
,
#endif
/* ASN_DISABLE_OER_SUPPORT */
#ifdef ASN_DISABLE_PER_SUPPORT
0
,
...
...
@@ -262,12 +262,16 @@ static uint32_t
RELATIVE_OID__biased_random_arc
()
{
static
const
uint16_t
values
[]
=
{
0
,
1
,
127
,
128
,
129
,
254
,
255
,
256
};
size_t
idx
=
asn_random_between
(
0
,
2
*
sizeof
(
values
)
/
sizeof
(
values
[
0
]));
if
(
idx
<
sizeof
(
values
)
/
sizeof
(
values
[
0
]))
{
return
values
[
idx
];
switch
(
asn_random_between
(
0
,
2
))
{
case
0
:
return
values
[
asn_random_between
(
0
,
sizeof
(
values
)
/
sizeof
(
values
[
0
])
-
1
)];
case
1
:
return
asn_random_between
(
0
,
UINT_MAX
);
case
2
:
default:
return
UINT_MAX
;
}
return
asn_random_between
(
0
,
INT32_MAX
);
}
asn_random_fill_result_t
...
...
@@ -278,8 +282,9 @@ RELATIVE_OID_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
asn_random_fill_result_t
result_failed
=
{
ARFILL_FAILED
,
0
};
asn_random_fill_result_t
result_skipped
=
{
ARFILL_SKIPPED
,
0
};
RELATIVE_OID_t
*
st
;
const
int
min_arcs
=
1
;
/* A minimum of 1 arc is required */
size_t
arcs_len
=
asn_random_between
(
min_arcs
,
3
);
uint32_t
arcs
[
3
];
size_t
arcs_len
=
asn_random_between
(
0
,
3
);
size_t
i
;
(
void
)
constraints
;
...
...
This diff is collapsed.
Click to expand it.
skeletons/RELATIVE-OID.h
View file @
b5b524b1
...
...
@@ -27,6 +27,8 @@ asn_random_fill_f RELATIVE_OID_random_fill;
#define RELATIVE_OID_constraint asn_generic_no_constraint
#define RELATIVE_OID_decode_ber ber_decode_primitive
#define RELATIVE_OID_encode_der der_encode_primitive
#define RELATIVE_OID_decode_oer oer_decode_primitive
#define RELATIVE_OID_encode_oer oer_encode_primitive
#define RELATIVE_OID_decode_uper OCTET_STRING_decode_uper
#define RELATIVE_OID_encode_uper OCTET_STRING_encode_uper
...
...
This diff is collapsed.
Click to expand it.
skeletons/oer_decoder.c
View file @
b5b524b1
...
...
@@ -3,6 +3,7 @@
* Redistribution and modifications are permitted subject to BSD license.
*/
#include <asn_internal.h>
#include <asn_codecs_prim.h>
/*
* The OER decoder of any type.
...
...
@@ -91,3 +92,58 @@ oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
}
}
asn_dec_rval_t
oer_decode_primitive
(
const
asn_codec_ctx_t
*
opt_codec_ctx
,
asn_TYPE_descriptor_t
*
td
,
const
asn_oer_constraints_t
*
constraints
,
void
**
sptr
,
const
void
*
ptr
,
size_t
size
)
{
ASN__PRIMITIVE_TYPE_t
*
st
=
(
ASN__PRIMITIVE_TYPE_t
*
)
*
sptr
;
asn_dec_rval_t
rval
=
{
RC_OK
,
0
};
size_t
expected_length
=
0
;
ssize_t
len_len
;
(
void
)
opt_codec_ctx
;
(
void
)
constraints
;
if
(
!
st
)
{
st
=
(
ASN__PRIMITIVE_TYPE_t
*
)(
*
sptr
=
CALLOC
(
1
,
sizeof
(
ASN__PRIMITIVE_TYPE_t
)));
if
(
!
st
)
ASN__DECODE_FAILED
;
}
/*
* X.696 (08/2015) #27.2
* Encode length determinant as _number of octets_, but only
* if upper bound is not equal to lower bound.
*/
len_len
=
oer_fetch_length
(
ptr
,
size
,
&
expected_length
);
if
(
len_len
>
0
)
{
rval
.
consumed
=
len_len
;
ptr
=
(
const
char
*
)
ptr
+
len_len
;
size
-=
len_len
;
}
else
if
(
len_len
==
0
)
{
ASN__DECODE_STARVED
;
}
else
if
(
len_len
<
0
)
{
ASN__DECODE_FAILED
;
}
if
(
size
<
expected_length
)
{
ASN__DECODE_STARVED
;
}
else
{
uint8_t
*
buf
=
MALLOC
(
expected_length
+
1
);
if
(
buf
==
NULL
)
{
ASN__DECODE_FAILED
;
}
else
{
memcpy
(
buf
,
ptr
,
expected_length
);
buf
[
expected_length
]
=
'\0'
;
}
FREEMEM
(
st
->
buf
);
st
->
buf
=
buf
;
st
->
size
=
expected_length
;
rval
.
consumed
+=
expected_length
;
return
rval
;
}
}
This diff is collapsed.
Click to expand it.
skeletons/oer_decoder.h
View file @
b5b524b1
...
...
@@ -59,6 +59,11 @@ ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
const
asn_oer_constraints_t
*
constraints
,
void
**
struct_ptr
,
const
void
*
bufptr
,
size_t
size
);
/*
* Length-prefixed buffer decoding for primitive types.
*/
oer_type_decoder_f
oer_decode_primitive
;
#ifdef __cplusplus
}
...
...
This diff is collapsed.
Click to expand it.
skeletons/oer_encoder.c
View file @
b5b524b1
...
...
@@ -3,6 +3,7 @@
* Redistribution and modifications are permitted subject to BSD license.
*/
#include <asn_internal.h>
#include <asn_codecs_prim.h>
/*
* The OER encoder of any type.
...
...
@@ -76,3 +77,35 @@ oer_encode_to_buffer(struct asn_TYPE_descriptor_s *type_descriptor,
}
return
ec
;
}
asn_enc_rval_t
oer_encode_primitive
(
asn_TYPE_descriptor_t
*
td
,
const
asn_oer_constraints_t
*
constraints
,
void
*
sptr
,
asn_app_consume_bytes_f
*
cb
,
void
*
app_key
)
{
const
ASN__PRIMITIVE_TYPE_t
*
st
=
(
const
ASN__PRIMITIVE_TYPE_t
*
)
sptr
;
asn_enc_rval_t
er
=
{
0
,
0
,
0
};
ssize_t
ret
;
(
void
)
constraints
;
if
(
!
st
)
ASN__ENCODE_FAILED
;
ASN_DEBUG
(
"Encoding %s (%zu bytes)"
,
td
?
td
->
name
:
""
,
st
->
size
);
/*
* X.696 (08/2015) #27.2
*/
ret
=
oer_serialize_length
(
st
->
size
,
cb
,
app_key
);
if
(
ret
<
0
)
{
ASN__ENCODE_FAILED
;
}
er
.
encoded
+=
ret
;
er
.
encoded
+=
st
->
size
;
if
(
cb
(
st
->
buf
,
st
->
size
,
app_key
)
<
0
)
{
ASN__ENCODE_FAILED
;
}
else
{
ASN__ENCODED_OK
(
er
);
}
}
This diff is collapsed.
Click to expand it.
skeletons/oer_encoder.h
View file @
b5b524b1
...
...
@@ -46,6 +46,11 @@ typedef asn_enc_rval_t(oer_type_encoder_f)(
);
/*
* Length-prefixed buffer encoding for primitive types.
*/
oer_type_encoder_f
oer_encode_primitive
;
#ifdef __cplusplus
}
#endif
...
...
This diff is collapsed.
Click to expand it.
tests/tests-randomized/Makefile.am
View file @
b5b524b1
...
...
@@ -31,6 +31,8 @@ TESTS += bundles/04-REAL-bundle.txt
TESTS
+=
bundles/05-BIT-STRING-bundle.txt
TESTS
+=
bundles/06-OCTET-STRING-bundle.txt
TESTS
+=
bundles/07-VisibleString-bundle.txt
TESTS
+=
bundles/08-OBJECT-IDENTIFIER-bundle.txt
TESTS
+=
bundles/09-RELATIVE-OID-bundle.txt
EXTRA_DIST
=
\
random-test-driver.c
\
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment