can't call self.salt because salt is private