1 1.1 mrg /* 2 1.1 mrg 3 1.1.1.3 mrg Copyright 2011, 2013, 2018 Free Software Foundation, Inc. 4 1.1 mrg 5 1.1 mrg This file is part of the GNU MP Library test suite. 6 1.1 mrg 7 1.1 mrg The GNU MP Library test suite is free software; you can redistribute it 8 1.1 mrg and/or modify it under the terms of the GNU General Public License as 9 1.1 mrg published by the Free Software Foundation; either version 3 of the License, 10 1.1 mrg or (at your option) any later version. 11 1.1 mrg 12 1.1 mrg The GNU MP Library test suite is distributed in the hope that it will be 13 1.1 mrg useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 14 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 15 1.1 mrg Public License for more details. 16 1.1 mrg 17 1.1 mrg You should have received a copy of the GNU General Public License along with 18 1.1.1.2 mrg the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ 19 1.1 mrg 20 1.1 mrg #include <stdio.h> 21 1.1 mrg #include <stdlib.h> 22 1.1 mrg 23 1.1 mrg #include "mini-random.h" 24 1.1 mrg 25 1.1 mrg static void 26 1.1 mrg set_str (mpz_t r, const char *s) 27 1.1 mrg { 28 1.1 mrg if (mpz_set_str (r, s, 16) != 0) 29 1.1 mrg { 30 1.1 mrg fprintf (stderr, "mpz_set_str failed on input %s\n", s); 31 1.1 mrg abort (); 32 1.1 mrg } 33 1.1 mrg } 34 1.1 mrg 35 1.1 mrg void 36 1.1 mrg mini_urandomb (mpz_t r, unsigned long bits) 37 1.1 mrg { 38 1.1 mrg char *s; 39 1.1 mrg s = hex_urandomb (bits); 40 1.1 mrg set_str (r, s); 41 1.1 mrg free (s); 42 1.1 mrg } 43 1.1 mrg 44 1.1 mrg void 45 1.1 mrg mini_rrandomb (mpz_t r, unsigned long bits) 46 1.1 mrg { 47 1.1 mrg char *s; 48 1.1 mrg s = hex_rrandomb (bits); 49 1.1 mrg set_str (r, s); 50 1.1 mrg free (s); 51 1.1 mrg } 52 1.1 mrg 53 1.1 mrg void 54 1.1 mrg mini_rrandomb_export (mpz_t r, void *dst, size_t *countp, 55 1.1 mrg int order, size_t size, int endian, unsigned long bits) 56 1.1 mrg { 57 1.1 mrg char *s; 58 1.1 mrg s = hex_rrandomb_export (dst, countp, order, size, endian, bits); 59 1.1 mrg set_str (r, s); 60 1.1 mrg free (s); 61 1.1 mrg } 62 1.1 mrg 63 1.1 mrg void 64 1.1 mrg mini_random_op2 (enum hex_random_op op, unsigned long maxbits, 65 1.1 mrg mpz_t a, mpz_t r) 66 1.1 mrg { 67 1.1 mrg char *ap; 68 1.1 mrg char *rp; 69 1.1 mrg 70 1.1 mrg hex_random_op2 (op, maxbits, &ap, &rp); 71 1.1 mrg set_str (a, ap); 72 1.1 mrg set_str (r, rp); 73 1.1 mrg 74 1.1 mrg free (ap); 75 1.1 mrg free (rp); 76 1.1 mrg } 77 1.1 mrg 78 1.1 mrg void 79 1.1 mrg mini_random_op3 (enum hex_random_op op, unsigned long maxbits, 80 1.1 mrg mpz_t a, mpz_t b, mpz_t r) 81 1.1 mrg { 82 1.1 mrg char *ap; 83 1.1 mrg char *bp; 84 1.1 mrg char *rp; 85 1.1 mrg 86 1.1 mrg hex_random_op3 (op, maxbits, &ap, &bp, &rp); 87 1.1 mrg set_str (a, ap); 88 1.1 mrg set_str (b, bp); 89 1.1 mrg set_str (r, rp); 90 1.1 mrg 91 1.1 mrg free (ap); 92 1.1 mrg free (bp); 93 1.1 mrg free (rp); 94 1.1 mrg } 95 1.1 mrg 96 1.1 mrg void 97 1.1 mrg mini_random_op4 (enum hex_random_op op, unsigned long maxbits, 98 1.1 mrg mpz_t a, mpz_t b, mpz_t c, mpz_t d) 99 1.1 mrg { 100 1.1 mrg char *ap; 101 1.1 mrg char *bp; 102 1.1 mrg char *cp; 103 1.1 mrg char *dp; 104 1.1 mrg 105 1.1 mrg hex_random_op4 (op, maxbits, &ap, &bp, &cp, &dp); 106 1.1 mrg set_str (a, ap); 107 1.1 mrg set_str (b, bp); 108 1.1 mrg set_str (c, cp); 109 1.1 mrg set_str (d, dp); 110 1.1 mrg 111 1.1 mrg free (ap); 112 1.1 mrg free (bp); 113 1.1 mrg free (cp); 114 1.1 mrg free (dp); 115 1.1 mrg } 116 1.1 mrg 117 1.1 mrg void 118 1.1 mrg mini_random_bit_op (enum hex_random_op op, unsigned long maxbits, 119 1.1 mrg mpz_t a, mp_bitcnt_t *b, mpz_t r) 120 1.1 mrg { 121 1.1 mrg char *ap; 122 1.1 mrg char *rp; 123 1.1 mrg 124 1.1 mrg hex_random_bit_op (op, maxbits, &ap, b, &rp); 125 1.1 mrg set_str (a, ap); 126 1.1 mrg set_str (r, rp); 127 1.1 mrg 128 1.1 mrg free (ap); 129 1.1 mrg free (rp); 130 1.1 mrg } 131 1.1 mrg 132 1.1 mrg void 133 1.1 mrg mini_random_scan_op (enum hex_random_op op, unsigned long maxbits, 134 1.1 mrg mpz_t a, mp_bitcnt_t *b, mp_bitcnt_t *r) 135 1.1 mrg { 136 1.1 mrg char *ap; 137 1.1 mrg 138 1.1 mrg hex_random_scan_op (op, maxbits, &ap, b, r); 139 1.1 mrg set_str (a, ap); 140 1.1 mrg 141 1.1 mrg free (ap); 142 1.1 mrg } 143 1.1.1.3 mrg 144 1.1.1.3 mrg void 145 1.1.1.3 mrg mini_random_lucm_op (unsigned long maxbits, mpz_t v, mpz_t q, mpz_t m, 146 1.1.1.3 mrg long *Q, unsigned long *b0, int *res) 147 1.1.1.3 mrg { 148 1.1.1.3 mrg char *vp; 149 1.1.1.3 mrg char *qp; 150 1.1.1.3 mrg char *mp; 151 1.1.1.3 mrg 152 1.1.1.3 mrg hex_random_lucm_op (maxbits, &vp, &qp, &mp, Q, b0, res); 153 1.1.1.3 mrg set_str (v, vp); 154 1.1.1.3 mrg set_str (q, qp); 155 1.1.1.3 mrg set_str (m, mp); 156 1.1.1.3 mrg 157 1.1.1.3 mrg free (vp); 158 1.1.1.3 mrg free (qp); 159 1.1.1.3 mrg free (mp); 160 1.1.1.3 mrg } 161