aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/crypto/iv/iv_gen_seq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/crypto/iv/iv_gen_seq.c')
-rw-r--r--src/libstrongswan/crypto/iv/iv_gen_seq.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/src/libstrongswan/crypto/iv/iv_gen_seq.c b/src/libstrongswan/crypto/iv/iv_gen_seq.c
index d8a5a2909..cbbc2dc7e 100644
--- a/src/libstrongswan/crypto/iv/iv_gen_seq.c
+++ b/src/libstrongswan/crypto/iv/iv_gen_seq.c
@@ -26,38 +26,29 @@ struct private_iv_gen_t {
* Public iv_gen_t interface.
*/
iv_gen_t public;
-
- /**
- * sequence number
- */
- u_int64_t seq;
};
METHOD(iv_gen_t, get_iv, bool,
- private_iv_gen_t *this, size_t size, u_int8_t *buffer)
+ private_iv_gen_t *this, u_int64_t seq, size_t size, u_int8_t *buffer)
{
u_int8_t iv[sizeof(u_int64_t)];
size_t len = size;
- if (this->seq == UINT64_MAX || len < sizeof(u_int64_t))
- {
- return FALSE;
- }
if (len > sizeof(u_int64_t))
{
len = sizeof(u_int64_t);
memset(buffer, 0, size - len);
}
- htoun64(iv, this->seq++);
+ htoun64(iv, seq);
memcpy(buffer + size - len, iv + sizeof(u_int64_t) - len, len);
return TRUE;
}
METHOD(iv_gen_t, allocate_iv, bool,
- private_iv_gen_t *this, size_t size, chunk_t *chunk)
+ private_iv_gen_t *this, u_int64_t seq, size_t size, chunk_t *chunk)
{
*chunk = chunk_alloc(size);
- if (!get_iv(this, chunk->len, chunk->ptr))
+ if (!get_iv(this, seq, chunk->len, chunk->ptr))
{
chunk_free(chunk);
return FALSE;