diff options
Diffstat (limited to 'src/libstdcrypto/blake2s_update.c')
-rw-r--r-- | src/libstdcrypto/blake2s_update.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libstdcrypto/blake2s_update.c b/src/libstdcrypto/blake2s_update.c new file mode 100644 index 0000000..bf0639b --- /dev/null +++ b/src/libstdcrypto/blake2s_update.c @@ -0,0 +1,27 @@ + /* ISC license. */ + +#include <string.h> + +#include <skalibs/blake2s.h> +#include "blake2s-internal.h" + +void blake2s_update (blake2s_ctx *ctx, char const *s, size_t len) +{ + size_t w = 64 - ctx->buflen ; + if (!len) return ; + if (len > w) + { + memcpy(ctx->buf + ctx->buflen, s, w) ; + blake2s_transform(ctx, ctx->buf, 1, 64) ; + ctx->buflen = 0 ; + s += w ; len -= w ; + } + if (len > 64) + { + size_t n = (len+63)/64 - 1 ; + blake2s_transform(ctx, s, n, 64) ; + n <<= 6 ; s += n ; len -= n ; + } + memcpy(ctx->buf + ctx->buflen, s, len) ; + ctx->buflen += len ; +} |