Beispiel #1
0
/* set encryption key
 */
void hb_znetEncryptKey( PHB_ZNETSTREAM pStream, const void * keydata, int keylen )
{
   if( pStream->crypt == 0 )
   {
      pStream->crypt = 1;

      /* initialize encryption key */
      pStream->bf = ( HB_BLOWFISH * ) hb_xgrab( sizeof( HB_BLOWFISH ) );
      hb_blowfishInit( pStream->bf, keydata, keylen );

      /* initialize input buffer */
      pStream->skip_in = 0;
      pStream->crypt_size = 0;
      pStream->crypt_in = pStream->rd.avail_in;
      pStream->rd.avail_in = 0;

      /* initialize output buffer */
      pStream->crypt_out = pStream->wr.next_out;
      pStream->wr.next_out += 2;
      if( pStream->wr.avail_out < 2 )
         pStream->skip_out = 2 - pStream->wr.avail_out;
      else
         pStream->skip_out = 0;
      pStream->wr.avail_out -= 2 - pStream->skip_out;
   }
}
Beispiel #2
0
static PHB_SOCKEX s_sockexNext( PHB_SOCKEX pSock, PHB_ITEM pParams )
{
   PHB_SOCKEX pSockNew = NULL;

   if( pSock )
   {
      const void * keydata = NULL, * iv = NULL;
      int keylen = 0, ivlen = 0;

      hb_socekxParamsGetStd( pParams, &keydata, &keylen, &iv, &ivlen, NULL, NULL );
      if( keylen > 0 )
      {
         PHB_SOCKEX_BF pBF = ( PHB_SOCKEX_BF ) hb_xgrabz( sizeof( HB_SOCKEX_BF ) );
         const HB_BYTE * pVect = ( const HB_BYTE * ) ( ivlen > 0 ? iv : NULL );
         int i;

         hb_blowfishInit( &pBF->bf, keydata, keylen );
         for( i = 0; i < HB_BF_CIPHERBLOCK; ++i )
         {
            if( pVect && ivlen > 0 )
               pBF->encounter[ i ] =
               pBF->decounter[ i ] = pVect[ i % ivlen ];
            else
               pBF->encounter[ i ] =
               pBF->decounter[ i ] = ( HB_BYTE ) i;
         }

         pSockNew = ( PHB_SOCKEX ) hb_xgrabz( sizeof( HB_SOCKEX ) );
         pSockNew->sd = pSock->sd;
         pSockNew->fRedirAll = HB_TRUE;
         pSockNew->fShutDown = pSock->fShutDown;
         pSockNew->iAutoFlush = pSock->iAutoFlush;
         pSockNew->pFilter = &s_sockFilter;
         pSockNew->cargo = ( void * ) pBF;
         pBF->sock = pSock;
         hb_socekxParamsInit( pSockNew, pParams );
      }
   }

   return pSockNew;
}