package model import ( "go-nkode/util" ) type User struct { Id UserId CustomerId CustomerId Username Username EncipheredPasscode EncipheredNKode Kp KeypadDimension 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.Kp.AttrsPerKey], u.UserKeys.SetKey) if err != nil { panic(err) } u.UserKeys.AlphaKey, err = util.XorLists(attrXor[:u.Kp.TotalAttrs()], u.UserKeys.AlphaKey) return err } func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes CustomerAttributes) error { setVals, err := customerAttributes.SetValsForKp(u.Kp) newKeys, err := NewUserCipherKeys(&u.Kp, 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 } func (u *User) GetLoginInterface() ([]int, error) { err := u.Interface.PartialInterfaceShuffle() if err != nil { return nil, err } return u.Interface.IdxInterface, nil }