Tim Ruehsen <[email protected]> writes:

> I meanwhile found the nettle docs on the web 
> (http://www.lysator.liu.se/~nisse/nettle/nettle.html#MD5):

I'm happy you found the documentation. The manual should also be
included in debian's nettle-dev package, in info, html and pdf formats.

> ###########
> Function: void md5_digest (struct md5_ctx *ctx, size_t length, uint8_t 
> *digest)
>
> Performs final processing and extracts the message digest, writing it to 
> digest. length may be smaller than MD5_DIGEST_SIZE, in which case only the 
> first length octets of the digest are written. 
> ###########

Sorry you find this unclear. Can you suggest a concise improvement?

> unsigned char digest[128]; // *should* be large enough, if not we get an error
> char *algo = <user input>
> if ((len=hash(algo,text,textlen,digest,digestsize)) < 0) {
>   // error like 'unknown algo', 'digest size too small', ... 
> } else {
>   // got <len> bytes in digest, e.g. print as hex values
> }

For simplicity, let's assume that algoriths are represented by struct
nettle_hash, rather than an ascii name. Then a hash function
in that style should be implemented like

  int hash (const struct nettle_hash *hash, 
               const uint8_t *msg, size_t length, 
               uint8_t *digest, size_t digest_size)
  {
    void *ctx;
    if (digest_size < hash->digest_size)
      /* Too small */
      return -1;

    ctx = alloca(hash->context_size);
    hash->init(ctx);
    hash->update(ctx, length, msg);
    hash->digest(ctx, hash->digest_size, digest);
    return hash->digest_size;
  }

I don't think that passing a valid digest size to hash->digest here
should be a big deal.

Regards,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.
_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to