Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

salted_test.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
  2. // released under the MIT license
  3. package passwd
  4. import (
  5. "encoding/base64"
  6. "testing"
  7. )
  8. type SaltedPasswordTest struct {
  9. ManagerSalt string
  10. Salt string
  11. Hash string
  12. Password string
  13. }
  14. var SaltedPasswords = []SaltedPasswordTest{
  15. {
  16. ManagerSalt: "3TPITDVf/NGb4OlCyV1uZNW1H7zy3BFos+Dsu7dj",
  17. Salt: "b6oVqshJUfcm1zWEtqwKqUVylqLONAZfqt17ns+Y",
  18. Hash: "JDJhJDE0JFYuT28xOFFNZldaaTI1UWpzNENMeHVKdm5vS1lkL2tFL1lFVkQ2a0loUEY2Vzk3UTZSVDVP",
  19. Password: "test",
  20. },
  21. {
  22. ManagerSalt: "iNGeNEfuPihM8kYDZ/C6qAJ0JERKeKkUYp6wYDU0",
  23. Salt: "U7TA6k6VLSLHfdjSsQH0vc3Jqq6cUezJNyd0DC9c",
  24. Hash: "JDJhJDE0JEguY2Rva3VOTVRrNm1VeGdXWjAwamViMGNvV0xYZFdHcTZjenFCRWE3Ymt2N1JiSFJDZlYy",
  25. Password: "test2",
  26. },
  27. {
  28. ManagerSalt: "ghKJaaSNTjuFmgLRqrgY4FGfx8wXEGOBE02PZvbv",
  29. Salt: "NO/mtrMhGjX1FGDGdpGrDJIi4jxsb0aFa7ybId7r",
  30. Hash: "JDJhJDE0JEI0M055Z2NDcjNUanB5ZEJ5MzUybi5FT3o4Y1MyNXp2c1NDVS9hS0hOcUxSRDZTWmUxTnN5",
  31. Password: "supermono",
  32. },
  33. }
  34. func TestSaltedPassword(t *testing.T) {
  35. // check newly-generated password
  36. managerSalt, err := NewSalt()
  37. if err != nil {
  38. t.Error("Could not generate manager salt")
  39. }
  40. salt, err := NewSalt()
  41. if err != nil {
  42. t.Error("Could not generate salt")
  43. }
  44. manager := NewSaltedManager(managerSalt)
  45. passHash, err := manager.GenerateFromPassword(salt, "this is a test password")
  46. if err != nil {
  47. t.Error("Could not generate from password")
  48. }
  49. if manager.CompareHashAndPassword(passHash, salt, "this is a test password") != nil {
  50. t.Error("Generated password does not match")
  51. }
  52. // check our stored passwords
  53. for i, info := range SaltedPasswords {
  54. // decode strings to bytes
  55. managerSalt, err = base64.StdEncoding.DecodeString(info.ManagerSalt)
  56. if err != nil {
  57. t.Errorf("Could not decode manager salt for test %d", i)
  58. }
  59. salt, err := base64.StdEncoding.DecodeString(info.Salt)
  60. if err != nil {
  61. t.Errorf("Could not decode salt for test %d", i)
  62. }
  63. hash, err := base64.StdEncoding.DecodeString(info.Hash)
  64. if err != nil {
  65. t.Errorf("Could not decode hash for test %d", i)
  66. }
  67. // make sure our test values are still correct
  68. manager := NewSaltedManager(managerSalt)
  69. if manager.CompareHashAndPassword(hash, salt, info.Password) != nil {
  70. t.Errorf("Password does not match for [%s]", info.Password)
  71. }
  72. }
  73. }