hashlib 1.15.0 copy "hashlib: ^1.15.0" to clipboard
hashlib: ^1.15.0 copied to clipboard

Secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.

hashlib #

plugin version dart support likes pub points popularity

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:

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(E)

Password / Key Derivation Algorithms #

Algorithm Available methods Source
Argon2 Argon2, argon2d, argon2i, argon2id RFC-9106
PBKDF2 PBKDF2, pbkdf2, #.pbkdf2 RFC-8081
scrypt scrypt, Scrypt RFC-7914

Message Authentication Code (MAC) Generators #

Algorithms Available methods Source
HMAC HMAC, #.hmac RFC-2104
Poly1305 Poly1305, poly1305, poly1305pair 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

Demo #

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

Get it on Google Play

demo app preview

Getting Started #

The following import will give you access to all of the algorithms in this package.

import 'package:hashlib/hashlib.dart' as hashlib;

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 salt = "some salt".codeUnits;
  print("text => $text");
  print("key => $key");
  print("salt => ${toHex(salt)}");
  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('[BLAKE-2s/256] => ${blake2s256.string(text)}');
  print('[BLAKE-2b/512] => ${blake2b512.string(text)}');
  print('');

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

  // Examples of PBKDF2 key derivation
  print("PBKDF2[HMAC[SHA256]] => ${pbkdf2(pw, salt, 100)}");
  print("PBKDF2[HMAC[SHA1]] => ${sha1.hmac(pw).pbkdf2(salt, 100)}");
  print("PBKDF2[BLAKE2b-256-MAC] => ${blake2b256.mac(pw).pbkdf2(salt, 100)}");
  print("PBKDF2[HMAC[BLAKE-2b-256]] => ${blake2b256.pbkdf2(pw, salt, 100)}");
  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(salt).value()}');
  print('HOTP[counter=$nw] => ${HOTP(salt, counter: counter).value()}');
  print('');

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

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

Benchmarks #

Libraries:

With 5MB message (10 iterations):

Algorithms hashlib PointyCastle crypto hash
MD4 259.72MB/s 99.56MB/s
161% slower
MD5 168.39MB/s 87.81MB/s
92% slower
131.96MB/s
28% slower
76.41MB/s
120% slower
HMAC(MD5) 156.45MB/s 129.58MB/s
21% slower
75.25MB/s
108% slower
SHA-1 139.41MB/s 53.93MB/s
158% slower
100.08MB/s
39% slower
42.84MB/s
225% slower
HMAC(SHA-1) 139.88MB/s 101.45MB/s
38% slower
SHA-224 95.23MB/s 20.65MB/s
361% slower
86.13MB/s
11% slower
20.32MB/s
369% slower
SHA-256 95.18MB/s 20.83MB/s
357% slower
86.50MB/s
10% slower
20.45MB/s
365% slower
HMAC(SHA-256) 94.70MB/s 85.48MB/s
11% slower
SHA-384 151.46MB/s 5.41MB/s
2698% slower
53.04MB/s
186% slower
17.97MB/s
743% slower
SHA-512 150.59MB/s 5.39MB/s
2693% slower
52.88MB/s
185% slower
17.94MB/s
739% slower
SHA3-256 95.12MB/s 3.21MB/s
2855% slower
SHA3-512 150.90MB/s 1.70MB/s
8754% slower
RIPEMD-128 204.31MB/s 43.18MB/s
373% slower
RIPEMD-160 65.84MB/s 28.14MB/s
134% slower
33.66MB/s
96% slower
RIPEMD-256 223.50MB/s 41.98MB/s
432% slower
RIPEMD-320 65.74MB/s 27.95MB/s
135% slower
BLAKE-2s 143.56MB/s
BLAKE-2b 158.93MB/s 12.08MB/s
1215% slower
Poly1305 448.23MB/s 147.96MB/s
203% slower
XXH32 518.68MB/s
XXH64 527.12MB/s
XXH3 120.16MB/s
XXH128 119.32MB/s

With 1KB message (5000 iterations):

