PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/test/digest/test_digest_hmac.rb

https://github.com/ahwuyeah/ruby
Ruby | 166 lines | 148 code | 15 blank | 3 comment | 3 complexity | 72cd8fdb71cee428bd48de5bb3dea652 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-3.0, Unlicense, GPL-2.0
  1. require 'test/unit'
  2. require 'digest/hmac'
  3. module TM_HMAC
  4. def test_s_hexdigest
  5. cases.each { |h|
  6. digesters.each { |d|
  7. assert_equal(h[:hexdigest], Digest::HMAC.hexdigest(h[:data], h[:key], d))
  8. }
  9. }
  10. end
  11. def test_hexdigest
  12. cases.each { |h|
  13. digesters.each { |d|
  14. hmac = Digest::HMAC.new(h[:key], d)
  15. hmac.update(h[:data])
  16. assert_equal(h[:hexdigest], hmac.hexdigest)
  17. }
  18. }
  19. end
  20. def test_reset
  21. cases.each { |h|
  22. digesters.each { |d|
  23. hmac = Digest::HMAC.new(h[:key], d)
  24. hmac.update("test")
  25. hmac.reset
  26. hmac.update(h[:data])
  27. assert_equal(h[:hexdigest], hmac.hexdigest)
  28. }
  29. }
  30. end
  31. end
  32. class TC_HMAC_MD5 < Test::Unit::TestCase
  33. include TM_HMAC
  34. def digesters
  35. [Digest::MD5, Digest::MD5.new]
  36. end
  37. # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1
  38. def cases
  39. [
  40. {
  41. :key => "\x0b" * 16,
  42. :data => "Hi There",
  43. :hexdigest => "9294727a3638bb1c13f48ef8158bfc9d",
  44. }, {
  45. :key => "Jefe",
  46. :data => "what do ya want for nothing?",
  47. :hexdigest => "750c783e6ab0b503eaa86e310a5db738",
  48. }, {
  49. :key => "\xaa" * 16,
  50. :data => "\xdd" * 50,
  51. :hexdigest => "56be34521d144c88dbb8c733f0e8b3f6",
  52. }, {
  53. :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
  54. :data => "\xcd" * 50,
  55. :hexdigest => "697eaf0aca3a3aea3a75164746ffaa79",
  56. }, {
  57. :key => "\x0c" * 16,
  58. :data => "Test With Truncation",
  59. :hexdigest => "56461ef2342edc00f9bab995690efd4c",
  60. }, {
  61. :key => "\xaa" * 80,
  62. :data => "Test Using Larger Than Block-Size Key - Hash Key First",
  63. :hexdigest => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd",
  64. }, {
  65. :key => "\xaa" * 80,
  66. :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
  67. :hexdigest => "6f630fad67cda0ee1fb1f562db3aa53e",
  68. }
  69. ]
  70. end
  71. end
  72. class TC_HMAC_SHA1 < Test::Unit::TestCase
  73. include TM_HMAC
  74. def digesters
  75. [Digest::SHA1, Digest::SHA1.new]
  76. end
  77. # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1
  78. def cases
  79. [
  80. {
  81. :key => "\x0b" * 20,
  82. :data => "Hi There",
  83. :hexdigest => "b617318655057264e28bc0b6fb378c8ef146be00",
  84. }, {
  85. :key => "Jefe",
  86. :data => "what do ya want for nothing?",
  87. :hexdigest => "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",
  88. }, {
  89. :key => "\xaa" * 20,
  90. :data => "\xdd" * 50,
  91. :hexdigest => "125d7342b9ac11cd91a39af48aa17b4f63f175d3",
  92. }, {
  93. :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
  94. :data => "\xcd" * 50,
  95. :hexdigest => "4c9007f4026250c6bc8414f9bf50c86c2d7235da",
  96. }, {
  97. :key => "\x0c" * 20,
  98. :data => "Test With Truncation",
  99. :hexdigest => "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04",
  100. }, {
  101. :key => "\xaa" * 80,
  102. :data => "Test Using Larger Than Block-Size Key - Hash Key First",
  103. :hexdigest => "aa4ae5e15272d00e95705637ce8a3b55ed402112",
  104. }, {
  105. :key => "\xaa" * 80,
  106. :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
  107. :hexdigest => "e8e99d0f45237d786d6bbaa7965c7808bbff1a91",
  108. }
  109. ]
  110. end
  111. end
  112. class TC_HMAC_RMD160 < Test::Unit::TestCase
  113. include TM_HMAC
  114. def digesters
  115. [Digest::RMD160, Digest::RMD160.new]
  116. end
  117. # Taken from RFC 2286: Test Cases for HMAC-RIPEMD160 and HMAC-RIPEMD128
  118. def cases
  119. [
  120. {
  121. :key => "\x0b" * 20,
  122. :data => "Hi There",
  123. :hexdigest => "24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668",
  124. }, {
  125. :key => "Jefe",
  126. :data => "what do ya want for nothing?",
  127. :hexdigest => "dda6c0213a485a9e24f4742064a7f033b43c4069",
  128. }, {
  129. :key => "\xaa" * 20,
  130. :data => "\xdd" * 50,
  131. :hexdigest => "b0b105360de759960ab4f35298e116e295d8e7c1",
  132. }, {
  133. :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
  134. :data => "\xcd" * 50,
  135. :hexdigest => "d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4",
  136. }, {
  137. :key => "\x0c" * 20,
  138. :data => "Test With Truncation",
  139. :hexdigest => "7619693978f91d90539ae786500ff3d8e0518e39",
  140. }, {
  141. :key => "\xaa" * 80,
  142. :data => "Test Using Larger Than Block-Size Key - Hash Key First",
  143. :hexdigest => "6466ca07ac5eac29e1bd523e5ada7605b791fd8b",
  144. }, {
  145. :key => "\xaa" * 80,
  146. :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
  147. :hexdigest => "69ea60798d71616cce5fd0871e23754cd75d5a0a",
  148. }
  149. ]
  150. end
  151. end