LCOV - code coverage report
Current view: top level - ballet/aes - fd_aes_base.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 16 27 59.3 %
Date: 2024-11-13 11:58:15 Functions: 4 152 2.6 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_ballet_aes_fd_aes_h
       2             : #define HEADER_fd_src_ballet_aes_fd_aes_h
       3             : 
       4             : #include "../fd_ballet_base.h"
       5             : #include "../../util/sanitize/fd_msan.h"
       6             : 
       7      145872 : #define FD_AES_128_KEY_SZ (16UL)
       8             : 
       9             : /* Reference backend internals ****************************************/
      10             : 
      11             : struct fd_aes_key_ref {
      12             :   uint rd_key[ 60 ];
      13             :   int  rounds;
      14             : };
      15             : 
      16             : typedef struct fd_aes_key_ref fd_aes_key_ref_t;
      17             : 
      18             : FD_PROTOTYPES_BEGIN
      19             : 
      20             : int
      21             : fd_aes_ref_set_encrypt_key( uchar const *      user_key,
      22             :                             ulong              bits,
      23             :                             fd_aes_key_ref_t * key );
      24             : 
      25             : int
      26             : fd_aes_ref_set_decrypt_key( uchar const *      user_key,
      27             :                             ulong              bits,
      28             :                             fd_aes_key_ref_t * key );
      29             : 
      30             : void
      31             : fd_aes_ref_encrypt_core( uchar const *            in,
      32             :                          uchar *                  out,
      33             :                          fd_aes_key_ref_t const * key );
      34             : 
      35             : void
      36             : fd_aes_ref_decrypt_core( uchar const *        in,
      37             :                          uchar *              out,
      38             :                          fd_aes_key_ref_t const * key );
      39             : 
      40             : FD_PROTOTYPES_END
      41             : 
      42             : /* AES-NI backend internals *******************************************/
      43             : 
      44             : #if FD_HAS_AESNI
      45             : 
      46             : FD_PROTOTYPES_BEGIN
      47             : 
      48             : __attribute__((sysv_abi)) void
      49             : fd_aesni_set_encrypt_key( uchar const *      user_key,
      50             :                           ulong              bits,
      51             :                           fd_aes_key_ref_t * key );
      52             : 
      53             : __attribute__((sysv_abi)) void
      54             : fd_aesni_set_decrypt_key( uchar const *      user_key,
      55             :                           ulong              bits,
      56             :                           fd_aes_key_ref_t * key );
      57             : 
      58             : __attribute__((sysv_abi)) void
      59             : fd_aesni_encrypt( uchar const *      in,
      60             :                   uchar *            out,
      61             :                   fd_aes_key_ref_t * key );
      62             : 
      63             : __attribute__((sysv_abi)) void
      64             : fd_aesni_decrypt( uchar const *      in,
      65             :                   uchar *            out,
      66             :                   fd_aes_key_ref_t * key );
      67             : 
      68             : FD_PROTOTYPES_END
      69             : 
      70             : #endif /* FD_HAS_AESNI */
      71             : 
      72             : /* Backend selection **************************************************/
      73             : 
      74             : #if FD_HAS_AESNI
      75             : #define FD_AES_IMPL 1 /* AESNI */
      76             : #else
      77             : #define FD_AES_IMPL 0 /* Portable */
      78             : #endif
      79             : 
      80             : #if FD_AES_IMPL == 0
      81             : 
      82             :   typedef fd_aes_key_ref_t               fd_aes_key_t;
      83   218566385 :   #define fd_aes_private_encrypt         fd_aes_ref_encrypt_core
      84             :   #define fd_aes_private_decrypt         fd_aes_ref_encrypt_core
      85    13141053 :   #define fd_aes_private_set_encrypt_key fd_aes_ref_set_encrypt_key
      86             :   #define fd_aes_private_set_decrypt_key fd_aes_ref_set_decrypt_key
      87             : 
      88             : #elif FD_AES_IMPL == 1
      89             : 
      90             :   typedef fd_aes_key_ref_t               fd_aes_key_t;
      91    45044535 :   #define fd_aes_private_encrypt         fd_aesni_encrypt
      92             :   #define fd_aes_private_decrypt         fd_aesni_decrypt
      93    45044535 :   #define fd_aes_private_set_encrypt_key fd_aesni_set_encrypt_key
      94             :   #define fd_aes_private_set_decrypt_key fd_aesni_set_decrypt_key
      95             : 
      96             : #endif
      97             : 
      98             : static inline void
      99             : fd_aes_set_encrypt_key( uchar const *  user_key,
     100             :                         ulong          bits,
     101    58185588 :                         fd_aes_key_t * key ) {
     102    58185588 :   fd_msan_check   ( user_key, bits/8               );
     103    58185588 :   fd_msan_unpoison( key,      sizeof(fd_aes_key_t) );
     104    58185588 :   fd_aes_private_set_encrypt_key( user_key, bits, key );
     105    58185588 : }
     106             : 
     107             : static inline void
     108             : fd_aes_set_decrypt_key( uchar const *  user_key,
     109             :                         ulong          bits,
     110           0 :                         fd_aes_key_t * key ) {
     111           0 :   fd_msan_check   ( user_key, bits/8               );
     112           0 :   fd_msan_unpoison( key,      sizeof(fd_aes_key_t) );
     113           0 :   fd_aes_private_set_decrypt_key( user_key, bits, key );
     114           0 : }
     115             : 
     116             : static inline void
     117             : fd_aes_encrypt( uchar const *  in,
     118             :                 uchar *        out,
     119   263610920 :                 fd_aes_key_t * key ) {
     120   263610920 :   fd_msan_check   ( key, sizeof(fd_aes_key_t) );
     121   263610920 :   fd_msan_check   ( in,  16UL );
     122   263610920 :   fd_msan_unpoison( out, 16UL );
     123   263610920 :   fd_aes_private_encrypt( in, out, key );
     124   263610920 : }
     125             : 
     126             : static inline void
     127             : fd_aes_decrypt( uchar const *  in,
     128             :                 uchar *        out,
     129           0 :                 fd_aes_key_t * key ) {
     130           0 :   fd_msan_check   ( key, sizeof(fd_aes_key_t) );
     131           0 :   fd_msan_check   ( in,  16UL );
     132           0 :   fd_msan_unpoison( out, 16UL );
     133           0 :   fd_aes_private_decrypt( in, out, key );
     134           0 : }
     135             : 
     136             : #endif /* HEADER_fd_src_ballet_aes_fd_aes_h */

Generated by: LCOV version 1.14