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