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/crypto/cryptodev.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 /*      $OpenBSD: cryptodev.h,v 1.82 2022/05/03 09:18:11 claudio Exp $  */
    2 
    3 /*
    4  * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
    5  *
    6  * This code was written by Angelos D. Keromytis in Athens, Greece, in
    7  * February 2000. Network Security Technologies Inc. (NSTI) kindly
    8  * supported the development of this code.
    9  *
   10  * Copyright (c) 2000 Angelos D. Keromytis
   11  *
   12  * Permission to use, copy, and modify this software with or without fee
   13  * is hereby granted, provided that this entire notice is included in
   14  * all source code copies of any software which is or includes a copy or
   15  * modification of this software.
   16  *
   17  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
   18  * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
   19  * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
   20  * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
   21  * PURPOSE.
   22  *
   23  * Copyright (c) 2001 Theo de Raadt
   24  *
   25  * Redistribution and use in source and binary forms, with or without
   26  * modification, are permitted provided that the following conditions
   27  * are met:
   28  *
   29  * 1. Redistributions of source code must retain the above copyright
   30  *    notice, this list of conditions and the following disclaimer.
   31  * 2. Redistributions in binary form must reproduce the above copyright
   32  *    notice, this list of conditions and the following disclaimer in the
   33  *    documentation and/or other materials provided with the distribution.
   34  *
   35  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   36  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   38  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   39  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   40  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   41  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   42  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   43  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   44  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   45  *
   46  * Effort sponsored in part by the Defense Advanced Research Projects
   47  * Agency (DARPA) and Air Force Research Laboratory, Air Force
   48  * Materiel Command, USAF, under agreement number F30602-01-2-0537.
   49  *
   50  */
   51 
   52 #ifndef _CRYPTO_CRYPTO_H_
   53 #define _CRYPTO_CRYPTO_H_
   54 
   55 #include <sys/task.h>
   56 
   57 /* Some initial values */
   58 #define CRYPTO_DRIVERS_INITIAL  4
   59 #define CRYPTO_DRIVERS_MAX      128
   60 #define CRYPTO_SW_SESSIONS      32
   61 
   62 /* HMAC values */
   63 #define HMAC_MD5_BLOCK_LEN      64
   64 #define HMAC_SHA1_BLOCK_LEN     64
   65 #define HMAC_RIPEMD160_BLOCK_LEN 64
   66 #define HMAC_SHA2_256_BLOCK_LEN 64
   67 #define HMAC_SHA2_384_BLOCK_LEN 128
   68 #define HMAC_SHA2_512_BLOCK_LEN 128
   69 #define HMAC_MAX_BLOCK_LEN      HMAC_SHA2_512_BLOCK_LEN /* keep in sync */
   70 #define HMAC_IPAD_VAL           0x36
   71 #define HMAC_OPAD_VAL           0x5C
   72 
   73 /* Encryption algorithm block sizes */
   74 #define DES3_BLOCK_LEN          8
   75 #define BLOWFISH_BLOCK_LEN      8
   76 #define CAST128_BLOCK_LEN       8
   77 #define RIJNDAEL128_BLOCK_LEN   16
   78 #define CHACHA20_BLOCK_LEN      64
   79 #define EALG_MAX_BLOCK_LEN      64 /* Keep this updated */
   80 
   81 /* Maximum hash algorithm result length */
   82 #define AALG_MAX_RESULT_LEN     64 /* Keep this updated */
   83 
   84 #define CRYPTO_3DES_CBC         1
   85 #define CRYPTO_BLF_CBC          2
   86 #define CRYPTO_CAST_CBC         3
   87 #define CRYPTO_MD5_HMAC         4
   88 #define CRYPTO_SHA1_HMAC        5
   89 #define CRYPTO_RIPEMD160_HMAC   6
   90 #define CRYPTO_RIJNDAEL128_CBC  7  /* 128 bit blocksize */
   91 #define CRYPTO_AES_CBC          7  /* 128 bit blocksize -- the same as above */
   92 #define CRYPTO_DEFLATE_COMP     8  /* Deflate compression algorithm */
   93 #define CRYPTO_NULL             9
   94 #define CRYPTO_SHA2_256_HMAC    11
   95 #define CRYPTO_SHA2_384_HMAC    12
   96 #define CRYPTO_SHA2_512_HMAC    13
   97 #define CRYPTO_AES_CTR          14
   98 #define CRYPTO_AES_XTS          15
   99 #define CRYPTO_AES_GCM_16       16
  100 #define CRYPTO_AES_128_GMAC     17
  101 #define CRYPTO_AES_192_GMAC     18
  102 #define CRYPTO_AES_256_GMAC     19
  103 #define CRYPTO_AES_GMAC         20
  104 #define CRYPTO_CHACHA20_POLY1305        21
  105 #define CRYPTO_CHACHA20_POLY1305_MAC    22
  106 #define CRYPTO_ESN              23 /* Support for Extended Sequence Numbers */
  107 #define CRYPTO_ALGORITHM_MAX    23 /* Keep updated */
  108 
  109 /* Algorithm flags */
  110 #define CRYPTO_ALG_FLAG_SUPPORTED       0x01 /* Algorithm is supported */
  111 
  112 /* Standard initialization structure beginning */
  113 struct cryptoini {
  114         int             cri_alg;        /* Algorithm to use */
  115         int             cri_klen;       /* Key length, in bits */
  116         int             cri_rnd;        /* Algorithm rounds, where relevant */
  117         caddr_t         cri_key;        /* key to use */
  118         union {
  119                 u_int8_t        iv[EALG_MAX_BLOCK_LEN]; /* IV to use */
  120                 u_int8_t        esn[4];                 /* high-order ESN */
  121         } u;
  122 #define cri_iv          u.iv
  123 #define cri_esn         u.esn
  124         struct cryptoini *cri_next;
  125 };
  126 
  127 /* Describe boundaries of a single crypto operation */
  128 struct cryptodesc {
  129         int             crd_skip;       /* How many bytes to ignore from start */
  130         int             crd_len;        /* How many bytes to process */
  131         int             crd_inject;     /* Where to inject results, if applicable */
  132         int             crd_flags;
  133 
  134 #define CRD_F_ENCRYPT           0x01    /* Set when doing encryption */
  135 #define CRD_F_IV_PRESENT        0x02    /* When encrypting, IV is already in
  136                                            place, so don't copy. */
  137 #define CRD_F_IV_EXPLICIT       0x04    /* IV explicitly provided */
  138 #define CRD_F_COMP              0x10    /* Set when doing compression */
  139 #define CRD_F_ESN               0x20    /* Set when ESN field is provided */
  140 
  141         struct cryptoini        CRD_INI; /* Initialization/context data */
  142 #define crd_esn         CRD_INI.cri_esn
  143 #define crd_iv          CRD_INI.cri_iv
  144 #define crd_key         CRD_INI.cri_key
  145 #define crd_rnd         CRD_INI.cri_rnd
  146 #define crd_alg         CRD_INI.cri_alg
  147 #define crd_klen        CRD_INI.cri_klen
  148 };
  149 
  150 /* Structure describing complete operation */
  151 struct cryptop {
  152         u_int64_t       crp_sid;        /* Session ID */
  153         int             crp_ilen;       /* Input data total length */
  154         int             crp_olen;       /* Result total length */
  155         int             crp_alloctype;  /* Type of buf to allocate if needed */
  156 
  157         int             crp_flags;
  158 
  159 #define CRYPTO_F_IMBUF  0x0001  /* Input/output are mbuf chains, otherwise contig */
  160 #define CRYPTO_F_IOV    0x0002  /* Input/output are uio */
  161 
  162         void            *crp_buf;       /* Data to be processed */
  163 
  164         struct cryptodesc *crp_desc;    /* List of processing descriptors */
  165         struct cryptodesc crp_sdesc[2]; /* Static array for small ops */
  166         int              crp_ndesc;     /* Amount of descriptors to use */
  167         int              crp_ndescalloc;/* Amount of descriptors allocated */
  168 
  169         caddr_t         crp_mac;
  170 };
  171 
  172 #define CRYPTO_BUF_IOV          0x1
  173 #define CRYPTO_BUF_MBUF         0x2
  174 
  175 #define CRYPTO_OP_DECRYPT       0x0
  176 #define CRYPTO_OP_ENCRYPT       0x1
  177 
  178 /* Crypto capabilities structure */
  179 struct cryptocap {
  180         u_int64_t       cc_operations;  /* Counter of how many ops done */
  181         u_int64_t       cc_bytes;       /* Counter of how many bytes done */
  182 
  183         u_int32_t       cc_sessions;    /* How many sessions allocated */
  184 
  185         /* Symmetric/hash algorithms supported */
  186         int             cc_alg[CRYPTO_ALGORITHM_MAX + 1];
  187 
  188         u_int8_t        cc_flags;
  189 #define CRYPTOCAP_F_CLEANUP     0x01
  190 #define CRYPTOCAP_F_SOFTWARE    0x02
  191 #define CRYPTOCAP_F_MPSAFE      0x04
  192 
  193         int             (*cc_newsession) (u_int32_t *, struct cryptoini *);
  194         int             (*cc_process) (struct cryptop *);
  195         int             (*cc_freesession) (u_int64_t);
  196 };
  197 
  198 void    crypto_init(void);
  199 
  200 int     crypto_newsession(u_int64_t *, struct cryptoini *, int);
  201 int     crypto_freesession(u_int64_t);
  202 int     crypto_register(u_int32_t, int *,
  203             int (*)(u_int32_t *, struct cryptoini *), int (*)(u_int64_t),
  204             int (*)(struct cryptop *));
  205 int     crypto_unregister(u_int32_t, int);
  206 int32_t crypto_get_driverid(u_int8_t);
  207 int     crypto_invoke(struct cryptop *);
  208 
  209 void    cuio_copydata(struct uio *, int, int, caddr_t);
  210 void    cuio_copyback(struct uio *, int, int, const void *);
  211 int     cuio_getptr(struct uio *, int, int *);
  212 int     cuio_apply(struct uio *, int, int,
  213             int (*f)(caddr_t, caddr_t, unsigned int), caddr_t);
  214 
  215 struct  cryptop *crypto_getreq(int);
  216 void    crypto_freereq(struct cryptop *);
  217 #endif /* _CRYPTO_CRYPTO_H_ */

Cache object: b1eee53abb924914a9056bcaa090556c


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