mini-random.c revision 1.1.1.3 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