이전 포스팅 글에서는 SHA-256의 헤더 파일을 분석하였다.
이번에는 KISA에서 제공한 SHA-256의 소스 파일을 분석하겠다.
(전체 코드는 KSIA에서 다운로드할 수 있습니다.)
1. 소스파일
1.1. SHA256_Encrpyt()
void SHA256_Encrpyt( IN const BYTE *pszMessage, IN UINT uPlainTextLen, OUT BYTE *pszDigest )
{
SHA256_INFO info;
SHA256_Init( &info );
SHA256_Process( &info, pszMessage, uPlainTextLen );
SHA256_Close( &info, pszDigest );
}
크게 위의 그림과 같이 SHA256_Encrpyt() 함수가 진행된다.
① SHA256_Init()을 실행하여 초기값을 설정하고
② SHA256_Process()를 실행하여 평문 메시지를 512bit 크기씩 블록으로 나누어 압축함수를 실행한다.
③ 마지막으로 SHA256_Close()를 실행함으로써 마지막 블록에 대한 압축함수를 통해 256bit의 해시값을 생성하게 된다.
압축함수는 SHA256_Transform()을 말한다. 이는 해시값을 생성하는 작업을 실행한다.
1.2. SHA256_Init()
void SHA256_Init( OUT SHA256_INFO *Info )
{
Info->uChainVar[0] = 0x6a09e667;
Info->uChainVar[1] = 0xbb67ae85;
Info->uChainVar[2] = 0x3c6ef372;
Info->uChainVar[3] = 0xa54ff53a;
Info->uChainVar[4] = 0x510e527f;
Info->uChainVar[5] = 0x9b05688c;
Info->uChainVar[6] = 0x1f83d9ab;
Info->uChainVar[7] = 0x5be0cd19;
Info->uHighLength = Info->uLowLength = 0;
}
연쇄변수와 길이변수를 초기화하는 함수이다.
헤더파일에서 정의한 구조체의 변수인 uChainVar와 uHighLength, uLowLength의 초기값을 설정한다.
uChainVar의 배열이 7번까지인 이유?
#define SHA256_DIGEST_BLOCKLEN 64
UINT uChainVar[SHA256_DIGEST_VALUELEN / 4];
헤더파일을 보면 다음과 같이 정의되어 있다.
uChainVar[64/4]가 되어 uChainVar[8]이 된다.
미처 다 설명하지 못한 함수는 다음 글에서 이어서 설명하도록 하겠다.
- 출처 -
'Security > SHA' 카테고리의 다른 글
[SHA-256] 코드 및 알고리즘 분석 - (5) (0) | 2021.07.16 |
---|---|
[SHA-256] 코드 및 알고리즘 분석 - (4) (0) | 2021.07.14 |
[SHA-256] 코드 및 알고리즘 분석 - (3) (0) | 2021.07.14 |
[SHA-256] 코드 및 알고리즘 분석 - (1) (0) | 2021.07.12 |
SHA-256 개념 간단 설명 (0) | 2021.07.12 |