diff options
author | Mattias Andrée <maandree@kth.se> | 2022-07-07 15:26:10 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2022-07-07 15:26:10 +0200 |
commit | 17468588ff3a907f16dca4155b0a15bd8e82109a (patch) | |
tree | 763cbfc90cf0513aa4964cace43dde3be1230a75 /unmarshal.c | |
parent | Remove documentation from .c files that already exist in .h files (diff) | |
download | libsha2-17468588ff3a907f16dca4155b0a15bd8e82109a.tar.gz libsha2-17468588ff3a907f16dca4155b0a15bd8e82109a.tar.bz2 libsha2-17468588ff3a907f16dca4155b0a15bd8e82109a.tar.xz |
Don't marshal w
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'unmarshal.c')
-rw-r--r-- | unmarshal.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/unmarshal.c b/unmarshal.c index c4b2837..8c5780d 100644 --- a/unmarshal.c +++ b/unmarshal.c @@ -7,13 +7,15 @@ libsha2_unmarshal(struct libsha2_state *restrict state, const void *restrict buf { const char *restrict buf = buf_; size_t off = 0; + int version; if (bufsize < sizeof(int) + sizeof(enum libsha2_algorithm) + sizeof(size_t)) { errno = EINVAL; return 0; } - if (*(const int *)buf) { /* version */ + version = *(const int *)buf; + if (version < 0 || version > 1) { /* version */ errno = EINVAL; return 0; } @@ -33,8 +35,9 @@ libsha2_unmarshal(struct libsha2_state *restrict state, const void *restrict buf } memcpy(state->k.b32, &buf[off], sizeof(state->k.b32)); off += sizeof(state->k.b32); - memcpy(state->w.b32, &buf[off], sizeof(state->w.b32)); - off += sizeof(state->w.b32); + memset(state->w.b32, 0, sizeof(state->w.b32)); + if (version == 0) + off += sizeof(state->w.b32); memcpy(state->h.b32, &buf[off], sizeof(state->h.b32)); off += sizeof(state->h.b32); break; @@ -49,8 +52,9 @@ libsha2_unmarshal(struct libsha2_state *restrict state, const void *restrict buf } memcpy(state->k.b64, &buf[off], sizeof(state->k.b64)); off += sizeof(state->k.b64); - memcpy(state->w.b64, &buf[off], sizeof(state->w.b64)); - off += sizeof(state->w.b64); + memset(state->w.b64, 0, sizeof(state->w.b64)); + if (version == 0) + off += sizeof(state->w.b64); memcpy(state->h.b64, &buf[off], sizeof(state->h.b64)); off += sizeof(state->h.b64); break; |