Peter Szilagyi | fbc56f9 | 2019-07-23 19:29:46 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved. |
| 3 | * Redistribution and modifications are permitted subject to BSD license. |
| 4 | */ |
| 5 | #ifndef ASN_RANDOM_FILL |
| 6 | #define ASN_RANDOM_FILL |
| 7 | |
| 8 | /* Forward declarations */ |
| 9 | struct asn_TYPE_descriptor_s; |
| 10 | struct 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 | */ |
| 24 | typedef 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; |
| 32 | typedef 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 | */ |
| 43 | int 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 | */ |
| 49 | intmax_t asn_random_between(intmax_t min, intmax_t max); |
| 50 | |
| 51 | #endif /* ASN_RANDOM_FILL */ |