Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Please help me! The func l8w8jwt_base64_decode can't parse the result #28

Closed
zhouhm opened this issue Aug 9, 2022 · 1 comment
Closed

Comments

@zhouhm
Copy link

zhouhm commented Aug 9, 2022

int split (char *str, char c, char ***arr)
{
    int count = 1;
    int token_len = 1;
    int i = 0;
    char *p;
    char *t;

    p = str;
    while (*p != '\0')
    {
        if (*p == c)
            count++;
        p++;
    }

    *arr = (char**) malloc(sizeof(char*) * count);
    if (*arr == NULL)
        exit(1);

    p = str;
    while (*p != '\0')
    {
        if (*p == c)
        {
            (*arr)[i] = (char*) malloc( sizeof(char) * token_len );
            if ((*arr)[i] == NULL)
                exit(1);

            token_len = 0;
            i++;
        }
        p++;
        token_len++;
    }
    (*arr)[i] = (char*) malloc( sizeof(char) * token_len );
    if ((*arr)[i] == NULL)
        exit(1);

    i = 0;
    p = str;
    t = ((*arr)[i]);
    while (*p != '\0')
    {
        if (*p != c && *p != '\0')
        {
            *t = *p;
            t++;
        }
        else
        {
            *t = '\0';
            i++;
            t = ((*arr)[i]);
        }
        p++;
    }

    return count;
}

uint8_t* decode_payload = (uint8_t*)malloc(2048 * sizeof(uint8_t));
size_t decode_payload_length;

char **tokens = NULL; // 字符型指针的指针 相当于二维数组
split(JWT, '.', &tokens);

int base64_decode_result = l8w8jwt_base64_decode(0, tokens[1], strlen(tokens[1]), &decode_payload, &decode_payload_length);

If my RSA public key and jwt is 2048 bit generate, it's OK

static const char RSA_PUBLIC_KEY[] = "-----BEGIN PUBLIC KEY-----\n"
                                     "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxXdGsBnQJUjc8ARw9KaT\n"
                                     "81Q1OvKJxNdgT765gV7b1pJffG9Mc4qM+Pe7fKkKEu+mD5jz5aGIvGDanqlq5y/T\n"
                                     "6rQT0OqMoqRxNKSo0iu626TmAihpgRfSjIz+HcE1vQaUX57D71mChyrJPSsNZB0L\n"
                                     "j15i9U7ExDWLY3fQZQ0m3VuTIaw5JZMdIlaPe0PViM7zxB+Z/0nYarEjrQ4xZBNi\n"
                                     "Ex5r+tubG103+qZNxTzpo2+KRE+E2nWF+qLo/gPN8YvNOO1MbDxHZY9ri7iIKPcd\n"
                                     "HWIeFJoTLlF0TRysFEKgmaP3fDsP5GfFv0NztK16KX3hoilwOm0ZuM0PUTORu+ES\n"
                                     "0wIDAQAB\n"
                                     "-----END PUBLIC KEY-----";

char JWT[] = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJkb20iOiJzaG9uZ2EuY2MiLCJpcCI6IjE1NC4xNy4zLjE1NyIsInNpZCI6IjI3ODRmYzIwLWM2MWUtNDM4Zi1iM2UwLWZmZDgyYjYzMzgxYSIsImNpZCI6IjU5MmI3ZTJmLTMyMGEtNGJiNi05MmU3LTBjMGFlNzhkNDFhOSIsImlhdCI6MTY1OTc0ODUzMywibmJmIjoxNjU5MjgzMjAwLCJleHAiOjE2NjcyMzE5OTl9.lx2JZUwjiQUgmOmpiDZAD-x9GEspVFMPhuDmuA3re13i7zkQG6hgU2thrcoFDXiYtD_hupkNvruuNhQITFRrXc9gm2N-ptwLJc4B6AHYmzTuZj51No9SYgth4LyL45SD1TThGJKv0MfyniahVdSeIEO9expXJhJfiRuxES2d2fs6s6-sef0M_rhA9FR67QpWwvcdPyqyzM1WksxtfuO7JXe0hRsiLqHXnnPPDGW4IgI6yg42r7m_aCuuvkzaJYASvKzLbKniRUKbvfxsQSb-Ths2dG9nfahg-5c7Un8YeF8KYYNPKtw43rWCigxvTrXmq6IvaOgGa8Ty5G43neMxgA";

If my RSA public key and jwt is 4096 bit generate, it's incorrect

