private IntegerPolynomial MGF(byte[] seed,int N,int minCallsR,boolean hashSeed){
  Digest hashAlg=params.hashAlg;
  int hashLen=hashAlg.getDigestSize();
  byte[] buf=new byte[minCallsR * hashLen];
  byte[] Z=hashSeed ? calcHash(hashAlg,seed) : seed;
  int counter=0;
  while (counter < minCallsR) {
    hashAlg.update(Z,0,Z.length);
    putInt(hashAlg,counter);
    byte[] hash=calcHash(hashAlg);
    System.arraycopy(hash,0,buf,counter * hashLen,hashLen);
    counter++;
  }
  IntegerPolynomial i=new IntegerPolynomial(N);
  while (true) {
    int cur=0;
    for (int index=0; index != buf.length; index++) {
      int O=(int)buf[index] & 0xFF;
      if (O >= 243) {
        continue;
      }
      for (int terIdx=0; terIdx < 4; terIdx++) {
        int rem3=O % 3;
        i.coeffs[cur]=rem3 - 1;
        cur++;
        if (cur == N) {
          return i;
        }
        O=(O - rem3) / 3;
      }
      i.coeffs[cur]=O - 1;
      cur++;
      if (cur == N) {
        return i;
      }
    }
    if (cur >= N) {
      return i;
    }
    hashAlg.update(Z,0,Z.length);
    putInt(hashAlg,counter);
    byte[] hash=calcHash(hashAlg);
    buf=hash;
    counter++;
  }
}

private IntegerPolynomial MGF ( byte [ ] seed , int N , int minCallsR , boolean hashSeed ) { Digest hashAlg = params . hashAlg ; int hashLen = hashAlg . getDigestSize ( ) ; byte [ ] buf = new byte [ minCallsR * hashLen ] ; byte [ ] Z = hashSeed ? calcHash ( hashAlg , seed ) : seed ; int counter = 0 ; while ( counter < minCallsR ) { hashAlg . update ( Z , 0 , Z . length ) ; putInt ( hashAlg , counter ) ; byte [ ] hash = calcHash ( hashAlg ) ; System . arraycopy ( hash , 0 , buf , counter * hashLen , hashLen ) ; counter ++ ; } IntegerPolynomial i = new IntegerPolynomial ( N ) ; while ( true ) { int cur = 0 ; for ( int index = 0 ; index != buf . length ; index ++ ) { int O = ( int ) buf [ index ] & 0xFF ; if ( O >= 243 ) { continue ; } for ( int terIdx = 0 ; terIdx < 4 ; terIdx ++ ) { int rem3 = O % 3 ; i . coeffs [ cur ] = rem3 - 1 ; cur ++ ; if ( cur == N ) { return i ; } O = ( O - rem3 ) / 3 ; } i . coeffs [ cur ] = O - 1 ; cur ++ ; if ( cur == N ) { return i ; } } if ( cur >= N ) { return i ; } hashAlg . update ( Z , 0 , Z . length ) ; putInt ( hashAlg , counter ) ; byte [ ] hash = calcHash ( hashAlg ) ; buf = hash ; counter ++ ; } }
an implementation of mgf - tp - 1 from p1363 . 1 section 8 . 4 . 1 . 1 .
