root/lib/af_alg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. afalg_buffer
  2. afalg_stream

     1 /* af_alg.h - Compute message digests from file streams and buffers.
     2    Copyright (C) 2018-2023 Free Software Foundation, Inc.
     3 
     4    This file is free software: you can redistribute it and/or modify
     5    it under the terms of the GNU Lesser General Public License as
     6    published by the Free Software Foundation; either version 2.1 of the
     7    License, or (at your option) any later version.
     8 
     9    This file is distributed in the hope that it will be useful,
    10    but WITHOUT ANY WARRANTY; without even the implied warranty of
    11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12    GNU Lesser General Public License for more details.
    13 
    14    You should have received a copy of the GNU Lesser General Public License
    15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
    16 
    17 /* Written by Matteo Croce <mcroce@redhat.com>, 2018.
    18    Documentation by Bruno Haible <bruno@clisp.org>, 2018.  */
    19 
    20 /* Declare specific functions for computing message digests
    21    using the Linux kernel crypto API, if available.  This kernel API gives
    22    access to specialized crypto instructions (that would also be available
    23    in user space) or to crypto devices (not directly available in user space).
    24 
    25    For a more complete set of facilities that use the Linux kernel crypto API,
    26    look at libkcapi.  */
    27 
    28 #ifndef AF_ALG_H
    29 # define AF_ALG_H 1
    30 
    31 # include <stdio.h>
    32 # include <errno.h>
    33 
    34 # ifdef __cplusplus
    35 extern "C" {
    36 # endif
    37 
    38 # if USE_LINUX_CRYPTO_API
    39 
    40 /* Compute a message digest of a memory region.
    41 
    42    The memory region starts at BUFFER and is LEN bytes long.
    43 
    44    ALG is the message digest algorithm; see the file /proc/crypto.
    45 
    46    RESBLOCK points to a block of HASHLEN bytes, for the result.
    47    HASHLEN must be the length of the message digest, in bytes, in particular:
    48 
    49       alg    | hashlen
    50       -------+--------
    51       md5    | 16
    52       sha1   | 20
    53       sha224 | 28
    54       sha256 | 32
    55       sha384 | 48
    56       sha512 | 64
    57 
    58    If successful, fill RESBLOCK and return 0.
    59    Upon failure, return a negated error number.  */
    60 int
    61 afalg_buffer (const char *buffer, size_t len, const char *alg,
    62               void *resblock, ssize_t hashlen);
    63 
    64 /* Compute a message digest of data read from STREAM.
    65 
    66    STREAM is an open file stream.  The last operation on STREAM should
    67    not be 'ungetc', and if STREAM is also open for writing it should
    68    have been fflushed since its last write.  Read from the current
    69    position to the end of STREAM.  Handle regular files efficiently.
    70 
    71    ALG is the message digest algorithm; see the file /proc/crypto.
    72 
    73    RESBLOCK points to a block of HASHLEN bytes, for the result.
    74    HASHLEN must be the length of the message digest, in bytes, in particular:
    75 
    76       alg    | hashlen
    77       -------+--------
    78       md5    | 16
    79       sha1   | 20
    80       sha224 | 28
    81       sha256 | 32
    82       sha384 | 48
    83       sha512 | 64
    84 
    85    If successful, fill RESBLOCK and return 0.
    86    Upon failure, return a negated error number.
    87    Unless returning 0 or -EIO, restore STREAM's file position so that
    88    the caller can fall back on some other method.  */
    89 int
    90 afalg_stream (FILE *stream, const char *alg,
    91               void *resblock, ssize_t hashlen);
    92 
    93 # else
    94 
    95 static inline int
    96 afalg_buffer (const char *buffer, size_t len, const char *alg,
    97               void *resblock, ssize_t hashlen)
    98 {
    99   return -EAFNOSUPPORT;
   100 }
   101 
   102 static inline int
   103 afalg_stream (FILE *stream, const char *alg,
   104               void *resblock, ssize_t hashlen)
   105 {
   106   return -EAFNOSUPPORT;
   107 }
   108 
   109 # endif
   110 
   111 # ifdef __cplusplus
   112 }
   113 # endif
   114 
   115 #endif /* AF_ALG_H */

/* [<][>][^][v][top][bottom][index][help] */