in client/internal/secret_sharing/internal/field/gf32/gf32.go [210:237]
func (e *Field) EncodeElements(parts []field.Element, secLen int) ([]byte, error) {
secret := make([]byte, secLen, secLen)
bitsDone := 0
j := len(parts) - 1
secretParts := make([]uint32, len(parts), len(parts))
for i, p := range parts {
secretParts[i] = p.(*Element).Value
}
for i := len(secret) - 1; i >= 0 && j >= 0; i-- {
if bitPerSubsecret-bitsDone > 8 {
secret[i] = uint8((secretParts[j] >> bitsDone) & 0xFF)
bitsDone += 8
} else {
nextLowBits := uint8(secretParts[j] >> bitsDone)
j--
if j >= 0 {
secret[i] = uint8(
secretParts[j] & (0xFF >> (bitPerSubsecret - bitsDone)))
}
bitsDone = (bitsDone + 8) % bitPerSubsecret
secret[i] <<= 8 - bitsDone
secret[i] |= nextLowBits
}
}
return secret, nil
}