Algorithms hashlib PointyCastle crypto hash
MD4 243.89MB/s 95.49MB/s
155% slower
MD5 161.42MB/s 83.58MB/s
93% slower
127.65MB/s
26% slower
96.58MB/s
67% slower
HMAC(MD5) 128.92MB/s 106.10MB/s
22% slower
73.12MB/s
76% slower
SHA-1 131.39MB/s 51.14MB/s
157% slower
95.65MB/s
37% slower
46.99MB/s
180% slower
HMAC(SHA-1) 96.57MB/s 69.18MB/s
40% slower
SHA-224 88.92MB/s 19.92MB/s
346% slower
81.37MB/s
9% slower
20.68MB/s
330% slower
SHA-256 88.71MB/s 19.87MB/s
346% slower
81.34MB/s
9% slower
20.71MB/s
328% slower
HMAC(SHA-256) 64.20MB/s 58.76MB/s
9% slower
SHA-384 131.39MB/s 4.91MB/s
2571% slower
46.20MB/s
184% slower
19.43MB/s
576% slower
SHA-512 131.90MB/s 4.89MB/s
2593% slower
46.37MB/s
184% slower
19.53MB/s
575% slower
SHA3-256 89.05MB/s 3.08MB/s
2790% slower
SHA3-512 132.36MB/s 1.65MB/s
7918% slower
RIPEMD-128 195.96MB/s 41.61MB/s
371% slower
RIPEMD-160 61.78MB/s 26.49MB/s
133% slower
35.84MB/s
72% slower
RIPEMD-256 207.92MB/s 39.87MB/s
421% slower
RIPEMD-320 61.66MB/s 26.29MB/s
134% slower
BLAKE-2s 141.49MB/s
BLAKE-2b 152.02MB/s 11.96MB/s
1170% slower
Poly1305 423.75MB/s 146.63MB/s
189% slower
XXH32 494.25MB/s
XXH64 501.45MB/s
XXH3 113.33MB/s
XXH128 112.55MB/s

With 10B message (100000 iterations):

Algorithms hashlib PointyCastle crypto hash
MD4 35.37MB/s 16.32MB/s
117% slower
MD5 29.80MB/s 14.07MB/s
112% slower
14.82MB/s
101% slower
8.03MB/s
271% slower
HMAC(MD5) 5.20MB/s 4.53MB/s
15% slower
2.15MB/s
142% slower
SHA-1 16.91MB/s 7.78MB/s
117% slower
11.61MB/s
46% slower
5.08MB/s
233% slower
HMAC(SHA-1) 2.68MB/s 2.08MB/s
29% slower
SHA-224 12.24MB/s 3.23MB/s
278% slower
9.75MB/s
26% slower
2.74MB/s
346% slower
SHA-256 12.24MB/s 3.21MB/s
281% slower
9.83MB/s
25% slower
2.76MB/s
342% slower
HMAC(SHA-256) 1.89MB/s 1.76MB/s
7% slower
SHA-384 9.41MB/s 432.14KB/s
2131% slower
3.56MB/s
164% slower
1.40MB/s
568% slower
SHA-512 9.36MB/s 432.57KB/s
2118% slower
3.55MB/s
164% slower
1.42MB/s
560% slower
SHA3-256 12.24MB/s 239.44KB/s
5137% slower
SHA3-512 9.31MB/s 239.06KB/s
3889% slower
RIPEMD-128 28.70MB/s 6.79MB/s
322% slower
RIPEMD-160 9.48MB/s 4.26MB/s
123% slower
4.32MB/s
120% slower
RIPEMD-256 28.97MB/s 6.44MB/s
350% slower
RIPEMD-320 9.42MB/s 4.03MB/s
134% slower
BLAKE-2s 19.13MB/s
BLAKE-2b 15.15MB/s 903.43KB/s
1618% slower
Poly1305 62.02MB/s 36.58MB/s
70% slower
XXH32 101.78MB/s
XXH64 76.44MB/s
XXH3 10.43MB/s
XXH128 10.01MB/s

Argon2 and scrypt benchmarks on different security parameters:

Algorithms test little moderate good strong
scrypt 0.057 ms 1.507 ms 10.907 ms 87.509 ms 1412.755 ms
argon2i 0.395 ms 2.761 ms 17.238 ms 200.692 ms 2407.547 ms
argon2d 0.268 ms 2.726 ms 16.428 ms 200.05 ms 2404.685 ms
argon2id 0.286 ms 2.364 ms 16.378 ms 198.979 ms 2433.166 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"

31
likes
160
pub points
89%
popularity

Publisher

verified publisherbitanon.dev

Secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.

Repository (GitHub)
View/report issues

Documentation

API reference

Funding

Consider supporting this project:

paypal.me

License

BSD-3-Clause (LICENSE)

Dependencies

hashlib_codecs

More

Packages that depend on hashlib