Changeset 769 in openpam


Ignore:
Timestamp:
Mar 6, 2014, 12:32:29 PM (7 years ago)
Author:
Dag-Erling Smørgrav
Message:

Add tests for base{32,64}_decode(). Both are broken.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/t/t_rfc4648.c

    r765 r769  
    11/*-
    2  * Copyright (c) 2013 Universitetet i Oslo
     2 * Copyright (c) 2013-2014 Universitetet i Oslo
    33 * All rights reserved.
    44 *
     
    4141#include <unistd.h>
    4242
    43 #include <security/pam_appl.h>
    44 #include <security/openpam.h>
    4543#include <security/oath.h>
    4644
     
    111109        }
    112110        if (blen != olen) {
     111                t_verbose("expected '%.*s' got '%.*s'\n", (int)olen, encoded, (int)blen, buf);
    113112                t_verbose("expected %zu B got %zu B\n", olen, blen);
    114113                return (0);
    115114        }
    116         if (strcmp(buf, encoded) != 0) {
    117                 t_verbose("expected \"%s\" got \"%s\"\n", encoded, buf);
     115        if (strncmp(buf, encoded, blen) != 0) {
     116                t_verbose("expected '%.*s' got '%.*s'\n", (int)olen, encoded, (int)blen, buf);
    118117                return (0);
    119118        }
     
    125124 */
    126125static int
    127 t_base32(void *arg)
     126t_base32_enc(void *arg)
    128127{
    129128        struct t_vector *tv = (struct t_vector *)arg;
     
    136135 */
    137136static int
    138 t_base64(void *arg)
     137t_base64_enc(void *arg)
    139138{
    140139        struct t_vector *tv = (struct t_vector *)arg;
    141140
    142141        return (t_rfc4648_enc(tv->plain, tv->base64, base64_enc));
     142}
     143
     144/*
     145 * Decoding test function
     146 */
     147static int
     148t_rfc4648_dec(const char *encoded, const char *plain,
     149    int (*dec)(const char *, size_t, uint8_t *, size_t *))
     150{
     151        char buf[64];
     152        size_t blen, ilen, olen;
     153
     154        blen = sizeof buf;
     155        ilen = strlen(encoded);
     156        olen = strlen(plain);
     157        if (dec(encoded, ilen, (uint8_t *)buf, &blen) != 0) {
     158                t_verbose("encoding failed\n");
     159                return (0);
     160        }
     161        if (blen != olen) {
     162                t_verbose("expected %zu B got %zu B\n", olen, blen);
     163                return (0);
     164        }
     165        if (strncmp(buf, plain, blen) != 0) {
     166                t_verbose("expected '%.*s' got '%.*s'\n", (int)olen, plain, (int)blen, buf);
     167                return (0);
     168        }
     169        return (1);
     170}
     171
     172/*
     173 * Decoding test wrapper for base 32
     174 */
     175static int
     176t_base32_dec(void *arg)
     177{
     178        struct t_vector *tv = (struct t_vector *)arg;
     179
     180        return (t_rfc4648_dec(tv->base32, tv->plain, base32_dec));
     181}
     182
     183/*
     184 * Decoding test wrapper for base 64
     185 */
     186static int
     187t_base64_dec(void *arg)
     188{
     189        struct t_vector *tv = (struct t_vector *)arg;
     190
     191        return (t_rfc4648_dec(tv->base64, tv->plain, base64_dec));
    143192}
    144193
     
    175224        (void)argv;
    176225        n = sizeof t_vectors / sizeof t_vectors[0];
    177         plan = calloc(n * 2 + 1, sizeof *plan);
     226        plan = calloc(n * 4 + 1, sizeof *plan);
    178227        if (plan == NULL)
    179228                return (NULL);
    180229        test = plan;
    181230        for (int i = 0; i < n; ++i) {
    182                 *test++ = t_create_test(t_base32, "BASE32", &t_vectors[i]);
    183                 *test++ = t_create_test(t_base64, "BASE64", &t_vectors[i]);
     231                *test++ = t_create_test(t_base32_enc, "BASE32ENC", &t_vectors[i]);
     232                *test++ = t_create_test(t_base32_dec, "BASE32DEC", &t_vectors[i]);
     233                *test++ = t_create_test(t_base64_enc, "BASE64ENC", &t_vectors[i]);
     234                *test++ = t_create_test(t_base64_dec, "BASE64DEC", &t_vectors[i]);
    184235        }
    185236        return ((const struct t_test **)plan);
Note: See TracChangeset for help on using the changeset viewer.