Inputs:
- s, secret value to be shared, a Scalar.
- coefficients, an array of size MIN_PARTICIPANTS - 1 with randomly
  generated Scalars, not including the 0th coefficient of the
  polynomial.
- MAX_PARTICIPANTS, the number of shares to generate, an integer less
  than the group order.

Outputs:
- secret_key_shares, A list of MAX_PARTICIPANTS number of secret
  shares, each a tuple consisting of the participant identifier
  (a NonZeroScalar) and the key share (a Scalar).
- coefficients, a vector of MIN_PARTICIPANTS coefficients which
  uniquely determine a polynomial f.

def secret_share_shard(s, coefficients, MAX_PARTICIPANTS):
  # Prepend the secret to the coefficients
  coefficients = [s] + coefficients

  # Evaluate the polynomial for each point x=1,...,n
  secret_key_shares = []
  for x_i in range(1, MAX_PARTICIPANTS + 1):
    y_i = polynomial_evaluate(Scalar(x_i), coefficients)
    secret_key_share_i = (x_i, y_i)
    secret_key_shares.append(secret_key_share_i)
  return secret_key_shares, coefficients
