hashlib

Creator: coderz1093

Last updated:

Add to Cart

Description:

hashlib

hashlib #








This library contains implementations of secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.
Depencencies #
There is only 1 dependency used by this package:

hashlib_codecs

Features #
Block Hash Algorithms #



Algorithm
Available methods
Source




MD4
md4
RFC-1320


MD5
md5
RFC-1321


SHA-1
sha1
RFC-3174


SHA-2
sha224, sha256, sha384, sha512, sha512t224, sha512t256
RFC-6234


SHA-3
sha3_224, sha3_256, sha3_384, sha3_512
FIPS-202


SHAKE-128
Shake128, shake128, shake128_128, shake128_256
FIPS-202


SHAKE-256
Shake256, shake256, shake256_256, shake256_512
FIPS-202


Keccak
keccak224, keccak256, keccak384, keccak512
Team Keccak


Blake2b
blake2b160, blake2b256, blake2b384, blake2b512
RFC-7693


Blake2s
blake2s128, blake2s160, blake2s224, blake2s256
RFC-7693


xxHash-32
XXHash32,xxh32,xxh32code
Cyan4973


xxHash-64
XXHash64,xxh64,xxh64code
Cyan4973


xxHash3-64
XXH3, xxh3, xxh3code
Cyan4973


xxHash3-128
XXH128, xxh128, xxh128code
Cyan4973


RIPEMD
ripemd128, ripemd256, ripemd160, ripemd320
ISO/IEC 10118-3:2018


SM3
sm3
GB/T 32905-2016



Password / Key Derivation Algorithms #



Algorithm
Available methods
Source




Argon2
Argon2, argon2d, argon2i, argon2id, argon2Verify
RFC-9106


PBKDF2
PBKDF2, pbkdf2, #.pbkdf2
RFC-8081


scrypt
Scrypt, scrypt,
RFC-7914


bcrypt
Bcrypt, bcrypt, bcryptSalt, bcryptVerify, bcryptDigest




Message Authentication Code (MAC) Generators #



Algorithms
Available methods
Source




HMAC
HMAC, #.hmac
RFC-2104


Poly1305
Poly1305, poly1305, poly1305auth
RFC-8439



OTP generation for 2FA #



Algorithms
Available methods
Source




HOTP
HOTP
RFC-4226


TOTP
TOTP
RFC-6238



Other Hash Algorithms #



Algorithms
Available methods
Source




CRC
crc16, crc32, crc64
Wikipedia


Alder32
alder32
Wikipedia



Random Number Generation #
Available generators:

secure
system
keccak
sha256
md5
xxh64
sm3

Demo #
A demo application is available in Google Play Store featuring the capabilities of this package.


Getting Started #
The following import will give you access to all of the algorithms in this package.
import 'package:hashlib/hashlib.dart' as hashlib;
copied to clipboard
Check the API Reference for details.
Usage #
Examples can be found inside the example folder.
import 'package:hashlib/hashlib.dart';
import 'package:hashlib_codecs/hashlib_codecs.dart';

