LCOV - code coverage report
Current view: top level - ballet/siphash13 - fd_siphash13.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 16 16 100.0 %
Date: 2024-11-13 11:58:15 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef HEADER_fd_src_ballet_siphash13_fd_siphash13_h
       2             : #define HEADER_fd_src_ballet_siphash13_fd_siphash13_h
       3             : 
       4             : /* fd_siphash13 provides APIs for SipHash1-3.
       5             :    (1 compression round, 3 finalization rounds)
       6             : 
       7             :    This code is a modified version of https://github.com/antirez/siphash
       8             :    For further license info see NOTICE in the root of this repo.
       9             : 
      10             :    Copyright (c) 2012-2016 Jean-Philippe Aumasson
      11             :    <jeanphilippe.aumasson@gmail.com>
      12             :    Copyright (c) 2012-2014 Daniel J. Bernstein <djb@cr.yp.to>
      13             :    Copyright (c) 2017 Salvatore Sanfilippo <antirez@gmail.com>
      14             :    Modified 2023 by Firedancer Contributors */
      15             : 
      16             : #include "../fd_ballet_base.h"
      17             : 
      18             : #define FD_SIPHASH13_ALIGN     (128UL)
      19             : #define FD_SIPHASH13_FOOTPRINT (128UL)
      20             : 
      21             : struct __attribute__((aligned(FD_SIPHASH13_ALIGN))) fd_siphash13_private {
      22             :   ulong v[ 4 ];
      23             :   ulong n;
      24             :   uchar buf[ 8 ];
      25             : };
      26             : 
      27             : typedef struct fd_siphash13_private fd_siphash13_t;
      28             : 
      29             : /* FD_SIPHASH_ROUND is the SipHash1-3 round function */
      30             : 
      31             : #define FD_SIPHASH_ROUND(v)                    \
      32   483122232 :   do {                                         \
      33   483122232 :     (v)[0] += (v)[1];                          \
      34   483122232 :     (v)[1] = fd_ulong_rotate_left((v)[1], 13); \
      35   483122232 :     (v)[1] ^= (v)[0];                          \
      36   483122232 :     (v)[0] = fd_ulong_rotate_left((v)[0], 32); \
      37   483122232 :     (v)[2] += (v)[3];                          \
      38   483122232 :     (v)[3] = fd_ulong_rotate_left((v)[3], 16); \
      39   483122232 :     (v)[3] ^= (v)[2];                          \
      40   483122232 :     (v)[0] += (v)[3];                          \
      41   483122232 :     (v)[3] = fd_ulong_rotate_left((v)[3], 21); \
      42   483122232 :     (v)[3] ^= (v)[0];                          \
      43   483122232 :     (v)[2] += (v)[1];                          \
      44   483122232 :     (v)[1] = fd_ulong_rotate_left((v)[1], 17); \
      45   483122232 :     (v)[1] ^= (v)[2];                          \
      46   483122232 :     (v)[2] = fd_ulong_rotate_left((v)[2], 32); \
      47   483122232 :   } while (0)
      48             : 
      49             : FD_PROTOTYPES_BEGIN
      50             : 
      51             : /* fd_siphash13_init starts a new SipHash1-3 calculation */
      52             : 
      53             : fd_siphash13_t *
      54             : fd_siphash13_init( fd_siphash13_t * sip,
      55             :                    ulong            k0,
      56             :                    ulong            k1 );
      57             : 
      58             : fd_siphash13_t *
      59             : fd_siphash13_append( fd_siphash13_t * sip,
      60             :                      uchar const *    data,
      61             :                      ulong            sz );
      62             : 
      63             : /* fd_siphash13_append_fast is an aligned-only version of
      64             :    fd_siphash13_append.  sip->n and sz must be multiplies of 8 bytes. */
      65             : 
      66             : fd_siphash13_t *
      67             : fd_siphash13_append_fast( fd_siphash13_t * sip,
      68             :                           uchar const *    data,
      69             :                           ulong            sz );
      70             : 
      71             : /* fd_siphash13_fini finishes a SipHash1-3 calculation.  Returns the
      72             :    hash value. */
      73             : 
      74             : ulong
      75             : fd_siphash13_fini( fd_siphash13_t * sip );
      76             : 
      77             : /* fd_siphash13_hash is a streamlined implementation of:
      78             : 
      79             :      fd_siphash13_t sip[1];
      80             :      return fd_siphash13_fini( fd_siphash13_append( fd_siphash13_init( sip ), data, sz ) );
      81             : 
      82             :    This can be faster for small message sizes. */
      83             : 
      84             : FD_FN_PURE ulong
      85             : fd_siphash13_hash( void const * data,
      86             :                    ulong        sz,
      87             :                    ulong        k0,
      88             :                    ulong        k1 );
      89             : 
      90             : FD_PROTOTYPES_END
      91             : 
      92             : #endif /* HEADER_fd_src_ballet_siphash13_fd_siphash13_h */

Generated by: LCOV version 1.14