code: func DerivePolynomial(source io.Reader) (Pol, error) {
  	for i := 0; i < randPolMaxTries; i++ {
  		var f Pol
  
  		// choose polynomial at (pseudo)random
  		err := binary.Read(source, binary.LittleEndian, &f)
  		if err != nil {
  			return 0, err
  		}
  
  		// mask away bits above bit 53
  		f &= Pol((1 << 54) - 1)
  
  		// set highest and lowest bit so that the degree is 53 and the
  		// polynomial is not trivially reducible
  		f |= (1 << 53) | 1
  
  		// test if f is irreducible
  		if f.Irreducible() {
  			return f, nil
  		}
  	}
  
  	// If this is reached, we haven't found an irreducible polynomial in
  	// randPolMaxTries. This error is very unlikely to occur.
  	return 0, errors.New("unable to find new random irreducible polynomial")
  }
docs: // DerivePolynomial returns an irreducible polynomial of degree 53
  // (largest prime number below 64-8) by reading bytes from source.
  // There are (2^53-2/53) irreducible polynomials of degree 53 in
  // F_2[X], c.f. Michael O. Rabin (1981): "Fingerprinting by Random
  // Polynomials", page 4. If no polynomial could be found in one
  // million tries, an error is returned.