1c87c5fbaSopenharmony_ci/* coap_hashkey.c -- definition of hash key type and helper functions
2c87c5fbaSopenharmony_ci *
3c87c5fbaSopenharmony_ci * Copyright (C) 2010,2011 Olaf Bergmann <bergmann@tzi.org>
4c87c5fbaSopenharmony_ci *
5c87c5fbaSopenharmony_ci * SPDX-License-Identifier: BSD-2-Clause
6c87c5fbaSopenharmony_ci *
7c87c5fbaSopenharmony_ci * This file is part of the CoAP library libcoap. Please see
8c87c5fbaSopenharmony_ci * README for terms of use.
9c87c5fbaSopenharmony_ci */
10c87c5fbaSopenharmony_ci
11c87c5fbaSopenharmony_ci/**
12c87c5fbaSopenharmony_ci * @file coap_hashkey.c
13c87c5fbaSopenharmony_ci * @brief Hashkey functions
14c87c5fbaSopenharmony_ci */
15c87c5fbaSopenharmony_ci
16c87c5fbaSopenharmony_ci#include "coap3/coap_internal.h"
17c87c5fbaSopenharmony_ci
18c87c5fbaSopenharmony_civoid
19c87c5fbaSopenharmony_cicoap_hash_impl(const unsigned char *s, size_t len, coap_key_t h) {
20c87c5fbaSopenharmony_ci  size_t j;
21c87c5fbaSopenharmony_ci
22c87c5fbaSopenharmony_ci  while (len--) {
23c87c5fbaSopenharmony_ci    j = sizeof(coap_key_t)-1;
24c87c5fbaSopenharmony_ci
25c87c5fbaSopenharmony_ci    while (j) {
26c87c5fbaSopenharmony_ci      h[j] = ((h[j] << 7) | (h[j-1] >> 1)) + h[j];
27c87c5fbaSopenharmony_ci      --j;
28c87c5fbaSopenharmony_ci    }
29c87c5fbaSopenharmony_ci
30c87c5fbaSopenharmony_ci    h[0] = (h[0] << 7) + h[0] + *s++;
31c87c5fbaSopenharmony_ci  }
32c87c5fbaSopenharmony_ci}
33