static const char RSA_PUBLIC_KEY[] = "-----BEGIN PUBLIC KEY-----\n"
                                      "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvT9MB8RSgRIdWiAEn1Sk\n"
                                      "8lW4jn+w2bkkrBwUmC0Mtgrl3iGrMVuA3zPBVhrxle4kkNk8aU5M/0smRrjPB71Q\n"
                                      "yBqAbtCZ9E5mIT5S8tMBORobLf7fnvyrmIYzAmIq9Q3Z2SZ0UBBg1xesAQi8qSCN\n"
                                      "vL5OvbwGdSPnlAijhbR0qR8O615lpi3zEPa/ABskwHcAEU2KoNAjHzZ+Od7N5PV1\n"
                                      "QIQtN/+AJYfwN7XctGS9l8SVWxExWYDg38+/5fGceD5Z13uITlB2C7QERRcWj1nH\n"
                                      "bR+lXFZt+7nMjWSXjWDBcTWeGzotrCr3Zy9XC9sqAhRLWoHfbgoiiDtihHBz8IPc\n"
                                      "1zdZFlQy5Fl/VomzfJmb+flcXe9ZfPfKo2Nx3OE42jlMrqaKtT0Vr9O5c7xH/1iU\n"
                                      "vIkev8rXhsXn2bRtczOUgdj1zD+77B40OxBUyNdlEwFqsQq0VBbGDq7xKXnAnl1X\n"
                                      "+LjOOfDGpjsCw9RY98T1jcms2DhTJ/JA+6Tz0ifvb8AWTU4LGJbd/XBpD5M/7qNr\n"
                                      "GkLhsNIDVYQm9d9DGeV9QwsOgTQ9UDBEO+U9uCWFuH8upoV9OWuKaqbcOhFWqaHh\n"
                                      "Fhrl33a0IuMpmsOWhRwQXEksN2hRxIsaMrbsWz48Nuk/CJjVSvy7MbUpEYIPceYM\n"
                                      "yhWlY7L8ZbGa98IaUBE/ZHkCAwEAAQ==\n"
                                      "-----END PUBLIC KEY-----";

char JWT[] = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJkb20iOiJhYmMuYWJjIiwiaXAiOiIxMjMuMTIzLjEyMy4xMjMiLCJzaWQiOiIwZmVkNDAxOS1hZjRhLTQwNGYtOWJhNC1mMzkwMDUzYTVlMTQiLCJjaWQiOiJmYTFiOGQ3NS03ODU5LTRiN2QtOWU1Mi03NTRlOGNkZTZmNzEiLCJpYXQiOjE2NjAwMjczNTksIm5iZiI6MTY1OTI4MzIwMSwiZXhwIjoxNjY3MjMxOTk5fQ.VFmyodB2Z0RqacXHUrn6oa-oWw7RSilgXfxalltkrp19W40pubvp633ZdBH0J9tmJJp2Adw0ayeclJJRXI9Xb9iSHXgShnDUwxRunxN3O5GgBLfYs9NDFUTw2D4d5EkO7PZlNMSr5U0IpX9fAjz-THcdKw4GvYDljdPVWClsGn7Ujhy9QHS4PoL1JN3pTXeLobma0H5MnCaBeTVyicXRILmmdhqKNJuNVGB86qM0jl8LX7i55-3Zev0Nxwal6vJuQihkwaXWy3aBwBPVK8hRafJLitLg0CO4SGNzSBGEf8sQzYPhMR-Lqe40RUPdUw4c8vnYTc67CZmf12pWgUkDyv-DeShQRyXRq0M_-0xCxdtHGPQSt3XC_mmGCs2jZbQka2BLttGlb8gz_gSIxTdOSOEt9BC5SO7LcjFjA6FMGJKfDy6pkiehQpFvopgV0_OpDddurG0mcr_zKGK3aEXgFJqCSgQMkkxlKR9ZNQ77XPuC2jV_-B1LGnxkAldeDCjEjYKnpJHYDm3O2BjnQfttJXflSe8Mkcp_DkYQI9PbbF-7hmSESD9jIe5CcZToYFSbZWLhKTio5ZNjSjjetiaYPoNcM71-HC6Qx1UFO_prB7_uRV59Ujkinogj0QFhVBm_SuFqSs7It8aclVrX2bhwsYDy-CZS_1D3BiHit1obR7w";

At this time base64_decode_result is 200 , and I can't get decode_payload

@GlitchedPolygons
Copy link
Owner

@zhouhm Hi there, sorry for the insane delay.

I can't be sure about the true cause of this, but I can safely say what the returned error code 200 represents:

image

It is the error code for invalid arguments, and it is returned by that l8w8jwt_base64_decode function only when:

  • in_length == 0
  • url == 0 and the passed string is not in valid Base64 format and/or correctly padded as well as divisible by 4
    • And this is my assumption. Is it possible that you allocated a buffer during encoding that wasn't large enough to contain the string content?

Closing this, as it's been 2 years (sorry, my bad...) but feel free to reopen at any time if this is still a problem for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants