Linux Box 에 설치된 암호화 알고리즘의 목록을 확인해 보려면 /proc/crypto 파일을 보면 된다.
crypto 알고리즘을 등록할 때 사용하는 구조체인 struct crypto_alg 를 살펴보면 알고리즘 이름, 드라이버 이름을 지정하게 되어 있다.
하지만 md5 모듈을 보면 driver 이름은 지정하고 있지 않은 것을 확인 할 수 있다.
드라이버 이름을 지정하지 않았는데도 어떻게 "md5-generic" 라는 이름이 잡혀 있을까?
그건 아래 코드와 같이 강제로 지정해 주기 때문이다.
poplinux@poplinux:/proc$ cat crypto name : hmac(sha1) driver : hmac(sha1-generic) module : kernel priority : 0 refcnt : 1 selftest : passed type : shash blocksize : 64 digestsize : 20 . . . nake : md5 driver : md5-generic module : kernel priority : 0 refcnt : 9 selftest : passed type : shash blocksize : 64 digestsize : 16 |
crypto 알고리즘을 등록할 때 사용하는 구조체인 struct crypto_alg 를 살펴보면 알고리즘 이름, 드라이버 이름을 지정하게 되어 있다.
하지만 md5 모듈을 보면 driver 이름은 지정하고 있지 않은 것을 확인 할 수 있다.
crypto/md5.c static struct shash_alg alg = { .digestsize = MD5_DIGEST_SIZE, .init = md5_init, .update = md5_update, .final = md5_final, .export = md5_export, .import = md5_import, .descsize = sizeof(struct md5_sate), .statesize = sizeof(struct md5_state), .base = { .cra_name = "md5", .cra_flags = CRYPTO_ALG_TYPE_SHASH, .cra_blocksize = MD5_HMAC_BLOCK_SIZE, .cra_module = THIS_MODULE, } }; |
드라이버 이름을 지정하지 않았는데도 어떻게 "md5-generic" 라는 이름이 잡혀 있을까?
그건 아래 코드와 같이 강제로 지정해 주기 때문이다.
crypto/algapi.c static inline int crypto_set_driver_name(struct crypto_alg *alg) { static const char suffix[]= "-generic"; char *driver_name = alg->cra_driver_name; int len; if(*driver_name) return 0; len = strlcpy(driver_name, alg->cra_name, CRYPTO_MAX_ALG_NAME); if(len + sizeof(suffix) > CRYPTO_MAX_ALG_NAME) return -ENAMETOLONG; memcpy(driver_name + len, suffix, sizeof(suffix)); return 0; } |
'development' 카테고리의 다른 글
[crypto] 암호화 알고리즘 정리 (0) | 2011.10.17 |
---|---|
[crypto] Async MD5 example (0) | 2011.10.17 |
[crypto] ASync Hash api (0) | 2011.10.12 |
[kernel] 동기화 기능. completion() (0) | 2011.10.10 |
[crypto] ASync crypto 와 Sync crypto api 함수명 특징 (0) | 2011.10.10 |