view libtomcrypt/tests/no_prng.c @ 1631:292f79307600

fix some gcc warnings (#73) * tweak string size fix gcc8 warnings ``` svr-agentfwd.c: In function 'bindagent': svr-agentfwd.c:254:53: warning: '%s' directive output may be truncated writing up to 107 bytes into a region of size between 0 and 107 [-Wformat-truncation=] snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/%s", path, sockfile); ^~ ~~~~~~~~ svr-agentfwd.c:254:2: note: 'snprintf' output between 2 and 216 bytes into a destination of size 108 snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/%s", path, sockfile); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` * cleanup signed/unsigned comparison fix gcc8 warnings ``` scp.c: In function 'do_local_cmd': scp.c:132:17: warning: comparison of integer expressions of different signedness: 'u_int' {aka 'unsigned int'} and 'int' [-Wsign-compare] for (i = 0; i < a->num; i++) ^ scpmisc.c: In function 'addargs': scpmisc.c:161:25: warning: comparison of integer expressions of different signedness: 'int' and 'u_int' {aka 'unsigned int'} [-Wsign-compare] } else if (args->num+2 >= nalloc) ^~ scpmisc.c: In function 'replacearg': scpmisc.c:183:12: warning: comparison of integer expressions of different signedness: 'u_int' {aka 'unsigned int'} and 'int' [-Wsign-compare] if (which >= args->num) ^~ scpmisc.c: In function 'freeargs': scpmisc.c:196:17: warning: comparison of integer expressions of different signedness: 'u_int' {aka 'unsigned int'} and 'int' [-Wsign-compare] for (i = 0; i < args->num; i++) ^ ``` see https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/misc.h.diff?r1=1.16&r2=1.17
author François Perrad <francois.perrad@gadz.org>
date Wed, 20 Mar 2019 15:25:15 +0100
parents 6dba84798cd5
children
line wrap: on
line source

/* LibTomCrypt, modular cryptographic library -- Tom St Denis
 *
 * LibTomCrypt is a library that provides various cryptographic
 * algorithms in a highly modular and flexible manner.
 *
 * The library is free for all purposes without any express
 * guarantee it works.
 */
#include "tomcrypt.h"

/**
  @file no_prng.c
  NO PRNG, Steffen Jaeckel
*/

#ifdef LTC_PKCS_1

typedef struct
{
   struct ltc_prng_descriptor desc;
   char name[64];
   unsigned char entropy[1024];
   unsigned long len;
   unsigned long offset;
} no_prng_desc_t;

/**
  Start the PRNG
  @param prng     [out] The PRNG state to initialize
  @return CRYPT_OK if successful
*/
int no_prng_start(prng_state *prng)
{
   no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
   LTC_ARGCHK(no_prng != NULL);
   LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
   no_prng->len = 0;
   no_prng->offset = 0;

   return CRYPT_OK;
}

/**
  Add entropy to the PRNG state
  @param in       The data to add
  @param inlen    Length of the data to add
  @param prng     PRNG state to update
  @return CRYPT_OK if successful
*/
int no_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng)
{
   no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
   LTC_ARGCHK(no_prng != NULL);
   LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
   LTC_ARGCHK(in != NULL);
   LTC_ARGCHK(inlen <= sizeof(no_prng->entropy));

   no_prng->len = MIN(inlen, sizeof(no_prng->entropy));
   memcpy(no_prng->entropy, in, no_prng->len);
   no_prng->offset = 0;

   return CRYPT_OK;

}

/**
  Make the PRNG ready to read from
  @param prng   The PRNG to make active
  @return CRYPT_OK if successful
*/
int no_prng_ready(prng_state *prng)
{
    LTC_ARGCHK(prng != NULL);

    return CRYPT_OK;
}

/**
  Read from the PRNG
  @param out      Destination
  @param outlen   Length of output
  @param prng     The active PRNG to read from
  @return Number of octets read
*/
unsigned long no_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng)
{
   no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
   LTC_ARGCHK(no_prng != NULL);
   LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
   LTC_ARGCHK(out != NULL);

   outlen = MIN(outlen, no_prng->len - no_prng->offset);
   memcpy(out, &no_prng->entropy[no_prng->offset], outlen);
   no_prng->offset += outlen;

   return outlen;
}

/**
  Terminate the PRNG
  @param prng   The PRNG to terminate
  @return CRYPT_OK if successful
*/
int no_prng_done(prng_state *prng)
{
   LTC_UNUSED_PARAM(prng);
   return CRYPT_OK;
}

/**
  Export the PRNG state
  @param out       [out] Destination
  @param outlen    [in/out] Max size and resulting size of the state
  @param prng      The PRNG to export
  @return CRYPT_OK if successful
*/
int no_prng_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
{
   LTC_UNUSED_PARAM(out);
   LTC_UNUSED_PARAM(outlen);
   LTC_UNUSED_PARAM(prng);
   return CRYPT_OK;
}

/**
  Import a PRNG state
  @param in       The PRNG state
  @param inlen    Size of the state
  @param prng     The PRNG to import
  @return CRYPT_OK if successful
*/
int no_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng)
{
   LTC_UNUSED_PARAM(in);
   LTC_UNUSED_PARAM(inlen);
   LTC_UNUSED_PARAM(prng);
   return CRYPT_OK;
}

/**
  PRNG self-test
  @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
*/
int no_prng_test(void)
{
   return CRYPT_OK;
}

static const struct ltc_prng_descriptor no_prng_desc =
{
    NULL, 0,
    &no_prng_start,
    &no_prng_add_entropy,
    &no_prng_ready,
    &no_prng_read,
    &no_prng_done,
    &no_prng_export,
    &no_prng_import,
    &no_prng_test
};

struct ltc_prng_descriptor* no_prng_desc_get(void)
{
   no_prng_desc_t* no_prng = XMALLOC(sizeof(*no_prng));
   LTC_ARGCHK(no_prng != NULL);
   XMEMCPY(&no_prng->desc, &no_prng_desc, sizeof(no_prng_desc));
   LTC_ARGCHK(snprintf(no_prng->name, sizeof(no_prng->name), "no_prng@%p", no_prng) < (int)sizeof(no_prng->name));
   no_prng->desc.name = no_prng->name;
   return &no_prng->desc;
}

void no_prng_desc_free(struct ltc_prng_descriptor* prng)
{
   no_prng_desc_t *no_prng = (no_prng_desc_t*) prng;
   LTC_ARGCHK(no_prng != NULL);
   LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name));
   XFREE(no_prng);
}

#endif


/* ref:         $Format:%D$ */
/* git commit:  $Format:%H$ */
/* commit time: $Format:%ai$ */