Skip to content
Snippets Groups Projects
Select Git revision
  • 5a7987253ef0909d94e176cd97e511013de0fe19
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

rtmutex.c

Blame
  • random.c 67.59 KiB
    /*
     * random.c -- A strong random number generator
     *
     * Copyright (C) 2017 Jason A. Donenfeld <Jason@zx2c4.com>. All
     * Rights Reserved.
     *
     * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
     *
     * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999.  All
     * rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, and the entire permission notice in its entirety,
     *    including the disclaimer of warranties.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     * 3. The name of the author may not be used to endorse or promote
     *    products derived from this software without specific prior
     *    written permission.
     *
     * ALTERNATIVELY, this product may be distributed under the terms of
     * the GNU General Public License, in which case the provisions of the GPL are
     * required INSTEAD OF the above restrictions.  (This clause is
     * necessary due to a potential bad interaction between the GPL and
     * the restrictions contained in a BSD-style copyright.)
     *
     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
     * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
     * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
     * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
     * DAMAGE.
     */
    
    /*
     * (now, with legal B.S. out of the way.....)
     *
     * This routine gathers environmental noise from device drivers, etc.,
     * and returns good random numbers, suitable for cryptographic use.
     * Besides the obvious cryptographic uses, these numbers are also good
     * for seeding TCP sequence numbers, and other places where it is
     * desirable to have numbers which are not only random, but hard to
     * predict by an attacker.
     *
     * Theory of operation
     * ===================
     *
     * Computers are very predictable devices.  Hence it is extremely hard
     * to produce truly random numbers on a computer --- as opposed to
     * pseudo-random numbers, which can easily generated by using a
     * algorithm.  Unfortunately, it is very easy for attackers to guess
     * the sequence of pseudo-random number generators, and for some
     * applications this is not acceptable.  So instead, we must try to
     * gather "environmental noise" from the computer's environment, which
     * must be hard for outside attackers to observe, and use that to
     * generate random numbers.  In a Unix environment, this is best done
     * from inside the kernel.
     *
     * Sources of randomness from the environment include inter-keyboard
     * timings, inter-interrupt timings from some interrupts, and other