|
@@ -52,6 +52,7 @@
|
|
* @base: Common attributes for async crypto requests
|
|
* @base: Common attributes for async crypto requests
|
|
* @assoclen: Length in bytes of associated data for authentication
|
|
* @assoclen: Length in bytes of associated data for authentication
|
|
* @cryptlen: Length of data to be encrypted or decrypted
|
|
* @cryptlen: Length of data to be encrypted or decrypted
|
|
|
|
+ * @cryptoff: Bytes to skip after AD before plain/cipher text
|
|
* @iv: Initialisation vector
|
|
* @iv: Initialisation vector
|
|
* @assoc: Associated data
|
|
* @assoc: Associated data
|
|
* @src: Source data
|
|
* @src: Source data
|
|
@@ -61,8 +62,11 @@
|
|
struct aead_request {
|
|
struct aead_request {
|
|
struct crypto_async_request base;
|
|
struct crypto_async_request base;
|
|
|
|
|
|
|
|
+ bool old;
|
|
|
|
+
|
|
unsigned int assoclen;
|
|
unsigned int assoclen;
|
|
unsigned int cryptlen;
|
|
unsigned int cryptlen;
|
|
|
|
+ unsigned int cryptoff;
|
|
|
|
|
|
u8 *iv;
|
|
u8 *iv;
|
|
|
|
|
|
@@ -314,10 +318,7 @@ static inline int crypto_aead_decrypt(struct aead_request *req)
|
|
*
|
|
*
|
|
* Return: number of bytes
|
|
* Return: number of bytes
|
|
*/
|
|
*/
|
|
-static inline unsigned int crypto_aead_reqsize(struct crypto_aead *tfm)
|
|
|
|
-{
|
|
|
|
- return tfm->reqsize;
|
|
|
|
-}
|
|
|
|
|
|
+unsigned int crypto_aead_reqsize(struct crypto_aead *tfm);
|
|
|
|
|
|
/**
|
|
/**
|
|
* aead_request_set_tfm() - update cipher handle reference in request
|
|
* aead_request_set_tfm() - update cipher handle reference in request
|
|
@@ -417,6 +418,9 @@ static inline void aead_request_set_callback(struct aead_request *req,
|
|
* destination is the ciphertext. For a decryption operation, the use is
|
|
* destination is the ciphertext. For a decryption operation, the use is
|
|
* reversed - the source is the ciphertext and the destination is the plaintext.
|
|
* reversed - the source is the ciphertext and the destination is the plaintext.
|
|
*
|
|
*
|
|
|
|
+ * For both src/dst the layout is associated data, skipped data,
|
|
|
|
+ * plain/cipher text, authentication tag.
|
|
|
|
+ *
|
|
* IMPORTANT NOTE AEAD requires an authentication tag (MAC). For decryption,
|
|
* IMPORTANT NOTE AEAD requires an authentication tag (MAC). For decryption,
|
|
* the caller must concatenate the ciphertext followed by the
|
|
* the caller must concatenate the ciphertext followed by the
|
|
* authentication tag and provide the entire data stream to the
|
|
* authentication tag and provide the entire data stream to the
|
|
@@ -449,8 +453,7 @@ static inline void aead_request_set_crypt(struct aead_request *req,
|
|
* @assoc: associated data scatter / gather list
|
|
* @assoc: associated data scatter / gather list
|
|
* @assoclen: number of bytes to process from @assoc
|
|
* @assoclen: number of bytes to process from @assoc
|
|
*
|
|
*
|
|
- * For encryption, the memory is filled with the associated data. For
|
|
|
|
- * decryption, the memory must point to the associated data.
|
|
|
|
|
|
+ * Obsolete, do not use.
|
|
*/
|
|
*/
|
|
static inline void aead_request_set_assoc(struct aead_request *req,
|
|
static inline void aead_request_set_assoc(struct aead_request *req,
|
|
struct scatterlist *assoc,
|
|
struct scatterlist *assoc,
|
|
@@ -458,6 +461,26 @@ static inline void aead_request_set_assoc(struct aead_request *req,
|
|
{
|
|
{
|
|
req->assoc = assoc;
|
|
req->assoc = assoc;
|
|
req->assoclen = assoclen;
|
|
req->assoclen = assoclen;
|
|
|
|
+ req->old = true;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * aead_request_set_ad - set associated data information
|
|
|
|
+ * @req: request handle
|
|
|
|
+ * @assoclen: number of bytes in associated data
|
|
|
|
+ * @cryptoff: Number of bytes to skip after AD before plain/cipher text
|
|
|
|
+ *
|
|
|
|
+ * Setting the AD information. This function sets the length of
|
|
|
|
+ * the associated data and the number of bytes to skip after it to
|
|
|
|
+ * access the plain/cipher text.
|
|
|
|
+ */
|
|
|
|
+static inline void aead_request_set_ad(struct aead_request *req,
|
|
|
|
+ unsigned int assoclen,
|
|
|
|
+ unsigned int cryptoff)
|
|
|
|
+{
|
|
|
|
+ req->assoclen = assoclen;
|
|
|
|
+ req->cryptoff = cryptoff;
|
|
|
|
+ req->old = false;
|
|
}
|
|
}
|
|
|
|
|
|
static inline struct crypto_aead *aead_givcrypt_reqtfm(
|
|
static inline struct crypto_aead *aead_givcrypt_reqtfm(
|