text: /**
   *
   * Optimized ISO-C11 Implementation of LEDAcrypt using GCC built-ins.
   *
   * @version 3.0 (May 2020)
   *
   * In alphabetical order:
   *
   * @author Marco Baldi <m.baldi@univpm.it>
   * @author Alessandro Barenghi <alessandro.barenghi@polimi.it>
   * @author Franco Chiaraluce <f.chiaraluce@univpm.it>
   * @author Gerardo Pelosi <gerardo.pelosi@polimi.it>
   * @author Paolo Santini <p.santini@pm.univpm.it>
   *
   * This code is hereby placed in the public domain.
   *
   * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
   * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   **/
  
  #include "H_Q_matrices_generation.h"
  #include "gf2x_arith_mod_xPplusOne.h"
  
  /*----------------------------------------------------------------------------*/
  
  void OQS_KEM_LEDACRYPT_28411_AVX2_generateHPosOnes(POSITION_T HPosOnes[N0][V],
                        AES_XOF_struct *keys_expander
                       )
  {
     for (int i = 0; i < N0; i++) {
        /* Generate a random block of Htr */
        OQS_KEM_LEDACRYPT_28411_AVX2_rand_circulant_sparse_block(&HPosOnes[i][0],
                                    V,
                                    keys_expander);
     }
  } // end generateHtr_HtrPosOnes
  
  void OQS_KEM_LEDACRYPT_28411_AVX2_transposeHPosOnes(POSITION_T HtrPosOnes[N0][V], /* output*/
                         POSITION_T const HPosOnes[N0][V]
                        )
  {
     for (int i = 0; i < N0; i++) {
        /* Obtain directly the sparse representation of the block of H */
        for (int k = 0; k < V; k++) {
           HtrPosOnes[i][k] = (P - HPosOnes[i][k])  % P; /* transposes indexes */
        }// end for k
     }
  } // end OQS_KEM_LEDACRYPT_28411_AVX2_transposeHPosOnes
  
  /*----------------------------------------------------------------------------*/
  