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 {
|
||||
err := u.shuffleKeys()
|
||||
if err != nil {
|
||||
if err := u.shuffleKeys(); err != nil {
|
||||
return err
|
||||
}
|
||||
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
|
||||
if u.Kp.AttrsPerKey&1 == 1 {
|
||||
numbOfSelectedSets += security.Choice[int]([]int{0, 1})
|
||||
keypadSet1, err := u.InterfaceMatrix()
|
||||
if err = u.shuffleKeys(); err != nil {
|
||||
return err
|
||||
}
|
||||
keypadSet2, err := u.InterfaceMatrix()
|
||||
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
|
||||
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
|
||||
|
||||
keypadSetView, err := u.SetViewMatrix()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
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
|
||||
for keyIdx, key := range keypadSet1 {
|
||||
for idx, attrIdx := range key {
|
||||
if selectedSets.Contains(attrIdx) {
|
||||
keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx]
|
||||
}
|
||||
}
|
||||
interfaceBySet[idx] = attrs
|
||||
}
|
||||
keypadView, err := security.MatrixTranspose(interfaceBySet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
u.IdxInterface = security.MatrixToList(keypadView)
|
||||
|
||||
u.IdxInterface = security.MatrixToList(keypadSet1)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user