void main() {
var text = "Happy Hashing!";
var key = "password";
var pw = key.codeUnits;
var iv = "some salt".codeUnits;
print("text => $text");
print("key => $key");
print("salt => ${toHex(iv)}");
print('');

// Example of hash code generations
print('XXH32 => ${xxh32code(text)}');
print('CRC32 => ${crc32code(text)}');
print('Alder32 => ${alder32code(text)}');
print('CRC16 => ${crc16code(text)}');
print('');

// Examples of Hash generation
print('CRC64 => ${crc64sum(text)}');
print('XXH64 => ${xxh64sum(text)}');
print('XXH3 => ${xxh3sum(text)}');
print('XXH128 => ${xxh128sum(text)}');
print('MD4 => ${md4.string(text)}');
print('MD5 => ${md5.string(text)}');
print('SHA-1 => ${sha1.string(text)}');
print('SHA-224 => ${sha224.string(text)}');
print('SHA-256 => ${sha256.string(text)}');
print('SHA-384 => ${sha384.string(text)}');
print('SHA-512 => ${sha512.string(text)}');
print('SHA-512/224 => ${sha512t224.string(text)}');
print('SHA-512/256 => ${sha512t256.string(text)}');
print('SHA3-224 => ${sha3_224.string(text)}');
print('SHA3-256 => ${sha3_256.string(text)}');
print('SHA3-384 => ${sha3_384.string(text)}');
print('SHA3-512 => ${sha3_512.string(text)}');
print('Keccak-224 => ${keccak224.string(text)}');
print('Keccak-256 => ${keccak256.string(text)}');
print('Keccak-384 => ${keccak384.string(text)}');
print('Keccak-512 => ${keccak512.string(text)}');
print('SHAKE-128 => ${shake128.of(20).string(text)}');
print('SHAKE-256 => ${shake256.of(20).string(text)}');
print('BLAKE2s-256 => ${blake2s256.string(text)}');
print('BLAKE2b-512 => ${blake2b512.string(text)}');
print('SM3] => ${sm3.string(text)}');
print('');

// Examples of MAC generations
print('HMAC/MD5 => ${md5.hmac.by(pw).string(text)}');
print('HMAC/SHA1 => ${sha1.hmac.byString(text)}');
print('HMAC/SHA256 => ${sha256.hmac.byString(key).string(text)}');
print('HMAC/SHA3-256 => ${HMAC(sha3_256).by(pw).string(text)}');
print("HMAC/BLAKE2b-256 => ${blake2b512.hmac.by(pw).string(text)}");
print("BLAKE-2b-MAC/256 => ${blake2b256.mac.by(pw).string(text)}");
print("BLAKE-2b-MAC/224 => ${Blake2b(28).mac.by(pw).string(text)}");
print('');

// Examples of PBKDF2 key derivation
print("SHA256/HMAC/PBKDF2 => ${pbkdf2(pw, iv, 100).hex()}");
print("SHA1/HMAC/PBKDF2 => ${sha1.pbkdf2(iv, 100).hex(pw)}");
print("BLAKE2b-256/HMAC/PBKDF2 => ${blake2b256.pbkdf2(iv, 100).hex(pw)}");
print("BLAKE2b-256/MAC/PBKDF2 => ${blake2b256.mac.pbkdf2(iv, 100).hex(pw)}");
print('');

// Examples of OTP generation
int nw = DateTime.now().millisecondsSinceEpoch ~/ 30000;
var counter = fromHex(nw.toRadixString(16).padLeft(16, '0'));
print('TOTP[time=$nw] => ${TOTP(iv).value()}');
print('HOTP[counter=$nw] => ${HOTP(iv, counter: counter).value()}');
print('');

// Examples of Argon2 key derivation
var argon2Test = Argon2Security.test;
print("[Argon2i] => ${argon2i(pw, iv, security: argon2Test)}");
print("[Argon2d] => ${argon2d(pw, iv, security: argon2Test)}");
print("[Argon2id] => ${argon2id(pw, iv, security: argon2Test)}");

// Examples of scrypt key derivation
var scryptLittle = ScryptSecurity.little;
print("[scrypt] => ${scrypt(pw, iv, security: scryptLittle, dklen: 24)}");
print('');

// Examples of bcrypt key derivation
var bcryptLittle = BcryptSecurity.little;
print("[bcrypt] => ${bcrypt(pw, bcryptSalt(security: bcryptLittle))}");
print('');
}
copied to clipboard
Benchmarks #
Benchmarks #
Libraries:

Hashlib : https://pub.dev/packages/hashlib
Crypto : https://pub.dev/packages/crypto
PointyCastle : https://pub.dev/packages/pointycastle
Hash : https://pub.dev/packages/hash

With 5MB message (10 iterations):



Algorithms
hashlib
PointyCastle
crypto
hash




MD4
1.59 Gbps
836 Mbps 1.9x slow




