blob: 47f9b8af01560d91d29a774571355c424bcb20dc [file] [log] [blame]
Lev Walkina5972be2017-09-29 23:15:58 -07001/*
Lev Walkin20696a42017-10-17 21:27:33 -07002 * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
Lev Walkina5972be2017-09-29 23:15:58 -07003 * Redistribution and modifications are permitted subject to BSD license.
4 */
5#ifndef ASN_RANDOM_FILL
6#define ASN_RANDOM_FILL
7
8/* Forward declarations */
9struct asn_TYPE_descriptor_s;
10struct asn_encoding_constraints_s;
11
12/*
13 * Initialize a structure with random data according to the type specification
14 * and optional member constraints.
15 * ARGUMENTS:
16 * (max_length) - See (approx_max_length_limit).
17 * (memb_constraints) - Member constraints, if exist.
18 * The type can be constrained differently according
19 * to PER and OER specifications, so we find a value
20 * at the intersection of these constraints.
21 * In case the return differs from ARFILL_OK, the (struct_ptr) contents
22 * and (current_length) value remain in their original state.
23 */
24typedef struct asn_random_fill_result_s {
25 enum {
26 ARFILL_FAILED = -1, /* System error (memory?) */
27 ARFILL_OK = 0, /* Initialization succeeded */
28 ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */
29 } code;
30 size_t length; /* Approximate number of bytes created. */
31} asn_random_fill_result_t;
32typedef asn_random_fill_result_t(asn_random_fill_f)(
33 const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
34 const struct asn_encoding_constraints_s *memb_constraints,
35 size_t max_length);
36
37/*
38 * Returns 0 if the structure was properly initialized, -1 otherwise.
39 * The (approx_max_length_limit) specifies the approximate limit of the
40 * resulting structure in units closely resembling bytes. The actual result
41 * might be several times larger or smaller than the length limit.
42 */
43int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
44 size_t approx_max_length_limit);
45
46/*
47 * Returns a random number between min and max.
48 */
49intmax_t asn_random_between(intmax_t min, intmax_t max);
50
51#endif /* ASN_RANDOM_FILL */