fix loginShuffle implementation
This commit is contained in:
@@ -141,39 +141,30 @@ func (u *UserInterface) AttributeAdjacencyGraph() (map[int]utils.Set[int], error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserInterface) LoginShuffle() 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, attrIdx := range key {
|
||||||
return err
|
if selectedSets.Contains(attrIdx) {
|
||||||
}
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user