LCOV - code coverage report
Current view: top level - lib/crypt_ops - digestset.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 11 11 100.0 %
Date: 2021-11-24 03:28:48 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* Copyright (c) 2018-2021, The Tor Project, Inc. */
       2             : /* See LICENSE for licensing information */
       3             : 
       4             : /**
       5             :  * \file digestset.c
       6             :  * \brief Implementation for a set of digests
       7             :  **/
       8             : 
       9             : #include "orconfig.h"
      10             : #include "lib/container/bloomfilt.h"
      11             : #include "lib/crypt_ops/crypto_rand.h"
      12             : #include "lib/defs/digest_sizes.h"
      13             : #include "lib/crypt_ops/digestset.h"
      14             : #include "ext/siphash.h"
      15             : 
      16             : /* Wrap our hash function to have the signature that the bloom filter
      17             :  * needs. */
      18             : static uint64_t
      19       50618 : bloomfilt_digest_hash(const struct sipkey *key,
      20             :                       const void *item)
      21             : {
      22       50618 :   return siphash24(item, DIGEST_LEN, key);
      23             : }
      24             : 
      25             : /**
      26             :  * Allocate and return an digestset, suitable for holding up to
      27             :  * <b>max_guess</b> distinct values.
      28             :  */
      29             : digestset_t *
      30         156 : digestset_new(int max_guess)
      31             : {
      32         156 :   uint8_t k[BLOOMFILT_KEY_LEN];
      33         156 :   crypto_rand((void*)k, sizeof(k));
      34         156 :   return bloomfilt_new(max_guess, bloomfilt_digest_hash, k);
      35             : }
      36             : 
      37             : /**
      38             :  * Add <b>digest</b> to <b>set</b>.
      39             :  *
      40             :  * All future queries for <b>digest</b> in set will return true. Removing
      41             :  * items is not possible.
      42             :  */
      43             : void
      44        2289 : digestset_add(digestset_t *set, const char *digest)
      45             : {
      46        2289 :   bloomfilt_add(set, digest);
      47        2289 : }
      48             : 
      49             : /**
      50             :  * Return true if <b>digest</b> is a member of <b>set</b>.  (And probably,
      51             :  * return false if <b>digest</b> is not a member of set.)
      52             :  */
      53             : int
      54       23020 : digestset_probably_contains(const digestset_t *set,
      55             :                             const char *digest)
      56             : {
      57       23020 :   return bloomfilt_probably_contains(set, digest);
      58             : }

Generated by: LCOV version 1.14