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/openzfs/module/os/freebsd/spl/sha512c.c

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  * Copyright 2005 Colin Percival
    3  * Copyright (c) 2015 Allan Jude <allanjude@FreeBSD.org>
    4  * All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  */
   27 
   28 #include <sys/cdefs.h>
   29 __FBSDID("$FreeBSD$");
   30 
   31 #include <sys/endian.h>
   32 #include <sys/types.h>
   33 
   34 #ifdef _KERNEL
   35 #include <sys/systm.h>
   36 #else
   37 #include <string.h>
   38 #endif
   39 
   40 #include "sha512.h"
   41 #include "sha512t.h"
   42 #include "sha384.h"
   43 
   44 #if BYTE_ORDER == BIG_ENDIAN
   45 
   46 /* Copy a vector of big-endian uint64_t into a vector of bytes */
   47 #define be64enc_vect(dst, src, len)     \
   48         memcpy((void *)dst, (const void *)src, (size_t)len)
   49 
   50 /* Copy a vector of bytes into a vector of big-endian uint64_t */
   51 #define be64dec_vect(dst, src, len)     \
   52         memcpy((void *)dst, (const void *)src, (size_t)len)
   53 
   54 #else /* BYTE_ORDER != BIG_ENDIAN */
   55 
   56 /*
   57  * Encode a length len/4 vector of (uint64_t) into a length len vector of
   58  * (unsigned char) in big-endian form.  Assumes len is a multiple of 8.
   59  */
   60 static void
   61 be64enc_vect(unsigned char *dst, const uint64_t *src, size_t len)
   62 {
   63         size_t i;
   64 
   65         for (i = 0; i < len / 8; i++)
   66                 be64enc(dst + i * 8, src[i]);
   67 }
   68 
   69 /*
   70  * Decode a big-endian length len vector of (unsigned char) into a length
   71  * len/4 vector of (uint64_t).  Assumes len is a multiple of 8.
   72  */
   73 static void
   74 be64dec_vect(uint64_t *dst, const unsigned char *src, size_t len)
   75 {
   76         size_t i;
   77 
   78         for (i = 0; i < len / 8; i++)
   79                 dst[i] = be64dec(src + i * 8);
   80 }
   81 
   82 #endif /* BYTE_ORDER != BIG_ENDIAN */
   83 
   84 /* SHA512 round constants. */
   85 static const uint64_t K[80] = {
   86         0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
   87         0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
   88         0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
   89         0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
   90         0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
   91         0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
   92         0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
   93         0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
   94         0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
   95         0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
   96         0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
   97         0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
   98         0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
   99         0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
  100         0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
  101         0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
  102         0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
  103         0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
  104         0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
  105         0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
  106         0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
  107         0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
  108         0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
  109         0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
  110         0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
  111         0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
  112         0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
  113         0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
  114         0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
  115         0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
  116         0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
  117         0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
  118         0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
  119         0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
  120         0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
  121         0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
  122         0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
  123         0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
  124         0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
  125         0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
  126 };
  127 
  128 /* Elementary functions used by SHA512 */
  129 #define Ch(x, y, z)     ((x & (y ^ z)) ^ z)
  130 #define Maj(x, y, z)    ((x & (y | z)) | (y & z))
  131 #define SHR(x, n)       (x >> n)
  132 #define ROTR(x, n)      ((x >> n) | (x << (64 - n)))
  133 #define S0(x)           (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39))
  134 #define S1(x)           (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41))
  135 #define s0(x)           (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7))
  136 #define s1(x)           (ROTR(x, 19) ^ ROTR(x, 61) ^ SHR(x, 6))
  137 
  138 /* SHA512 round function */
  139 #define RND(a, b, c, d, e, f, g, h, k)                  \
  140         h += S1(e) + Ch(e, f, g) + k;                   \
  141         d += h;                                         \
  142         h += S0(a) + Maj(a, b, c);
  143 
  144 /* Adjusted round function for rotating state */
  145 #define RNDr(S, W, i, ii)                       \
  146         RND(S[(80 - i) % 8], S[(81 - i) % 8],   \
  147             S[(82 - i) % 8], S[(83 - i) % 8],   \
  148             S[(84 - i) % 8], S[(85 - i) % 8],   \
  149             S[(86 - i) % 8], S[(87 - i) % 8],   \
  150             W[i + ii] + K[i + ii])
  151 
  152 /* Message schedule computation */
  153 #define MSCH(W, ii, i)                          \
  154         W[i + ii + 16] = s1(W[i + ii + 14]) + W[i + ii + 9] +   \
  155                 s0(W[i + ii + 1]) + W[i + ii]
  156 
  157 /*
  158  * SHA512 block compression function.  The 512-bit state is transformed via
  159  * the 512-bit input block to produce a new state.
  160  */
  161 static void
  162 SHA512_Transform(uint64_t *state,
  163     const unsigned char block[SHA512_BLOCK_LENGTH])
  164 {
  165         uint64_t W[80];
  166         uint64_t S[8];
  167         int i;
  168 
  169         /* 1. Prepare the first part of the message schedule W. */
  170         be64dec_vect(W, block, SHA512_BLOCK_LENGTH);
  171 
  172         /* 2. Initialize working variables. */
  173         memcpy(S, state, SHA512_DIGEST_LENGTH);
  174 
  175         /* 3. Mix. */
  176         for (i = 0; i < 80; i += 16) {
  177                 RNDr(S, W, 0, i);
  178                 RNDr(S, W, 1, i);
  179                 RNDr(S, W, 2, i);
  180                 RNDr(S, W, 3, i);
  181                 RNDr(S, W, 4, i);
  182                 RNDr(S, W, 5, i);
  183                 RNDr(S, W, 6, i);
  184                 RNDr(S, W, 7, i);
  185                 RNDr(S, W, 8, i);
  186                 RNDr(S, W, 9, i);
  187                 RNDr(S, W, 10, i);
  188                 RNDr(S, W, 11, i);
  189                 RNDr(S, W, 12, i);
  190                 RNDr(S, W, 13, i);
  191                 RNDr(S, W, 14, i);
  192                 RNDr(S, W, 15, i);
  193 
  194                 if (i == 64)
  195                         break;
  196                 MSCH(W, 0, i);
  197                 MSCH(W, 1, i);
  198                 MSCH(W, 2, i);
  199                 MSCH(W, 3, i);
  200                 MSCH(W, 4, i);
  201                 MSCH(W, 5, i);
  202                 MSCH(W, 6, i);
  203                 MSCH(W, 7, i);
  204                 MSCH(W, 8, i);
  205                 MSCH(W, 9, i);
  206                 MSCH(W, 10, i);
  207                 MSCH(W, 11, i);
  208                 MSCH(W, 12, i);
  209                 MSCH(W, 13, i);
  210                 MSCH(W, 14, i);
  211                 MSCH(W, 15, i);
  212         }
  213 
  214         /* 4. Mix local working variables into global state */
  215         for (i = 0; i < 8; i++)
  216                 state[i] += S[i];
  217 }
  218 
  219 static unsigned char PAD[SHA512_BLOCK_LENGTH] = {
  220         0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  221         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  222         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  223         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  224         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  225         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  226         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  227         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  228 };
  229 
  230 /* Add padding and terminating bit-count. */
  231 static void
  232 SHA512_Pad(SHA512_CTX * ctx)
  233 {
  234         size_t r;
  235 
  236         /* Figure out how many bytes we have buffered. */
  237         r = (ctx->count[1] >> 3) & 0x7f;
  238 
  239         /* Pad to 112 mod 128, transforming if we finish a block en route. */
  240         if (r < 112) {
  241                 /* Pad to 112 mod 128. */
  242                 memcpy(&ctx->buf[r], PAD, 112 - r);
  243         } else {
  244                 /* Finish the current block and mix. */
  245                 memcpy(&ctx->buf[r], PAD, 128 - r);
  246                 SHA512_Transform(ctx->state, ctx->buf);
  247 
  248                 /* The start of the final block is all zeroes. */
  249                 memset(&ctx->buf[0], 0, 112);
  250         }
  251 
  252         /* Add the terminating bit-count. */
  253         be64enc_vect(&ctx->buf[112], ctx->count, 16);
  254 
  255         /* Mix in the final block. */
  256         SHA512_Transform(ctx->state, ctx->buf);
  257 }
  258 
  259 /* SHA-512 initialization.  Begins a SHA-512 operation. */
  260 void
  261 SHA512_Init(SHA512_CTX * ctx)
  262 {
  263 
  264         /* Zero bits processed so far */
  265         ctx->count[0] = ctx->count[1] = 0;
  266 
  267         /* Magic initialization constants */
  268         ctx->state[0] = 0x6a09e667f3bcc908ULL;
  269         ctx->state[1] = 0xbb67ae8584caa73bULL;
  270         ctx->state[2] = 0x3c6ef372fe94f82bULL;
  271         ctx->state[3] = 0xa54ff53a5f1d36f1ULL;
  272         ctx->state[4] = 0x510e527fade682d1ULL;
  273         ctx->state[5] = 0x9b05688c2b3e6c1fULL;
  274         ctx->state[6] = 0x1f83d9abfb41bd6bULL;
  275         ctx->state[7] = 0x5be0cd19137e2179ULL;
  276 }
  277 
  278 /* Add bytes into the hash */
  279 void
  280 SHA512_Update(SHA512_CTX * ctx, const void *in, size_t len)
  281 {
  282         uint64_t bitlen[2];
  283         uint64_t r;
  284         const unsigned char *src = in;
  285 
  286         /* Number of bytes left in the buffer from previous updates */
  287         r = (ctx->count[1] >> 3) & 0x7f;
  288 
  289         /* Convert the length into a number of bits */
  290         bitlen[1] = ((uint64_t)len) << 3;
  291         bitlen[0] = ((uint64_t)len) >> 61;
  292 
  293         /* Update number of bits */
  294         if ((ctx->count[1] += bitlen[1]) < bitlen[1])
  295                 ctx->count[0]++;
  296         ctx->count[0] += bitlen[0];
  297 
  298         /* Handle the case where we don't need to perform any transforms */
  299         if (len < SHA512_BLOCK_LENGTH - r) {
  300                 memcpy(&ctx->buf[r], src, len);
  301                 return;
  302         }
  303 
  304         /* Finish the current block */
  305         memcpy(&ctx->buf[r], src, SHA512_BLOCK_LENGTH - r);
  306         SHA512_Transform(ctx->state, ctx->buf);
  307         src += SHA512_BLOCK_LENGTH - r;
  308         len -= SHA512_BLOCK_LENGTH - r;
  309 
  310         /* Perform complete blocks */
  311         while (len >= SHA512_BLOCK_LENGTH) {
  312                 SHA512_Transform(ctx->state, src);
  313                 src += SHA512_BLOCK_LENGTH;
  314                 len -= SHA512_BLOCK_LENGTH;
  315         }
  316 
  317         /* Copy left over data into buffer */
  318         memcpy(ctx->buf, src, len);
  319 }
  320 
  321 /*
  322  * SHA-512 finalization.  Pads the input data, exports the hash value,
  323  * and clears the context state.
  324  */
  325 void
  326 SHA512_Final(unsigned char digest[static SHA512_DIGEST_LENGTH], SHA512_CTX *ctx)
  327 {
  328 
  329         /* Add padding */
  330         SHA512_Pad(ctx);
  331 
  332         /* Write the hash */
  333         be64enc_vect(digest, ctx->state, SHA512_DIGEST_LENGTH);
  334 
  335         /* Clear the context state */
  336         memset(ctx, 0, sizeof (*ctx));
  337 }
  338 
  339 /* SHA-512t: ******************************************************** */
  340 /*
  341  * the SHA512t transforms are identical to SHA512 so reuse the existing function
  342  */
  343 void
  344 SHA512_224_Init(SHA512_CTX * ctx)
  345 {
  346 
  347         /* Zero bits processed so far */
  348         ctx->count[0] = ctx->count[1] = 0;
  349 
  350         /* Magic initialization constants */
  351         ctx->state[0] = 0x8c3d37c819544da2ULL;
  352         ctx->state[1] = 0x73e1996689dcd4d6ULL;
  353         ctx->state[2] = 0x1dfab7ae32ff9c82ULL;
  354         ctx->state[3] = 0x679dd514582f9fcfULL;
  355         ctx->state[4] = 0x0f6d2b697bd44da8ULL;
  356         ctx->state[5] = 0x77e36f7304c48942ULL;
  357         ctx->state[6] = 0x3f9d85a86a1d36c8ULL;
  358         ctx->state[7] = 0x1112e6ad91d692a1ULL;
  359 }
  360 
  361 void
  362 SHA512_224_Update(SHA512_CTX * ctx, const void *in, size_t len)
  363 {
  364 
  365         SHA512_Update(ctx, in, len);
  366 }
  367 
  368 void
  369 SHA512_224_Final(unsigned char digest[static SHA512_224_DIGEST_LENGTH],
  370     SHA512_CTX *ctx)
  371 {
  372 
  373         /* Add padding */
  374         SHA512_Pad(ctx);
  375 
  376         /* Write the hash */
  377         be64enc_vect(digest, ctx->state, SHA512_224_DIGEST_LENGTH);
  378 
  379         /* Clear the context state */
  380         memset(ctx, 0, sizeof (*ctx));
  381 }
  382 
  383 void
  384 SHA512_256_Init(SHA512_CTX * ctx)
  385 {
  386 
  387         /* Zero bits processed so far */
  388         ctx->count[0] = ctx->count[1] = 0;
  389 
  390         /* Magic initialization constants */
  391         ctx->state[0] = 0x22312194fc2bf72cULL;
  392         ctx->state[1] = 0x9f555fa3c84c64c2ULL;
  393         ctx->state[2] = 0x2393b86b6f53b151ULL;
  394         ctx->state[3] = 0x963877195940eabdULL;
  395         ctx->state[4] = 0x96283ee2a88effe3ULL;
  396         ctx->state[5] = 0xbe5e1e2553863992ULL;
  397         ctx->state[6] = 0x2b0199fc2c85b8aaULL;
  398         ctx->state[7] = 0x0eb72ddc81c52ca2ULL;
  399 }
  400 
  401 void
  402 SHA512_256_Update(SHA512_CTX * ctx, const void *in, size_t len)
  403 {
  404 
  405         SHA512_Update(ctx, in, len);
  406 }
  407 
  408 void
  409 SHA512_256_Final(unsigned char digest[static SHA512_256_DIGEST_LENGTH],
  410     SHA512_CTX * ctx)
  411 {
  412 
  413         /* Add padding */
  414         SHA512_Pad(ctx);
  415 
  416         /* Write the hash */
  417         be64enc_vect(digest, ctx->state, SHA512_256_DIGEST_LENGTH);
  418 
  419         /* Clear the context state */
  420         memset(ctx, 0, sizeof (*ctx));
  421 }
  422 
  423 /* ** SHA-384: ******************************************************** */
  424 /*
  425  * the SHA384 and SHA512 transforms are identical, so SHA384 is skipped
  426  */
  427 
  428 /* SHA-384 initialization.  Begins a SHA-384 operation. */
  429 void
  430 SHA384_Init(SHA384_CTX * ctx)
  431 {
  432 
  433         /* Zero bits processed so far */
  434         ctx->count[0] = ctx->count[1] = 0;
  435 
  436         /* Magic initialization constants */
  437         ctx->state[0] = 0xcbbb9d5dc1059ed8ULL;
  438         ctx->state[1] = 0x629a292a367cd507ULL;
  439         ctx->state[2] = 0x9159015a3070dd17ULL;
  440         ctx->state[3] = 0x152fecd8f70e5939ULL;
  441         ctx->state[4] = 0x67332667ffc00b31ULL;
  442         ctx->state[5] = 0x8eb44a8768581511ULL;
  443         ctx->state[6] = 0xdb0c2e0d64f98fa7ULL;
  444         ctx->state[7] = 0x47b5481dbefa4fa4ULL;
  445 }
  446 
  447 /* Add bytes into the SHA-384 hash */
  448 void
  449 SHA384_Update(SHA384_CTX * ctx, const void *in, size_t len)
  450 {
  451 
  452         SHA512_Update((SHA512_CTX *)ctx, in, len);
  453 }
  454 
  455 /*
  456  * SHA-384 finalization.  Pads the input data, exports the hash value,
  457  * and clears the context state.
  458  */
  459 void
  460 SHA384_Final(unsigned char digest[static SHA384_DIGEST_LENGTH], SHA384_CTX *ctx)
  461 {
  462 
  463         /* Add padding */
  464         SHA512_Pad((SHA512_CTX *)ctx);
  465 
  466         /* Write the hash */
  467         be64enc_vect(digest, ctx->state, SHA384_DIGEST_LENGTH);
  468 
  469         /* Clear the context state */
  470         memset(ctx, 0, sizeof (*ctx));
  471 }
  472 
  473 #if 0
  474 /*
  475  * When building libmd, provide weak references. Note: this is not
  476  * activated in the context of compiling these sources for internal
  477  * use in libcrypt.
  478  */
  479 #undef SHA512_Init
  480 __weak_reference(_libmd_SHA512_Init, SHA512_Init);
  481 #undef SHA512_Update
  482 __weak_reference(_libmd_SHA512_Update, SHA512_Update);
  483 #undef SHA512_Final
  484 __weak_reference(_libmd_SHA512_Final, SHA512_Final);
  485 #undef SHA512_Transform
  486 __weak_reference(_libmd_SHA512_Transform, SHA512_Transform);
  487 
  488 #undef SHA512_224_Init
  489 __weak_reference(_libmd_SHA512_224_Init, SHA512_224_Init);
  490 #undef SHA512_224_Update
  491 __weak_reference(_libmd_SHA512_224_Update, SHA512_224_Update);
  492 #undef SHA512_224_Final
  493 __weak_reference(_libmd_SHA512_224_Final, SHA512_224_Final);
  494 
  495 #undef SHA512_256_Init
  496 __weak_reference(_libmd_SHA512_256_Init, SHA512_256_Init);
  497 #undef SHA512_256_Update
  498 __weak_reference(_libmd_SHA512_256_Update, SHA512_256_Update);
  499 #undef SHA512_256_Final
  500 __weak_reference(_libmd_SHA512_256_Final, SHA512_256_Final);
  501 
  502 #undef SHA384_Init
  503 __weak_reference(_libmd_SHA384_Init, SHA384_Init);
  504 #undef SHA384_Update
  505 __weak_reference(_libmd_SHA384_Update, SHA384_Update);
  506 #undef SHA384_Final
  507 __weak_reference(_libmd_SHA384_Final, SHA384_Final);
  508 #endif

Cache object: 1420b28f09bd029e51991463772f7929


[ 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.