code: public org.mariadb.jdbc.internal.com.send.authentication.ed25519.math.GroupElement scalarMultiply(
        final byte[] a) {
      org.mariadb.jdbc.internal.com.send.authentication.ed25519.math.GroupElement t;
      int i;
  
      final byte[] e = toRadix16(a);
  
      org.mariadb.jdbc.internal.com.send.authentication.ed25519.math.GroupElement h = this.curve
          .getZero(Representation.P3);
      synchronized (this) {
        // TODO: Get opinion from a crypto professional.
        // This should in practice never be necessary, the only point that
        // this should get called on is EdDSA's B.
        //precompute();
        for (i = 1; i < 64; i += 2) {
          t = select(i / 2, e[i]);
          h = h.madd(t).toP3();
        }
  
        h = h.dbl().toP2().dbl().toP2().dbl().toP2().dbl().toP3();
  
        for (i = 0; i < 64; i += 2) {
          t = select(i / 2, e[i]);
          h = h.madd(t).toP3();
        }
      }
  
      return h;
    }
docs: $h = a * B$ where $a = a[0]+256*a[1]+\dots+256^{31} a[31]$ and $B$ is this point. If its lookup
  table has not been precomputed, it will be at the start of the method (and cached for later
  calls). Constant time.
  <p>
  Preconditions: (TODO: Check this applies here) $a[31] \le 127$
  
  @param a $= a[0]+256*a[1]+\dots+256^{31} a[31]$
  @return the GroupElement