1
0

test_hashutils.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # -*- coding: utf-8 -*-
  2. # Import python libs
  3. from __future__ import absolute_import, print_function, unicode_literals
  4. # Import Salt libs
  5. import salt.utils.hashutils
  6. # Import Salt Testing libs
  7. from tests.support.unit import TestCase
  8. class HashutilsTestCase(TestCase):
  9. hmac_secret = "s00p3r s3kr1t"
  10. # Use a non-ascii unicode type to confirm that no UnicodeEncodeError is
  11. # raised on Python 2.
  12. str = "спам"
  13. str_b64encode_result = "0YHQv9Cw0Lw="
  14. str_encodestring_result = "0YHQv9Cw0Lw=\n"
  15. str_md5 = "a035ac08ab2f03556f9b3ee640052e5c"
  16. str_sha256 = "095291ffa3d361436d4617879e22c1da06c6ab61a3fb081321ec854a27a091ac"
  17. str_sha512 = "12efd90e507289f1f21e5dcfe2e92cf0bb4904abccb55c3ce9177670c711981501054b32b807c37058675590d1c484bd2b72a4215a2fa397aa4f2b12f298b1f0"
  18. str_hmac_challenge = b"qz2k0t1aevKEme3JGsNQJX/xpmf+/w3q6qmWDk1ZqbY="
  19. str_hmac_compute = (
  20. "ab3da4d2dd5a7af28499edc91ac350257ff1a667feff0deaeaa9960e4d59a9b6"
  21. )
  22. # 16 bytes of random data
  23. bytes = b"b\x19\xf6\x86\x0e\x1a\x1cs\x0c\xda&zv\xfc\xa2\xdd"
  24. bytes_b64encode_result = "Yhn2hg4aHHMM2iZ6dvyi3Q=="
  25. bytes_encodestring_result = "Yhn2hg4aHHMM2iZ6dvyi3Q==\n"
  26. bytes_md5 = "4d064241724791641dc15930c65f75c8"
  27. bytes_sha256 = "25711a31c2673a48f3d1f29b25add574697872968e546d266f441de63b17954a"
  28. bytes_sha512 = "69f1524e602c1599fc374e1e3e2941e6f6949f4f7fe7321304e4e67bb850f3204dd5cbf9c13e231814540c2f5cd370c24ea257771d9fbf311d8f6085bad12b24"
  29. bytes_hmac_challenge = b"lQibiD9r1Hpo+5JYknaudIKfTx1L5J3U58M9yQOd04c="
  30. bytes_hmac_compute = (
  31. "95089b883f6bd47a68fb92589276ae74829f4f1d4be49dd4e7c33dc9039dd387"
  32. )
  33. def test_base64_b64encode(self):
  34. """
  35. Ensure that this function converts the value passed to bytes before
  36. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  37. TypeError on Python 3.
  38. """
  39. self.assertEqual(
  40. salt.utils.hashutils.base64_b64encode(self.str), self.str_b64encode_result
  41. )
  42. self.assertEqual(
  43. salt.utils.hashutils.base64_b64encode(self.bytes),
  44. self.bytes_b64encode_result,
  45. )
  46. def test_base64_b64decode(self):
  47. """
  48. Ensure that this function converts the value passed to a unicode type
  49. (if possible) on Python 2, and a str type (if possible) on Python 3.
  50. """
  51. self.assertEqual(
  52. salt.utils.hashutils.base64_b64decode(self.str_b64encode_result), self.str
  53. )
  54. self.assertEqual(
  55. salt.utils.hashutils.base64_b64decode(self.bytes_b64encode_result),
  56. self.bytes,
  57. )
  58. def test_base64_encodestring(self):
  59. """
  60. Ensure that this function converts the value passed to bytes before
  61. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  62. TypeError on Python 3.
  63. """
  64. self.assertEqual(
  65. salt.utils.hashutils.base64_encodestring(self.str),
  66. self.str_encodestring_result,
  67. )
  68. self.assertEqual(
  69. salt.utils.hashutils.base64_encodestring(self.bytes),
  70. self.bytes_encodestring_result,
  71. )
  72. def test_base64_decodestring(self):
  73. """
  74. Ensure that this function converts the value passed to a unicode type
  75. (if possible) on Python 2, and a str type (if possible) on Python 3.
  76. """
  77. self.assertEqual(
  78. salt.utils.hashutils.base64_decodestring(self.str_encodestring_result),
  79. self.str,
  80. )
  81. self.assertEqual(
  82. salt.utils.hashutils.base64_decodestring(self.bytes_encodestring_result),
  83. self.bytes,
  84. )
  85. def test_md5_digest(self):
  86. """
  87. Ensure that this function converts the value passed to bytes before
  88. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  89. TypeError on Python 3.
  90. """
  91. self.assertEqual(salt.utils.hashutils.md5_digest(self.str), self.str_md5)
  92. self.assertEqual(salt.utils.hashutils.md5_digest(self.bytes), self.bytes_md5)
  93. def test_sha256_digest(self):
  94. """
  95. Ensure that this function converts the value passed to bytes before
  96. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  97. TypeError on Python 3.
  98. """
  99. self.assertEqual(salt.utils.hashutils.sha256_digest(self.str), self.str_sha256)
  100. self.assertEqual(
  101. salt.utils.hashutils.sha256_digest(self.bytes), self.bytes_sha256
  102. )
  103. def test_sha512_digest(self):
  104. """
  105. Ensure that this function converts the value passed to bytes before
  106. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  107. TypeError on Python 3.
  108. """
  109. self.assertEqual(salt.utils.hashutils.sha512_digest(self.str), self.str_sha512)
  110. self.assertEqual(
  111. salt.utils.hashutils.sha512_digest(self.bytes), self.bytes_sha512
  112. )
  113. def test_hmac_signature(self):
  114. """
  115. Ensure that this function converts the value passed to bytes before
  116. attempting to validate the hmac challenge, avoiding a
  117. UnicodeEncodeError on Python 2 and a TypeError on Python 3.
  118. """
  119. self.assertTrue(
  120. salt.utils.hashutils.hmac_signature(
  121. self.str, self.hmac_secret, self.str_hmac_challenge
  122. )
  123. )
  124. self.assertTrue(
  125. salt.utils.hashutils.hmac_signature(
  126. self.bytes, self.hmac_secret, self.bytes_hmac_challenge
  127. )
  128. )
  129. def test_hmac_compute(self):
  130. """
  131. Ensure that this function converts the value passed to bytes before
  132. attempting to encode, avoiding a UnicodeEncodeError on Python 2 and a
  133. TypeError on Python 3.
  134. """
  135. self.assertEqual(
  136. salt.utils.hashutils.hmac_compute(self.str, self.hmac_secret),
  137. self.str_hmac_compute,
  138. )
  139. self.assertEqual(
  140. salt.utils.hashutils.hmac_compute(self.bytes, self.hmac_secret),
  141. self.bytes_hmac_compute,
  142. )
  143. def test_get_hash_exception(self):
  144. self.assertRaises(
  145. ValueError, salt.utils.hashutils.get_hash, "/tmp/foo/", form="INVALID"
  146. )