1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include "pss-mgf1.h"
#include <assert.h>
#include <string.h>
#include "nettle-internal.h"
#include "macros.h"
void
pss_mgf1(const void *seed, const struct nettle_hash *hash,
size_t length, uint8_t *mask)
{
TMP_DECL(h, uint8_t, NETTLE_MAX_HASH_DIGEST_SIZE);
TMP_DECL_ALIGN(state, NETTLE_MAX_HASH_CONTEXT_SIZE);
size_t i;
uint8_t c[4];
TMP_ALLOC(h, hash->digest_size);
TMP_ALLOC_ALIGN(state, hash->context_size);
for (i = 0;;
i++, mask += hash->digest_size, length -= hash->digest_size)
{
WRITE_UINT32(c, i);
memcpy(state, seed, hash->context_size);
hash->update(state, 4, c);
if (length <= hash->digest_size)
{
hash->digest(state, length, mask);
return;
}
hash->digest(state, hash->digest_size, mask);
}
}
|