wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Tue May 02 08:44:47 2017 +0000
Revision:
7:481bce714567
wolfSSL3.10.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 7:481bce714567 1 /*
wolfSSL 7:481bce714567 2 BLAKE2 reference source code package - reference C implementations
wolfSSL 7:481bce714567 3
wolfSSL 7:481bce714567 4 Written in 2012 by Samuel Neves <sneves@dei.uc.pt>
wolfSSL 7:481bce714567 5
wolfSSL 7:481bce714567 6 To the extent possible under law, the author(s) have dedicated all copyright
wolfSSL 7:481bce714567 7 and related and neighboring rights to this software to the public domain
wolfSSL 7:481bce714567 8 worldwide. This software is distributed without any warranty.
wolfSSL 7:481bce714567 9
wolfSSL 7:481bce714567 10 You should have received a copy of the CC0 Public Domain Dedication along with
wolfSSL 7:481bce714567 11 this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
wolfSSL 7:481bce714567 12 */
wolfSSL 7:481bce714567 13 /* blake2-impl.h
wolfSSL 7:481bce714567 14 *
wolfSSL 7:481bce714567 15 * Copyright (C) 2006-2016 wolfSSL Inc.
wolfSSL 7:481bce714567 16 *
wolfSSL 7:481bce714567 17 * This file is part of wolfSSL.
wolfSSL 7:481bce714567 18 *
wolfSSL 7:481bce714567 19 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 7:481bce714567 20 * it under the terms of the GNU General Public License as published by
wolfSSL 7:481bce714567 21 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 7:481bce714567 22 * (at your option) any later version.
wolfSSL 7:481bce714567 23 *
wolfSSL 7:481bce714567 24 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 7:481bce714567 25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 7:481bce714567 26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 7:481bce714567 27 * GNU General Public License for more details.
wolfSSL 7:481bce714567 28 *
wolfSSL 7:481bce714567 29 * You should have received a copy of the GNU General Public License
wolfSSL 7:481bce714567 30 * along with this program; if not, write to the Free Software
wolfSSL 7:481bce714567 31 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 7:481bce714567 32 */
wolfSSL 7:481bce714567 33
wolfSSL 7:481bce714567 34
wolfSSL 7:481bce714567 35
wolfSSL 7:481bce714567 36 #ifndef WOLFCRYPT_BLAKE2_IMPL_H
wolfSSL 7:481bce714567 37 #define WOLFCRYPT_BLAKE2_IMPL_H
wolfSSL 7:481bce714567 38
wolfSSL 7:481bce714567 39 #include <wolfssl/wolfcrypt/types.h>
wolfSSL 7:481bce714567 40
wolfSSL 7:481bce714567 41 static INLINE word32 load32( const void *src )
wolfSSL 7:481bce714567 42 {
wolfSSL 7:481bce714567 43 #if defined(LITTLE_ENDIAN_ORDER)
wolfSSL 7:481bce714567 44 return *( word32 * )( src );
wolfSSL 7:481bce714567 45 #else
wolfSSL 7:481bce714567 46 const byte *p = ( byte * )src;
wolfSSL 7:481bce714567 47 word32 w = *p++;
wolfSSL 7:481bce714567 48 w |= ( word32 )( *p++ ) << 8;
wolfSSL 7:481bce714567 49 w |= ( word32 )( *p++ ) << 16;
wolfSSL 7:481bce714567 50 w |= ( word32 )( *p++ ) << 24;
wolfSSL 7:481bce714567 51 return w;
wolfSSL 7:481bce714567 52 #endif
wolfSSL 7:481bce714567 53 }
wolfSSL 7:481bce714567 54
wolfSSL 7:481bce714567 55 static INLINE word64 load64( const void *src )
wolfSSL 7:481bce714567 56 {
wolfSSL 7:481bce714567 57 #if defined(LITTLE_ENDIAN_ORDER)
wolfSSL 7:481bce714567 58 return *( word64 * )( src );
wolfSSL 7:481bce714567 59 #else
wolfSSL 7:481bce714567 60 const byte *p = ( byte * )src;
wolfSSL 7:481bce714567 61 word64 w = *p++;
wolfSSL 7:481bce714567 62 w |= ( word64 )( *p++ ) << 8;
wolfSSL 7:481bce714567 63 w |= ( word64 )( *p++ ) << 16;
wolfSSL 7:481bce714567 64 w |= ( word64 )( *p++ ) << 24;
wolfSSL 7:481bce714567 65 w |= ( word64 )( *p++ ) << 32;
wolfSSL 7:481bce714567 66 w |= ( word64 )( *p++ ) << 40;
wolfSSL 7:481bce714567 67 w |= ( word64 )( *p++ ) << 48;
wolfSSL 7:481bce714567 68 w |= ( word64 )( *p++ ) << 56;
wolfSSL 7:481bce714567 69 return w;
wolfSSL 7:481bce714567 70 #endif
wolfSSL 7:481bce714567 71 }
wolfSSL 7:481bce714567 72
wolfSSL 7:481bce714567 73 static INLINE void store32( void *dst, word32 w )
wolfSSL 7:481bce714567 74 {
wolfSSL 7:481bce714567 75 #if defined(LITTLE_ENDIAN_ORDER)
wolfSSL 7:481bce714567 76 *( word32 * )( dst ) = w;
wolfSSL 7:481bce714567 77 #else
wolfSSL 7:481bce714567 78 byte *p = ( byte * )dst;
wolfSSL 7:481bce714567 79 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 80 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 81 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 82 *p++ = ( byte )w;
wolfSSL 7:481bce714567 83 #endif
wolfSSL 7:481bce714567 84 }
wolfSSL 7:481bce714567 85
wolfSSL 7:481bce714567 86 static INLINE void store64( void *dst, word64 w )
wolfSSL 7:481bce714567 87 {
wolfSSL 7:481bce714567 88 #if defined(LITTLE_ENDIAN_ORDER)
wolfSSL 7:481bce714567 89 *( word64 * )( dst ) = w;
wolfSSL 7:481bce714567 90 #else
wolfSSL 7:481bce714567 91 byte *p = ( byte * )dst;
wolfSSL 7:481bce714567 92 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 93 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 94 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 95 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 96 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 97 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 98 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 99 *p++ = ( byte )w;
wolfSSL 7:481bce714567 100 #endif
wolfSSL 7:481bce714567 101 }
wolfSSL 7:481bce714567 102
wolfSSL 7:481bce714567 103 static INLINE word64 load48( const void *src )
wolfSSL 7:481bce714567 104 {
wolfSSL 7:481bce714567 105 const byte *p = ( const byte * )src;
wolfSSL 7:481bce714567 106 word64 w = *p++;
wolfSSL 7:481bce714567 107 w |= ( word64 )( *p++ ) << 8;
wolfSSL 7:481bce714567 108 w |= ( word64 )( *p++ ) << 16;
wolfSSL 7:481bce714567 109 w |= ( word64 )( *p++ ) << 24;
wolfSSL 7:481bce714567 110 w |= ( word64 )( *p++ ) << 32;
wolfSSL 7:481bce714567 111 w |= ( word64 )( *p++ ) << 40;
wolfSSL 7:481bce714567 112 return w;
wolfSSL 7:481bce714567 113 }
wolfSSL 7:481bce714567 114
wolfSSL 7:481bce714567 115 static INLINE void store48( void *dst, word64 w )
wolfSSL 7:481bce714567 116 {
wolfSSL 7:481bce714567 117 byte *p = ( byte * )dst;
wolfSSL 7:481bce714567 118 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 119 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 120 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 121 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 122 *p++ = ( byte )w; w >>= 8;
wolfSSL 7:481bce714567 123 *p++ = ( byte )w;
wolfSSL 7:481bce714567 124 }
wolfSSL 7:481bce714567 125
wolfSSL 7:481bce714567 126 static INLINE word32 rotl32( const word32 w, const unsigned c )
wolfSSL 7:481bce714567 127 {
wolfSSL 7:481bce714567 128 return ( w << c ) | ( w >> ( 32 - c ) );
wolfSSL 7:481bce714567 129 }
wolfSSL 7:481bce714567 130
wolfSSL 7:481bce714567 131 static INLINE word64 rotl64( const word64 w, const unsigned c )
wolfSSL 7:481bce714567 132 {
wolfSSL 7:481bce714567 133 return ( w << c ) | ( w >> ( 64 - c ) );
wolfSSL 7:481bce714567 134 }
wolfSSL 7:481bce714567 135
wolfSSL 7:481bce714567 136 static INLINE word32 rotr32( const word32 w, const unsigned c )
wolfSSL 7:481bce714567 137 {
wolfSSL 7:481bce714567 138 return ( w >> c ) | ( w << ( 32 - c ) );
wolfSSL 7:481bce714567 139 }
wolfSSL 7:481bce714567 140
wolfSSL 7:481bce714567 141 static INLINE word64 rotr64( const word64 w, const unsigned c )
wolfSSL 7:481bce714567 142 {
wolfSSL 7:481bce714567 143 return ( w >> c ) | ( w << ( 64 - c ) );
wolfSSL 7:481bce714567 144 }
wolfSSL 7:481bce714567 145
wolfSSL 7:481bce714567 146 /* prevents compiler optimizing out memset() */
wolfSSL 7:481bce714567 147 static INLINE void secure_zero_memory( void *v, word64 n )
wolfSSL 7:481bce714567 148 {
wolfSSL 7:481bce714567 149 volatile byte *p = ( volatile byte * )v;
wolfSSL 7:481bce714567 150
wolfSSL 7:481bce714567 151 while( n-- ) *p++ = 0;
wolfSSL 7:481bce714567 152 }
wolfSSL 7:481bce714567 153
wolfSSL 7:481bce714567 154 #endif /* WOLFCRYPT_BLAKE2_IMPL_H */
wolfSSL 7:481bce714567 155
wolfSSL 7:481bce714567 156