NetBSD/sys/dev/pci/n8/include_public/n8_pub_rng.h
darran 0e11c6bfd5 NetOctave NSP2000 driver, ported from FreeBSD and integrated with
opencrypto by CoyotePoint Systems.  The FreeBSD driver source was recently
made available by NBMK Encryption Technologies.

The port includes some currently unused code which implements kernel and
user space interfaces for the driver in FreeBSD.  These are left in at this
time to facilitate the port of these interface to NetBSD if they are of
interest.
2008-10-30 12:02:14 +00:00

189 lines
7.9 KiB
C

/*-
* Copyright (C) 2001-2003 by NBMK Encryption Technologies.
* All rights reserved.
*
* NBMK Encryption Technologies provides no support of any kind for
* this software. Questions or concerns about it may be addressed to
* the members of the relevant open-source community at
* <tech-crypto@netbsd.org>.
*
* 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, this list of conditions and the following disclaimer.
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*****************************************************************************
* @(#) n8_pub_rng.h 1.5@(#)
*****************************************************************************/
/*****************************************************************************/
/** @file n8_pub_rng
* @brief Public declarations for random number operations.
*
* Public header file for random number operations.
*
*****************************************************************************/
/*****************************************************************************
* Revision history:
* 05/15/03 brr Add N8_RNG_MAX_REQUEST.
* 10/12/01 dkm Original version. Adapted from n8_rncommon.h.
****************************************************************************/
#ifndef N8_PUB_RNG_H
#define N8_PUB_RNG_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "n8_pub_common.h"
/* Maximum number of random bytes permitted in a single request. */
#define N8_RNG_MAX_REQUEST (8 * 1024)
/*
* Seed source values.
* These values will be modified to the expected values set by the hardware
* spec in N8_SetRNGParameters().
*/
typedef enum
{
N8_RNG_SEED_INTERNAL,
N8_RNG_SEED_EXTERNAL,
N8_RNG_SEED_HOST,
} N8_RNG_Seed_t;
/*****************************************************************************
* Structures/type definitions
*****************************************************************************/
typedef struct
{
/* The following are entities in the control status register. They */
/* should always be set. */
/* Time of day counter enable. Enables time of day counter to */
/* operate. This should be set to N8_TRUE. */
N8_Boolean_t todEnable;
/* Enables use of external clock signal for an external seed source. */
/* Should be set N8_TRUE only if/when the exteranl seed source is */
/* selected. */
N8_Boolean_t use_external_clock;
/* Data source of seed values. */
uint32_t seed_source;
/* Iteratation count is the number of random 64-bit values generated */
/* from each key. The value may range from 1-256, and this value */
/* must be in that range. Note that in the hardware the value */
/* stored in the control register is actually 1 less than the value */
/* specified here. */
unsigned short iteration_count;
/* Pre-scale value for TOD. Should be set to the clock frequency */
/* of the chip. */
uint32_t TOD_prescale;
/* Tells whether or not to use the initial_TOD_seconds field below. */
/* will be set to N8_FALSE on a get of this value. */
N8_Boolean_t set_TOD_counter;
/* DES keys for the X9.17 algorithm. Will be forced to valid parity */
/* These should be set to random values. */
uint8_t key1[N8_DES_KEY_LENGTH];
uint8_t key2[N8_DES_KEY_LENGTH];
/* The following entities may be ignored depending on the values */
/* set above. */
/* Host seed for X9.17 algorithm */
/* If seed_source is set to host seed, then the user must specify */
/* each seed value used to generate random values. After each */
/* iteration_count number of 64-bit random values have been */
/* generated, a new hostSeed value must be supplied in order to */
/* continue generating more values. If seed_source is not set to */
/* host seed then this value should not be set and is ignored. */
uint8_t hostSeed[N8_DES_KEY_LENGTH];
/* Value to initialize the Time Of Day value (seconds). */
/* Ignored if set_TOD_counter is N8_FALSE. */
uint32_t initial_TOD_seconds;
/* The external clock scaler is the number of systems clock cycles */
/* cycles in each external clock cycle. See the NSP 2000 Data */
/* Sheet for details. This value is only used when seed source is */
/* set to external source, and then external clock should also be */
/* set to N8_TRUE. Only the lower 20 bits of this are valid. */
uint32_t externalClockScaler;
/* The following entities are ignored on a set, and are valid on a */
/* get. */
/* Host seed valid. A N8_TRUE indication means that the host seed */
/* has not been consumed. A N8_FALSE indication means that the host */
/* seed has been exhausted. The user should check that this is */
/* N8_FALSE before writing a host seed to insure that a previous host */
/* seed has won't be overwritten. If this value is N8_FALSE the RNG */
/* will eventually stop providing random numbers until a new host */
/* seed is provided. */
N8_Boolean_t hostSeedValid;
/* The RNG core sets this bit (N8_TRUE) when a seed duplication error */
/* is detected. When this bit is set, and set_diagnostic_mode is */
/* not set (N8_FALSE), the RNG core will be disabled (halted.) */
N8_Boolean_t seedErrorFlag;
/* The RNG core sets this bit (N8_TRUE) when an X9.17 duplication */
/* error is detected. When this bit is set, and set_diagnostic_mode */
/* is not set (N8_FALSE), the RNG core will be disabled (halted.) */
N8_Boolean_t x9_17_errorFlag;
/* This returns the value of the last valid seed produced by the */
/* seed generator. */
uint32_t seedValue_ms;
uint32_t seedValue_ls;
} N8_RNG_Parameter_t;
/*****************************************************************************
* Function prototypes
*****************************************************************************/
/*
* Set Random Number Generator parameters
*/
N8_Status_t N8_SetRNGParameters(N8_RNG_Parameter_t *p);
N8_Status_t N8_GetRNGParameters(N8_RNG_Parameter_t *p);
N8_Status_t N8_GetRandomBytes(int num_bytes, char *buf, N8_Event_t *event_p);
#ifdef __cplusplus
}
#endif
#endif