Skip to content

Commit bc41b39

Browse files
committed
bindings: support blake2s and blake2b hash functions
1 parent 8d4881b commit bc41b39

File tree

14 files changed

+129
-21
lines changed

14 files changed

+129
-21
lines changed

bindings/java/src/org/sf/rhash/HashType.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919

2020
/**
2121
* Type of hashing algorithm. Supported algorithms are CRC32, CRC32C,
22-
* MD4, MD5, SHA1/SHA2, Tiger, DC++ TTH, BitTorrent BTIH,
23-
* AICH, EDonkey 2000 hash, GOST R 34.11-94, GOST R 34.11-2012,
24-
* RIPEMD-160, HAS-160, EDON-R 256/512, Whirlpool and Snefru-128/256.
22+
* MD4, MD5, SHA1/SHA2/SHA3, Tiger, DC++ TTH, BitTorrent BTIH, AICH,
23+
* EDonkey 2000 hash, GOST R 34.11-94, GOST R 34.11-2012, RIPEMD-160,
24+
* HAS-160, BLAKE2s/BLAKE2b, EDON-R 256/512, Whirlpool and Snefru-128/256.
2525
*/
2626
public enum HashType {
2727
/** CRC32 checksum. */
@@ -80,7 +80,11 @@ public enum HashType {
8080
/** Snefru-128 hash. */
8181
SNEFRU128(1 << 27),
8282
/** Snefru-256 hash. */
83-
SNEFRU256(1 << 28);
83+
SNEFRU256(1 << 28),
84+
/** BLAKE2s hash. */
85+
BLAKE2S(1 << 29),
86+
/** BLAKE2b hash. */
87+
BLAKE2B(1 << 30);
8488

8589
/** hash_id for the native API */
8690
private int hashId;
@@ -126,7 +130,6 @@ static HashType forHashFlags(int flags) {
126130
* @return size of binary digest, in bytes
127131
*/
128132
public int getDigestSize() {
129-
//TODO: rhash_get_digest_size
130-
return -1;
133+
return Bindings.rhash_get_digest_size(hashId);
131134
}
132135
}

bindings/java/test/RHashTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public void testAllHashes() {
4646
assertEquals("697f2d856172cb8309d6b8b97dac4de344b549d4dee61edfb4962d8698b7fa803f4f93ff24393586e28b5b957ac3d1d369420ce53332712f997bd336d09ab02a", r.getDigest(SHA3_512).toString());
4747
assertEquals("bf5ce540ae51bc50399f96746c5a15bd", r.getDigest(SNEFRU128).toString());
4848
assertEquals("45161589ac317be0ceba70db2573ddda6e668a31984b39bf65e4b664b584c63d", r.getDigest(SNEFRU256).toString());
49+
assertEquals("4a0d129873403037c2cd9b9048203687f6233fb6738956e0349bd4320fec3e90", r.getDigest(BLAKE2S).toString());
50+
assertEquals("333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c", r.getDigest(BLAKE2B).toString());
4951

5052
r.reset();
5153
r.finish();

bindings/mono/HashType.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ public enum HashType : uint {
8181
/* Snefru-128 hash. */
8282
SNEFRU128 = 1 << 27,
8383
/* Snefru-256 hash. */
84-
SNEFRU256 = 1 << 28
84+
SNEFRU256 = 1 << 28,
85+
/* BLAKE2s hash. */
86+
BLAKE2S = 1 << 29,
87+
/* BLAKE2b hash. */
88+
BLAKE2B = 1 << 30
8589
}
8690
}

bindings/mono/doc/RHash/HashType.xml

Lines changed: 75 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
<summary>Type of hashing algorithm.</summary>
1313
<remarks>
1414
<para>
15-
Supported algorithms are MD4, MD5, SHA1/SHA2, Tiger,
16-
DC++ TTH, BitTorrent BTIH, AICH, EDonkey 2000 hash, GOST R 34.11-94,
17-
RIPEMD-160, HAS-160, EDON-R 256/512, Whirlpool and Snefru-128/256.
15+
Supported algorithms are CRC32, CRC32C, MD4, MD5, SHA1/SHA2/SHA3, AICH, ED2K,
16+
Tiger, DC++ TTH, GOST R 34.11-94, GOST R 34.11-2012, BitTorrent BTIH, RIPEMD-160,
17+
HAS-160, BLAKE2s/BLAKE2b, EDON-R 256/512, Whirlpool and Snefru-128/256.
1818
</para>
1919
<para>
2020
Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hashes.
@@ -36,6 +36,34 @@ Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hash
3636
<summary>eMule AICH.</summary>
3737
</Docs>
3838
</Member>
39+
<Member MemberName="BLAKE2B">
40+
<MemberSignature Language="C#" Value="BLAKE2B" />
41+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType BLAKE2B = unsigned int32(1073741824)" />
42+
<MemberType>Field</MemberType>
43+
<AssemblyInfo>
44+
<AssemblyVersion>1.0.1.1</AssemblyVersion>
45+
</AssemblyInfo>
46+
<ReturnValue>
47+
<ReturnType>RHash.HashType</ReturnType>
48+
</ReturnValue>
49+
<Docs>
50+
<summary>BLAKE2b hash.</summary>
51+
</Docs>
52+
</Member>
53+
<Member MemberName="BLAKE2S">
54+
<MemberSignature Language="C#" Value="BLAKE2S" />
55+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType BLAKE2S = unsigned int32(536870912)" />
56+
<MemberType>Field</MemberType>
57+
<AssemblyInfo>
58+
<AssemblyVersion>1.0.1.1</AssemblyVersion>
59+
</AssemblyInfo>
60+
<ReturnValue>
61+
<ReturnType>RHash.HashType</ReturnType>
62+
</ReturnValue>
63+
<Docs>
64+
<summary>BLAKE2s hash.</summary>
65+
</Docs>
66+
</Member>
3967
<Member MemberName="BTIH">
4068
<MemberSignature Language="C#" Value="BTIH" />
4169
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType BTIH = unsigned int32(64)" />
@@ -64,6 +92,20 @@ Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hash
6492
<summary>CRC32 checksum.</summary>
6593
</Docs>
6694
</Member>
95+
<Member MemberName="CRC32C">
96+
<MemberSignature Language="C#" Value="CRC32C" />
97+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType CRC32C = unsigned int32(67108864)" />
98+
<MemberType>Field</MemberType>
99+
<AssemblyInfo>
100+
<AssemblyVersion>1.0.1.1</AssemblyVersion>
101+
</AssemblyInfo>
102+
<ReturnValue>
103+
<ReturnType>RHash.HashType</ReturnType>
104+
</ReturnValue>
105+
<Docs>
106+
<summary>CRC32C checksum.</summary>
107+
</Docs>
108+
</Member>
67109
<Member MemberName="ED2K">
68110
<MemberSignature Language="C#" Value="ED2K" />
69111
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType ED2K = unsigned int32(128)" />
@@ -106,6 +148,34 @@ Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hash
106148
<summary>EDON-R 512.</summary>
107149
</Docs>
108150
</Member>
151+
<Member MemberName="GOST12_256">
152+
<MemberSignature Language="C#" Value="GOST12_256" />
153+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType GOST12_256 = unsigned int32(16384)" />
154+
<MemberType>Field</MemberType>
155+
<AssemblyInfo>
156+
<AssemblyVersion>1.0.1.1</AssemblyVersion>
157+
</AssemblyInfo>
158+
<ReturnValue>
159+
<ReturnType>RHash.HashType</ReturnType>
160+
</ReturnValue>
161+
<Docs>
162+
<summary>GOST R 34.11-2012, 256 bit.</summary>
163+
</Docs>
164+
</Member>
165+
<Member MemberName="GOST12_512">
166+
<MemberSignature Language="C#" Value="GOST12_512" />
167+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType GOST12_512 = unsigned int32(32768)" />
168+
<MemberType>Field</MemberType>
169+
<AssemblyInfo>
170+
<AssemblyVersion>1.0.1.1</AssemblyVersion>
171+
</AssemblyInfo>
172+
<ReturnValue>
173+
<ReturnType>RHash.HashType</ReturnType>
174+
</ReturnValue>
175+
<Docs>
176+
<summary>GOST R 34.11-2012, 512 bit.</summary>
177+
</Docs>
178+
</Member>
109179
<Member MemberName="GOST94">
110180
<MemberSignature Language="C#" Value="GOST94" />
111181
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType GOST94 = unsigned int32(2048)" />
@@ -318,7 +388,7 @@ Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hash
318388
</Member>
319389
<Member MemberName="SNEFRU128">
320390
<MemberSignature Language="C#" Value="SNEFRU128" />
321-
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType SNEFRU128 = unsigned int32(16384)" />
391+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType SNEFRU128 = unsigned int32(134217728)" />
322392
<MemberType>Field</MemberType>
323393
<AssemblyInfo>
324394
<AssemblyVersion>1.0.1.1</AssemblyVersion>
@@ -332,7 +402,7 @@ Constants may be OR-combined to form <see cref="T:System.UInt32" /> mask of hash
332402
</Member>
333403
<Member MemberName="SNEFRU256">
334404
<MemberSignature Language="C#" Value="SNEFRU256" />
335-
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType SNEFRU256 = unsigned int32(32768)" />
405+
<MemberSignature Language="ILAsm" Value=".field public static literal valuetype RHash.HashType SNEFRU256 = unsigned int32(268435456)" />
336406
<MemberType>Field</MemberType>
337407
<AssemblyInfo>
338408
<AssemblyVersion>1.0.1.1</AssemblyVersion>

bindings/mono/test/Test.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ static void Main(string[] args) {
5353
hashes.Add(HashType.SHA3_256, "f627c8f9355399ef45e1a6b6e5a9e6a3abcb3e1b6255603357bffa9f2211ba7e");
5454
hashes.Add(HashType.SHA3_384, "0529075e85bcdc06da94cbc83c53b7402c5032440210a1a24d9ccca481ddbd6c1309ae0ef23741f13352a4f3382dee51");
5555
hashes.Add(HashType.SHA3_512, "fdd7e7b9655f4f0ef89056e864a2d2dce3602404480281c88455e3a98f728aa08b3f116e6b434200a035e0780d9237ca367c976c5506f7c6f367e6b65447d97c");
56+
hashes.Add(HashType.BLAKE2S, "709dcba6d2db68cdc6d4d3674cf8382755b6f6d673c68ad2d8132d5eac0a54cc");
57+
hashes.Add(HashType.BLAKE2B, "bfc877bc2a258facff21279383039ca6c5e4f98ee78b5cafa209bd3598633443908f9e533676cb38952cd8132241f19735b4929bc249937ec79349132dceac5a");
5658

5759
Console.WriteLine("\nTests: hashes for message");
5860
int errcount1 = 0;

bindings/perl/Rhash.pm

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ our %EXPORT_TAGS = (
1616
RHASH_GOST94_CRYPTOPRO RHASH_GOST12_256 RHASH_GOST12_512
1717
RHASH_SHA224 RHASH_SHA256 RHASH_SHA384 RHASH_SHA512
1818
RHASH_SHA3_224 RHASH_SHA3_256 RHASH_SHA3_384 RHASH_SHA3_512
19-
RHASH_HAS160 RHASH_EDONR256 RHASH_EDONR512
20-
RHASH_SNEFRU128 RHASH_SNEFRU256 RHASH_ALL)]
19+
RHASH_BLAKE2S RHASH_BLAKE2B RHASH_EDONR256 RHASH_EDONR512
20+
RHASH_HAS160 RHASH_SNEFRU128 RHASH_SNEFRU256 RHASH_ALL)]
2121
);
2222

