The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/libb2/blake2.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2    BLAKE2 reference source code package - optimized C implementations
    3 
    4    Written in 2012 by Samuel Neves <sneves@dei.uc.pt>
    5 
    6    To the extent possible under law, the author(s) have dedicated all copyright
    7    and related and neighboring rights to this software to the public domain
    8    worldwide. This software is distributed without any warranty.
    9 
   10    You should have received a copy of the CC0 Public Domain Dedication along with
   11    this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
   12 */
   13 #pragma once
   14 #ifndef __BLAKE2_H__
   15 #define __BLAKE2_H__
   16 
   17 #include <stddef.h>
   18 #include <stdint.h>
   19 
   20 #if defined(_WIN32) || defined(__CYGWIN__)
   21     #define BLAKE2_DLL_IMPORT __declspec(dllimport)
   22     #define BLAKE2_DLL_EXPORT __declspec(dllexport)
   23     #define BLAKE2_DLL_PRIVATE
   24 #elif __GNUC__ >= 4
   25   #define BLAKE2_DLL_IMPORT   __attribute__ ((visibility ("default")))
   26   #define BLAKE2_DLL_EXPORT   __attribute__ ((visibility ("default")))
   27   #define BLAKE2_DLL_PRIVATE  __attribute__ ((visibility ("hidden")))
   28 #else
   29   #define BLAKE2_DLL_IMPORT
   30   #define BLAKE2_DLL_EXPORT
   31   #define BLAKE2_DLL_PRIVATE
   32 #endif
   33 
   34 #if defined(BLAKE2_DLL)
   35   #if defined(BLAKE2_DLL_EXPORTS) // defined if we are building the DLL
   36     #define BLAKE2_API BLAKE2_DLL_EXPORT
   37   #else
   38     #define BLAKE2_API BLAKE2_DLL_IMPORT
   39   #endif
   40   #define BLAKE2_PRIVATE BLAKE2_DLL_PRIVATE // must only be used by hidden logic
   41 #else
   42   #define BLAKE2_API
   43   #define BLAKE2_PRIVATE
   44 #endif
   45 
   46 #if defined(__cplusplus)
   47 extern "C" {
   48 #elif defined(_MSC_VER) && !defined(inline)
   49 #define inline __inline
   50 #endif
   51 
   52   enum blake2s_constant
   53   {
   54     BLAKE2S_BLOCKBYTES = 64,
   55     BLAKE2S_OUTBYTES   = 32,
   56     BLAKE2S_KEYBYTES   = 32,
   57     BLAKE2S_SALTBYTES  = 8,
   58     BLAKE2S_PERSONALBYTES = 8
   59   };
   60 
   61   enum blake2b_constant
   62   {
   63     BLAKE2B_BLOCKBYTES = 128,
   64     BLAKE2B_OUTBYTES   = 64,
   65     BLAKE2B_KEYBYTES   = 64,
   66     BLAKE2B_SALTBYTES  = 16,
   67     BLAKE2B_PERSONALBYTES = 16
   68   };
   69 
   70 #pragma pack(push, 1)
   71   typedef struct __blake2s_param
   72   {
   73     uint8_t  digest_length; // 1
   74     uint8_t  key_length;    // 2
   75     uint8_t  fanout;        // 3
   76     uint8_t  depth;         // 4
   77     uint32_t leaf_length;   // 8
   78     uint8_t  node_offset[6];// 14
   79     uint8_t  node_depth;    // 15
   80     uint8_t  inner_length;  // 16
   81     // uint8_t  reserved[0];
   82     uint8_t  salt[BLAKE2S_SALTBYTES]; // 24
   83     uint8_t  personal[BLAKE2S_PERSONALBYTES];  // 32
   84   } blake2s_param;
   85 
   86   typedef struct __blake2s_state
   87   {
   88     uint32_t h[8];
   89     uint32_t t[2];
   90     uint32_t f[2];
   91     uint8_t  buf[2 * BLAKE2S_BLOCKBYTES];
   92     uint32_t buflen;
   93     uint8_t  outlen;
   94     uint8_t  last_node;
   95   } blake2s_state;
   96 
   97   typedef struct __blake2b_param
   98   {
   99     uint8_t  digest_length; // 1
  100     uint8_t  key_length;    // 2
  101     uint8_t  fanout;        // 3
  102     uint8_t  depth;         // 4
  103     uint32_t leaf_length;   // 8
  104     uint64_t node_offset;   // 16
  105     uint8_t  node_depth;    // 17
  106     uint8_t  inner_length;  // 18
  107     uint8_t  reserved[14];  // 32
  108     uint8_t  salt[BLAKE2B_SALTBYTES]; // 48
  109     uint8_t  personal[BLAKE2B_PERSONALBYTES];  // 64
  110   } blake2b_param;
  111 
  112   typedef struct __blake2b_state
  113   {
  114     uint64_t h[8];
  115     uint64_t t[2];
  116     uint64_t f[2];
  117     uint8_t  buf[2 * BLAKE2B_BLOCKBYTES];
  118     uint32_t buflen;
  119     uint8_t  outlen;
  120     uint8_t  last_node;
  121   } blake2b_state;
  122 
  123   typedef struct __blake2sp_state
  124   {
  125     blake2s_state S[8][1];
  126     blake2s_state R[1];
  127     uint8_t  buf[8 * BLAKE2S_BLOCKBYTES];
  128     uint32_t buflen;
  129     uint8_t  outlen;
  130   } blake2sp_state;
  131 
  132   typedef struct __blake2bp_state
  133   {
  134     blake2b_state S[4][1];
  135     blake2b_state R[1];
  136     uint8_t  buf[4 * BLAKE2B_BLOCKBYTES];
  137     uint32_t buflen;
  138     uint8_t  outlen;
  139   } blake2bp_state;
  140 #pragma pack(pop)
  141 
  142   // Streaming API
  143   BLAKE2_API int blake2s_init( blake2s_state *S, size_t outlen );
  144   BLAKE2_API int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen );
  145   BLAKE2_API int blake2s_init_param( blake2s_state *S, const blake2s_param *P );
  146   BLAKE2_API int blake2s_update( blake2s_state *S, const uint8_t *in, size_t inlen );
  147   BLAKE2_API int blake2s_final( blake2s_state *S, uint8_t *out, size_t outlen );
  148 
  149   BLAKE2_API int blake2b_init( blake2b_state *S, size_t outlen );
  150   BLAKE2_API int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen );
  151   BLAKE2_API int blake2b_init_param( blake2b_state *S, const blake2b_param *P );
  152   BLAKE2_API int blake2b_update( blake2b_state *S, const uint8_t *in, size_t inlen );
  153   BLAKE2_API int blake2b_final( blake2b_state *S, uint8_t *out, size_t outlen );
  154 
  155   BLAKE2_API int blake2sp_init( blake2sp_state *S, size_t outlen );
  156   BLAKE2_API int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen );
  157   BLAKE2_API int blake2sp_update( blake2sp_state *S, const uint8_t *in, size_t inlen );
  158   BLAKE2_API int blake2sp_final( blake2sp_state *S, uint8_t *out, size_t outlen );
  159 
  160   BLAKE2_API int blake2bp_init( blake2bp_state *S, size_t outlen );
  161   BLAKE2_API int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen );
  162   BLAKE2_API int blake2bp_update( blake2bp_state *S, const uint8_t *in, size_t inlen );
  163   BLAKE2_API int blake2bp_final( blake2bp_state *S, uint8_t *out, size_t outlen );
  164 
  165   // Simple API
  166   BLAKE2_API int blake2s( uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen );
  167   BLAKE2_API int blake2b( uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen );
  168 
  169   BLAKE2_API int blake2sp( uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen );
  170   BLAKE2_API int blake2bp( uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen );
  171 
  172   static inline int blake2( uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen )
  173   {
  174     return blake2b( out, in, key, outlen, inlen, keylen );
  175   }
  176 
  177 #if defined(__cplusplus)
  178 }
  179 #endif
  180 
  181 #endif
  182 

Cache object: 071b836a39f3b9258366191e84447c92


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.