aboutsummaryrefslogtreecommitdiffstats
path: root/libhashsum_init_shake128_hasher.3
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2024-08-31 07:41:27 +0200
committerMattias Andrée <maandree@kth.se>2024-08-31 07:41:27 +0200
commitd1acc40f9361cf5d1f0e92a0a2569b518b29b1cf (patch)
treea0538a97e06b8783f07eeed5cc3d686e3a8a686f /libhashsum_init_shake128_hasher.3
parentAdd more tests + m fixes (diff)
downloadlibhashsum-d1acc40f9361cf5d1f0e92a0a2569b518b29b1cf.tar.gz
libhashsum-d1acc40f9361cf5d1f0e92a0a2569b518b29b1cf.tar.bz2
libhashsum-d1acc40f9361cf5d1f0e92a0a2569b518b29b1cf.tar.xz
Add support for extended hash + add support for output hash to custom buffer when supported
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libhashsum_init_shake128_hasher.3')
-rw-r--r--libhashsum_init_shake128_hasher.361
1 files changed, 58 insertions, 3 deletions
diff --git a/libhashsum_init_shake128_hasher.3 b/libhashsum_init_shake128_hasher.3
index e69fabe..f852491 100644
--- a/libhashsum_init_shake128_hasher.3
+++ b/libhashsum_init_shake128_hasher.3
@@ -16,6 +16,7 @@ libhashsum_init_shake128_hasher - initialise state for SHAKE128 hashing
size_t (*\fIprocess\fP)(struct libhashsum_hasher *\fPthis\fP, const void *\fPdata\fP, size_t \fPbytes\fP);
int (*\fIfinalise_const\fP)(struct libhashsum_hasher *\fPthis\fP, const void *\fPdata\fP, size_t \fPbytes\fP, unsigned \fPextra_bits\fP);
int (*\fIfinalise\fP)(struct libhashsum_hasher *\fPthis\fP, void *\fPdata\fP, size_t \fPbytes\fP, unsigned \fPextra_bits\fP, size_t \fPsize\fP);
+ void (*\fIstretch\fP)(struct libhashsum_hasher *\fPthis\fP, int \fPskip\fP, void *\fPbuffer\fP);
void (*\fIdestroy\fP)(struct libhashsum_hasher *\fPthis\fP);
union libhashsum_state { /* definition omitted */ } \fIstate\fP;
};
@@ -106,7 +107,7 @@ no greater than
.I hasher->finalise_const
will be set to a pointer to the function to call
once the entire text being hashed has been loaded,
-and to get the hash of the text. It's parameter
+and to get the hash of the text. Its parameter
.I this
shall be set to
.IR hasher .
@@ -132,8 +133,16 @@ to a pointer to a buffer in
containing the binary hash of the processed data.
Otherwise, the function will return -1, and set
.I errno
-to indicate the error. The function will failure
-if:
+to indicate the error. However, if the user has
+already set
+.I hasher->hash_output
+to a
+.RI non- NULL
+pointer, the function will output the binary hash
+to that pointer instead without redirecting
+.I hasher->hash_output
+(the application must make sure this buffer is
+sufficiently large). The function will failure if:
.RS
.TP
.B EINVAL
@@ -165,6 +174,52 @@ shall be set to the size of the buffer
is otherwise identical to
.IR *hasher->finalise_const .
.PP
+.I hasher->stretch
+will be set to
+.IR NULL ,
+however upon successful completion of
+.I *hasher->finalise
+or
+.IR *hasher->finalise_const ,
+.I hasher->stretch
+will be set to point to a function that can be
+used to extend the hash by
+.I hasher->hash_size
+bytes, and can be called repeated without limitation.
+The hash extent will be written to a buffer in
+.I hasher->state
+(which
+.I *hasher->finalize
+and
+.I *hasher->finalize_const
+also write the hash to), and
+.I hasher->hash_output
+will be set to point to this buffer.
+.IR *hasher->stretch 's
+parameter
+.I this
+shall be
+.IR hasher .
+Its parameter
+.I skip
+can be set to non-zero if the hash extent should
+be discarded
+.RI ( hasher->hash_output
+will not be set in this case).
+Its parameter
+.I buffer
+shall be
+.I NULL
+for the above described behaviour, or an sufficiently
+large buffer the function shall output the hash extent
+to. If
+.I buffer
+is
+.RI non- NULL ,
+.I hasher->hash_output
+will be set to
+.IR NULL ).
+.PP
.I hasher->destroy
will be set to a pointer to a function to to
call, with