データ構造 | |
| struct | XXH128_hash_t |
| 128ビットハッシュの戻り値。 詳細… | |
| struct | XXH128_canonical_t |
マクロ | |
| #define | XXH_SSE2 1 |
| #define | XXH_AVX2 2 |
| #define | XXH_AVX512 3 |
| #define | XXH_NEON 4 |
| #define | XXH_VSX 5 |
| #define | XXH_SVE 6 |
| #define | XXH_LSX 7 |
| #define | XXH_LASX 8 |
| #define | XXH_RVV 9 |
| #define | XXH3_SECRET_SIZE_MIN 136 |
型定義 | |
| typedef struct XXH3_state_s | XXH3_state_t |
| XXH3ストリーミングAPIの不透明な状態構造体。 | |
関数 | |
| XXH64_hash_t | XXH3_64bits (const void *input, size_t length) |
inputのXXH3ハッシュをシードなし64ビット版で計算します。 | |
| XXH64_hash_t | XXH3_64bits_withSeed (const void *input, size_t length, XXH64_hash_t seed) |
inputのXXH3ハッシュをシード付き64ビット版で計算します。 | |
| XXH64_hash_t | XXH3_64bits_withSecret (const void *data, size_t len, const void *secret, size_t secretSize) |
| カスタム「シークレット」を使用して、XXH3の64ビット版を計算します。 | |
| XXH3_state_t * | XXH3_createState (void) |
| XXH3_state_tを割り当てます。 | |
| XXH_errorcode | XXH3_freeState (XXH3_state_t *statePtr) |
| XXH3_state_tを解放します。 | |
| void | XXH3_copyState (XXH3_state_t *dst_state, const XXH3_state_t *src_state) |
| XXH3_state_tの状態を別の状態にコピーします。 | |
| XXH_errorcode | XXH3_64bits_reset (XXH3_state_t *statePtr) |
| 新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_64bits_reset_withSeed (XXH3_state_t *statePtr, XXH64_hash_t seed) |
| 64ビットのシードを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_64bits_reset_withSecret (XXH3_state_t *statePtr, const void *secret, size_t secretSize) |
| シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_64bits_update (XXH3_state_t *statePtr, const void *input, size_t length) |
inputのブロックを取り込み、XXH3_state_tに反映します。 | |
| XXH64_hash_t | XXH3_64bits_digest (const XXH3_state_t *statePtr) |
| XXH3_state_tから計算したXXH3の64ビットハッシュ値を返します。 | |
| XXH128_hash_t | XXH3_128bits (const void *data, size_t len) |
dataのXXH3ハッシュをシードなし128ビット版で計算します。 | |
| XXH128_hash_t | XXH3_128bits_withSeed (const void *data, size_t len, XXH64_hash_t seed) |
dataのXXH3ハッシュをシード付き128ビット版で計算します。 | |
| XXH128_hash_t | XXH3_128bits_withSecret (const void *data, size_t len, const void *secret, size_t secretSize) |
| カスタム「シークレット」を使用して、XXH3の128ビット版を計算します。 | |
| XXH_errorcode | XXH3_128bits_reset (XXH3_state_t *statePtr) |
| 新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_128bits_reset_withSeed (XXH3_state_t *statePtr, XXH64_hash_t seed) |
| 64ビットのシードを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_128bits_reset_withSecret (XXH3_state_t *statePtr, const void *secret, size_t secretSize) |
| シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_128bits_update (XXH3_state_t *statePtr, const void *input, size_t length) |
inputのブロックを取り込み、XXH3_state_tに反映します。 | |
| XXH128_hash_t | XXH3_128bits_digest (const XXH3_state_t *statePtr) |
| XXH3_state_tから計算したXXH3の128ビットハッシュ値を返します。 | |
| int | XXH128_isEqual (XXH128_hash_t h1, XXH128_hash_t h2) |
| XXH128_hash_t型の2つの値が等しいかを調べます。 | |
| int | XXH128_cmp (const void *h128_1, const void *h128_2) |
| XXH128_hash_t型の2つの値を比較します。 | |
| void | XXH128_canonicalFromHash (XXH128_canonical_t *dst, XXH128_hash_t hash) |
| XXH128_hash_tを、ビッグエンディアンのXXH128_canonical_tに変換します。 | |
| XXH128_hash_t | XXH128_hashFromCanonical (const XXH128_canonical_t *src) |
| XXH128_canonical_tを、ネイティブ形式のXXH128_hash_tに変換します。 | |
| XXH_errorcode | XXH3_64bits_reset_withSecretandSeed (XXH3_state_t *statePtr, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
| シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH128_hash_t | XXH3_128bits_withSecretandSeed (const void *input, size_t length, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
dataのXXH3ハッシュをシード付き128ビット版で計算します。 | |
| XXH128_hash_t | XXH128 (const void *data, size_t len, XXH64_hash_t seed) |
dataの128ビットハッシュをXXH3で計算します。 | |
| XXH_errorcode | XXH3_128bits_reset_withSecretandSeed (XXH3_state_t *statePtr, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
| シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。 | |
| XXH_errorcode | XXH3_generateSecret (void *secretBuffer, size_t secretSize, const void *customSeed, size_t customSeedSize) |
| customSeedという任意のユーザー定義コンテンツから、高エントロピーのシークレットを導出します。 | |
| void | XXH3_generateSecret_fromSeed (void *secretBuffer, XXH64_hash_t seed) |
| _withSeed()版と同じシークレットを生成します。 | |
詳細説明
XXH3は、次の特徴を持つ、より新しいハッシュアルゴリズムです。
- 小さい入力と大きい入力の両方で速度を改善
- 実際の64ビットおよび128ビットの出力
- SIMDによる高速化
- 32ビット環境での実用性を改善
速度分析の手法は次のページで説明されています。
https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
XXH64と比較すると、XXH3は大きい入力では約2倍、小さい入力では3倍を超える速度が期待されます。実際の差はプラットフォームによって異なります。
XXH3の速度はSIMDと64ビット演算から大きな恩恵を受けますが、これらは必須ではありません。XXH32を円滑に実行できる32ビット・64ビットターゲットの大半では、ベクトル対応がなくてもXXH3を競争力のある速度で実行できます。詳しくは実装の説明を参照してください。
XXH3には高速なスカラー実装があり、多くの一般的なプラットフォーム向けの高速なSIMD実装も含まれています。
- AVX512
- AVX2
- SSE2
- ARM NEON
- WebAssembly SIMD128
- POWER8 VSX
- s390x ZVector。これは次のマクロで制御できます: XXH_VECTOR 。ただし、事前定義されたマクロに基づいて最適な版を自動で選びます。x86ファミリー向けには、自動的な実行時ディスパッチャーが次のファイルに別途含まれています: xxh_x86dispatch.c.
XXH3の実装には移植性があります。任意のプラットフォームでコンパイルできる汎用のC90実装があり、すべての実装が、すべてのプラットフォームでまったく同じハッシュ値を生成します。v0.8.0からは「安定」とも位置づけられています。これは、将来のどの版も同じハッシュ値を生成することを意味します。
XXH3には、_64bitsと_128bitsという2つの版があります。
64ビットだけが必要な場合は、_64bits版の呼び出しを優先してください。混合の量が減り、小さい入力で高速になるためです。また、一般に、構造体よりもスカラーの戻り値型の方が扱いが簡単です。
APIは、一括ハッシュ処理、ストリーミングモード、カスタムシークレットに対応しています。
マクロ定義の説明
◆ XXH_SSE2
| #define XXH_SSE2 1 |
Pentium 4、Opteron、すべてのx86_64向けのSSE2。
◆ XXH_AVX2
| #define XXH_AVX2 2 |
HaswellとBulldozer向けのAVX2
◆ XXH_AVX512
| #define XXH_AVX512 3 |
SkylakeとIcelake向けのAVX512
◆ XXH_NEON
| #define XXH_NEON 4 |
大半のARMv7-A、すべてのAArch64、およびWASM SIMD128向けのNEON
◆ XXH_VSX
| #define XXH_VSX 5 |
POWER8/z13(64ビット)向けのVSXとZVector
◆ XXH_SVE
| #define XXH_SVE 6 |
一部のARMv8-AとARMv9-A向けのSVE
◆ XXH_LSX
| #define XXH_LSX 7 |
LoongArch64向けのLSX(128ビットSIMD)
◆ XXH_LASX
| #define XXH_LASX 8 |
LoongArch64向けのLASX(256ビットSIMD)
◆ XXH_RVV
| #define XXH_RVV 9 |
RISC-V向けのRVV(RISC-V Vector)
◆ XXH3_SECRET_SIZE_MIN
| #define XXH3_SECRET_SIZE_MIN 136 |
カスタムシークレットの絶対的な最小サイズ。
型定義の説明
◆ XXH3_state_t
| typedef struct XXH3_state_s XXH3_state_t |
XXH3ストリーミングAPIの不透明な状態構造体。
- 関連項目
- XXH3_state_s に詳細があります。
- ストリーミングの例
関数の説明
◆ XXH3_64bits()
| XXH64_hash_t XXH3_64bits | ( | const void * | input, |
| size_t | length ) |
inputのXXH3ハッシュをシードなし64ビット版で計算します。
- 引数
-
input ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。length 次のデータの長さ: input(バイト単位)。
- 前提条件
inputからinput+lengthの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lengthが 0 の場合、inputは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
- 戻り値
- 計算された64ビットのXXH3ハッシュ値。
- 注記
- この関数は、次の関数を呼び出して: XXH3_64bits_withSeed() シードとして 0を使用する場合と同等です。ただし、既定値の定数伝播によって、この関数の方がわずかに性能が高い場合があります。
- 関連項目
- XXH3_64bits_withSeed(), XXH3_64bits_withSecret():ほかのシード設定の版
- 一括処理の例 に使用例があります。
◆ XXH3_64bits_withSeed()
| XXH64_hash_t XXH3_64bits_withSeed | ( | const void * | input, |
| size_t | length, | ||
| XXH64_hash_t | seed ) |
inputのXXH3ハッシュをシード付き64ビット版で計算します。
- 引数
-
input ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。length 次のデータの長さ: input(バイト単位)。seed ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 前提条件
inputからinput+lengthの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lengthが 0 の場合、inputは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
- 戻り値
- 計算された64ビットのXXH3ハッシュ値。
- 注記
- seed == 0では、次の関数と同じ結果を生成します: XXH3_64bits()。
この版は、次の値で既定のシークレットを変更し、それに基づくカスタムシークレットをその場で生成します: seed 。
この操作は十分に高速ですが、コストがまったくないわけではない点に注意してください。
- 関連項目
- 一括処理の例 に使用例があります。
◆ XXH3_64bits_withSecret()
| XXH64_hash_t XXH3_64bits_withSecret | ( | const void * | data, |
| size_t | len, | ||
| const void * | secret, | ||
| size_t | secretSize ) |
カスタム「シークレット」を使用して、XXH3の64ビット版を計算します。
- 引数
-
data ハッシュを計算するデータブロック。サイズは少なくとも lenバイト必要です。len 次のデータの長さ: data(バイト単位)。secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。
- 戻り値
- 計算された64ビットのXXH3ハッシュ値。
- 前提条件
dataからdata+lenの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lengthが 0 の場合、dataは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
任意のバイト列を「シークレット」として渡してハッシュを生成できます。これにより、外部の者が意図的な衝突を用意することが難しくなります。主な条件として、 secretSizeは 必ず 十分な大きさでなければなりません(>= XXH3_SECRET_SIZE_MIN)。ただし、シークレットの品質はハッシュアルゴリズムの分散に影響します。そのため、シークレットは 必ず ランダムなバイトの集まりのように見える必要があります。繰り返しの列やテキスト文書など、「単純な」データや構造化されたデータは避けてください。バイト列の「ランダムさ」に疑問がある場合は、代わりに次の関数の利用を検討してください: XXH3_generateSecret() (後述)。これは、バイト列から適切な高エントロピーのシークレットを生成します。また、次の関数を使用する利点は: XXH3_generateSecret() 元のバイト列のすべてのビットが、出力のすべてのビットに影響することを保証する点です。バイト列を直接使用する場合は、必ずしもそうなるとは限りません。 小さい 入力のハッシュを計算するときは、シークレットの一部分しか使用されないためです。
- 関連項目
- 一括処理の例 に使用例があります。
◆ XXH3_createState()
| XXH3_state_t * XXH3_createState | ( | void | ) |
XXH3_state_tを割り当てます。
- 戻り値
- 割り当てられた次の型のポインター: XXH3_state_t (成功した場合)。
- NULL (失敗した場合)。
- 注記
- 解放には必ず次の関数を使用してください: XXH3_freeState()。
- 関連項目
- ストリーミングの例
◆ XXH3_freeState()
| XXH_errorcode XXH3_freeState | ( | XXH3_state_t * | statePtr | ) |
XXH3_state_tを解放します。
- 引数
-
statePtr 次の型のポインター: XXH3_state_t 。割り当てには次の関数を使用してください: XXH3_createState()。
- 戻り値
- XXH_OK。
- 注記
- 割り当てには必ず次の関数を使用してください: XXH3_createState()。
- 関連項目
- ストリーミングの例
◆ XXH3_copyState()
| void XXH3_copyState | ( | XXH3_state_t * | dst_state, |
| const XXH3_state_t * | src_state ) |
XXH3_state_tの状態を別の状態にコピーします。
- 引数
-
dst_state コピー先の状態。 src_state コピー元の状態。
- 前提条件
dst_stateとsrc_stateは NULL であってはならず、互いに重なっていてもいけません。
◆ XXH3_64bits_reset()
| XXH_errorcode XXH3_64bits_reset | ( | XXH3_state_t * | statePtr | ) |
新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
- この関数は、 statePtr をリセットし、既定のパラメーターでシークレットを生成します。
- この関数は、次の関数より前に呼び出してください: XXH3_64bits_update()。
- ダイジェストは、次の関数と同等になります: XXH3_64bits()。
- 関連項目
- ストリーミングの例
◆ XXH3_64bits_reset_withSeed()
| XXH_errorcode XXH3_64bits_reset_withSeed | ( | XXH3_state_t * | statePtr, |
| XXH64_hash_t | seed ) |
64ビットのシードを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。 seed ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
- この関数は、 statePtr をリセットし、次の値からシークレットを生成します: seed。
- この関数は、次の関数より前に呼び出してください: XXH3_64bits_update()。
- ダイジェストは、次の関数と同等になります: XXH3_64bits_withSeed()。
- 関連項目
- ストリーミングの例
◆ XXH3_64bits_reset_withSecret()
| XXH_errorcode XXH3_64bits_reset_withSecret | ( | XXH3_state_t * | statePtr, |
| const void * | secret, | ||
| size_t | secretSize ) |
シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。 secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
- secret は参照されるため、 次の期間を超えて有効でなければなりません: ハッシュのストリーミングセッション。
一括APIと同様に、 secretSize は次の値以上でなければなりません(>=): XXH3_SECRET_SIZE_MIN。また、生成されるハッシュ値の品質は、シークレットのエントロピーに依存します(シークレットの内容は、ランダムなバイトの集まりのように見える必要があります)。候補となる secret のランダムさに疑問がある場合は、代わりに次の関数の利用を検討してください: XXH3_generateSecret() (後述)。
- 関連項目
- ストリーミングの例
◆ XXH3_64bits_update()
| XXH_errorcode XXH3_64bits_update | ( | XXH3_state_t * | statePtr, |
| const void * | input, | ||
| size_t | length ) |
inputのブロックを取り込み、XXH3_state_tに反映します。
- 引数
-
statePtr 更新する状態構造体。 input ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。length 次のデータの長さ: input(バイト単位)。
- 前提条件
statePtrは NULL であってはなりません。-
inputからinput+lengthの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lengthが 0 の場合、inputは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
- 注記
- データブロックを逐次取り込むには、この関数を呼び出してください。
- 関連項目
- ストリーミングの例
◆ XXH3_64bits_digest()
| XXH64_hash_t XXH3_64bits_digest | ( | const XXH3_state_t * | statePtr | ) |
XXH3_state_tから計算したXXH3の64ビットハッシュ値を返します。
- 引数
-
statePtr ハッシュの計算元となる状態構造体。
- 前提条件
statePtrは NULL であってはなりません。
- 戻り値
- その状態から計算されたXXH3の64ビットハッシュ値。
- 注記
- 次の関数を呼び出しても: XXH3_64bits_digest() 次の状態には影響しません:
statePtr。そのため、更新、ダイジェストの取得、再度の更新という操作ができます。
- 関連項目
- ストリーミングの例
◆ XXH3_128bits()
| XXH128_hash_t XXH3_128bits | ( | const void * | data, |
| size_t | len ) |
dataのXXH3ハッシュをシードなし128ビット版で計算します。
- 引数
-
data ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。len 次のデータの長さ: data(バイト単位)。
- 戻り値
- 計算されたXXH3の128ビット版のハッシュ値。
XXH3の128ビット版は強度が高い一方で、短い入力には多少のオーバーヘッドがあります。
この関数は、次の関数を呼び出して: XXH3_128bits_withSeed() シードとして 0を使用する場合と同等です。ただし、既定値の定数伝播によって、この関数の方がわずかに性能が高い場合があります。
- 関連項目
- XXH3_128bits_withSeed(), XXH3_128bits_withSecret():ほかのシード設定の版
- 一括処理の例 に使用例があります。
◆ XXH3_128bits_withSeed()
| XXH128_hash_t XXH3_128bits_withSeed | ( | const void * | data, |
| size_t | len, | ||
| XXH64_hash_t | seed ) |
dataのXXH3ハッシュをシード付き128ビット版で計算します。
- 引数
-
data ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。len 次のデータの長さ: data(バイト単位)。seed ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 戻り値
- 計算されたXXH3の128ビット版のハッシュ値。
- 注記
- seed == 0では、次の関数と同じ結果を生成します: XXH3_64bits()。
この版は、次の値で既定のシークレットを変更し、それに基づくカスタムシークレットをその場で生成します: seed 。
この操作は十分に高速ですが、コストがまったくないわけではない点に注意してください。
- 関連項目
- XXH3_128bits(), XXH3_128bits_withSecret():ほかのシード設定の版
- 一括処理の例 に使用例があります。
◆ XXH3_128bits_withSecret()
| XXH128_hash_t XXH3_128bits_withSecret | ( | const void * | data, |
| size_t | len, | ||
| const void * | secret, | ||
| size_t | secretSize ) |
カスタム「シークレット」を使用して、XXH3の128ビット版を計算します。
- 引数
-
data ハッシュを計算するデータブロック。サイズは少なくとも lenバイト必要です。len 次のデータの長さ: data(バイト単位)。secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。
- 戻り値
- 計算されたXXH3の128ビット版のハッシュ値。
任意のバイト列を「シークレット」として渡してハッシュを生成できます。これにより、外部の者が意図的な衝突を用意することが難しくなります。主な条件として、 secretSizeは 必ず 十分な大きさでなければなりません(>= XXH3_SECRET_SIZE_MIN)。ただし、シークレットの品質はハッシュアルゴリズムの分散に影響します。そのため、シークレットは 必ず ランダムなバイトの集まりのように見える必要があります。繰り返しの列やテキスト文書など、「単純な」データや構造化されたデータは避けてください。バイト列の「ランダムさ」に疑問がある場合は、代わりに次の関数の利用を検討してください: XXH3_generateSecret() (後述)。これは、バイト列から適切な高エントロピーのシークレットを生成します。また、次の関数を使用する利点は: XXH3_generateSecret() 元のバイト列のすべてのビットが、出力のすべてのビットに影響することを保証する点です。バイト列を直接使用する場合は、必ずしもそうなるとは限りません。 小さい 入力のハッシュを計算するときは、シークレットの一部分しか使用されないためです。
- 関連項目
- 一括処理の例 に使用例があります。
◆ XXH3_128bits_reset()
| XXH_errorcode XXH3_128bits_reset | ( | XXH3_state_t * | statePtr | ) |
新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
- この関数は、 statePtr をリセットし、既定のパラメーターでシークレットを生成します。
- この関数は、次の関数より前に呼び出してください: XXH3_128bits_update()。
- ダイジェストは、次の関数と同等になります: XXH3_128bits()。
- 関連項目
- ストリーミングの例
◆ XXH3_128bits_reset_withSeed()
| XXH_errorcode XXH3_128bits_reset_withSeed | ( | XXH3_state_t * | statePtr, |
| XXH64_hash_t | seed ) |
64ビットのシードを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。 seed ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
- この関数は、 statePtr をリセットし、次の値からシークレットを生成します: seed。
- この関数は、次の関数より前に呼び出してください: XXH3_128bits_update()。
- ダイジェストは、次の関数と同等になります: XXH3_128bits_withSeed()。
- 関連項目
- ストリーミングの例
◆ XXH3_128bits_reset_withSecret()
| XXH_errorcode XXH3_128bits_reset_withSecret | ( | XXH3_state_t * | statePtr, |
| const void * | secret, | ||
| size_t | secretSize ) |
シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr リセットする状態構造体。 secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。
- 前提条件
statePtrは NULL であってはなりません。
secret は参照されるため、 次の期間を超えて有効でなければなりません: ハッシュのストリーミングセッション。一括APIと同様に、 secretSize は次の値以上でなければなりません(>=): XXH3_SECRET_SIZE_MIN。また、生成されるハッシュ値の品質は、シークレットのエントロピーに依存します(シークレットの内容は、ランダムなバイトの集まりのように見える必要があります)。候補となる secret のランダムさに疑問がある場合は、代わりに次の関数の利用を検討してください: XXH3_generateSecret() (後述)。
- 関連項目
- ストリーミングの例
◆ XXH3_128bits_update()
| XXH_errorcode XXH3_128bits_update | ( | XXH3_state_t * | statePtr, |
| const void * | input, | ||
| size_t | length ) |
inputのブロックを取り込み、XXH3_state_tに反映します。
データブロックを逐次取り込むには、この関数を呼び出してください。
- 引数
-
statePtr 更新する状態構造体。 input ハッシュを計算するデータブロック。サイズは少なくとも lengthバイト必要です。length 次のデータの長さ: input(バイト単位)。
- 前提条件
statePtrは NULL であってはなりません。
- 注記
inputからinput+lengthの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lengthが 0 の場合、inputは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
◆ XXH3_128bits_digest()
| XXH128_hash_t XXH3_128bits_digest | ( | const XXH3_state_t * | statePtr | ) |
XXH3_state_tから計算したXXH3の128ビットハッシュ値を返します。
- 引数
-
statePtr ハッシュの計算元となる状態構造体。
- 前提条件
statePtrは NULL であってはなりません。
- 戻り値
- その状態から計算されたXXH3の128ビットハッシュ値。
- 注記
- 次の関数を呼び出しても: XXH3_128bits_digest() 次の状態には影響しません:
statePtr。そのため、更新、ダイジェストの取得、再度の更新という操作ができます。
◆ XXH128_isEqual()
| int XXH128_isEqual | ( | XXH128_hash_t | h1, |
| XXH128_hash_t | h2 ) |
XXH128_hash_t型の2つの値が等しいかを調べます。
- 引数
-
h1 128ビットのハッシュ値。 h2 もう一方の128ビットのハッシュ値。
- 戻り値
- 1 ( h1 と h2 が等しい場合)。
- 0 (等しくない場合)。
◆ XXH128_cmp()
| int XXH128_cmp | ( | const void * | h128_1, |
| const void * | h128_2 ) |
XXH128_hash_t型の2つの値を比較します。
この比較関数は、標準ライブラリの次の関数と互換性があります: qsort()/bsearch()。
- 引数
-
h128_1 左辺の値 h128_2 右辺の値
- 戻り値
- >0(次の条件を満たす場合):
h128_1>h128_2 -
=0(次の条件を満たす場合):
h128_1==h128_2 -
<0(次の条件を満たす場合):
h128_1<h128_2
◆ XXH128_canonicalFromHash()
| void XXH128_canonicalFromHash | ( | XXH128_canonical_t * | dst, |
| XXH128_hash_t | hash ) |
XXH128_hash_tを、ビッグエンディアンのXXH128_canonical_tに変換します。
- 引数
-
dst 次の型: XXH128_canonical_t 。保存先のポインター。 hash 次の型: XXH128_hash_t 。変換元のハッシュ。
- 前提条件
dstは NULL であってはなりません。
- 関連項目
- 正規形式の例
◆ XXH128_hashFromCanonical()
| XXH128_hash_t XXH128_hashFromCanonical | ( | const XXH128_canonical_t * | src | ) |
XXH128_canonical_tを、ネイティブ形式のXXH128_hash_tに変換します。
- 引数
-
src 次の型: XXH128_canonical_t 。変換元の正規形式の値。
- 前提条件
srcは NULL であってはなりません。
- 戻り値
- 変換されたハッシュ。
- 関連項目
- 正規形式の例
◆ XXH3_64bits_reset_withSecretandSeed()
| XXH_errorcode XXH3_64bits_reset_withSecretandSeed | ( | XXH3_state_t * | statePtr, |
| const void * | secret, | ||
| size_t | secretSize, | ||
| XXH64_hash_t | seed64 ) |
シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr 次の型のポインター: XXH3_state_t 。割り当てには次の関数を使用してください: XXH3_createState()。 secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。seed64 ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 関連項目
- XXH3_64bits_withSecretandSeed()。契約は同一です。
◆ XXH3_128bits_withSecretandSeed()
| XXH128_hash_t XXH3_128bits_withSecretandSeed | ( | const void * | input, |
| size_t | length, | ||
| const void * | secret, | ||
| size_t | secretSize, | ||
| XXH64_hash_t | seed64 ) |
dataのXXH3ハッシュをシード付き128ビット版で計算します。
- 引数
-
input ハッシュを計算するメモリ領域。サイズは少なくとも lenバイト必要です。length 次のデータの長さ: data(バイト単位)。secret ハッシュ結果を予測可能な形で変化させるためのシークレット。 secretSize 次のデータの長さ: secret(バイト単位。XXH3_SECRET_SIZE_MIN以上でなければなりません)seed64 ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 関連項目
- XXH3_64bits_withSecretandSeed():契約は同じです。
◆ XXH128()
| XXH128_hash_t XXH128 | ( | const void * | data, |
| size_t | len, | ||
| XXH64_hash_t | seed ) |
dataの128ビットハッシュをXXH3で計算します。
- 引数
-
data ハッシュを計算するデータブロック。サイズは少なくとも lenバイト必要です。len 次のデータの長さ: data(バイト単位)。seed ハッシュの出力を予測可能な形で変化させる64ビットのシード。
- 前提条件
dataからdata+lenの範囲のメモリは有効で、読み取り可能な連続したメモリでなければなりません。ただし、lenが 0 の場合、dataは NULL でも構いません。C++では、これはさらに次の要件を満たす必要があります: TriviallyCopyable。
- 戻り値
- 計算された128ビットのXXH3ハッシュ値。
- 関連項目
- 一括処理の例 に使用例があります。
◆ XXH3_128bits_reset_withSecretandSeed()
| XXH_errorcode XXH3_128bits_reset_withSecretandSeed | ( | XXH3_state_t * | statePtr, |
| const void * | secret, | ||
| size_t | secretSize, | ||
| XXH64_hash_t | seed64 ) |
シークレットデータを使用して新しいハッシュの計算を開始するため、XXH3_state_tをリセットします。
- 引数
-
statePtr 次の型のポインター: XXH3_state_t 。割り当てには次の関数を使用してください: XXH3_createState()。 secret シークレットのデータ。 secretSize 次のデータの長さ: secret(バイト単位)。seed64 ハッシュ結果を予測可能な形で変化させる64ビットのシード。
- 関連項目
- XXH3_64bits_withSecretandSeed()。契約は同一です。
注記:この関数の以前の版(v0.8.2以前)には、次の条件で誤ったハッシュ値を生成するバグがありました: seed == 0、かつ length < XXH3_MIDSIZE_MAX、かつ secret が次の関数の生成するシークレットと異なる場合: XXH3_generateSecret_fromSeed()。契約に示されているとおり、正しいハッシュ結果は、次の関数と同じでなければなりません: XXH3_128bits_withSeed() (次の条件の場合): length <= XXH3_MIDSIZE_MAX。以前の版で生成された結果は誤っているため、比較できません。
◆ XXH3_generateSecret()
| XXH_errorcode XXH3_generateSecret | ( | void * | secretBuffer, |
| size_t | secretSize, | ||
| const void * | customSeed, | ||
| size_t | customSeedSize ) |
customSeedという任意のユーザー定義コンテンツから、高エントロピーのシークレットを導出します。
- 引数
-
secretBuffer 導出した高エントロピーのシークレットデータを格納する、書き込み可能なバッファー。 secretSize secretBufferのサイズ(バイト単位)。XXH3_SECRET_SIZE_MIN以上でなければなりません。 customSeed ユーザー定義のコンテンツ。 customSeedSize customSeedのサイズ(バイト単位)。
生成したシークレットは、次の関数と組み合わせて使用できます: *_withSecret() 。次の版は: _withSecret() 64ビットのシードより高い水準の保護を提供するのに役立ちます。外部の者が、計算ロジックに影響を与える方法を推測することが、はるかに難しくなるためです。
この関数は、任意の長さ・任意の内容のカスタムシードを入力として受け取り、そこから、次の長さの高エントロピーのシークレットを導出します: secretSize 。格納先は、割り当て済みの次のバッファーです: secretBuffer。
生成したシークレットは、次の任意の版で使用できます: *_withSecret() 。次の関数が: XXH3_128bits_withSecret(), XXH3_64bits_withSecret(), XXH3_128bits_reset_withSecret() および XXH3_64bits_reset_withSecret() この一覧に含まれます。いずれも、次の引数を受け取ります: secret 。この引数は、実装上の理由から十分に大きく(>= XXH3_SECRET_SIZE_MIN) かつ 非常に高いエントロピーを持つ必要があります(ランダムに見えるバイトで構成されること)。これらの条件を満たすのは難しい場合があるため、次の関数を: XXH3_generateSecret() 適切な品質を確保するために使用できます。
customSeed には何でも使用できます。サイズは任意で、小さくても構いません。内容も任意で、ゼロの集まりのような「低エントロピー」の入力源でも構いません。それでも、生成された次のシークレットは: secret 必要とされる品質をすべて備えます。
- 前提条件
secretSizeは次の値以上でなければなりません(>=): XXH3_SECRET_SIZE_MIN- 次の条件の場合:
customSeedSize> 0。このとき、customSeedとしてNULLを渡すと未定義動作になります。
コード例:
◆ XXH3_generateSecret_fromSeed()
| void XXH3_generateSecret_fromSeed | ( | void * | secretBuffer, |
| XXH64_hash_t | seed ) |
_withSeed()版と同じシークレットを生成します。
- 引数
-
secretBuffer 次のサイズの書き込み可能なバッファー: XXH3_SECRET_DEFAULT_SIZE バイト seed ハッシュ結果を予測可能な形で変化させる64ビットのシード。
生成したシークレットは、次の関数と組み合わせて使用できます: *_withSecret() および _withSecretandSeed() の版。
C++の std::string 用ハッシュクラスの例: