M function

void M(
  1. List<int> o,
  2. List<int> a,
  3. List<int> b
)

Implementation

void M(final List<int> o, final List<int> a, final List<int> b) {
  int i;
  final List<int> t = List.filled(31, 0);
  for (i = 0; i < 16; ++i) {
    for (int j = 0; j < 16; ++j) {
      t[i + j] += a[i] * b[j];
    }
  }
  const int len = 16 - 1;
  for (i = 0; i < len; i++) {
    t[i] += 38 * t[i + 16];
  }
  for (i = 0; i < 16; i++) {
    o[i] = t[i];
  }
  car25519(o);
  car25519(o);
}