]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/md/dm-verity.h
dm verity: switch to using asynchronous hash crypto API
[karo-tx-linux.git] / drivers / md / dm-verity.h
index fb419f422d7316f4e4e120cdb275e5222b3972f5..a59e0ada6fd32d01b80c4032a25a67c90b048417 100644 (file)
@@ -37,7 +37,7 @@ struct dm_verity {
        struct dm_target *ti;
        struct dm_bufio_client *bufio;
        char *alg_name;
-       struct crypto_shash *tfm;
+       struct crypto_ahash *tfm;
        u8 *root_digest;        /* digest of the root block */
        u8 *salt;               /* salt: its size is salt_size */
        u8 *zero_digest;        /* digest for a zero block */
@@ -52,7 +52,7 @@ struct dm_verity {
        unsigned char levels;   /* the number of tree levels */
        unsigned char version;
        unsigned digest_size;   /* digest size for the current hash algorithm */
-       unsigned shash_descsize;/* the size of temporary space for crypto */
+       unsigned int ahash_reqsize;/* the size of temporary space for crypto */
        int hash_failed;        /* set to 1 if hash of any block failed */
        enum verity_mode mode;  /* mode for handling verification errors */
        unsigned corrupted_errs;/* Number of errors for corrupted blocks */
@@ -81,31 +81,36 @@ struct dm_verity_io {
        /*
         * Three variably-size fields follow this struct:
         *
-        * u8 hash_desc[v->shash_descsize];
+        * u8 hash_req[v->ahash_reqsize];
         * u8 real_digest[v->digest_size];
         * u8 want_digest[v->digest_size];
         *
-        * To access them use: verity_io_hash_desc(), verity_io_real_digest()
+        * To access them use: verity_io_hash_req(), verity_io_real_digest()
         * and verity_io_want_digest().
         */
 };
 
-static inline struct shash_desc *verity_io_hash_desc(struct dm_verity *v,
+struct verity_result {
+       struct completion completion;
+       int err;
+};
+
+static inline struct ahash_request *verity_io_hash_req(struct dm_verity *v,
                                                     struct dm_verity_io *io)
 {
-       return (struct shash_desc *)(io + 1);
+       return (struct ahash_request *)(io + 1);
 }
 
 static inline u8 *verity_io_real_digest(struct dm_verity *v,
                                        struct dm_verity_io *io)
 {
-       return (u8 *)(io + 1) + v->shash_descsize;
+       return (u8 *)(io + 1) + v->ahash_reqsize;
 }
 
 static inline u8 *verity_io_want_digest(struct dm_verity *v,
                                        struct dm_verity_io *io)
 {
-       return (u8 *)(io + 1) + v->shash_descsize + v->digest_size;
+       return (u8 *)(io + 1) + v->ahash_reqsize + v->digest_size;
 }
 
 static inline u8 *verity_io_digest_end(struct dm_verity *v,
@@ -120,7 +125,7 @@ extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io,
                                              struct dm_verity_io *io,
                                              u8 *data, size_t len));
 
-extern int verity_hash(struct dm_verity *v, struct shash_desc *desc,
+extern int verity_hash(struct dm_verity *v, struct ahash_request *req,
                       const u8 *data, size_t len, u8 *digest);
 
 extern int verity_hash_for_block(struct dm_verity *v, struct dm_verity_io *io,