import parameters def fixedweight(randombits,params): r''' Return the output of the Classic McEliece FixedWeight function using the specified source of random bits for the specified parameters. INPUT: "randombits" - a function that, on input r, returns a list of r bits "params" - a Classic McEliece parameter set ''' assert isinstance(params,parameters.parameters) m = params.m q = params.q n = params.n t = params.t sigma1 = params.sigma1 # "The integer tau is defined as t if n=q; # as 2t if q/2 <= n < q; as 4t if q/4 <= n < q/2; etc." tau = t while tau*n < t*q: tau *= 2 # "All of the selected parameter sets have q/2 <= n <= q, # so tau in {t,2t}." assert q/2 <= n assert n <= q assert tau == t or tau == 2*t while True: # "Generate sigma_1 tau uniform random bits b_0,b_1,...,b_{sigma_1 tau - 1}." b = randombits(sigma1*tau) # "Define d_j = sum_{i=0}^{m-1} b_{sigma_1 j + i} 2^i for each j in {0,1,...,tau-1}." d = [sum(b[sigma1*j+i]<