Changeset eed52b


Ignore:
Timestamp:
02/17/09 21:22:24 (3 years ago)
Author:
Erik Ekman <yarrick@…>
Branches:
master
Children:
444299
Parents:
aad34d
git-author:
Erik Ekman <yarrick@…> (02/17/09 21:22:24)
git-committer:
Erik Ekman <erik@…> (02/04/12 20:34:00)
Message:

#51 handle one block encode/decode for base64

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/base64.c

    ra5031e reed52b  
    9696 
    9797        /* how many chars can we encode within the buf */ 
    98         maxsize = BLKSIZE_RAW * (*buflen / BLKSIZE_ENC - 1) - 1; 
     98        maxsize = BLKSIZE_RAW * (*buflen / BLKSIZE_ENC); 
    9999        /* how big will the encoded data be */ 
    100         newsize = BLKSIZE_ENC * (size / BLKSIZE_RAW + 1) + 1; 
     100        newsize = BLKSIZE_ENC * (size / BLKSIZE_RAW); 
     101        if (size % BLKSIZE_RAW) { 
     102                newsize += BLKSIZE_ENC; 
     103        } 
     104 
    101105        /* if the buffer is too small, eat some of the data */ 
    102106        if (*buflen < newsize) { 
     
    121125        *buflen = size; 
    122126 
    123         return strlen(buf) - 1; 
     127        return strlen(buf); 
    124128} 
    125129 
  • src/iodine.c

    raad34d reed52b  
    141141        char *b; 
    142142 
    143         space = MIN(0xFF, buflen) - strlen(topdomain) - 5; 
     143        space = MIN(0xFF, buflen) - strlen(topdomain) - 7; 
    144144        if (!encoder->places_dots()) 
    145145                space -= (space / 57); /* space for dots */ 
  • tests/base64.c

    r3ee493 reed52b  
    100100END_TEST 
    101101 
     102START_TEST(test_base64_blksize) 
     103{ 
     104        size_t rawlen; 
     105        size_t enclen; 
     106        char *rawbuf; 
     107        char *encbuf; 
     108        struct encoder *b64; 
     109        int i; 
     110        int val; 
     111 
     112        b64 = get_base64_encoder(); 
     113 
     114        rawlen = b64->blocksize_raw(); 
     115        enclen = b64->blocksize_encoded(); 
     116 
     117        rawbuf = malloc(rawlen + 16); 
     118        encbuf = malloc(enclen + 16); 
     119 
     120        for (i = 0; i < rawlen; i++) { 
     121                rawbuf[i] = 'A'; 
     122        } 
     123        rawbuf[i] = 0; 
     124 
     125        val = b64->encode(encbuf, &enclen, rawbuf, rawlen); 
     126 
     127        fail_unless(rawlen == 3, "raw length was %d not 3", rawlen); 
     128        fail_unless(enclen == 3, "encoded %d bytes, not 3", enclen); 
     129        fail_unless(val == 4, "encoded string %s was length %d", encbuf, val); 
     130 
     131        memset(rawbuf, 0, rawlen + 16); 
     132 
     133        enclen = val; 
     134        val = b64->decode(rawbuf, &rawlen, encbuf, enclen); 
     135 
     136        fail_unless(rawlen == 3, "raw length was %d not 3", rawlen); 
     137        fail_unless(val == 3); 
     138        for (i = 0; i < rawlen; i++) { 
     139                fail_unless(rawbuf[i] == 'A'); 
     140        } 
     141} 
     142END_TEST 
     143 
    102144TCase * 
    103145test_base64_create_tests() 
     
    108150        tcase_add_loop_test(tc, test_base64_encode, 0, TUPLES); 
    109151        tcase_add_loop_test(tc, test_base64_decode, 0, TUPLES); 
     152        tcase_add_test(tc, test_base64_blksize); 
    110153 
    111154        return tc; 
Note: See TracChangeset for help on using the changeset viewer.