2323
Exporter::export_tags( );
@@ -59,7 +59,9 @@ use constant RHASH_SHA3_512 => 0x2000000;
5959
use constant RHASH_CRC32C => 0x4000000;
6060
use constant RHASH_SNEFRU128 => 0x8000000;
6161
use constant RHASH_SNEFRU256 => 0x10000000;
62-
use constant RHASH_ALL => 0x1FFFFFFF;
62+
use constant RHASH_BLAKE2S => 0x20000000;
63+
use constant RHASH_BLAKE2B => 0x40000000;
64+
use constant RHASH_ALL => 0x7FFFFFFF;
6365

6466
##############################################################################
6567
# Rhash class methods
@@ -279,7 +281,7 @@ binary format or as a magnet link.
279281
The module supports the following hash functions:
280282
CRC32, CRC32C, MD4, MD5, SHA1, SHA256, SHA512, SHA3, AICH, ED2K, Tiger,
281283
DC++ TTH, GOST R 34.11-94, GOST R 34.11-2012, BitTorrent BTIH, RIPEMD-160,
282-
HAS-160, EDON-R 256/512, Whirlpool and Snefru-128/256.
284+
HAS-160, BLAKE2s/BLAKE2b, EDON-R 256/512, Whirlpool and Snefru-128/256.
283285
284286
=head1 CONSTRUCTOR
285287
@@ -319,6 +321,8 @@ Constructor accepts the following constants as arguments:
319321
RHASH_EDONR512,
320322
RHASH_SNEFRU128,
321323
RHASH_SNEFRU256,
324+
RHASH_BLAKE2S,
325+
RHASH_BLAKE2B,
322326
RHASH_ALL
323327
324328
The RHASH_ALL bit mask is bitwise union of all listed above bit-flags.