MD5
1.42 Gbps
728 Mbps 1.95x slow
1.15 Gbps 1.23x slow
617 Mbps 2.3x slow


HMAC(MD5)
1.37 Gbps

1.13 Gbps 1.21x slow
615 Mbps 2.23x slow


SHA-1
1.25 Gbps
439 Mbps 2.84x slow
861 Mbps 1.45x slow
351 Mbps 3.55x slow


HMAC(SHA-1)
1.25 Gbps

858 Mbps 1.46x slow



SHA-224
823 Mbps
179 Mbps 4.59x slow
744 Mbps 1.11x slow
172 Mbps 4.78x slow


SHA-256
827 Mbps
181 Mbps 4.57x slow
746 Mbps 1.11x slow
172 Mbps 4.79x slow


HMAC(SHA-256)
819 Mbps

740 Mbps 1.11x slow



SHA-384
1.32 Gbps
46.07 Mbps 28.59x slow
445 Mbps 2.96x slow
151 Mbps 8.74x slow


SHA-512
1.32 Gbps
44.17 Mbps 29.77x slow
443 Mbps 2.97x slow
150 Mbps 8.74x slow


SHA3-224
823 Mbps
27.88 Mbps 29.52x slow




SHA3-256
826 Mbps
26.6 Mbps 31.06x slow




SHA3-384
1.31 Gbps
20.37 Mbps 64.17x slow




SHA3-512
1.31 Gbps
13.97 Mbps 93.79x slow




RIPEMD-128
1.77 Gbps
378 Mbps 4.69x slow




RIPEMD-160
559 Mbps
239 Mbps 2.34x slow

281 Mbps 1.99x slow


RIPEMD-256
1.91 Gbps
373 Mbps 5.11x slow




RIPEMD-320
543 Mbps
237 Mbps 2.29x slow




BLAKE-2s
1.2 Gbps





BLAKE-2b
1.38 Gbps
105 Mbps 13.12x slow




Poly1305
2.2 Gbps
1.24 Gbps 1.77x slow




XXH32
3.84 Gbps





XXH64
2.63 Gbps





XXH3
987 Mbps





XXH128
985 Mbps





SM3
637 Mbps
185 Mbps 3.44x slow





With 1KB message (5000 iterations):



Algorithms
hashlib
PointyCastle
crypto
hash




MD4
1.51 Gbps
795 Mbps 1.9x slow




MD5
1.34 Gbps
684 Mbps 1.96x slow
1.08 Gbps 1.24x slow
804 Mbps 1.67x slow


HMAC(MD5)
1.01 Gbps

886 Mbps 1.14x slow
608 Mbps 1.66x slow


SHA-1
1.16 Gbps
416 Mbps 2.79x slow
809 Mbps 1.44x slow
395 Mbps 2.93x slow


HMAC(SHA-1)
773 Mbps

578 Mbps 1.34x slow



SHA-224
763 Mbps
170 Mbps 4.49x slow
694 Mbps 1.1x slow
174 Mbps 4.39x slow


SHA-256
763 Mbps
170 Mbps 4.49x slow
692 Mbps 1.1x slow
174 Mbps 4.38x slow


HMAC(SHA-256)
519 Mbps

500 Mbps 1.04x slow



SHA-384
1.14 Gbps
40.79 Mbps 27.98x slow
391 Mbps 2.92x slow
165 Mbps 6.92x slow


SHA-512
1.14 Gbps
40.88 Mbps 27.87x slow
391 Mbps 2.92x slow
166 Mbps 6.87x slow


SHA3-224
767 Mbps
25.06 Mbps 30.59x slow




SHA3-256
767 Mbps
25.03 Mbps 30.66x slow




SHA3-384
1.14 Gbps
20.05 Mbps 56.82x slow




SHA3-512
1.14 Gbps
13.41 Mbps 85.04x slow




RIPEMD-128
1.63 Gbps
359 Mbps 4.56x slow




