PDFium Delphi Component Docs

FPdfSha1 유닛

유닛: FPdfSha1
증분 init/update/final 컨텍스트와 일회용 헬퍼를 갖춘 순수 Pascal SHA-1 구현으로, 인증서를 SHA-1 썸프린트로 대조하기 위해 존재합니다

Syntax

TSHA1Digest = array[0..19] of Byte;

TSHA1Context = record
  State: array[0..4] of Cardinal;
  Buffer: array[0..63] of Byte;
  BufCnt: Cardinal;
  Length: UInt64;
end;

procedure SHA1Init(out Ctx: TSHA1Context);
procedure SHA1Update(var Ctx: TSHA1Context; const Buf; BufLen: Cardinal);
procedure SHA1Final(var Ctx: TSHA1Context; out Digest: TSHA1Digest);
function SHA1Bytes(const B: TBytes): TSHA1Digest;
function SHA1Of(const Buf; BufLen: Cardinal): TSHA1Digest;
function SHA1Hex(const Digest: TSHA1Digest): string;

Description

FPdfSha1은 SysUtils 외에 의존성이 없는 순수 Pascal로 SHA-1을 구현하므로, 라이브러리가 지원하는 모든 컴파일러에서 자족적으로 유지됩니다. 압축 함수는 FIPS 180-4 6.1을 따르고, FIPS 180-4 5.1.1의 패딩 규칙은 8바이트 빅엔디안 비트 길이 앞에서 메시지를 56 mod 64바이트로 채웁니다. 로드와 저장은 바이트 단위 명시적 빅엔디안이라 라이브러리가 대상으로 하는 모든 CPU에서 결과가 동일합니다

증분 SHA1Init / SHA1Update / SHA1Final API는 조각으로 주어지는 입력을 해싱합니다. SHA1Update는 온전한 64바이트 블록을 변환으로 곧장 넘기고 나머지만 TSHA1Context에 버퍼링하므로, 큰 블록 하나를 넣으나 같은 바이트를 조금씩 넣으나 다이제스트는 같습니다

SHA1Bytes와 SHA1Of는 바이트 배열 또는 주어진 길이의 타입 없는 버퍼에 대한 일회용 헬퍼입니다. 빈 TBytes도 받아들이며 빈 메시지로 해싱합니다. SHA1Hex는 TSHA1Digest를 소문자 40자 16진 문자열로 렌더링하는데, 이것이 인증서 썸프린트가 보통 비교되는 형태입니다

Functions

FunctionDescription
SHA1Init해싱 컨텍스트를 FIPS 180-4 5.3.1 초기 상태로 초기화하고 버퍼와 카운터를 지웁니다
SHA1Update타입 없는 버퍼의 BufLen바이트를 열린 컨텍스트에 넣습니다. 길이 0은 아무 동작도 하지 않습니다
SHA1Final패딩과 길이 블록을 적용한 뒤 20바이트 다이제스트를 반환합니다
SHA1Bytes바이트 배열의 일회용 해시입니다
SHA1Of주어진 길이의 타입 없는 버퍼에 대한 일회용 해시입니다
SHA1Hex다이제스트를 소문자 40자 16진 문자열로 포맷합니다

Types

TypeDescription
TSHA1Digest20바이트 SHA-1 다이제스트이며, 유닛의 모든 해싱 엔트리 포인트의 결과 타입입니다
TSHA1Context증분 해싱 컨텍스트입니다. State는 다섯 작업 워드를 담고, Buffer는 부분적인 64바이트 메시지 블록을 담으며, BufCnt는 그 버퍼에 현재 있는 바이트 수를 세고, Length는 총 메시지 길이를 바이트로 누적합니다

Remarks

이 라이브러리에서 SHA-1은 서명 다이제스트가 아니며, 그렇게 쓰여서도 안 됩니다. PAdES 스택은 메시지 다이제스트, signed 속성, 타임스탬프 요청 모두를 SHA-256으로 서명합니다. 서명 경로의 어떤 것도 이 유닛으로 옮겨서는 안 됩니다

FPdfSha1은 한 가지 일을 위해 존재합니다. TPadesSignerOptions가 담고 있는 SHA-1 썸프린트와 인증서를 대조하는 일입니다. 토큰 백엔드는 인증서 DER을 받아 그 비교를 스스로 해야 하므로, DER을 SHA1Bytes로 해싱하고 SHA1Hex를 구성된 썸프린트와 대소문자 구분 없이 비교합니다. Windows에서는 인증서 조회 과정에서 인증서 저장소가 썸프린트를 해석하므로 Windows 백엔드는 자체 구현이 필요 없었습니다

새 코드에 쓸 해시를 찾고 있다면, 이것이 범용 선택은 아닙니다. 충돌 저항이 중요한 곳이라면, 문서 다이제스트, signed 속성, 무결성 검사를 포함해 SHA-1은 부적합합니다. 대신 FPdfSha256을, 더 길거나 다른 다이제스트 계열이 필요하면 FPdfSha512나 FPdfSha3를 사용하세요

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11