红联Linux门户
Linux帮助

有没有大侠看linux 内核Crypto----加密模块的,有没有,有木有???

发布时间:2011-08-05 20:31:02来源:红联作者:梦醒潇湘1
有没有人看linux 内核Crypto----加密模块的。今遇到了一个问题,感到非常的疑惑,请大牛帮帮解决疑惑,谢谢!!!
疑惑如下:
crypto文件夹下有个tcrypt.c是个测试模块,按照其代码一句一句的看下去,就拿cipher这类加密算法来说吧。。。。在testmgr.c中有函数:
static int test_cipher(struct crypto_cipher *tfm, struct cipher_testvec *template, unsigned int tcount),其中如果加密的话,最后执行 是函数:crypto_cipher_encrypt_one(, , ),然后,我沿着此函数一直往下走,如下过程:
//加密函数原型
static inline void crypto_cipher_encrypt_one(struct crypto_cipher *tfm, u8 *dst, const u8 *src)
{
crypto_cipher_crt(tfm)->cit_encrypt_one(crypto_cipher_tfm(tfm),dst, src);
}
首先,crypto_cipher_tfm(tfm)返回的是:tfm->base
其次,crypto_cipher_crt(tfm)返回的是:crypto_cipher_tfm(tfm)->crt_cipher
即:tfm->base->crt_cipher
最终可以转化为:
//经上述转化后的加密函数
static inline void crypto_cipher_encrypt_one(struct crypto_cipher *tfm,
u8 *dst, const u8 *src)
{
tfm->base->crt_cipher->cit_encrypt_one(tfm->base,dst, src);
}
再看以下三个结够体:
#define crt_cipher crt_u.cipher
struct crypto_tfm {
u32 crt_flags;
union {
struct ablkcipher_tfm ablkcipher;
struct aead_tfm aead;
struct blkcipher_tfm blkcipher;
struct cipher_tfm cipher;
struct hash_tfm hash;
struct compress_tfm compress;
struct rng_tfm rng;
} crt_u;
void (*exit)(struct crypto_tfm *tfm);
struct crypto_alg *__crt_alg;
void *__crt_ctx[] CRYPTO_MINALIGN_ATTR;
};
struct crypto_cipher {
struct crypto_tfm base;
};
struct cipher_tfm {
int (*cit_setkey)(struct crypto_tfm *tfm,
const u8 *key, unsigned int keylen);
//加密
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);

};

最后该类函数调用的是:
加密函数: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);

然后,走到这两个函数后,内核中的代码就走不下去了,疑问:
但是,如果具体到某种加密算法的话,如sha1(有可能不是该类,就是这么个意思。),最终并没执行或者调用crypto文件夹下的sha1_generic.c文件或者其中的函数啊??按道理应该会执行该文件或者调用其中的函数的 啊???

有谁来解决疑惑???
文章评论

共有 1 条评论

  1. 梦醒潇湘 于 2011-08-06 09:43:06发表:

    没有人熟悉这块么??