| /* |
| * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved. |
| * Redistribution and modifications are permitted subject to BSD license. |
| */ |
| #ifndef ASN_RANDOM_FILL |
| #define ASN_RANDOM_FILL |
| |
| /* Forward declarations */ |
| struct asn_TYPE_descriptor_s; |
| struct asn_encoding_constraints_s; |
| |
| /* |
| * Initialize a structure with random data according to the type specification |
| * and optional member constraints. |
| * ARGUMENTS: |
| * (max_length) - See (approx_max_length_limit). |
| * (memb_constraints) - Member constraints, if exist. |
| * The type can be constrained differently according |
| * to PER and OER specifications, so we find a value |
| * at the intersection of these constraints. |
| * In case the return differs from ARFILL_OK, the (struct_ptr) contents |
| * and (current_length) value remain in their original state. |
| */ |
| typedef struct asn_random_fill_result_s { |
| enum { |
| ARFILL_FAILED = -1, /* System error (memory?) */ |
| ARFILL_OK = 0, /* Initialization succeeded */ |
| ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */ |
| } code; |
| size_t length; /* Approximate number of bytes created. */ |
| } asn_random_fill_result_t; |
| typedef asn_random_fill_result_t(asn_random_fill_f)( |
| const struct asn_TYPE_descriptor_s *td, void **struct_ptr, |
| const struct asn_encoding_constraints_s *memb_constraints, |
| size_t max_length); |
| |
| /* |
| * Returns 0 if the structure was properly initialized, -1 otherwise. |
| * The (approx_max_length_limit) specifies the approximate limit of the |
| * resulting structure in units closely resembling bytes. The actual result |
| * might be several times larger or smaller than the length limit. |
| */ |
| int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, |
| size_t approx_max_length_limit); |
| |
| /* |
| * Returns a random number between min and max. |
| */ |
| intmax_t asn_random_between(intmax_t min, intmax_t max); |
| |
| #endif /* ASN_RANDOM_FILL */ |