Merge pull request 'Fix-Shuffle' (#8) from Fix-Shuffle into main

Reviewed-on: https://git.infra.nkode.tech/dkelly/go-nkode/pulls/8
This commit is contained in:
dkelly
2024-12-07 13:44:59 +00:00
5 changed files with 27 additions and 38 deletions

View File

@@ -24,3 +24,9 @@ tasks:
exec: exec:
cmds: cmds:
- docker exec -it cron-nkode bash - docker exec -it cron-nkode bash
sql:
cmds:
- sqlc generate
swag:
cmds:
- swag init --dir ./cmd

View File

@@ -153,14 +153,6 @@ func (n *NKodeAPI) GetLoginInterface(userEmail models.UserEmail, customerId mode
log.Printf("user %s for customer %s dne", userEmail, customerId) log.Printf("user %s for customer %s dne", userEmail, customerId)
return nil, config.ErrUserForCustomerDNE return nil, config.ErrUserForCustomerDNE
} }
err = user.Interface.PartialInterfaceShuffle()
if err != nil {
return nil, err
}
err = n.Db.UpdateUserInterface(user.Id, user.Interface)
if err != nil {
return nil, err
}
svgInterface, err := n.Db.GetSvgStringInterface(user.Interface.SvgId) svgInterface, err := n.Db.GetSvgStringInterface(user.Interface.SvgId)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -203,8 +195,13 @@ func (n *NKodeAPI) Login(customerId models.CustomerId, userEmail models.UserEmai
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken) if err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken); err != nil {
if err != nil { return nil, err
}
if err = user.Interface.LoginShuffle(); err != nil {
return nil, err
}
if err = n.Db.UpdateUserInterface(user.Id, user.Interface); err != nil {
return nil, err return nil, err
} }
return &jwtToken, nil return &jwtToken, nil

View File

@@ -56,11 +56,6 @@ func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes Custome
} }
func (u *User) GetLoginInterface() ([]int, error) { func (u *User) GetLoginInterface() ([]int, error) {
err := u.Interface.PartialInterfaceShuffle()
if err != nil {
return nil, err
}
return u.Interface.IdxInterface, nil return u.Interface.IdxInterface, nil
} }

View File

@@ -140,40 +140,31 @@ func (u *UserInterface) AttributeAdjacencyGraph() (map[int]utils.Set[int], error
return graph, nil return graph, nil
} }
func (u *UserInterface) PartialInterfaceShuffle() error { func (u *UserInterface) LoginShuffle() error {
err := u.shuffleKeys() if err := u.shuffleKeys(); err != nil {
if err != nil {
return err return err
} }
numbOfSelectedSets := u.Kp.AttrsPerKey / 2 keypadSet1, err := u.InterfaceMatrix()
if u.Kp.AttrsPerKey&1 == 1 { if err = u.shuffleKeys(); err != nil {
numbOfSelectedSets += security.Choice[int]([]int{0, 1}) return err
} }
keypadSet2, err := u.InterfaceMatrix()
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey) setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
if err != nil { if err != nil {
return err return err
} }
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets]) selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
keypadSetView, err := u.SetViewMatrix() for keyIdx, key := range keypadSet1 {
if err != nil { for idx := range key {
return err if selectedSets.Contains(idx) {
} keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx]
interfaceBySet := make([][]int, u.Kp.AttrsPerKey)
for idx, attrs := range keypadSetView {
if selectedSets.Contains(idx) {
err = security.FisherYatesShuffle[int](&attrs)
if err != nil {
return err
} }
} }
interfaceBySet[idx] = attrs
} }
keypadView, err := security.MatrixTranspose(interfaceBySet)
if err != nil { u.IdxInterface = security.MatrixToList(keypadSet1)
return err
}
u.IdxInterface = security.MatrixToList(keypadView)
return nil return nil
} }

View File

@@ -111,7 +111,7 @@ func TestUserInterface_PartialInterfaceShuffle(t *testing.T) {
userInterface, err := NewUserInterface(&kp, mockSvgInterface) userInterface, err := NewUserInterface(&kp, mockSvgInterface)
assert.NoError(t, err) assert.NoError(t, err)
preShuffle := userInterface.IdxInterface preShuffle := userInterface.IdxInterface
err = userInterface.PartialInterfaceShuffle() err = userInterface.LoginShuffle()
assert.NoError(t, err) assert.NoError(t, err)
postShuffle := userInterface.IdxInterface postShuffle := userInterface.IdxInterface