question: 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 ++ ; } }
target:  An implementation of MGF-TP-1 from P1363.1 section 8.4.1.1.