package nkode import ( m "go-nkode/core/model" "go-nkode/util" ) type User struct { Username m.Username EncipheredPasscode m.EncipheredNKode UserKeys UserCipherKeys Interface UserInterface Renew bool } func (u *User) DecipherMask(setVals []uint64, passcodeLen int) ([]uint64, error) { return u.UserKeys.DecipherMask(u.EncipheredPasscode.Mask, setVals, passcodeLen) } func (u *User) RenewKeys(setXor []uint64, attrXor []uint64) error { u.Renew = true var err error u.UserKeys.SetKey, err = util.XorLists(setXor, u.UserKeys.SetKey) if err != nil { return err } u.UserKeys.AlphaKey, err = util.XorLists(attrXor, u.UserKeys.AlphaKey) return err } func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes CustomerAttributes) error { newKeys, err := NewUserCipherKeys(customerAttributes.KeypadSize, customerAttributes.SetVals, u.UserKeys.MaxNKodeLen) if err != nil { return err } encipheredPasscode, err := newKeys.EncipherNKode(passcodeAttrIdx, customerAttributes) if err != nil { return err } u.UserKeys = *newKeys u.EncipheredPasscode = *encipheredPasscode u.Renew = false return nil }