]> err.no Git - linux-2.6/blobdiff - include/linux/crypto.h
libata: implement BROKEN_HPA horkage and apply it to affected drives
[linux-2.6] / include / linux / crypto.h
index d4d05313280c5643a4c0b05e2f388d901bb581f1..357e8cfedc375674f27887f48c597cc2222e5287 100644 (file)
@@ -93,6 +93,7 @@ struct crypto_ablkcipher;
 struct crypto_async_request;
 struct crypto_blkcipher;
 struct crypto_hash;
+struct crypto_queue;
 struct crypto_tfm;
 struct crypto_type;
 
@@ -143,6 +144,19 @@ struct hash_desc {
  * Algorithms: modular crypto algorithm implementations, managed
  * via crypto_register_alg() and crypto_unregister_alg().
  */
+struct ablkcipher_alg {
+       int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key,
+                     unsigned int keylen);
+       int (*encrypt)(struct ablkcipher_request *req);
+       int (*decrypt)(struct ablkcipher_request *req);
+
+       struct crypto_queue *queue;
+
+       unsigned int min_keysize;
+       unsigned int max_keysize;
+       unsigned int ivsize;
+};
+
 struct blkcipher_alg {
        int (*setkey)(struct crypto_tfm *tfm, const u8 *key,
                      unsigned int keylen);
@@ -197,6 +211,7 @@ struct compress_alg {
                              unsigned int slen, u8 *dst, unsigned int *dlen);
 };
 
+#define cra_ablkcipher cra_u.ablkcipher
 #define cra_blkcipher  cra_u.blkcipher
 #define cra_cipher     cra_u.cipher
 #define cra_digest     cra_u.digest
@@ -221,6 +236,7 @@ struct crypto_alg {
        const struct crypto_type *cra_type;
 
        union {
+               struct ablkcipher_alg ablkcipher;
                struct blkcipher_alg blkcipher;
                struct cipher_alg cipher;
                struct digest_alg digest;
@@ -279,28 +295,8 @@ struct blkcipher_tfm {
 };
 
 struct cipher_tfm {
-       void *cit_iv;
-       unsigned int cit_ivsize;
-       u32 cit_mode;
        int (*cit_setkey)(struct crypto_tfm *tfm,
                          const u8 *key, unsigned int keylen);
-       int (*cit_encrypt)(struct crypto_tfm *tfm,
-                          struct scatterlist *dst,
-                          struct scatterlist *src,
-                          unsigned int nbytes);
-       int (*cit_encrypt_iv)(struct crypto_tfm *tfm,
-                             struct scatterlist *dst,
-                             struct scatterlist *src,
-                             unsigned int nbytes, u8 *iv);
-       int (*cit_decrypt)(struct crypto_tfm *tfm,
-                          struct scatterlist *dst,
-                          struct scatterlist *src,
-                          unsigned int nbytes);
-       int (*cit_decrypt_iv)(struct crypto_tfm *tfm,
-                          struct scatterlist *dst,
-                          struct scatterlist *src,
-                          unsigned int nbytes, u8 *iv);
-       void (*cit_xor_block)(u8 *dst, const u8 *src);
        void (*cit_encrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
        void (*cit_decrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
 };
@@ -372,12 +368,21 @@ struct crypto_hash {
 enum {
        CRYPTOA_UNSPEC,
        CRYPTOA_ALG,
+       CRYPTOA_TYPE,
+       __CRYPTOA_MAX,
 };
 
+#define CRYPTOA_MAX (__CRYPTOA_MAX - 1)
+
 struct crypto_attr_alg {
        char name[CRYPTO_MAX_ALG_NAME];
 };
 
+struct crypto_attr_type {
+       u32 type;
+       u32 mask;
+};
+
 /* 
  * Transform user interface.
  */
@@ -563,6 +568,18 @@ static inline int crypto_ablkcipher_reqsize(struct crypto_ablkcipher *tfm)
        return crypto_ablkcipher_crt(tfm)->reqsize;
 }
 
+static inline void ablkcipher_request_set_tfm(
+       struct ablkcipher_request *req, struct crypto_ablkcipher *tfm)
+{
+       req->base.tfm = crypto_ablkcipher_tfm(tfm);
+}
+
+static inline struct ablkcipher_request *ablkcipher_request_cast(
+       struct crypto_async_request *req)
+{
+       return container_of(req, struct ablkcipher_request, base);
+}
+
 static inline struct ablkcipher_request *ablkcipher_request_alloc(
        struct crypto_ablkcipher *tfm, gfp_t gfp)
 {
@@ -572,7 +589,7 @@ static inline struct ablkcipher_request *ablkcipher_request_alloc(
                      crypto_ablkcipher_reqsize(tfm), gfp);
 
        if (likely(req))
-               req->base.tfm = crypto_ablkcipher_tfm(tfm);
+               ablkcipher_request_set_tfm(req, tfm);
 
        return req;
 }