mod.rs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. use block_buffer::{
  2. generic_array::typenum::{U10, U16, U24, U4, U8},
  3. Block, EagerBuffer, LazyBuffer,
  4. };
  5. #[test]
  6. fn test_eager_digest_pad() {
  7. let mut buf = EagerBuffer::<U4>::default();
  8. let inputs = [
  9. &b"01234567"[..],
  10. &b"89"[..],
  11. &b"abcdefghij"[..],
  12. &b"klmnopqrs"[..],
  13. &b"tuv"[..],
  14. &b"wx"[..],
  15. ];
  16. let exp_blocks = [
  17. (0, &[b"0123", b"4567"][..]),
  18. (2, &[b"89ab"][..]),
  19. (2, &[b"cdef", b"ghij"][..]),
  20. (3, &[b"klmn", b"opqr"][..]),
  21. (4, &[b"stuv"][..]),
  22. ];
  23. let exp_poses = [0, 2, 0, 1, 0, 2];
  24. let mut n = 0;
  25. for (i, input) in inputs.iter().enumerate() {
  26. buf.digest_blocks(input, |b| {
  27. let (j, exp) = exp_blocks[n];
  28. n += 1;
  29. assert_eq!(i, j);
  30. assert_eq!(b.len(), exp.len());
  31. assert!(b.iter().zip(exp.iter()).all(|v| v.0[..] == v.1[..]));
  32. });
  33. assert_eq!(exp_poses[i], buf.get_pos());
  34. }
  35. assert_eq!(buf.pad_with_zeros()[..], b"wx\0\0"[..]);
  36. assert_eq!(buf.get_pos(), 0);
  37. }
  38. #[test]
  39. fn test_lazy_digest_pad() {
  40. let mut buf = LazyBuffer::<U4>::default();
  41. let inputs = [
  42. &b"01234567"[..],
  43. &b"89"[..],
  44. &b"abcdefghij"[..],
  45. &b"klmnopqrs"[..],
  46. ];
  47. let expected = [
  48. (0, &[b"0123"][..]),
  49. (1, &[b"4567"][..]),
  50. (2, &[b"89ab"][..]),
  51. (2, &[b"cdef"][..]),
  52. (3, &[b"ghij"][..]),
  53. (3, &[b"klmn", b"opqr"][..]),
  54. ];
  55. let exp_poses = [4, 2, 4, 1];
  56. let mut n = 0;
  57. for (i, input) in inputs.iter().enumerate() {
  58. buf.digest_blocks(input, |b| {
  59. let (j, exp) = expected[n];
  60. n += 1;
  61. assert_eq!(i, j);
  62. assert_eq!(b.len(), exp.len());
  63. assert!(b.iter().zip(exp.iter()).all(|v| v.0[..] == v.1[..]));
  64. });
  65. assert_eq!(exp_poses[i], buf.get_pos());
  66. }
  67. assert_eq!(buf.pad_with_zeros()[..], b"s\0\0\0"[..]);
  68. assert_eq!(buf.get_pos(), 0);
  69. }
  70. #[test]
  71. fn test_eager_set_data() {
  72. let mut buf = EagerBuffer::<U4>::default();
  73. let mut n = 0u8;
  74. let mut gen = |blocks: &mut [Block<U4>]| {
  75. for block in blocks {
  76. block.iter_mut().for_each(|b| *b = n);
  77. n += 1;
  78. }
  79. };
  80. let mut out = [0u8; 6];
  81. buf.set_data(&mut out, &mut gen);
  82. assert_eq!(out, [0, 0, 0, 0, 1, 1]);
  83. assert_eq!(buf.get_pos(), 2);
  84. let mut out = [0u8; 3];
  85. buf.set_data(&mut out, &mut gen);
  86. assert_eq!(out, [1, 1, 2]);
  87. assert_eq!(buf.get_pos(), 1);
  88. let mut out = [0u8; 3];
  89. buf.set_data(&mut out, &mut gen);
  90. assert_eq!(out, [2, 2, 2]);
  91. assert_eq!(n, 3);
  92. assert_eq!(buf.get_pos(), 0);
  93. }
  94. #[test]
  95. #[rustfmt::skip]
  96. fn test_eager_paddings() {
  97. let mut buf_be = EagerBuffer::<U8>::new(&[0x42]);
  98. let mut buf_le = buf_be.clone();
  99. let mut out_be = Vec::<u8>::new();
  100. let mut out_le = Vec::<u8>::new();
  101. let len = 0x0001_0203_0405_0607;
  102. buf_be.len64_padding_be(len, |block| out_be.extend(block));
  103. buf_le.len64_padding_le(len, |block| out_le.extend(block));
  104. assert_eq!(
  105. out_be,
  106. [
  107. 0x42, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  108. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  109. ],
  110. );
  111. assert_eq!(
  112. out_le,
  113. [
  114. 0x42, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  115. 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
  116. ],
  117. );
  118. let mut buf_be = EagerBuffer::<U10>::new(&[0x42]);
  119. let mut buf_le = buf_be.clone();
  120. let mut out_be = Vec::<u8>::new();
  121. let mut out_le = Vec::<u8>::new();
  122. buf_be.len64_padding_be(len, |block| out_be.extend(block));
  123. buf_le.len64_padding_le(len, |block| out_le.extend(block));
  124. assert_eq!(
  125. out_be,
  126. [0x42, 0x80, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07],
  127. );
  128. assert_eq!(
  129. out_le,
  130. [0x42, 0x80, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00],
  131. );
  132. let mut buf = EagerBuffer::<U16>::new(&[0x42]);
  133. let mut out = Vec::<u8>::new();
  134. let len = 0x0001_0203_0405_0607_0809_0a0b_0c0d_0e0f;
  135. buf.len128_padding_be(len, |block| out.extend(block));
  136. assert_eq!(
  137. out,
  138. [
  139. 0x42, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  140. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  141. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  142. 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  143. ],
  144. );
  145. let mut buf = EagerBuffer::<U24>::new(&[0x42]);
  146. let mut out = Vec::<u8>::new();
  147. let len = 0x0001_0203_0405_0607_0809_0a0b_0c0d_0e0f;
  148. buf.len128_padding_be(len, |block| out.extend(block));
  149. assert_eq!(
  150. out,
  151. [
  152. 0x42, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  153. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  154. 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  155. ],
  156. );
  157. let mut buf = EagerBuffer::<U4>::new(&[0x42]);
  158. let mut out = Vec::<u8>::new();
  159. buf.digest_pad(0xff, &[0x10, 0x11, 0x12], |block| out.extend(block));
  160. assert_eq!(
  161. out,
  162. [0x42, 0xff, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12],
  163. );
  164. let mut buf = EagerBuffer::<U4>::new(&[0x42]);
  165. let mut out = Vec::<u8>::new();
  166. buf.digest_pad(0xff, &[0x10, 0x11], |block| out.extend(block));
  167. assert_eq!(
  168. out,
  169. [0x42, 0xff, 0x10, 0x11],
  170. );
  171. }