func()

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
}