⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testutil.c

📁 Netscape公司提供的安全套接字层
💻 C
字号:
/*  *********************************************************************
    File: testutil.c

    SSLRef 3.0 Final -- 11/19/96

    Copyright (c)1996 by Netscape Communications Corp.

    By retrieving this software you are bound by the licensing terms
    disclosed in the file "LICENSE.txt". Please read it, and if you don't
    accept the terms, delete this software.

    SSLRef 3.0 was developed by Netscape Communications Corp. of Mountain
    View, California <http://home.netscape.com/> and Consensus Development
    Corporation of Berkeley, California <http://www.consensus.com/>.

    *********************************************************************

    File: testutil.c   Test client callbacks

    Callback functions for system functionality including allocation,
    random, and time.

    ****************************************************************** */


#include "testssl.h"
#include <stdlib.h>
#include <time.h>
#include "sslcrypt.h"

SSLErr
SSLAlloc(SSLBuffer *buf, void *allocRef)
{   buf->data = malloc(buf->length);
    if (!buf->data)
        return SSLMemoryErr;
    return SSLNoErr;
}

SSLErr
SSLFree(SSLBuffer *buf, void *allocRef)
{   free(buf->data);
    buf->data = 0;
    return SSLNoErr;
}

SSLErr
SSLRealloc(SSLBuffer *buf, uint32 newSize, void *allocRef)
{   unsigned char   *newData;
    newData = realloc(buf->data, newSize);
    if (!newData)
        return SSLMemoryErr;
    buf->data = newData;
    return SSLNoErr;
}

SSLErr
SSLRandom(SSLBuffer data, void *randomRef)
{   int                 result;
#if RSAREF
    R_RANDOM_STRUCT     *rsaRandom = (R_RANDOM_STRUCT*)randomRef;
    
    ASSERT(randomRef != 0);
    if ((result = R_GenerateBytes(data.data, data.length, rsaRandom)) != 0)
        return ERR(SSLUnknownErr);
#elif BSAFE
    B_ALGORITHM_OBJ random = (B_ALGORITHM_OBJ)randomRef;

    if ((result = B_GenerateRandomBytes(random, data.data, data.length, (A_SURRENDER_CTX*)NULL_PTR)) != 0)
        return ERR(SSLUnknownErr);
#endif /* BSAFE / RSAREF */
    return SSLNoErr;
}

/* Seed the random number generator with the time. This is an
 *  extremely bad way to seed a secure random number generator
 *  and basically sacrifices all security, but suffices for
 *  an implementation example. In other words, CHANGE THIS!
 */

SSLErr
SeedRandom(void **randomRef)
{   time_t                  t;
    int                     rsaResult;
#if RSAREF
    unsigned int            bytesNeeded;
    static R_RANDOM_STRUCT  rsaRandom;
    
    *randomRef = 0;
    t = time(0);
    
    if (R_RandomInit(&rsaRandom) != 0)
        return ERR(SSLUnknownErr);
    if (R_GetRandomBytesNeeded(&bytesNeeded, &rsaRandom) != 0)
        return ERR(SSLUnknownErr);
    
    while (bytesNeeded > 0)
    {   if ((rsaResult = R_RandomUpdate(&rsaRandom, (unsigned char*)&t, sizeof(time_t))) != 0)
            return ERR(SSLUnknownErr);
        
        if (bytesNeeded >= sizeof(time_t))
            bytesNeeded -= sizeof(time_t);
        else
            bytesNeeded = 0;
    }
    
    *randomRef = &rsaRandom;
#elif BSAFE
    static B_ALGORITHM_OBJ  random;
    B_ALGORITHM_METHOD      *chooser[] = { &AM_MD5_RANDOM, 0 };
    
    if ((rsaResult = B_CreateAlgorithmObject(&random)) != 0)
        return ERR(SSLUnknownErr);
    if ((rsaResult = B_SetAlgorithmInfo(random, AI_MD5Random, 0)) != 0)
        return ERR(SSLUnknownErr);
    if ((rsaResult = B_RandomInit(random, chooser, NO_SURR)) != 0)
        return ERR(SSLUnknownErr);
    
    t = time(0);
    
    if ((rsaResult = B_RandomUpdate(random, (unsigned char*)&t, sizeof(t), NO_SURR)) != 0)
        return ERR(SSLUnknownErr);
    
    *randomRef = &random;
#endif /* BSAFE / RSAREF */
    return SSLNoErr;
}

#define MAC_UNIX_TIME_DIFFERENCE    2082844800

SSLErr
SSLTime(uint32 *timeResult, void *timeRef)
{   time_t  t;
    t = time(0);
#if MAC
    *timeResult = t - MAC_UNIX_TIME_DIFFERENCE;
#else
    *timeResult = t;
#endif
    return SSLNoErr;
}
SSLErr
SSLConvertTime(uint32 *time, void *timeRef)
{
#if MAC
    *time -= MAC_UNIX_TIME_DIFFERENCE;
#endif
    return SSLNoErr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -