diff --git a/src/libstrongswan/chunk.c b/src/libstrongswan/chunk.c index f2c8a3efb2..1967b350ae 100644 --- a/src/libstrongswan/chunk.c +++ b/src/libstrongswan/chunk.c @@ -230,6 +230,21 @@ chunk_t chunk_skip(chunk_t chunk, size_t bytes) return chunk_empty; } +/** + * Described in header. + */ +int chunk_compare(chunk_t a, chunk_t b) +{ + int compare_len = a.len - b.len; + int len = (compare_len < 0)? a.len : b.len; + + if (compare_len != 0 || len == 0) + { + return compare_len; + } + return memcmp(a.ptr, b.ptr, len); +}; + /** * Described in header. */ diff --git a/src/libstrongswan/chunk.h b/src/libstrongswan/chunk.h index 7fa257b00b..9880ae20f8 100644 --- a/src/libstrongswan/chunk.h +++ b/src/libstrongswan/chunk.h @@ -123,6 +123,12 @@ void chunk_free(chunk_t *chunk); */ chunk_t chunk_skip(chunk_t chunk, size_t bytes); +/** + * Compare two chunks, returns zero if a equals b + * or negative/positive if a is small/greater than b + */ +int chunk_compare(chunk_t a, chunk_t b); + /** * Compare two chunks for equality, * NULL chunks are never equal.