bindings/perl/t/3test_all_hash_functions.t

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use Test::More tests => 29;
1+
use Test::More tests => 31;
22
use Crypt::Rhash;
33

44
#########################
@@ -35,5 +35,7 @@ is( $r->hash(RHASH_SHA3_384), "1815f774f320491b48569efec794d249eeb59aae46d22bf77
3535
is( $r->hash(RHASH_SHA3_512), "697f2d856172cb8309d6b8b97dac4de344b549d4dee61edfb4962d8698b7fa803f4f93ff24393586e28b5b957ac3d1d369420ce53332712f997bd336d09ab02a");
3636
is( $r->hash(RHASH_SNEFRU128), "bf5ce540ae51bc50399f96746c5a15bd");
3737
is( $r->hash(RHASH_SNEFRU256), "45161589ac317be0ceba70db2573ddda6e668a31984b39bf65e4b664b584c63d");
38+
is( $r->hash(RHASH_BLAKE2S), "4a0d129873403037c2cd9b9048203687f6233fb6738956e0349bd4320fec3e90");
39+
is( $r->hash(RHASH_BLAKE2B), "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c");
3840

3941
__END__

bindings/php/php_rhash.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ PHP_MINIT_FUNCTION(rhash)
296296
REGISTER_RHASH_CONSTANT(RHASH_SHA3_512);
297297
REGISTER_RHASH_CONSTANT(RHASH_SNEFRU128);
298298
REGISTER_RHASH_CONSTANT(RHASH_SNEFRU256);
299+
REGISTER_RHASH_CONSTANT(RHASH_BLAKE2S);
300+
REGISTER_RHASH_CONSTANT(RHASH_BLAKE2B);
299301
REGISTER_RHASH_CONSTANT(RHASH_ALL);
300302

301303
return SUCCESS;

bindings/php/tests/001.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
test RHash global functions
33
--FILE--
44
<?php
5-
echo (rhash_count() >= 26) . "\n";
5+
echo (rhash_count() >= 31) . "\n";
66
echo rhash_get_digest_size(RHASH_CRC32) . "\n";
77
echo (int)rhash_is_base32(RHASH_MD5) . "\n";
88
echo (int)rhash_is_base32(RHASH_AICH) . "\n";

bindings/php/tests/002.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ echo $r->hash(RHASH_SHA3_224) . "\n";
3333
echo $r->hash(RHASH_SHA3_256) . "\n";
3434
echo $r->hash(RHASH_SHA3_384) . "\n";
3535
echo $r->hash(RHASH_SHA3_512) . "\n";
36+
echo $r->hash(RHASH_BLAKE2S) . "\n";
37+
echo $r->hash(RHASH_BLAKE2B) . "\n";
3638
echo $r->hash(RHASH_EDONR256) . "\n";
3739
echo $r->hash(RHASH_EDONR512) . "\n";
3840
echo $r->raw(RHASH_SHA1) . "\n";
@@ -72,6 +74,8 @@ ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
7274
80084bf2fba02475726feb2cab2d8215eab14bc6bdd8bfb2c8151257032ecd8b
7375
1815f774f320491b48569efec794d249eeb59aae46d22bf77dafe25c5edc28d7ea44f93ee1234aa88f61c91912a4ccd9
7476
697f2d856172cb8309d6b8b97dac4de344b549d4dee61edfb4962d8698b7fa803f4f93ff24393586e28b5b957ac3d1d369420ce53332712f997bd336d09ab02a
77+
4a0d129873403037c2cd9b9048203687f6233fb6738956e0349bd4320fec3e90
78+
333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c
7579
943aa9225a2cf154ec2e4dd81237720ba538ca8df2fd83c0b893c5d265f353a0
7680
b59ec44f7beef8a04ceed38a973d77c65e22e9458d5f67b497948da34986c093b5efc5483fbee55f2f740fcad31f18d80db44bb6b8843e7fd599188e7c07233b
7781
†÷ä7ú¥§üá]ܹêêê7vg¸

0 commit comments

Comments
 (0)