2  * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
 
   3  * Redistribution and modifications are permitted subject to BSD license.
 
   5 #ifndef ASN_RANDOM_FILL
 
   6 #define ASN_RANDOM_FILL
 
   8 /* Forward declarations */
 
   9 struct asn_TYPE_descriptor_s;
 
  10 struct asn_encoding_constraints_s;
 
  13  * Initialize a structure with random data according to the type specification
 
  14  * and optional member constraints.
 
  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.
 
  24 typedef struct asn_random_fill_result_s {
 
  26         ARFILL_FAILED = -1, /* System error (memory?) */
 
  27         ARFILL_OK = 0,      /* Initialization succeeded */
 
  28         ARFILL_SKIPPED = 1  /* Not done due to (length?) constraint */
 
  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,
 
  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.
 
  43 int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
 
  44                     size_t approx_max_length_limit);
 
  47  * Returns a random number between min and max.
 
  49 intmax_t asn_random_between(intmax_t min, intmax_t max);
 
  51 #endif  /* ASN_RANDOM_FILL */