crypto/evp/evp_test.c:384: error: UNINITIALIZED_VALUE
  The value read from outl2 was never initialized.
Showing all 1 steps of the trace


crypto/evp/evp_test.c:384:13: 
382.           }
383.   
384. >         if (outl + outl2 != pn) {
385.               fprintf(stderr, "Plaintext length mismatch got %d expected %d\n",
386.                       outl + outl2, pn);

static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
                  const unsigned char *iv, int in,
                  const unsigned char *plaintext, int pn,
                  const unsigned char *ciphertext, int cn,
                  const unsigned char *aad, int an,
                  const unsigned char *tag, int tn, int encdec)
{
    EVP_CIPHER_CTX *ctx = NULL;
    unsigned char out[4096];
    int outl, outl2, mode;
    printf("Testing cipher %s%s\n", EVP_CIPHER_name(c),
           (encdec ==
            1 ? "(encrypt)" : (encdec ==
                               0 ? "(decrypt)" : "(encrypt/decrypt)")));
    hexdump(stdout, "Key", key, kn);
    if (in)
        hexdump(stdout, "IV", iv, in);
    hexdump(stdout, "Plaintext", plaintext, pn);
    hexdump(stdout, "Ciphertext", ciphertext, cn);
    if (an)
        hexdump(stdout, "AAD", aad, an);
    if (tn)
        hexdump(stdout, "Tag", tag, tn);
    mode = EVP_CIPHER_mode(c);
    if (kn != EVP_CIPHER_key_length(c)) {
        fprintf(stderr, "Key length doesn't match, got %d expected %lu\n", kn,
                (unsigned long)EVP_CIPHER_key_length(c));
        test1_exit(5);
    }
    ctx = EVP_CIPHER_CTX_new();
    EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
    if (encdec != 0) {
        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)) {
            if (!EVP_EncryptInit_ex(ctx, c, NULL, NULL, NULL)) {
                fprintf(stderr, "EncryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL)) {
                fprintf(stderr, "IV length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if ((mode == EVP_CIPH_OCB_MODE) &&
                !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))
            {
                fprintf(stderr, "Tag length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(15);
            }
            if (!EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) {
                fprintf(stderr, "Key/IV set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {
                fprintf(stderr, "AAD set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(13);
            }
        } else if (mode == EVP_CIPH_CCM_MODE) {
            if (!EVP_EncryptInit_ex(ctx, c, NULL, NULL, NULL)) {
                fprintf(stderr, "EncryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {
                fprintf(stderr, "IV length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, tn, NULL)) {
                fprintf(stderr, "Tag length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if (!EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) {
                fprintf(stderr, "Key/IV set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (!EVP_EncryptUpdate(ctx, NULL, &outl, NULL, pn)) {
                fprintf(stderr, "Plaintext length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {
                fprintf(stderr, "AAD set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(13);
            }
        } else if (mode == EVP_CIPH_WRAP_MODE) {
            if (!EVP_EncryptInit_ex(ctx, c, NULL, key, in ? iv : NULL)) {
                fprintf(stderr, "EncryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
        } else if (!EVP_EncryptInit_ex(ctx, c, NULL, key, iv)) {
            fprintf(stderr, "EncryptInit failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(10);
        }
        EVP_CIPHER_CTX_set_padding(ctx, 0);
        test_ctx_replace(&ctx);
        if (!EVP_EncryptUpdate(ctx, out, &outl, plaintext, pn)) {
            fprintf(stderr, "Encrypt failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(6);
        }
        if (!EVP_EncryptFinal_ex(ctx, out + outl, &outl2)) {
            fprintf(stderr, "EncryptFinal failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(7);
        }
        if (outl + outl2 != cn) {
            fprintf(stderr, "Ciphertext length mismatch got %d expected %d\n",
                    outl + outl2, cn);
            test1_exit(8);
        }
        if (memcmp(out, ciphertext, cn)) {
            fprintf(stderr, "Ciphertext mismatch\n");
            hexdump(stderr, "Got", out, cn);
            hexdump(stderr, "Expected", ciphertext, cn);
            test1_exit(9);
        }
        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)
            || (mode == EVP_CIPH_CCM_MODE)) {
            unsigned char rtag[16];
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_TAG, tn, rtag)) {
                fprintf(stderr, "Get tag failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(14);
            }
            if (memcmp(rtag, tag, tn)) {
                fprintf(stderr, "Tag mismatch\n");
                hexdump(stderr, "Got", rtag, tn);
                hexdump(stderr, "Expected", tag, tn);
                test1_exit(9);
            }
        }
    }
    if (encdec <= 0) {
        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)) {
            if (!EVP_DecryptInit_ex(ctx, c, NULL, NULL, NULL)) {
                fprintf(stderr, "DecryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL)) {
                fprintf(stderr, "IV length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if ((mode == EVP_CIPH_OCB_MODE) &&
                !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))
            {
                fprintf(stderr, "Tag length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(15);
            }
            if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) {
                fprintf(stderr, "Key/IV set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_TAG, tn, (void *)tag)) {
                fprintf(stderr, "Set tag failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(14);
            }
            if (an && !EVP_DecryptUpdate(ctx, NULL, &outl, aad, an)) {
                fprintf(stderr, "AAD set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(13);
            }
        } else if (mode == EVP_CIPH_CCM_MODE) {
            if (!EVP_DecryptInit_ex(ctx, c, NULL, NULL, NULL)) {
                fprintf(stderr, "DecryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {
                fprintf(stderr, "IV length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if (!EVP_CIPHER_CTX_ctrl
                (ctx, EVP_CTRL_CCM_SET_TAG, tn, (void *)tag)) {
                fprintf(stderr, "Tag length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(11);
            }
            if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) {
                fprintf(stderr, "Key/Nonce set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (!EVP_DecryptUpdate(ctx, NULL, &outl, NULL, pn)) {
                fprintf(stderr, "Plaintext length set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(12);
            }
            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {
                fprintf(stderr, "AAD set failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(13);
            }
        } else if (mode == EVP_CIPH_WRAP_MODE) {
            if (!EVP_DecryptInit_ex(ctx, c, NULL, key, in ? iv : NULL)) {
                fprintf(stderr, "EncryptInit failed\n");
                ERR_print_errors_fp(stderr);
                test1_exit(10);
            }
        } else if (!EVP_DecryptInit_ex(ctx, c, NULL, key, iv)) {
            fprintf(stderr, "DecryptInit failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(11);
        }
        EVP_CIPHER_CTX_set_padding(ctx, 0);
        test_ctx_replace(&ctx);
        if (!EVP_DecryptUpdate(ctx, out, &outl, ciphertext, cn)) {
            fprintf(stderr, "Decrypt failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(6);
        }
        if (mode != EVP_CIPH_CCM_MODE
            && !EVP_DecryptFinal_ex(ctx, out + outl, &outl2)) {
            fprintf(stderr, "DecryptFinal failed\n");
            ERR_print_errors_fp(stderr);
            test1_exit(7);
        }
        if (outl + outl2 != pn) {
            fprintf(stderr, "Plaintext length mismatch got %d expected %d\n",
                    outl + outl2, pn);
            test1_exit(8);
        }
        if (memcmp(out, plaintext, pn)) {
            fprintf(stderr, "Plaintext mismatch\n");
            hexdump(stderr, "Got", out, pn);
            hexdump(stderr, "Expected", plaintext, pn);
            test1_exit(9);
        }
    }
    EVP_CIPHER_CTX_free(ctx);
    printf("\n");
}
['static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,\n                  const unsigned char *iv, int in,\n                  const unsigned char *plaintext, int pn,\n                  const unsigned char *ciphertext, int cn,\n                  const unsigned char *aad, int an,\n                  const unsigned char *tag, int tn, int encdec)\n{\n    EVP_CIPHER_CTX *ctx = NULL;\n    unsigned char out[4096];\n    int outl, outl2, mode;\n    printf("Testing cipher %s%s\\n", EVP_CIPHER_name(c),\n           (encdec ==\n            1 ? "(encrypt)" : (encdec ==\n                               0 ? "(decrypt)" : "(encrypt/decrypt)")));\n    hexdump(stdout, "Key", key, kn);\n    if (in)\n        hexdump(stdout, "IV", iv, in);\n    hexdump(stdout, "Plaintext", plaintext, pn);\n    hexdump(stdout, "Ciphertext", ciphertext, cn);\n    if (an)\n        hexdump(stdout, "AAD", aad, an);\n    if (tn)\n        hexdump(stdout, "Tag", tag, tn);\n    mode = EVP_CIPHER_mode(c);\n    if (kn != EVP_CIPHER_key_length(c)) {\n        fprintf(stderr, "Key length doesn\'t match, got %d expected %lu\\n", kn,\n                (unsigned long)EVP_CIPHER_key_length(c));\n        test1_exit(5);\n    }\n    ctx = EVP_CIPHER_CTX_new();\n    EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);\n    if (encdec != 0) {\n        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)) {\n            if (!EVP_EncryptInit_ex(ctx, c, NULL, NULL, NULL)) {\n                fprintf(stderr, "EncryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL)) {\n                fprintf(stderr, "IV length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if ((mode == EVP_CIPH_OCB_MODE) &&\n                !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))\n            {\n                fprintf(stderr, "Tag length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(15);\n            }\n            if (!EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) {\n                fprintf(stderr, "Key/IV set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {\n                fprintf(stderr, "AAD set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(13);\n            }\n        } else if (mode == EVP_CIPH_CCM_MODE) {\n            if (!EVP_EncryptInit_ex(ctx, c, NULL, NULL, NULL)) {\n                fprintf(stderr, "EncryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {\n                fprintf(stderr, "IV length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, tn, NULL)) {\n                fprintf(stderr, "Tag length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if (!EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) {\n                fprintf(stderr, "Key/IV set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (!EVP_EncryptUpdate(ctx, NULL, &outl, NULL, pn)) {\n                fprintf(stderr, "Plaintext length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {\n                fprintf(stderr, "AAD set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(13);\n            }\n        } else if (mode == EVP_CIPH_WRAP_MODE) {\n            if (!EVP_EncryptInit_ex(ctx, c, NULL, key, in ? iv : NULL)) {\n                fprintf(stderr, "EncryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n        } else if (!EVP_EncryptInit_ex(ctx, c, NULL, key, iv)) {\n            fprintf(stderr, "EncryptInit failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(10);\n        }\n        EVP_CIPHER_CTX_set_padding(ctx, 0);\n        test_ctx_replace(&ctx);\n        if (!EVP_EncryptUpdate(ctx, out, &outl, plaintext, pn)) {\n            fprintf(stderr, "Encrypt failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(6);\n        }\n        if (!EVP_EncryptFinal_ex(ctx, out + outl, &outl2)) {\n            fprintf(stderr, "EncryptFinal failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(7);\n        }\n        if (outl + outl2 != cn) {\n            fprintf(stderr, "Ciphertext length mismatch got %d expected %d\\n",\n                    outl + outl2, cn);\n            test1_exit(8);\n        }\n        if (memcmp(out, ciphertext, cn)) {\n            fprintf(stderr, "Ciphertext mismatch\\n");\n            hexdump(stderr, "Got", out, cn);\n            hexdump(stderr, "Expected", ciphertext, cn);\n            test1_exit(9);\n        }\n        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)\n            || (mode == EVP_CIPH_CCM_MODE)) {\n            unsigned char rtag[16];\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_TAG, tn, rtag)) {\n                fprintf(stderr, "Get tag failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(14);\n            }\n            if (memcmp(rtag, tag, tn)) {\n                fprintf(stderr, "Tag mismatch\\n");\n                hexdump(stderr, "Got", rtag, tn);\n                hexdump(stderr, "Expected", tag, tn);\n                test1_exit(9);\n            }\n        }\n    }\n    if (encdec <= 0) {\n        if ((mode == EVP_CIPH_GCM_MODE) || (mode == EVP_CIPH_OCB_MODE)) {\n            if (!EVP_DecryptInit_ex(ctx, c, NULL, NULL, NULL)) {\n                fprintf(stderr, "DecryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_IVLEN, in, NULL)) {\n                fprintf(stderr, "IV length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if ((mode == EVP_CIPH_OCB_MODE) &&\n                !EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_OCB_SET_TAGLEN, tn, NULL))\n            {\n                fprintf(stderr, "Tag length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(15);\n            }\n            if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) {\n                fprintf(stderr, "Key/IV set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_TAG, tn, (void *)tag)) {\n                fprintf(stderr, "Set tag failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(14);\n            }\n            if (an && !EVP_DecryptUpdate(ctx, NULL, &outl, aad, an)) {\n                fprintf(stderr, "AAD set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(13);\n            }\n        } else if (mode == EVP_CIPH_CCM_MODE) {\n            if (!EVP_DecryptInit_ex(ctx, c, NULL, NULL, NULL)) {\n                fprintf(stderr, "DecryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {\n                fprintf(stderr, "IV length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if (!EVP_CIPHER_CTX_ctrl\n                (ctx, EVP_CTRL_CCM_SET_TAG, tn, (void *)tag)) {\n                fprintf(stderr, "Tag length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(11);\n            }\n            if (!EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) {\n                fprintf(stderr, "Key/Nonce set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (!EVP_DecryptUpdate(ctx, NULL, &outl, NULL, pn)) {\n                fprintf(stderr, "Plaintext length set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(12);\n            }\n            if (an && !EVP_EncryptUpdate(ctx, NULL, &outl, aad, an)) {\n                fprintf(stderr, "AAD set failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(13);\n            }\n        } else if (mode == EVP_CIPH_WRAP_MODE) {\n            if (!EVP_DecryptInit_ex(ctx, c, NULL, key, in ? iv : NULL)) {\n                fprintf(stderr, "EncryptInit failed\\n");\n                ERR_print_errors_fp(stderr);\n                test1_exit(10);\n            }\n        } else if (!EVP_DecryptInit_ex(ctx, c, NULL, key, iv)) {\n            fprintf(stderr, "DecryptInit failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(11);\n        }\n        EVP_CIPHER_CTX_set_padding(ctx, 0);\n        test_ctx_replace(&ctx);\n        if (!EVP_DecryptUpdate(ctx, out, &outl, ciphertext, cn)) {\n            fprintf(stderr, "Decrypt failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(6);\n        }\n        if (mode != EVP_CIPH_CCM_MODE\n            && !EVP_DecryptFinal_ex(ctx, out + outl, &outl2)) {\n            fprintf(stderr, "DecryptFinal failed\\n");\n            ERR_print_errors_fp(stderr);\n            test1_exit(7);\n        }\n        if (outl + outl2 != pn) {\n            fprintf(stderr, "Plaintext length mismatch got %d expected %d\\n",\n                    outl + outl2, pn);\n            test1_exit(8);\n        }\n        if (memcmp(out, plaintext, pn)) {\n            fprintf(stderr, "Plaintext mismatch\\n");\n            hexdump(stderr, "Got", out, pn);\n            hexdump(stderr, "Expected", plaintext, pn);\n            test1_exit(9);\n        }\n    }\n    EVP_CIPHER_CTX_free(ctx);\n    printf("\\n");\n}']