2014-02-20 1 views
1

코드를 온라인으로 보았지만 ablkcipher_request_set_callback()에 대한 명확하고 직접적인 설명은 거의 없습니다.ablkcipher_request_set_callback의 기능은 무엇입니까?

include/linux/crypto.h에는 0 개의 설명이 있습니다. 누구든지 통찰력을주고 어떻게이 기능을 사용할 수 있습니까?

+2

다른 사람이 비 건설적인 자격 기준을 지정하는 대신 질문에 대답 할 수 있습니까? 감사합니다. – Babbit

+0

왜 알고 싶습니까? – immibis

+0

지금까지 무엇을 얻었습니까? 당신이하려고하는 것은 무엇입니까? –

답변

3

이것은 Linux 암호화 프레임 워크의 기능입니다.

간단한 이론은 다음과 같습니다

리눅스 암호화 프레임 워크는 AES, DES와 같은 cryption/암호 해독 작업을 할 수있는 당신의 기계의 HW 칩이있을 수 있습니다 가정합니다.

그래서이 HW 칩에 요청을 구성합니다. 그리고 칩은 CPU와 병렬로 작업을 수행합니다.

요청으로 HW 칩을 완료 한 후에는 IRQ에 의해 일반적으로 완료 이벤트에 대해 CPU에 알립니다.

그런 다음 IRQ 처리기 (실제로는 대부분의 경우 하단) 은 요청에 지정한 콜백 함수를 실행합니다.

그래서 : ablkcipher_request_set_callback()은 암호화/암호 해독 요청의 콜백 기능 을 설정하는 것입니다.

당신은 IPSec 프로토콜을 실행하는 가정 :

실제 예는 같다. 로직을 수행합니다 :

" 암호화가 완료되면이 패킷을 전송하십시오."콜백 기능을 사용하여 패킷 암호화 요청을 구성하십시오.

HW 칩 드라이버 및 HW 칩에 암호화 요청을 제출하십시오.

HW 칩이이 패킷을 암호화 한 후, HW 칩 드라이버 은 "이 암호화 된 패킷을 전송합니다"라는 콜백 기능을 실행합니다.

========================== ===========================

IPsec은 aead_givcrypt_set_callback()

하지 ablkcipher_request_set_callback()

사용 "ablkcipher"는 AES와 같은 "블록 암호", "비동기"(CPU와 병렬 실행)의 "a"표준을 의미합니다.

"aead"는 ("ablkcipher"+ 해시 값 계산) 알고리즘의 조합으로 간주 될 수 있습니다. IPsec의 경우 해시 값은 패킷 CRC입니다.

은 IPSec을 코드 조각을 추가 : #를 $ (커널)에서

정적 INT esp_output (구조체 xfrm_state * X, 구조체 sk_buff를의 *의 SKB) /net/ipv4/esp4.c

 /* set the callback esp_output_done(), which would essentially call 
     *  dev_queue_xmit()  # transmit the encrypted packet out 
     */ 
    aead_givcrypt_set_callback(req, 0, esp_output_done, skb) 

    /* 
    * sumbit the request to Linux crypto framework, which internally would forward 
    * the request to a HW chip driver. 
    * 
    * The HW chip driver accept the request, and return EINPROGRESS indicating 
    * the request is being handled in progress or queued for handling. 
    * 
    * After HW chip done with encryption, request callback esp_output_done() is 
    * called 
    */ 
    err = crypto_aead_givencrypt(req); 
if (err == -EINPROGRESS) 
    goto error; 

- - 글쎄요, 자세히 다루지는 않았지만, 당신이 말했듯이, "서류 미비"는 우리에게 많은 어려움을줍니다.

+0

이것은 매우 좋은 설명입니다. 몇 가지 코드 샘플을 제공 할 수 있습니까? 프로세스에 대한 의견이있는 간단한 AES? 그것은 정말로 그림을 완성 할 것입니다. – Babbit

+0

나는이 설명에 매우 감명 받았다. 당신 만이 책임자라면, 리눅스는 훨씬 나아질 것입니다. +1. – Babbit

3

이것은 커널 헤더 파일입니다 (보통 /include/linux의 모든 헤더와 같으므로 일반 응용 프로그램에서는 사용하지 않으려 고합니다) 커널을 사용하여 작업하는 경우 (예 : 장치 드라이버 작성)

응용 프로그램에서 사용하기로 결정한 내용은 모두 linux 디렉토리에 있지 않으며 해당 내용 및 사용 방법을 설명하는 설명서 페이지가 있습니다. 그것.

일부는 documentation here이지만, 당신이 요구하는 기능은 포함하지 않습니다.

+0

소스에 주석이없고 변수 이름이 잘못되었습니다. 상황이 매핑되는 방식은 비 직관적입니다. 어떻게 사용 되는가? 그리고 실제로 그것을 실제로합니까? 왜 실제로 그것이 무엇을 설명하지는 않습니까? 나는 여러 사람에게 물었다. 아무도 나를 대답 할 수 없다. 왜 그렇게 모호한가요? 웹은 ** ** ** ** 설명이없는 코드로 채워져 있습니다. 그것이하는 일을 말하기가 왜 그렇게 어렵습니까? 귀하의 도움을 위해 +1, jamesj. – Babbit

+0

@Babbit 동의합니다. 불행히도 그것이 나의 경험에서 커널 개발과 함께하는 방법이다. 코드를 읽고 디버깅하여 작동 원리를 배웁니다. 가파른 학습 곡선을 만듭니다. –

+1

실용적인 낭비입니다. 나는 사람들이 이런 종류의 위험을 낭비 적 사고 방식으로 바꾸기를 원하는 이유가 놀랍다. 이 서류 미비한 쓰레기는 전 세계에서 수천 시간에 걸쳐 낭비되어 우리가 원숭이가 치약을 붙여 넣으려고 시도하게 만들었습니다. 그것은 무책임한 일입니다. 나는 항상 단계별 가이드를 가지고 있으며 모호성에 대한 피드백을 바로 잡습니다. 추측도, 시행 착오도 없습니다. 삶은 너무 바보 같은 일에 너무 짧습니다. 더 나은 방법이 있어야합니다. 우리는 세계를 설계합니다. 나는 길을 발견 할 것이다. – Babbit

관련 문제