function _emsa_pss_encode($m, $emBits)
    {
        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;

        $mHash = $this->hash->hash($m);
        if ($emLen < $this->hLen + $sLen + 2) {
            user_error('Encoding error');
            return false;
        }

        $salt = Random::string($sLen);
        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
        $h = $this->hash->hash($m2);
        $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
        $db = $ps . chr(1) . $salt;
        $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
        $maskedDB = $db ^ $dbMask;
        $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
        $em = $maskedDB . $h . chr(0xBC);

        return $em;
    }
function _emsa_pss_encode($m, $emBits)
    {
        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;

        $mHash = $this->hash->hash($m);
        if ($emLen < $this->hLen + $sLen + 2) {
            user_error('Encoding error');
            return false;
        }

        $salt = Random::string($sLen);
        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
        $h = $this->hash->hash($m2);
        $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
        $db = $ps . chr(1) . $salt;
        $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
        $maskedDB = $db ^ $dbMask;
        $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
        $em = $maskedDB . $h . chr(0xBC);

        return $em;
    }
function _emsa_pss_encode ( $ m , $ emBits ) { // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error // be output. $ emLen = ( $ emBits + 1 ) >> 3 ; // ie. ceil($emBits / 8) $ sLen = $ this -> sLen !== null ? $ this -> sLen : $ this -> hLen ; $ mHash = $ this -> hash -> hash ( $ m ) ; if ( $ emLen < $ this -> hLen + $ sLen + 2 ) { user_error ( 'Encoding error' ) ; return false ; } $ salt = Random :: string ( $ sLen ) ; $ m2 = "\0\0\0\0\0\0\0\0" . $ mHash . $ salt ; $ h = $ this -> hash -> hash ( $ m2 ) ; $ ps = str_repeat ( chr ( 0 ) , $ emLen - $ sLen - $ this -> hLen - 2 ) ; $ db = $ ps . chr ( 1 ) . $ salt ; $ dbMask = $ this -> _mgf1 ( $ h , $ emLen - $ this -> hLen - 1 ) ; $ maskedDB = $ db ^ $ dbMask ; $ maskedDB [ 0 ] = ~ chr ( 0xFF << ( $ emBits & 7 ) ) & $ maskedDB [ 0 ] ; $ em = $ maskedDB . $ h . chr ( 0xBC ) ; return $ em ; }
EMSA-PSS-ENCODE

See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.

@access private
@param string $m
@param int $emBits
EMSA - PSS - ENCODE