Skip to content

Commit

Permalink
[CRYPTO] aes: Add wrappers for assembly routines
Browse files Browse the repository at this point in the history
The wrapper routines are required when asmlinkage differs from the usual
calling convention.  So we need to have them.  However, by rearranging
the parameters, they will get optimised away to a single jump for most
people.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Herbert Xu committed Jun 26, 2006
1 parent e805792 commit e90b1a2
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
14 changes: 12 additions & 2 deletions arch/i386/crypto/aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,16 @@ static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
return 0;
}

static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
aes_enc_blk(tfm, dst, src);
}

static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
aes_dec_blk(tfm, dst, src);
}

static struct crypto_alg aes_alg = {
.cra_name = "aes",
.cra_driver_name = "aes-i586",
Expand All @@ -478,8 +488,8 @@ static struct crypto_alg aes_alg = {
.cia_min_keysize = AES_MIN_KEY_SIZE,
.cia_max_keysize = AES_MAX_KEY_SIZE,
.cia_setkey = aes_set_key,
.cia_encrypt = aes_enc_blk,
.cia_decrypt = aes_dec_blk
.cia_encrypt = aes_encrypt,
.cia_decrypt = aes_decrypt
}
}
};
Expand Down
8 changes: 4 additions & 4 deletions arch/x86_64/crypto/aes-x86_64-asm.S
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,9 @@ FUNC: movq r1,r2; \
#define decrypt_final(TAB,OFFSET) \
round(TAB,OFFSET,R2,R1,R4,R3,R6,R5,R7,R10,R5,R6,R3,R4)

/* void aes_encrypt(stuct crypto_tfm *tfm, u8 *out, const u8 *in) */
/* void aes_enc_blk(stuct crypto_tfm *tfm, u8 *out, const u8 *in) */

entry(aes_encrypt,0,enc128,enc192)
entry(aes_enc_blk,0,enc128,enc192)
encrypt_round(aes_ft_tab,-96)
encrypt_round(aes_ft_tab,-80)
enc192: encrypt_round(aes_ft_tab,-64)
Expand All @@ -170,9 +170,9 @@ enc128: encrypt_round(aes_ft_tab,-32)
encrypt_final(aes_fl_tab,112)
return

/* void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) */
/* void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in) */

entry(aes_decrypt,240,dec128,dec192)
entry(aes_dec_blk,240,dec128,dec192)
decrypt_round(aes_it_tab,-96)
decrypt_round(aes_it_tab,-80)
dec192: decrypt_round(aes_it_tab,-64)
Expand Down
14 changes: 12 additions & 2 deletions arch/x86_64/crypto/aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,18 @@ static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
return 0;
}

extern void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in);
extern void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in);
asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);
asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);

static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
aes_enc_blk(tfm, dst, src);
}

static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
aes_dec_blk(tfm, dst, src);
}

static struct crypto_alg aes_alg = {
.cra_name = "aes",
Expand Down

0 comments on commit e90b1a2

Please sign in to comment.