]> 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 67830e7c2c318e2d75d43e3ae587a65719835506..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);
 };
@@ -572,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)
 {
@@ -581,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;
 }