void rattach(void) { Xfs *xf; Xfile *root; Xfsub **xs; chat("attach(fid=%d,uname=\"%s\",aname=\"%s\")...", req->fid, req->uname, req->aname); if(waserror()){ xfile(req->fid, Clunk); nexterror(); } root = xfile(req->fid, Clean); root->qid = (Qid){0, 0, QTDIR}; root->xf = xf = ealloc(sizeof(Xfs)); memset(xf, 0, sizeof(Xfs)); xf->ref = 1; xf->d = getxdata(req->aname); for(xs=xsublist; *xs; xs++) if((*(*xs)->attach)(root) >= 0){ poperror(); xf->s = *xs; xf->rootqid = root->qid; rep->qid = root->qid; return; } error("unknown format"); }
int sha1test(void) { SHA1_CTX sha; int fail; int i; int j; uint8_t digest[20]; uint8_t rdigest[20]; /* * Perform SHA-1 tests */ for (j = 0; j < 4; ++j) { fail = 0; (void) printf("Test #%d ", j+1); SHA1Init(&sha); for (i = 0; i < repeatcount[j]; ++i) { SHA1Update(&sha, (unsigned char *)testarray[j], strlen(testarray[j])); } SHA1Final(digest, &sha); getxdata(rdigest, resultarray[j], 20); if (bcmp(digest, rdigest, 20) != 0) { (void) printf("FAILED\n"); fail++; } else { (void) printf("PASSED\n"); } } return (fail); }
int hmactest(void) { test_data_t td[7]; SHA1_CTX sha; uchar_t digest[20]; int fail; int num; int i; td[0].keylen = 20; getxdata(td[0].key, "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", td[0].keylen); td[0].datalen = 8; (void) strcpy((char *)td[0].data, "Hi There"); getxdata(td[0].digest, "b617318655057264e28bc0b6fb378c8ef146be00", 20); td[1].keylen = 4; (void) strcpy((char *)td[1].key, "Jefe"); td[1].datalen = 28; (void) strcpy((char *)td[1].data, "what do ya want for nothing?"); getxdata(td[1].digest, "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", 20); td[2].keylen = 20; getxdata(td[2].key, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", td[2].keylen); td[2].datalen = 50; getxdata(td[2].data, "ddddddddddddddddddddddddddddddddddddddddddddd" "ddddddddddddddddddddddddddddddddddddddddddddddddddddddd", 50); getxdata(td[2].digest, "125d7342b9ac11cd91a39af48aa17b4f63f175d3", 20); td[3].keylen = 25; getxdata(td[3].key, "0102030405060708090a0b0c0d0e0f1011121314151617" "1819", td[3].keylen); td[3].datalen = 50; getxdata(td[3].data, "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", td[3].datalen); getxdata(td[3].digest, "4c9007f4026250c6bc8414f9bf50c86c2d7235da", 20); td[4].keylen = 20; getxdata(td[4].key, "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", td[4].keylen); td[4].datalen = 20; (void) strcpy((char *)td[4].data, "Test With Truncation"); getxdata(td[4].digest, "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", 20); td[5].keylen = 80; getxdata(td[5].key, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", td[5].keylen); td[5].datalen = 54; (void) strcpy((char *)td[5].data, "Test Using Larger Than Block-Size Key - Hash Key First"); getxdata(td[5].digest, "aa4ae5e15272d00e95705637ce8a3b55ed402112", 20); td[6].keylen = 80; getxdata(td[6].key, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", td[6].keylen); td[6].datalen = 73; (void) strcpy((char *)td[6].data, "Test Using Larger Than Block-Size Key and Larger Than One " "Block-Size Data"); getxdata(td[6].digest, "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", 20); num = sizeof (td) / sizeof (test_data_t); for (i = 0; i < num; i++) { fail = 0; (void) printf("Test #%d ", i); HMACInit(&sha, td[i].key, td[i].keylen); HMACUpdate(&sha, td[i].data, td[i].datalen); HMACFinal(&sha, td[i].key, td[i].keylen, digest); if (bcmp(digest, td[i].digest, 20) != 0) { (void) printf("FAILED\n"); fail++; } else { (void) printf("PASSED\n"); } } return (fail); }