in client/internal/secret_sharing/internal/field/gf32/gf32.go [242:273]
func (e *Field) DecodeElements(s []byte) []field.Element {
var bitsDone = 0
var bitsPerSub = 31
n := divideRoundUp(len(s)*8, bitsPerSub)
parts := make([]uint32, n, n)
currSub := len(parts) - 1
for i := len(s) - 1; i >= 0; i-- {
currByte := uint8(s[i])
if bitsPerSub-bitsDone > 8 {
parts[currSub] |= uint32(currByte) << bitsDone
bitsDone += 8
continue
}
currByteRight := currByte & (0xFF >> (8 - (bitsPerSub - bitsDone)))
parts[currSub] |= uint32(currByteRight) << bitsDone
if !(i == 0 && bitsDone+8 == bitsPerSub) {
bitsDone = (bitsDone + 8) % bitsPerSub
currSub--
parts[currSub] |= uint32(currByte) >> (8 - bitsDone)
}
}
out := []field.Element{}
for _, p := range parts {
out = append(out, newElement(p))
}
return out
}