Skip to content

Commit 2135d3f

Browse files
committed
Add expand_message_xmd_works_for_draft8_testvectors_sha512
1 parent c532c39 commit 2135d3f

File tree

1 file changed

+107
-1
lines changed

1 file changed

+107
-1
lines changed

src/hash_to_field.rs

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ where
147147
#[cfg(test)]
148148
mod tests {
149149
use super::*;
150-
use sha2::Sha256;
150+
use sha2::{Sha256, Sha512};
151151

152152
// Except introducing new internal variables, expand_message_xmd did not change
153153
// between draft 7 and draft 8 (https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-irtf-cfrg-hash-to-curve-08.txt).
@@ -258,4 +258,110 @@ mod tests {
258258
uniform_bytes
259259
);
260260
}
261+
262+
/// From https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-08#appendix-I.2
263+
#[test]
264+
fn expand_message_xmd_works_for_draft8_testvectors_sha512() {
265+
let dst = b"QUUX-V01-CS02-with-expander";
266+
267+
let msg = b"";
268+
let len_in_bytes = 0x20;
269+
let uniform_bytes =
270+
hex::decode("2eaa1f7b5715f4736e6a5dbe288257abf1faa028680c1d938cd62ac699ead642")
271+
.unwrap();
272+
assert_eq!(
273+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
274+
uniform_bytes
275+
);
276+
277+
let msg = b"abc";
278+
let len_in_bytes = 0x20;
279+
let uniform_bytes =
280+
hex::decode("0eeda81f69376c80c0f8986496f22f21124cb3c562cf1dc608d2c13005553b0f")
281+
.unwrap();
282+
assert_eq!(
283+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
284+
uniform_bytes
285+
);
286+
287+
let msg = b"abcdef0123456789";
288+
let len_in_bytes = 0x20;
289+
let uniform_bytes =
290+
hex::decode("2e375fc05e05e80dbf3083796fde2911789d9e8847e1fcebf4ca4b36e239b338")
291+
.unwrap();
292+
assert_eq!(
293+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
294+
uniform_bytes
295+
);
296+
297+
let msg = b"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
298+
let len_in_bytes = 0x20;
299+
let uniform_bytes =
300+
hex::decode("c37f9095fe7fe4f01c03c3540c1229e6ac8583b07510085920f62ec66acc0197")
301+
.unwrap();
302+
assert_eq!(
303+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
304+
uniform_bytes
305+
);
306+
307+
let msg = b"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
308+
let len_in_bytes = 0x20;
309+
let uniform_bytes =
310+
hex::decode("af57a7f56e9ed2aa88c6eab45c8c6e7638ae02da7c92cc04f6648c874ebd560e")
311+
.unwrap();
312+
assert_eq!(
313+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
314+
uniform_bytes
315+
);
316+
317+
let msg = b"";
318+
let len_in_bytes = 0x80;
319+
let uniform_bytes =
320+
hex::decode("0687ce02eba5eb3faf1c3c539d1f04babd3c0f420edae244eeb2253b6c6d6865145c31458e824b4e87ca61c3442dc7c8c9872b0b7250aa33e0668ccebbd2b386de658ca11a1dcceb51368721ae6dcd2d4bc86eaebc4e0d11fa02ad053289c9b28a03da6c942b2e12c14e88dbde3b0ba619d6214f47212b628f3e1b537b66efcf")
321+
.unwrap();
322+
assert_eq!(
323+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
324+
uniform_bytes
325+
);
326+
327+
let msg = b"abc";
328+
let len_in_bytes = 0x80;
329+
let uniform_bytes =
330+
hex::decode("779ae4fd8a92f365e4df96b9fde97b40486bb005c1a2096c86f55f3d92875d89045fbdbc4a0e9f2d3e1e6bcd870b2d7131d868225b6fe72881a81cc5166b5285393f71d2e68bb0ac603479959370d06bdbe5f0d8bfd9af9494d1e4029bd68ab35a561341dd3f866b3ef0c95c1fdfaab384ce24a23427803dda1db0c7d8d5344a")
331+
.unwrap();
332+
assert_eq!(
333+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
334+
uniform_bytes
335+
);
336+
337+
let msg = b"abcdef0123456789";
338+
let len_in_bytes = 0x80;
339+
let uniform_bytes =
340+
hex::decode("f0953d28846a50e9f88b7ae35b643fc43733c9618751b569a73960c655c068db7b9f044ad5a40d49d91c62302eaa26163c12abfa982e2b5d753049e000adf7630ae117aeb1fb9b61fc724431ac68b369e12a9481b4294384c3c890d576a79264787bc8076e7cdabe50c044130e480501046920ff090c1a091c88391502f0fbac")
341+
.unwrap();
342+
assert_eq!(
343+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
344+
uniform_bytes
345+
);
346+
347+
let msg = b"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
348+
let len_in_bytes = 0x80;
349+
let uniform_bytes =
350+
hex::decode("64d3e59f0bc3c5e653011c914b419ba8310390a9585311fddb26791d26663bd71971c347e1b5e88ba9274d2445ed9dcf48eea9528d807b7952924159b7c27caa4f25a2ea94df9508e70a7012dfce0e8021b37e59ea21b80aa9af7f1a1f2efa4fbe523c4266ce7d342acaacd438e452c501c131156b4945515e9008d2b155c258")
351+
.unwrap();
352+
assert_eq!(
353+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
354+
uniform_bytes
355+
);
356+
357+
let msg = b"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
358+
let len_in_bytes = 0x80;
359+
let uniform_bytes =
360+
hex::decode("01524feea5b22f6509f6b1e805c97df94faf4d821b01aadeebc89e9daaed0733b4544e50852fd3e019d58eaad6d267a134c8bc2c08bc46c10bfeff3ee03110bcd8a0d695d75a34092bd8b677bdd369a13325549abab54f4ac907b712bdd3567f38c4554c51902b735b81f43a7ef6f938c7690d107c052c7e7b795ac635b3200a")
361+
.unwrap();
362+
assert_eq!(
363+
ExpandMsgXmd::<Sha512>::expand_message(msg, dst, len_in_bytes),
364+
uniform_bytes
365+
);
366+
}
261367
}

0 commit comments

Comments
 (0)