PDFium Delphi Component Docs

FPdfSha1 ユニット

ユニット: FPdfSha1
インクリメンタルな init/update/final コンテキストと 1 回呼び出しのヘルパーを備えた Pure-Pascal の SHA-1 実装です。証明書をその SHA-1 サムプリントで照合できるように存在しています

構文

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;

説明

FPdfSha1 は SHA-1 を Pure-Pascal で実装し、SysUtils 以外に依存しないため、ライブラリは対応するすべてのコンパイラで自己完結しています。圧縮関数は FIPS 180-4 6.1 に従い、FIPS 180-4 5.1.1 のパディング規則はビッグエンディアンのビット長 8 バイトの前にメッセージを 56 mod 64 バイトへパディングします。ロードとストアはバイト単位で明示的なビッグエンディアンなので、ライブラリが対象とするすべての CPU で同じ結果になります

インクリメンタルな SHA1Init / SHA1Update / SHA1Final API は、分割して渡された入力をハッシュします。SHA1Update は 64 バイトの完全なブロックをそのまま変換に渡し、残りだけを TSHA1Context にバッファします。大きなブロックを 1 回で渡しても、同じバイトを少しずつ渡しても、同じダイジェストになります

SHA1Bytes と SHA1Of は、バイト配列または指定長の非型付きバッファに対する 1 回呼び出しのヘルパーです。空の TBytes も受け付け、空のメッセージとしてハッシュします。SHA1Hex は TSHA1Digest を小文字の 40 文字の 16 進文字列にレンダリングします。証明書サムプリントの比較は通常この形式で行われます

関数

関数説明
SHA1Initハッシュコンテキストを FIPS 180-4 5.3.1 の初期状態に初期化し、バッファとカウンタをクリアします
SHA1Update非型付きバッファの BufLen バイトを開いているコンテキストに供給します。長さ 0 は何もしません
SHA1Finalパディングと長さのブロックを適用し、20 バイトのダイジェストを返します
SHA1Bytesバイト配列の 1 回呼び出しハッシュです
SHA1Of指定長の非型付きバッファの 1 回呼び出しハッシュです
SHA1Hexダイジェストを小文字の 40 文字の 16 進文字列に整形します

型

型説明
TSHA1Digest20 バイトの SHA-1 ダイジェストです。このユニットのすべてのハッシュ用エントリポイントの結果型です
TSHA1Contextインクリメンタルなハッシュコンテキストです。State は 5 つの作業ワードを保持し、Buffer は 64 バイトの部分メッセージブロックを保持し、BufCnt はそのバッファ内の現在のバイト数を数え、Length はメッセージの総長をバイト単位で累積します

備考

SHA-1 はこのライブラリでは署名用のダイジェストではなく、そうなってはいけません。PAdES スタックは、メッセージダイジェスト、signed attributes、タイムスタンプ要求のいずれにも SHA-256 で署名します。署名経路の何もこのユニットに移してはいけません

FPdfSha1 が存在するのは 1 つの仕事のためです。TPadesSignerOptions が運ぶ SHA-1 サムプリントに対して証明書を照合することです。トークンバックエンドは証明書の DER を受け取り、その比較を自分で行う必要があるため、SHA1Bytes で DER をハッシュし、SHA1Hex を設定されたサムプリントと大文字小文字を無視して比較します。Windows では証明書ストアが証明書の検索中にサムプリントを解決するため、Windows バックエンドは独自の実装を必要としたことがありません

新しいコード向けのハッシュを探しているなら、これは汎用の選択ではありません。SHA-1 は、文書ダイジェスト、signed attributes、完全性チェックをはじめ、衝突耐性が重要なすべての場面で不適切です。代わりに FPdfSha256 を使い、より長い、あるいは異なるダイジェスト族が必要なら FPdfSha512 や FPdfSha3 を使ってください

関連項目

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11