# Interface NTTConvolutionStepStrategy

All Known Implementing Classes:
  `DoubleNTTConvolutionStepStrategy, FloatNTTConvolutionStepStrategy, IntNTTConvolutionStepStrategy, LongNTTConvolutionStepStrategy`

public interface NTTConvolutionStepStrategy
Steps for a three-NTT convolution. This includes element-by-element multiplication and squaring of the transformed data.

Since:
  1.7.0
Version:
  1.7.0
Author:
  Mikko Tommila

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `multiplyInPlace(DataStorage sourceAndDestination, DataStorage source, int modulus)`
  Linear multiplication in the number theoretic domain.
  `void`
  `squareInPlace(DataStorage sourceAndDestination, int modulus)`
  Linear squaring in the number theoretic domain.

- ## Method Details

  - ### multiplyInPlace

    void multiplyInPlace(DataStorage sourceAndDestination, DataStorage source, int modulus) throws ApfloatRuntimeException
    Linear multiplication in the number theoretic domain. The operation is `sourceAndDestination[i] *= source[i] (mod m)`.

    For maximum performance, `sourceAndDestination` should be in memory if possible.

    Parameters:
      `sourceAndDestination` - The first source data storage, which is also the destination.
      `source` - The second source data storage.
      `modulus` - Which modulus to use (0, 1, 2)
    Throws:
      `ApfloatRuntimeException`

  - ### squareInPlace

    void squareInPlace(DataStorage sourceAndDestination, int modulus) throws ApfloatRuntimeException
    Linear squaring in the number theoretic domain. The operation is `sourceAndDestination[i] *= sourceAndDestination[i] (mod m)`.

    For maximum performance, `sourceAndDestination` should be in memory if possible.

    Parameters:
      `sourceAndDestination` - The source data storage, which is also the destination.
      `modulus` - Which modulus to use (0, 1, 2)
    Throws:
      `ApfloatRuntimeException`