authentication.go 498 B

12345678910111213141516171819202122232425262728
  1. package binlog
  2. import (
  3. "crypto/sha256"
  4. )
  5. func (c *Conn) cachingSha2Auth(salt []byte, password []byte) []byte {
  6. if len(password) < 1 {
  7. return nil
  8. }
  9. pHash := c.sha256Hash(password)
  10. pHashHash := c.sha256Hash(pHash)
  11. pHashHashHash := c.sha256Hash(pHashHash)
  12. authData := c.sha256Hash(append(pHashHashHash, salt...))
  13. for i := range pHash {
  14. pHash[i] ^= authData[i]
  15. }
  16. return pHash
  17. }
  18. func (c *Conn) sha256Hash(word []byte) []byte {
  19. s := sha256.New()
  20. s.Write(word)
  21. return s.Sum(nil)
  22. }