このページの内容

データ構造

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_64bits_withSecret(), XXH3_64bits_reset_withSecret(), XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret().

型定義の説明

◆ 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
  • この関数は、 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
  • この関数は、 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
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。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
データブロックを逐次取り込むには、この関数を呼び出してください。
関連項目
ストリーミングの例

◆ 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
  • この関数は、 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
  • この関数は、 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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。

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 であってはなりません。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
注記
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つの値が等しいかを調べます。

引数
h1128ビットのハッシュ値。
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ビットのシード。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
関連項目
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ビットのシード。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
関連項目
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ビットのシード。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。
関連項目
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導出した高エントロピーのシークレットデータを格納する、書き込み可能なバッファー。
secretSizesecretBufferのサイズ(バイト単位)。XXH3_SECRET_SIZE_MIN以上でなければなりません。
customSeedユーザー定義のコンテンツ。
customSeedSizecustomSeedのサイズ(バイト単位)。
戻り値
XXH_OK (成功した場合)。
XXH_ERROR (失敗した場合)。

生成したシークレットは、次の関数と組み合わせて使用できます: *_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を渡すと未定義動作になります。

コード例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define XXH_STATIC_LINKING_ONLY // expose unstable API
#include "xxhash.h"
// Hashes argv[2] using the entropy from argv[1].
int main(int argc, char* argv[])
{
char secret[XXH3_SECRET_SIZE_MIN];
if (argv != 3) { return 1; }
XXH3_generateSecret(secret, sizeof(secret), argv[1], strlen(argv[1]));
argv[2], strlen(argv[2]),
secret, sizeof(secret)
);
printf("%016llx\n", (unsigned long long) h);
}
XXH_errorcode XXH3_generateSecret(void *secretBuffer, size_t secretSize, const void *customSeed, size_t customSeedSize)
customSeedという任意のユーザー定義コンテンツから、高エントロピーのシークレットを導出します。
定義 xxhash.h:7459
XXH64_hash_t XXH3_64bits_withSecret(const void *data, size_t len, const void *secret, size_t secretSize)
カスタム「シークレット」を使用して、XXH3の64ビット版を計算します。
定義 xxhash.h:6476
#define XXH3_SECRET_SIZE_MIN
定義 xxhash.h:1184
uint64_t XXH64_hash_t
符号なし64ビット整数。
定義 xxhash.h:858

◆ 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 用ハッシュクラスの例:

#include <string>
#define XXH_STATIC_LINKING_ONLY // expose unstable API
#include "xxhash.h"
// Slow, seeds each time
class HashSlow {
public:
HashSlow(XXH64_hash_t s) : seed{s} {}
size_t operator()(const std::string& x) const {
return size_t{XXH3_64bits_withSeed(x.c_str(), x.length(), seed)};
}
};
// Fast, caches the seeded secret for future uses.
class HashFast {
unsigned char secret[XXH3_SECRET_DEFAULT_SIZE];
public:
HashFast(XXH64_hash_t s) {
}
size_t operator()(const std::string& x) const {
return size_t{
XXH3_64bits_withSecret(x.c_str(), x.length(), secret, sizeof(secret))
};
}
};
void XXH3_generateSecret_fromSeed(void *secretBuffer, XXH64_hash_t seed)
_withSeed()版と同じシークレットを生成します。
定義 xxhash.h:7504
XXH64_hash_t XXH3_64bits_withSeed(const void *input, size_t length, XXH64_hash_t seed)
inputのXXH3ハッシュをシード付き64ビット版で計算します。
定義 xxhash.h:6483
#define XXH3_SECRET_DEFAULT_SIZE
既定のシークレットのサイズ。
定義 xxhash.h:1741