linux/arch/cris/include/uapi/arch-v32/arch/cryptocop.h
<<
>>
Prefs
   1/*
   2 * The device /dev/cryptocop is accessible using this driver using
   3 * CRYPTOCOP_MAJOR (254) and minor number 0.
   4 */
   5
   6#ifndef _UAPICRYPTOCOP_H
   7#define _UAPICRYPTOCOP_H
   8
   9#include <linux/uio.h>
  10
  11
  12#define CRYPTOCOP_SESSION_ID_NONE (0)
  13
  14typedef unsigned long long int cryptocop_session_id;
  15
  16/* cryptocop ioctls */
  17#define ETRAXCRYPTOCOP_IOCTYPE         (250)
  18
  19#define CRYPTOCOP_IO_CREATE_SESSION    _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 1, struct strcop_session_op)
  20#define CRYPTOCOP_IO_CLOSE_SESSION     _IOW(ETRAXCRYPTOCOP_IOCTYPE, 2, struct strcop_session_op)
  21#define CRYPTOCOP_IO_PROCESS_OP        _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 3, struct strcop_crypto_op)
  22#define CRYPTOCOP_IO_MAXNR             (3)
  23
  24typedef enum {
  25        cryptocop_cipher_des = 0,
  26        cryptocop_cipher_3des = 1,
  27        cryptocop_cipher_aes = 2,
  28        cryptocop_cipher_m2m = 3, /* mem2mem is essentially a NULL cipher with blocklength=1 */
  29        cryptocop_cipher_none
  30} cryptocop_cipher_type;
  31
  32typedef enum {
  33        cryptocop_digest_sha1 = 0,
  34        cryptocop_digest_md5 = 1,
  35        cryptocop_digest_none
  36} cryptocop_digest_type;
  37
  38typedef enum {
  39        cryptocop_csum_le = 0,
  40        cryptocop_csum_be = 1,
  41        cryptocop_csum_none
  42} cryptocop_csum_type;
  43
  44typedef enum {
  45        cryptocop_cipher_mode_ecb = 0,
  46        cryptocop_cipher_mode_cbc,
  47        cryptocop_cipher_mode_none
  48} cryptocop_cipher_mode;
  49
  50typedef enum {
  51        cryptocop_3des_eee = 0,
  52        cryptocop_3des_eed = 1,
  53        cryptocop_3des_ede = 2,
  54        cryptocop_3des_edd = 3,
  55        cryptocop_3des_dee = 4,
  56        cryptocop_3des_ded = 5,
  57        cryptocop_3des_dde = 6,
  58        cryptocop_3des_ddd = 7
  59} cryptocop_3des_mode;
  60
  61/* Usermode accessible (ioctl) operations. */
  62struct strcop_session_op{
  63        cryptocop_session_id    ses_id;
  64
  65        cryptocop_cipher_type   cipher; /* AES, DES, 3DES, m2m, none */
  66
  67        cryptocop_cipher_mode   cmode; /* ECB, CBC, none */
  68        cryptocop_3des_mode     des3_mode;
  69
  70        cryptocop_digest_type   digest; /* MD5, SHA1, none */
  71
  72        cryptocop_csum_type     csum;   /* BE, LE, none */
  73
  74        unsigned char           *key;
  75        size_t                  keylen;
  76};
  77
  78#define CRYPTOCOP_CSUM_LENGTH         (2)
  79#define CRYPTOCOP_MAX_DIGEST_LENGTH   (20)  /* SHA-1 20, MD5 16 */
  80#define CRYPTOCOP_MAX_IV_LENGTH       (16)  /* (3)DES==8, AES == 16 */
  81#define CRYPTOCOP_MAX_KEY_LENGTH      (32)
  82
  83struct strcop_crypto_op{
  84        cryptocop_session_id ses_id;
  85
  86        /* Indata. */
  87        unsigned char            *indata;
  88        size_t                   inlen; /* Total indata length. */
  89
  90        /* Cipher configuration. */
  91        unsigned char            do_cipher:1;
  92        unsigned char            decrypt:1; /* 1 == decrypt, 0 == encrypt */
  93        unsigned char            cipher_explicit:1;
  94        size_t                   cipher_start;
  95        size_t                   cipher_len;
  96        /* cipher_iv is used if do_cipher and cipher_explicit and the cipher
  97           mode is CBC.  The length is controlled by the type of cipher,
  98           e.g. DES/3DES 8 octets and AES 16 octets. */
  99        unsigned char            cipher_iv[CRYPTOCOP_MAX_IV_LENGTH];
 100        /* Outdata. */
 101        unsigned char            *cipher_outdata;
 102        size_t                   cipher_outlen;
 103
 104        /* digest configuration. */
 105        unsigned char            do_digest:1;
 106        size_t                   digest_start;
 107        size_t                   digest_len;
 108        /* Outdata.  The actual length is determined by the type of the digest. */
 109        unsigned char            digest[CRYPTOCOP_MAX_DIGEST_LENGTH];
 110
 111        /* Checksum configuration. */
 112        unsigned char            do_csum:1;
 113        size_t                   csum_start;
 114        size_t                   csum_len;
 115        /* Outdata. */
 116        unsigned char            csum[CRYPTOCOP_CSUM_LENGTH];
 117};
 118
 119
 120
 121
 122#endif /* _UAPICRYPTOCOP_H */
 123