VirtualBox

Changeset 51820 in vbox for trunk/src


Ignore:
Timestamp:
Jul 2, 2014 7:32:59 PM (11 years ago)
Author:
vboxsync
Message:

New message digest testcase + a fix to digest-builtin.cpp.

Location:
trunk/src/VBox/Runtime
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/crypto/digest-builtin.cpp

    r51770 r51820  
    308308static PCRTCRDIGESTDESC const g_apDigestOps[] =
    309309{
     310    &g_rtCrDigestMd2Desc,
    310311    &g_rtCrDigestMd5Desc,
    311312    &g_rtCrDigestSha1Desc,
  • trunk/src/VBox/Runtime/testcase/Makefile.kmk

    r51770 r51820  
    5555        tstRTCType \
    5656        tstRTDigest \
     57        tstRTDigest-2 \
    5758        tstDir \
    5859        tstDir-2 \
     
    236237tstRTCType_SOURCES = tstRTCType.cpp
    237238
     239tstRTDigest_TEMPLATE = VBOXR3TSTEXE
    238240tstRTDigest_SOURCES = tstRTDigest.cpp
     241
     242tstRTDigest-2_TEMPLATE = VBOXR3TSTEXE
     243tstRTDigest-2_SOURCES = tstRTDigest-2.cpp
    239244
    240245ifdef VBOX_WITH_LIBCURL
  • trunk/src/VBox/Runtime/testcase/tstRTDigest.cpp

    r45227 r51820  
    3030*******************************************************************************/
    3131#include <iprt/sha.h>
     32#include <iprt/md2.h>
    3233#include <iprt/md5.h>
    3334#include <iprt/crc.h>
     
    6162
    6263
     64static int MyReadFile(RTFILE hFile, void *pvBuf, size_t cbToRead, size_t *pcbRead, uint64_t *pcbMaxLeft)
     65{
     66    int rc = VINF_SUCCESS;
     67    if (*pcbMaxLeft > 0)
     68    {
     69        if (cbToRead > *pcbMaxLeft)
     70            cbToRead = (size_t)*pcbMaxLeft;
     71        rc = RTFileRead(hFile, pvBuf, cbToRead, pcbRead);
     72        if (RT_SUCCESS(rc))
     73            *pcbMaxLeft -= *pcbRead;
     74    }
     75    else
     76        *pcbRead = 0;
     77    return rc;
     78}
     79
     80
     81
    6382int main(int argc, char **argv)
    6483{
     
    7089         kDigestType_CRC32,
    7190         kDigestType_CRC64,
     91         kDigestType_MD2,
    7292         kDigestType_MD5,
    7393         kDigestType_SHA1,
     
    7595         kDigestType_SHA512
    7696     } enmDigestType = kDigestType_NotSpecified;
     97     const char *pszDigestType = "NotSpecified";
    7798
    7899     enum
     
    83104     } enmMethod = kMethod_Block;
    84105
     106     uint64_t   offStart    = 0;
     107     uint64_t   cbMax       = UINT64_MAX;
     108     bool       fTestcase   = false;
     109
    85110     static const RTGETOPTDEF s_aOptions[] =
    86111     {
     
    88113         { "--method", 'm', RTGETOPT_REQ_STRING },
    89114         { "--help",   'h', RTGETOPT_REQ_NOTHING },
     115         { "--length", 'l', RTGETOPT_REQ_UINT64 },
     116         { "--offset", 'o', RTGETOPT_REQ_UINT64 },
     117         { "--testcase", 'x', RTGETOPT_REQ_NOTHING },
    90118     };
    91119
     
    93121     RTGETOPTUNION ValueUnion;
    94122     RTGETOPTSTATE GetState;
    95      RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
     123     RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, RTGETOPTINIT_FLAGS_OPTS_FIRST);
    96124     while ((ch = RTGetOpt(&GetState, &ValueUnion)))
    97125     {
     
    100128             case 't':
    101129                 if (!RTStrICmp(ValueUnion.psz, "crc32"))
     130                 {
     131                     pszDigestType = "CRC32";
    102132                     enmDigestType = kDigestType_CRC32;
     133                 }
    103134                 else if (!RTStrICmp(ValueUnion.psz, "crc64"))
     135                 {
     136                     pszDigestType = "CRC64";
    104137                     enmDigestType = kDigestType_CRC64;
     138                 }
     139                 else if (!RTStrICmp(ValueUnion.psz, "md2"))
     140                 {
     141                     pszDigestType = "MD2";
     142                     enmDigestType = kDigestType_MD2;
     143                 }
    105144                 else if (!RTStrICmp(ValueUnion.psz, "md5"))
     145                 {
     146                     pszDigestType = "MD5";
    106147                     enmDigestType = kDigestType_MD5;
     148                 }
    107149                 else if (!RTStrICmp(ValueUnion.psz, "sha1"))
     150                 {
     151                     pszDigestType = "SHA-1";
    108152                     enmDigestType = kDigestType_SHA1;
     153                 }
    109154                 else if (!RTStrICmp(ValueUnion.psz, "sha256"))
     155                 {
     156                     pszDigestType = "SHA-256";
    110157                     enmDigestType = kDigestType_SHA256;
     158                 }
    111159                 else if (!RTStrICmp(ValueUnion.psz, "sha512"))
     160                 {
     161                     pszDigestType = "SHA-512";
    112162                     enmDigestType = kDigestType_SHA512;
     163                 }
    113164                 else
    114165                 {
     
    132183                 break;
    133184
     185             case 'l':
     186                 cbMax = ValueUnion.u64;
     187                 break;
     188
     189             case 'o':
     190                 offStart = ValueUnion.u64;
     191                 break;
     192
     193             case 'x':
     194                 fTestcase = true;
     195                 break;
     196
    134197             case 'h':
    135                  RTPrintf("syntax: tstRTDigest -t <digest-type> file [file2 [..]]\n");
     198                 RTPrintf("usage: tstRTDigest -t <digest-type> [-o <offset>] [-l <length>] [-x] file [file2 [..]]\n");
    136199                 return 1;
    137200
     
    147210
    148211                     case kMethod_File:
     212                         if (offStart != 0 || cbMax != UINT64_MAX)
     213                             return Error("The -l and -o options do not work with the 'file' method.");
    149214                         switch (enmDigestType)
    150215                         {
     
    181246                         if (RT_FAILURE(rc))
    182247                             return Error("RTFileOpen(,%s,) -> %Rrc\n", ValueUnion.psz, rc);
    183 
     248                         if (offStart != 0)
     249                         {
     250                             rc = RTFileSeek(hFile, offStart, RTFILE_SEEK_BEGIN, NULL);
     251                             if (RT_FAILURE(rc))
     252                                 return Error("RTFileSeek(%s,%ull) -> %Rrc\n", ValueUnion.psz, offStart, rc);
     253                         }
     254
     255                         uint64_t cbMaxLeft = cbMax;
    184256                         size_t  cbRead;
    185257                         uint8_t abBuf[_64K];
     
    192264                                 for (;;)
    193265                                 {
    194                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     266                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    195267                                     if (RT_FAILURE(rc) || !cbRead)
    196268                                         break;
     
    207279                                 for (;;)
    208280                                 {
    209                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     281                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    210282                                     if (RT_FAILURE(rc) || !cbRead)
    211283                                         break;
     
    217289                             }
    218290
     291                             case kDigestType_MD2:
     292                             {
     293                                 RTMD2CONTEXT Ctx;
     294                                 RTMd2Init(&Ctx);
     295                                 for (;;)
     296                                 {
     297                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
     298                                     if (RT_FAILURE(rc) || !cbRead)
     299                                         break;
     300                                     RTMd2Update(&Ctx, abBuf, cbRead);
     301                                 }
     302                                 uint8_t abDigest[RTMD2_HASH_SIZE];
     303                                 RTMd2Final(&Ctx, abDigest);
     304                                 RTMd2ToString(abDigest, pszDigest, sizeof(abBuf));
     305                                 break;
     306                             }
     307
    219308                             case kDigestType_MD5:
    220309                             {
     
    223312                                 for (;;)
    224313                                 {
    225                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     314                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    226315                                     if (RT_FAILURE(rc) || !cbRead)
    227316                                         break;
     
    240329                                 for (;;)
    241330                                 {
    242                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     331                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    243332                                     if (RT_FAILURE(rc) || !cbRead)
    244333                                         break;
     
    257346                                 for (;;)
    258347                                 {
    259                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     348                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    260349                                     if (RT_FAILURE(rc) || !cbRead)
    261350                                         break;
     
    274363                                 for (;;)
    275364                                 {
    276                                      rc = RTFileRead(hFile, abBuf, sizeof(abBuf), &cbRead);
     365                                     rc = MyReadFile(hFile, abBuf, sizeof(abBuf), &cbRead, &cbMaxLeft);
    277366                                     if (RT_FAILURE(rc) || !cbRead)
    278367                                         break;
     
    294383                             return Error("RTFileRead(%s) -> %Rrc\n", ValueUnion.psz, rc);
    295384                         }
    296                          RTPrintf("%s  %s\n", pszDigest, ValueUnion.psz);
     385
     386                         if (!fTestcase)
     387                             RTPrintf("%s  %s\n", pszDigest, ValueUnion.psz);
     388                         else if (offStart)
     389                             RTPrintf("        { &g_abRandom72KB[%#4llx], %5llu, \"%s\", \"%s %llu bytes @%llu\" },\n",
     390                                      offStart, cbMax - cbMaxLeft, pszDigest, pszDigestType, offStart, cbMax - cbMaxLeft);
     391                         else
     392                             RTPrintf("        { &g_abRandom72KB[0],     %5llu, \"%s\", \"%s %llu bytes\" },\n",
     393                                      cbMax - cbMaxLeft, pszDigest, pszDigestType, cbMax - cbMaxLeft);
    297394                         break;
    298395                     }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette