tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Patch: cprng_fast performance - please review.



campbell+netbsd-tech-kern@ wrote:

> > +void
> > +hc128_init(hc128_state_t *state, const uint8_t *key, const uint8_t *iv)
> > +{
> > +   unsigned int i;
> > +   uint32_t w[1280], *p = state->p, *q = state->q;
> 
> 5 KB on the stack is a lot!  Granted, this is a leaf routine which in
> our case will be called only in a softint handler, but still.

Note the caller of this hc128_init() is:

> > +static void
> > +cprng_fast_randrekey(cprng_fast_ctx_t *ctx)
> > +{
> > +   uint8_t key[16], iv[16];
> > +   hc128_state_t tempstate;
> > +   int s;
> > +
> > +   int have_initial = rnd_initial_entropy;
> > +
> > +   cprng_strong(kern_cprng, key, sizeof(key), FASYNC);
> > +   cprng_strong(kern_cprng, iv, sizeof(iv), FASYNC);
> > +   /* Rekey the hc128 state - expensive, don't do this at splhigh.  */
> > +   hc128_init(&ctx->hc128, key, iv);

The "hc128_state_t" is declared as:

> > +typedef struct
> > +{
> > +   uint32_t p[512];
> > +   uint32_t q[512];
> > +   uint16_t i;
> > +} hc128_state_t;

so it already consumes >4KB stack.
I'm afraid "9KB stack on rekeying" is fatal on most ports.

I wonder if we should also consider "speed vs memory"
especially for embedded users.

---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index