Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

SipHash (2-4, 1-3 + 128 bit variant) implementations for Rust

License

NotificationsYou must be signed in to change notification settings

jedisct1/rust-siphash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This crates implements SipHash-2-4 and SipHash-1-3 in Rust.

It is based on the original implementation from rust-core and exposes thesame API.

It also implements SipHash variants returning 128-bit tags.

Thesip module implements the standard 64-bit mode, whereas thesip128module implements the 128-bit mode.

Usage

InCargo.toml:

[dependencies]siphasher ="1"

If you wantserde support, include the feature like this:

[dependencies]siphasher = {version ="1",features = ["serde"] }

64-bit mode:

use siphasher::sip::{SipHasher,SipHasher13,SipHasher24};// one-shot:let array:&[u8] =&[1,2,3];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];let hasher =SipHasher13::new_with_key(key);let h = hasher.hash(array);// incremental:use core::hash::Hasher;let array1:&[u8] =&[1,2,3];let array2:&[u8] =&[4,5,6];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];letmut hasher =SipHasher13::new_with_key(key);hasher.write(array1);hasher.write(array2);let h = hasher.finish();

128-bit mode:

use siphasher::sip128::{Hasher128,SipHasher,SipHasher13,SipHasher24};// one-shot:let array:&[u8] =&[1,2,3];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];let hasher =SipHasher13::new_with_key(key);let h = hasher.hash(array).as_bytes();// incremental:use core::hash::Hasher;let array1:&[u8] =&[1,2,3];let array2:&[u8] =&[4,5,6];let key:&[u8;16] =&[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];letmut hasher =SipHasher13::new_with_key(key);hasher.write(array1);hasher.write(array2);let h = hasher.finish128().as_bytes();

Note

Due to a confusing and not well documented API, methods from theHasher trait of the standard library (std::hash::Hasher,core::hash::Hasher) produce non-portable results.

This is not specific to SipHash, and affects all hash functions.

The only safe methods in that trait arewrite() andfinish().

It is thus recommended to use SipHash (and all other hash functions, actually) as documented above.

About

SipHash (2-4, 1-3 + 128 bit variant) implementations for Rust

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp