random: Allow building rndjent on non-x86.
[libgcrypt.git] / random / jitterentropy-base.c
1 /*
2  * Non-physical true random number generator based on timing jitter.
3  *
4  * Copyright Stephan Mueller <smueller@chronox.de>, 2014
5  *
6  * Design
7  * ======
8  *
9  * See documentation in doc/ folder.
10  *
11  * Interface
12  * =========
13  *
14  * See documentation in doc/ folder.
15  *
16  * License
17  * =======
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions
21  * are met:
22  * 1. Redistributions of source code must retain the above copyright
23  *    notice, and the entire permission notice in its entirety,
24  *    including the disclaimer of warranties.
25  * 2. Redistributions in binary form must reproduce the above copyright
26  *    notice, this list of conditions and the following disclaimer in the
27  *    documentation and/or other materials provided with the distribution.
28  * 3. The name of the author may not be used to endorse or promote
29  *    products derived from this software without specific prior
30  *    written permission.
31  *
32  * ALTERNATIVELY, this product may be distributed under the terms of
33  * the GNU General Public License, in which case the provisions of the GPL2 are
34  * required INSTEAD OF the above restrictions.  (This clause is
35  * necessary due to a potential bad interaction between the GPL and
36  * the restrictions contained in a BSD-style copyright.)
37  *
38  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
39  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
41  * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
42  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
43  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
44  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
45  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
46  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
47  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
48  * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
49  * DAMAGE.
50  */
51
52 #include "jitterentropy.h"
53
54 #ifndef CONFIG_CRYPTO_CPU_JITTERENTROPY_STAT
55  /* only check optimization in a compilation for real work */
56  #ifdef __OPTIMIZE__
57   #error "The CPU Jitter random number generator must not be compiled with optimizations. See documentation. Use the compiler switch -O0 for compiling jitterentropy-base.c."
58  #endif
59 #endif
60
61 #define MAJVERSION 2 /* API / ABI incompatible changes, functional changes that
62                       * require consumer to be updated (as long as this number
63                       * is zero, the API is not considered stable and can
64                       * change without a bump of the major version) */
65 #define MINVERSION 0 /* API compatible, ABI may change, functional
66                       * enhancements only, consumer can be left unchanged if
67                       * enhancements are not considered */
68 #define PATCHLEVEL 0 /* API / ABI compatible, no functional changes, no
69                       * enhancements, bug fixes only */
70
71 /**
72  * jent_version() - Return machine-usable version number of jent library
73  *
74  * The function returns a version number that is monotonic increasing
75  * for newer versions. The version numbers are multiples of 100. For example,
76  * version 1.2.3 is converted to 1020300 -- the last two digits are reserved
77  * for future use.
78  *
79  * The result of this function can be used in comparing the version number
80  * in a calling program if version-specific calls need to be make.
81  *
82  * Return: Version number of kcapi library
83  */
84 static unsigned int jent_version(void)
85 {
86         unsigned int version = 0;
87
88         version =  MAJVERSION * 1000000;
89         version += MINVERSION * 10000;
90         version += PATCHLEVEL * 100;
91
92         return version;
93 }
94
95 /**
96  * Update of the loop count used for the next round of
97  * an entropy collection.
98  *
99  * Input:
100  * @ec entropy collector struct -- may be NULL
101  * @bits is the number of low bits of the timer to consider
102  * @min is the number of bits we shift the timer value to the right at
103  *      the end to make sure we have a guaranteed minimum value
104  *
105  * @return Newly calculated loop counter
106  */
107 static u64 jent_loop_shuffle(struct rand_data *ec,
108                                unsigned int bits, unsigned int min)
109 {
110         u64 time = 0;
111         u64 shuffle = 0;
112         unsigned int i = 0;
113         unsigned int mask = (1<<bits) - 1;
114
115         jent_get_nstime(&time);
116         /*
117          * Mix the current state of the random number into the shuffle
118          * calculation to balance that shuffle a bit more.
119          */
120         if (ec)
121                 time ^= ec->data;
122         /*
123          * We fold the time value as much as possible to ensure that as many
124          * bits of the time stamp are included as possible.
125          */
126         for (i = 0; (DATA_SIZE_BITS / bits) > i; i++) {
127                 shuffle ^= time & mask;
128                 time = time >> bits;
129         }
130
131         /*
132          * We add a lower boundary value to ensure we have a minimum
133          * RNG loop count.
134          */
135         return (shuffle + (1<<min));
136 }
137
138 /***************************************************************************
139  * Noise sources
140  ***************************************************************************/
141
142 /**
143  * CPU Jitter noise source -- this is the noise source based on the CPU
144  *                            execution time jitter
145  *
146  * This function injects the individual bits of the time value into the
147  * entropy pool using an LFSR.
148  *
149  * The code is deliberately inefficient with respect to the bit shifting
150  * and shall stay that way. This function is the root cause why the code
151  * shall be compiled without optimization. This function not only acts as
152  * folding operation, but this function's execution is used to measure
153  * the CPU execution time jitter. Any change to the loop in this function
154  * implies that careful retesting must be done.
155  *
156  * Input:
157  * @ec entropy collector struct -- may be NULL
158  * @time time stamp to be injected
159  * @loop_cnt if a value not equal to 0 is set, use the given value as number of
160  *           loops to perform the folding
161  *
162  * Output:
163  * updated ec->data
164  *
165  * @return Number of loops the folding operation is performed
166  */
167 static u64 jent_lfsr_time(struct rand_data *ec, u64 time,
168                             u64 loop_cnt)
169 {
170         unsigned int i;
171         u64 j = 0;
172         u64 new = 0;
173 #define MAX_FOLD_LOOP_BIT 4
174 #define MIN_FOLD_LOOP_BIT 0
175         u64 fold_loop_cnt =
176                 jent_loop_shuffle(ec, MAX_FOLD_LOOP_BIT, MIN_FOLD_LOOP_BIT);
177
178         /*
179          * testing purposes -- allow test app to set the counter, not
180          * needed during runtime
181          */
182         if (loop_cnt)
183                 fold_loop_cnt = loop_cnt;
184         for (j = 0; j < fold_loop_cnt; j++) {
185                 new = ec->data;
186                 for (i = 1; (DATA_SIZE_BITS) >= i; i++) {
187                         u64 tmp = time << (DATA_SIZE_BITS - i);
188
189                         tmp = tmp >> (DATA_SIZE_BITS - 1);
190
191                         /*
192                         * Fibonacci LSFR with polynomial of
193                         *  x^64 + x^61 + x^56 + x^31 + x^28 + x^23 + 1 which is
194                         *  primitive according to
195                         *   http://poincare.matf.bg.ac.rs/~ezivkovm/publications/primpol1.pdf
196                         * (the shift values are the polynomial values minus one
197                         * due to counting bits from 0 to 63). As the current
198                         * position is always the LSB, the polynomial only needs
199                         * to shift data in from the left without wrap.
200                         */
201                         new ^= tmp;
202                         new ^= ((new >> 63) & 1);
203                         new ^= ((new >> 60) & 1);
204                         new ^= ((new >> 55) & 1);
205                         new ^= ((new >> 30) & 1);
206                         new ^= ((new >> 27) & 1);
207                         new ^= ((new >> 22) & 1);
208                         new = rol64(new, 1);
209                 }
210         }
211         ec->data = new;
212
213         return fold_loop_cnt;
214 }
215
216 /**
217  * Memory Access noise source -- this is a noise source based on variations in
218  *                               memory access times
219  *
220  * This function performs memory accesses which will add to the timing
221  * variations due to an unknown amount of CPU wait states that need to be
222  * added when accessing memory. The memory size should be larger than the L1
223  * caches as outlined in the documentation and the associated testing.
224  *
225  * The L1 cache has a very high bandwidth, albeit its access rate is  usually
226  * slower than accessing CPU registers. Therefore, L1 accesses only add minimal
227  * variations as the CPU has hardly to wait. Starting with L2, significant
228  * variations are added because L2 typically does not belong to the CPU any more
229  * and therefore a wider range of CPU wait states is necessary for accesses.
230  * L3 and real memory accesses have even a wider range of wait states. However,
231  * to reliably access either L3 or memory, the ec->mem memory must be quite
232  * large which is usually not desirable.
233  *
234  * Input:
235  * @ec Reference to the entropy collector with the memory access data -- if
236  *     the reference to the memory block to be accessed is NULL, this noise
237  *     source is disabled
238  * @loop_cnt if a value not equal to 0 is set, use the given value as number of
239  *           loops to perform the folding
240  *
241  * @return Number of memory access operations
242  */
243 static unsigned int jent_memaccess(struct rand_data *ec, u64 loop_cnt)
244 {
245         unsigned int wrap = 0;
246         u64 i = 0;
247 #define MAX_ACC_LOOP_BIT 7
248 #define MIN_ACC_LOOP_BIT 0
249         u64 acc_loop_cnt =
250                 jent_loop_shuffle(ec, MAX_ACC_LOOP_BIT, MIN_ACC_LOOP_BIT);
251
252         if (NULL == ec || NULL == ec->mem)
253                 return 0;
254         wrap = ec->memblocksize * ec->memblocks;
255
256         /*
257          * testing purposes -- allow test app to set the counter, not
258          * needed during runtime
259          */
260         if (loop_cnt)
261                 acc_loop_cnt = loop_cnt;
262
263         for (i = 0; i < (ec->memaccessloops + acc_loop_cnt); i++) {
264                 unsigned char *tmpval = ec->mem + ec->memlocation;
265                 /*
266                  * memory access: just add 1 to one byte,
267                  * wrap at 255 -- memory access implies read
268                  * from and write to memory location
269                  */
270                 *tmpval = (*tmpval + 1) & 0xff;
271                 /*
272                  * Addition of memblocksize - 1 to pointer
273                  * with wrap around logic to ensure that every
274                  * memory location is hit evenly
275                  */
276                 ec->memlocation = ec->memlocation + ec->memblocksize - 1;
277                 ec->memlocation = ec->memlocation % wrap;
278         }
279         return i;
280 }
281
282 /***************************************************************************
283  * Start of entropy processing logic
284  ***************************************************************************/
285
286 /**
287  * Stuck test by checking the:
288  *      1st derivation of the jitter measurement (time delta)
289  *      2nd derivation of the jitter measurement (delta of time deltas)
290  *      3rd derivation of the jitter measurement (delta of delta of time deltas)
291  *
292  * All values must always be non-zero.
293  *
294  * Input:
295  * @ec Reference to entropy collector
296  * @current_delta Jitter time delta
297  *
298  * @return
299  *      0 jitter measurement not stuck (good bit)
300  *      1 jitter measurement stuck (reject bit)
301  */
302 static int jent_stuck(struct rand_data *ec, u64 current_delta)
303 {
304         int64_t delta2 = ec->last_delta - current_delta;
305         int64_t delta3 = delta2 - ec->last_delta2;
306
307         ec->last_delta = current_delta;
308         ec->last_delta2 = delta2;
309
310         if (!current_delta || !delta2 || !delta3)
311                 return 1;
312
313         return 0;
314 }
315
316 /**
317  * This is the heart of the entropy generation: calculate time deltas and
318  * use the CPU jitter in the time deltas. The jitter is injected into the
319  * entropy pool.
320  *
321  * WARNING: ensure that ->prev_time is primed before using the output
322  *          of this function! This can be done by calling this function
323  *          and not using its result.
324  *
325  * Input:
326  * @entropy_collector Reference to entropy collector
327  *
328  * @return: result of stuck test
329  */
330 static int jent_measure_jitter(struct rand_data *ec)
331 {
332         u64 time = 0;
333         u64 current_delta = 0;
334         int stuck;
335
336         /* Invoke one noise source before time measurement to add variations */
337         jent_memaccess(ec, 0);
338
339         /*
340          * Get time stamp and calculate time delta to previous
341          * invocation to measure the timing variations
342          */
343         jent_get_nstime(&time);
344         current_delta = time - ec->prev_time;
345         ec->prev_time = time;
346
347         /* Now call the next noise sources which also injects the data */
348         jent_lfsr_time(ec, current_delta, 0);
349
350         /* Check whether we have a stuck measurement. */
351         stuck = jent_stuck(ec, current_delta);
352
353         /*
354          * Rotate the data buffer by a prime number (any odd number would
355          * do) to ensure that every bit position of the input time stamp
356          * has an even chance of being merged with a bit position in the
357          * entropy pool. We do not use one here as the adjacent bits in
358          * successive time deltas may have some form of dependency. The
359          * chosen value of 7 implies that the low 7 bits of the next
360          * time delta value is concatenated with the current time delta.
361          */
362         if (!stuck)
363                 ec->data = rol64(ec->data, 7);
364
365         return stuck;
366 }
367
368 /**
369  * Shuffle the pool a bit by mixing some value with a bijective function (XOR)
370  * into the pool.
371  *
372  * The function generates a mixer value that depends on the bits set and the
373  * location of the set bits in the random number generated by the entropy
374  * source. Therefore, based on the generated random number, this mixer value
375  * can have 2**64 different values. That mixer value is initialized with the
376  * first two SHA-1 constants. After obtaining the mixer value, it is XORed into
377  * the random number.
378  *
379  * The mixer value is not assumed to contain any entropy. But due to the XOR
380  * operation, it can also not destroy any entropy present in the entropy pool.
381  *
382  * Input:
383  * @entropy_collector Reference to entropy collector
384  */
385 static void jent_stir_pool(struct rand_data *entropy_collector)
386 {
387         /*
388          * to shut up GCC on 32 bit, we have to initialize the 64 variable
389          * with two 32 bit variables
390          */
391         union c {
392                 u64 u64;
393                 u32 u32[2];
394         };
395         /*
396          * This constant is derived from the first two 32 bit initialization
397          * vectors of SHA-1 as defined in FIPS 180-4 section 5.3.1
398          */
399         union c constant;
400         /*
401          * The start value of the mixer variable is derived from the third
402          * and fourth 32 bit initialization vector of SHA-1 as defined in
403          * FIPS 180-4 section 5.3.1
404          */
405         union c mixer;
406         unsigned int i = 0;
407
408         /* Ensure that the function implements a constant time operation. */
409         union c throw_away;
410
411         /*
412          * Store the SHA-1 constants in reverse order to make up the 64 bit
413          * value -- this applies to a little endian system, on a big endian
414          * system, it reverses as expected. But this really does not matter
415          * as we do not rely on the specific numbers. We just pick the SHA-1
416          * constants as they have a good mix of bit set and unset.
417          */
418         constant.u32[1] = 0x67452301;
419         constant.u32[0] = 0xefcdab89;
420         mixer.u32[1] = 0x98badcfe;
421         mixer.u32[0] = 0x10325476;
422
423         for (i = 0; i < DATA_SIZE_BITS; i++) {
424                 /*
425                  * get the i-th bit of the input random number and only XOR
426                  * the constant into the mixer value when that bit is set
427                  */
428                 if ((entropy_collector->data >> i) & 1)
429                         mixer.u64 ^= constant.u64;
430                 else
431                         throw_away.u64 ^= constant.u64;
432                 mixer.u64 = rol64(mixer.u64, 1);
433         }
434         entropy_collector->data ^= mixer.u64;
435 }
436
437 /**
438  * Generator of one 64 bit random number
439  * Function fills rand_data->data
440  *
441  * Input:
442  * @ec Reference to entropy collector
443  */
444 static void jent_gen_entropy(struct rand_data *ec)
445 {
446         unsigned int k = 0;
447
448         /* priming of the ->prev_time value */
449         jent_measure_jitter(ec);
450
451         while (1) {
452                 u64 prev_data = ec->data;
453
454                 /* If a stuck measurement is received, repeat measurement */
455                 if (jent_measure_jitter(ec))
456                         continue;
457
458                 /* statistics testing only */
459                 jent_bit_count(ec, prev_data);
460
461                 /*
462                  * We multiply the loop value with ->osr to obtain the
463                  * oversampling rate requested by the caller
464                  */
465                 if (++k >= (DATA_SIZE_BITS * ec->osr))
466                         break;
467         }
468         if (ec->stir)
469                 jent_stir_pool(ec);
470 }
471
472 /**
473  * Entry function: Obtain entropy for the caller.
474  *
475  * This function invokes the entropy gathering logic as often to generate
476  * as many bytes as requested by the caller. The entropy gathering logic
477  * creates 64 bit per invocation.
478  *
479  * This function truncates the last 64 bit entropy value output to the exact
480  * size specified by the caller.
481  *
482  * Input:
483  * @ec Reference to entropy collector
484  * @data pointer to buffer for storing random data -- buffer must already
485  *        exist
486  * @len size of the buffer, specifying also the requested number of random
487  *       in bytes
488  *
489  * @return number of bytes returned when request is fulfilled or an error
490  *
491  * The following error codes can occur:
492  *      -1      entropy_collector is NULL
493  */
494 static int jent_read_entropy(struct rand_data *ec, char *data, size_t len)
495 {
496         char *p = data;
497         size_t orig_len = len;
498
499         if (NULL == ec)
500                 return -1;
501
502         while (0 < len) {
503                 size_t tocopy;
504                 jent_gen_entropy(ec);
505                 if ((DATA_SIZE_BITS / 8) < len)
506                         tocopy = (DATA_SIZE_BITS / 8);
507                 else
508                         tocopy = len;
509                 memcpy(p, &ec->data, tocopy);
510
511                 len -= tocopy;
512                 p += tocopy;
513         }
514
515         /*
516          * To be on the safe side, we generate one more round of entropy
517          * which we do not give out to the caller. That round shall ensure
518          * that in case the calling application crashes, memory dumps, pages
519          * out, or due to the CPU Jitter RNG lingering in memory for long
520          * time without being moved and an attacker cracks the application,
521          * all he reads in the entropy pool is a value that is NEVER EVER
522          * being used for anything. Thus, he does NOT see the previous value
523          * that was returned to the caller for cryptographic purposes.
524          */
525         /*
526          * If we use secured memory, do not use that precaution as the secure
527          * memory protects the entropy pool. Moreover, note that using this
528          * call reduces the speed of the RNG by up to half
529          */
530 #ifndef CONFIG_CRYPTO_CPU_JITTERENTROPY_SECURE_MEMORY
531         jent_gen_entropy(ec);
532 #endif
533         return orig_len;
534 }
535 #if defined(__KERNEL__) && !defined(MODULE)
536 EXPORT_SYMBOL(jent_read_entropy);
537 #endif
538
539 /***************************************************************************
540  * Initialization logic
541  ***************************************************************************/
542
543 static struct rand_data *jent_entropy_collector_alloc(unsigned int osr,
544                                                         unsigned int flags)
545 {
546         struct rand_data *entropy_collector;
547
548         entropy_collector = jent_zalloc(sizeof(struct rand_data));
549         if (NULL == entropy_collector)
550                 return NULL;
551
552         if (!(flags & JENT_DISABLE_MEMORY_ACCESS)) {
553                 /* Allocate memory for adding variations based on memory
554                  * access
555                  */
556                 entropy_collector->mem =
557                         (unsigned char *)jent_zalloc(JENT_MEMORY_SIZE);
558                 if (NULL == entropy_collector->mem) {
559                         jent_zfree(entropy_collector, sizeof(struct rand_data));
560                         return NULL;
561                 }
562                 entropy_collector->memblocksize = JENT_MEMORY_BLOCKSIZE;
563                 entropy_collector->memblocks = JENT_MEMORY_BLOCKS;
564                 entropy_collector->memaccessloops = JENT_MEMORY_ACCESSLOOPS;
565         }
566
567         /* verify and set the oversampling rate */
568         if (0 == osr)
569                 osr = 1; /* minimum sampling rate is 1 */
570         entropy_collector->osr = osr;
571
572         entropy_collector->stir = 1;
573         if (flags & JENT_DISABLE_STIR)
574                 entropy_collector->stir = 0;
575         if (flags & JENT_DISABLE_UNBIAS)
576                 entropy_collector->disable_unbias = 1;
577
578         /* fill the data pad with non-zero values */
579         jent_gen_entropy(entropy_collector);
580
581         return entropy_collector;
582 }
583 #if defined(__KERNEL__) && !defined(MODULE)
584 EXPORT_SYMBOL(jent_entropy_collector_alloc);
585 #endif
586
587 static void jent_entropy_collector_free(struct rand_data *entropy_collector)
588 {
589         if (NULL != entropy_collector) {
590                 if (NULL != entropy_collector->mem) {
591                         jent_zfree(entropy_collector->mem, JENT_MEMORY_SIZE);
592                         entropy_collector->mem = NULL;
593                 }
594                 jent_zfree(entropy_collector, sizeof(struct rand_data));
595         }
596 }
597 #if defined(__KERNEL__) && !defined(MODULE)
598 EXPORT_SYMBOL(jent_entropy_collector_free);
599 #endif
600
601 static int jent_entropy_init(void)
602 {
603         int i;
604         u64 delta_sum = 0;
605         u64 old_delta = 0;
606         int time_backwards = 0;
607         int count_var = 0;
608         int count_mod = 0;
609         struct rand_data ec;
610
611         /* We could perform statistical tests here, but the problem is
612          * that we only have a few loop counts to do testing. These
613          * loop counts may show some slight skew and we produce
614          * false positives.
615          *
616          * Moreover, only old systems show potentially problematic
617          * jitter entropy that could potentially be caught here. But
618          * the RNG is intended for hardware that is available or widely
619          * used, but not old systems that are long out of favor. Thus,
620          * no statistical tests.
621          */
622
623         /*
624          * We could add a check for system capabilities such as clock_getres or
625          * check for CONFIG_X86_TSC, but it does not make much sense as the
626          * following sanity checks verify that we have a high-resolution
627          * timer.
628          */
629         /*
630          * TESTLOOPCOUNT needs some loops to identify edge systems. 100 is
631          * definitely too little.
632          */
633 #define TESTLOOPCOUNT 300
634 #define CLEARCACHE 100
635         for (i = 0; (TESTLOOPCOUNT + CLEARCACHE) > i; i++) {
636                 u64 time = 0;
637                 u64 time2 = 0;
638                 u64 delta = 0;
639                 unsigned int lowdelta = 0;
640
641                 jent_get_nstime(&time);
642                 jent_lfsr_time(&ec, time, 1<<MIN_FOLD_LOOP_BIT);
643                 jent_get_nstime(&time2);
644
645                 /* test whether timer works */
646                 if (!time || !time2)
647                         return ENOTIME;
648                 delta = time2 - time;
649                 /*
650                  * test whether timer is fine grained enough to provide
651                  * delta even when called shortly after each other -- this
652                  * implies that we also have a high resolution timer
653                  */
654                 if (!delta)
655                         return ECOARSETIME;
656
657                 /*
658                  * up to here we did not modify any variable that will be
659                  * evaluated later, but we already performed some work. Thus we
660                  * already have had an impact on the caches, branch prediction,
661                  * etc. with the goal to clear it to get the worst case
662                  * measurements.
663                  */
664                 if (CLEARCACHE > i)
665                         continue;
666
667                 /* test whether we have an increasing timer */
668                 if (!(time2 > time))
669                         time_backwards++;
670
671                 /* use 32 bit value to ensure compilation on 32 bit arches */
672                 lowdelta = time2 - time;
673                 if (!(lowdelta % 100))
674                         count_mod++;
675
676                 /*
677                  * ensure that we have a varying delta timer which is necessary
678                  * for the calculation of entropy -- perform this check
679                  * only after the first loop is executed as we need to prime
680                  * the old_data value
681                  */
682                 if (i) {
683                         if (delta != old_delta)
684                                 count_var++;
685                         if (delta > old_delta)
686                                 delta_sum += (delta - old_delta);
687                         else
688                                 delta_sum += (old_delta - delta);
689                 }
690                 old_delta = delta;
691         }
692
693         /*
694          * we allow up to three times the time running backwards.
695          * CLOCK_REALTIME is affected by adjtime and NTP operations. Thus,
696          * if such an operation just happens to interfere with our test, it
697          * should not fail. The value of 3 should cover the NTP case being
698          * performed during our test run.
699          */
700         if (3 < time_backwards)
701                 return ENOMONOTONIC;
702         /* Error if the time variances are always identical */
703         if (!delta_sum)
704                 return EVARVAR;
705
706         /*
707          * Variations of deltas of time must on average be larger
708          * than 1 to ensure the entropy estimation
709          * implied with 1 is preserved
710          */
711         if ((delta_sum) <= 1)
712                 return EMINVARVAR;
713
714         /*
715          * Ensure that we have variations in the time stamp below 10 for at least
716          * 10% of all checks -- on some platforms, the counter increments in
717          * multiples of 100, but not always
718          */
719         if ((TESTLOOPCOUNT/10 * 9) < count_mod)
720                 return ECOARSETIME;
721
722         return 0;
723 }
724 #if defined(__KERNEL__) && !defined(MODULE)
725 EXPORT_SYMBOL(jent_entropy_init);
726 #endif
727
728 /***************************************************************************
729  * Statistical test logic not compiled for regular operation
730  ***************************************************************************/
731
732 #ifdef CONFIG_CRYPTO_CPU_JITTERENTROPY_STAT
733 /*
734  * Statistical tests: invoke the entropy collector and sample time results
735  * for it, the random data is never returned - every call to this function
736  * generates one random number.
737  * This function is only meant for statistical analysis purposes and not
738  * for general use
739  */
740 void jent_gen_entropy_stat(struct rand_data *entropy_collector,
741                            struct entropy_stat *stat)
742 {
743         /* caller is allowed to set the entropy collection loop to a fixed
744          * value -- we still call shuffle for the time measurements */
745         jent_init_statistic(entropy_collector);
746         jent_gen_entropy(entropy_collector);
747         jent_calc_statistic(entropy_collector, stat, DATA_SIZE_BITS);
748 }
749
750 /*
751  * Statistical test: obtain the distribution of the LFSR state value from
752  * jent_lfsr_time
753  */
754 void jent_lfsr_time_stat(struct rand_data *ec, u64 *fold, u64 *loop_cnt)
755 {
756         u64 time = 0;
757         u64 time2 = 0;
758         jent_get_nstime(&time);
759         jent_memaccess(ec, 0);
760         /* implement the priming logic */
761         jent_lfsr_time(ec, time, 0);
762         jent_get_nstime(&time2);
763         time2 = time2 - time;
764         *loop_cnt = jent_lfsr_time(ec, time2, 0);
765         *fold = ec->data;
766 }
767
768 /*
769  * Statistical test: return the time duration for the folding operation. If min
770  * is set, perform the given number of foldings. Otherwise, allow the
771  * loop count shuffling to define the number of foldings.
772  */
773 u64 jent_lfsr_var_stat(struct rand_data *ec, unsigned int min)
774 {
775         u64 time = 0;
776         u64 time2 = 0;
777
778         jent_get_nstime(&time);
779         jent_memaccess(ec, min);
780         jent_lfsr_time(ec, time, min);
781         jent_get_nstime(&time2);
782         return ((time2 - time));
783 }
784 #endif /* CONFIG_CRYPTO_CPU_JITTERENTROPY_STAT */