code: func hashToInt(hash []byte, c elliptic.Curve) *big.Int {
  	orderBits := c.Params().N.BitLen()
  	orderBytes := (orderBits + 7) / 8
  	if len(hash) > orderBytes {
  		hash = hash[:orderBytes]
  	}
  
  	ret := new(big.Int).SetBytes(hash)
  	excess := len(hash)*8 - orderBits
  	if excess > 0 {
  		ret.Rsh(ret, uint(excess))
  	}
  	return ret
  }
docs: // hashToInt converts a hash value to an integer. There is some disagreement
  // about how this is done. [NSA] suggests that this is done in the obvious
  // manner, but [SECG] truncates the hash to the bit-length of the curve order
  // first. We follow [SECG] because that's what OpenSSL does. Additionally,
  // OpenSSL right shifts excess bits from the number if the hash is too large
  // and we mirror that too.
  // This is borrowed from crypto/ecdsa.