RIPEMD-160
535 Mbps
229 Mbps 2.34x slow

286 Mbps 1.87x slow


RIPEMD-256
1.77 Gbps
356 Mbps 4.96x slow




RIPEMD-320
509 Mbps
224 Mbps 2.28x slow




BLAKE-2s
1.18 Gbps





BLAKE-2b
1.34 Gbps
104 Mbps 12.91x slow




Poly1305
2.12 Gbps
1.23 Gbps 1.72x slow




XXH32
4.12 Gbps





XXH64
2.54 Gbps





XXH3
918 Mbps





XXH128
925 Mbps





SM3
599 Mbps
174 Mbps 3.43x slow





With 10B message (100000 iterations):



Algorithms
hashlib
PointyCastle
crypto
hash




MD4
261 Mbps
138 Mbps 1.89x slow




MD5
242 Mbps
118 Mbps 2.05x slow
125 Mbps 1.94x slow
66.64 Mbps 3.63x slow


HMAC(MD5)
35.22 Mbps

38.21 Mbps 1.08x fast
17.63 Mbps 2x slow


SHA-1
152 Mbps
64.91 Mbps 2.34x slow
97.82 Mbps 1.55x slow
42.4 Mbps 3.58x slow


HMAC(SHA-1)
19.18 Mbps

17.66 Mbps 1.09x slow



SHA-224
107 Mbps
27.04 Mbps 3.97x slow
81.07 Mbps 1.32x slow
22.87 Mbps 4.7x slow


SHA-256
107 Mbps
26.91 Mbps 3.98x slow
82.72 Mbps 1.3x slow
23.14 Mbps 4.63x slow


HMAC(SHA-256)
13.54 Mbps

14.94 Mbps 1.1x fast



SHA-384
81.51 Mbps
3.49 Mbps 23.36x slow
29.83 Mbps 2.73x slow
11.84 Mbps 6.89x slow


SHA-512
81 Mbps
3.52 Mbps 23.02x slow
29.68 Mbps 2.73x slow
11.94 Mbps 6.78x slow


SHA3-224
107 Mbps
1.9 Mbps 56.53x slow




SHA3-256
107 Mbps
1.9 Mbps 56.4x slow




SHA3-384
80.78 Mbps
1.9 Mbps 42.47x slow




SHA3-512
81.33 Mbps
1.9 Mbps 42.87x slow




RIPEMD-128
233 Mbps
60.55 Mbps 3.85x slow




RIPEMD-160
80.32 Mbps
36.69 Mbps 2.19x slow

34.53 Mbps 2.33x slow


RIPEMD-256
238 Mbps
58.04 Mbps 4.1x slow




RIPEMD-320
76.66 Mbps
34.48 Mbps 2.22x slow




BLAKE-2s
168 Mbps





BLAKE-2b
140 Mbps
7.71 Mbps 18.21x slow




Poly1305
572 Mbps
308 Mbps 1.86x slow




XXH32
840 Mbps





XXH64
656 Mbps





XXH3
82.46 Mbps





XXH128
83.76 Mbps





SM3
101 Mbps
28.19 Mbps 3.57x slow





Key derivator algorithm benchmarks on different security parameters:



Algorithms
little
moderate
good
strong




scrypt
1.589 ms
16.688 ms
91.663 ms
2937.545 ms


bcrypt
2.24 ms
17.077 ms
273.729 ms
2155.139 ms


pbkdf2
0.849 ms
17.091 ms
283.537 ms
3419.39 ms


argon2i
3.914 ms
16.474 ms
215.783 ms
2598.387 ms


argon2d
2.981 ms
16.98 ms
207.425 ms
2563.844 ms


argon2id
2.311 ms
16.491 ms
205.25 ms
2576.335 ms




All benchmarks are done on AMD Ryzen 7 5800X processor and 3200MHz RAM using compiled exe
Dart SDK version: 3.3.3 (stable) (Tue Mar 26 14:21:33 2024 +0000) on "windows_x64"

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.