apps/dsaparam.c:307: error: UNINITIALIZED_VALUE
  The value read from num was never initialized.
Showing all 1 steps of the trace


apps/dsaparam.c:307:14: 
305.           }
306.   # endif
307. >         if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {
308.   # ifdef GENCB_TEST
309.               if (stop_keygen_flag) {

int MAIN(int argc, char **argv)
{
    DSA *dsa = NULL;
    int i, badops = 0, text = 0;
    BIO *in = NULL, *out = NULL;
    int informat, outformat, noout = 0, C = 0, ret = 1;
    char *infile, *outfile, *prog, *inrand = NULL;
    int numbits = -1, num, genkey = 0;
    int need_rand = 0;
    int non_fips_allow = 0;
    BN_GENCB *cb = NULL;
# ifndef OPENSSL_NO_ENGINE
    char *engine = NULL;
# endif
# ifdef GENCB_TEST
    int timebomb = 0;
# endif
    apps_startup();
    if (bio_err == NULL)
        if ((bio_err = BIO_new(BIO_s_file())) != NULL)
            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
    if (!load_config(bio_err, NULL))
        goto end;
    infile = NULL;
    outfile = NULL;
    informat = FORMAT_PEM;
    outformat = FORMAT_PEM;
    prog = argv[0];
    argc--;
    argv++;
    while (argc >= 1) {
        if (strcmp(*argv, "-inform") == 0) {
            if (--argc < 1)
                goto bad;
            informat = str2fmt(*(++argv));
        } else if (strcmp(*argv, "-outform") == 0) {
            if (--argc < 1)
                goto bad;
            outformat = str2fmt(*(++argv));
        } else if (strcmp(*argv, "-in") == 0) {
            if (--argc < 1)
                goto bad;
            infile = *(++argv);
        } else if (strcmp(*argv, "-out") == 0) {
            if (--argc < 1)
                goto bad;
            outfile = *(++argv);
        }
# ifndef OPENSSL_NO_ENGINE
        else if (strcmp(*argv, "-engine") == 0) {
            if (--argc < 1)
                goto bad;
            engine = *(++argv);
        }
# endif
# ifdef GENCB_TEST
        else if (strcmp(*argv, "-timebomb") == 0) {
            if (--argc < 1)
                goto bad;
            timebomb = atoi(*(++argv));
        }
# endif
        else if (strcmp(*argv, "-text") == 0)
            text = 1;
        else if (strcmp(*argv, "-C") == 0)
            C = 1;
        else if (strcmp(*argv, "-genkey") == 0) {
            genkey = 1;
            need_rand = 1;
        } else if (strcmp(*argv, "-rand") == 0) {
            if (--argc < 1)
                goto bad;
            inrand = *(++argv);
            need_rand = 1;
        } else if (strcmp(*argv, "-noout") == 0)
            noout = 1;
        else if (strcmp(*argv, "-non-fips-allow") == 0)
            non_fips_allow = 1;
        else if (sscanf(*argv, "%d", &num) == 1) {
            numbits = num;
            need_rand = 1;
        } else {
            BIO_printf(bio_err, "unknown option %s\n", *argv);
            badops = 1;
            break;
        }
        argc--;
        argv++;
    }
    if (badops) {
 bad:
        BIO_printf(bio_err, "%s [options] [bits] <infile >outfile\n", prog);
        BIO_printf(bio_err, "where options are\n");
        BIO_printf(bio_err, " -inform arg   input format - DER or PEM\n");
        BIO_printf(bio_err, " -outform arg  output format - DER or PEM\n");
        BIO_printf(bio_err, " -in arg       input file\n");
        BIO_printf(bio_err, " -out arg      output file\n");
        BIO_printf(bio_err, " -text         print as text\n");
        BIO_printf(bio_err, " -C            Output C code\n");
        BIO_printf(bio_err, " -noout        no output\n");
        BIO_printf(bio_err, " -genkey       generate a DSA key\n");
        BIO_printf(bio_err,
                   " -rand         files to use for random number input\n");
# ifndef OPENSSL_NO_ENGINE
        BIO_printf(bio_err,
                   " -engine e     use engine e, possibly a hardware device.\n");
# endif
# ifdef GENCB_TEST
        BIO_printf(bio_err,
                   " -timebomb n   interrupt keygen after <n> seconds\n");
# endif
        BIO_printf(bio_err,
                   " number        number of bits to use for generating private key\n");
        goto end;
    }
    ERR_load_crypto_strings();
    in = BIO_new(BIO_s_file());
    out = BIO_new(BIO_s_file());
    if ((in == NULL) || (out == NULL)) {
        ERR_print_errors(bio_err);
        goto end;
    }
    if (infile == NULL)
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
    else {
        if (BIO_read_filename(in, infile) <= 0) {
            perror(infile);
            goto end;
        }
    }
    if (outfile == NULL) {
        BIO_set_fp(out, stdout, BIO_NOCLOSE);
# ifdef OPENSSL_SYS_VMS
        {
            BIO *tmpbio = BIO_new(BIO_f_linebuffer());
            out = BIO_push(tmpbio, out);
        }
# endif
    } else {
        if (BIO_write_filename(out, outfile) <= 0) {
            perror(outfile);
            goto end;
        }
    }
# ifndef OPENSSL_NO_ENGINE
    setup_engine(bio_err, engine, 0);
# endif
    if (need_rand) {
        app_RAND_load_file(NULL, bio_err, (inrand != NULL));
        if (inrand != NULL)
            BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
                       app_RAND_load_files(inrand));
    }
    if (numbits > 0) {
        cb = BN_GENCB_new();
        if (!cb) {
            BIO_printf(bio_err, "Error allocating BN_GENCB object\n");
            goto end;
        }
        BN_GENCB_set(cb, dsa_cb, bio_err);
        assert(need_rand);
        dsa = DSA_new();
        if (!dsa) {
            BIO_printf(bio_err, "Error allocating DSA object\n");
            goto end;
        }
        if (non_fips_allow)
            dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
        BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
                   num);
        BIO_printf(bio_err, "This could take some time\n");
# ifdef GENCB_TEST
        if (timebomb > 0) {
            struct sigaction act;
            act.sa_handler = timebomb_sigalarm;
            act.sa_flags = 0;
            BIO_printf(bio_err,
                       "(though I'll stop it if not done within %d secs)\n",
                       timebomb);
            if (sigaction(SIGALRM, &act, NULL) != 0) {
                BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n");
                goto end;
            }
            alarm(timebomb);
        }
# endif
        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {
# ifdef GENCB_TEST
            if (stop_keygen_flag) {
                BIO_printf(bio_err, "DSA key generation time-stopped\n");
                ret = 0;
                goto end;
            }
# endif
            ERR_print_errors(bio_err);
            BIO_printf(bio_err, "Error, DSA key generation failed\n");
            goto end;
        }
    } else if (informat == FORMAT_ASN1)
        dsa = d2i_DSAparams_bio(in, NULL);
    else if (informat == FORMAT_PEM)
        dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
    else {
        BIO_printf(bio_err, "bad input format specified\n");
        goto end;
    }
    if (dsa == NULL) {
        BIO_printf(bio_err, "unable to load DSA parameters\n");
        ERR_print_errors(bio_err);
        goto end;
    }
    if (text) {
        DSAparams_print(out, dsa);
    }
    if (C) {
        unsigned char *data;
        int l, len, bits_p;
        len = BN_num_bytes(dsa->p);
        bits_p = BN_num_bits(dsa->p);
        data = (unsigned char *)OPENSSL_malloc(len + 20);
        if (data == NULL) {
            perror("OPENSSL_malloc");
            goto end;
        }
        l = BN_bn2bin(dsa->p, data);
        printf("static unsigned char dsa%d_p[]={", bits_p);
        for (i = 0; i < l; i++) {
            if ((i % 12) == 0)
                printf("\n\t");
            printf("0x%02X,", data[i]);
        }
        printf("\n\t};\n");
        l = BN_bn2bin(dsa->q, data);
        printf("static unsigned char dsa%d_q[]={", bits_p);
        for (i = 0; i < l; i++) {
            if ((i % 12) == 0)
                printf("\n\t");
            printf("0x%02X,", data[i]);
        }
        printf("\n\t};\n");
        l = BN_bn2bin(dsa->g, data);
        printf("static unsigned char dsa%d_g[]={", bits_p);
        for (i = 0; i < l; i++) {
            if ((i % 12) == 0)
                printf("\n\t");
            printf("0x%02X,", data[i]);
        }
        printf("\n\t};\n\n");
        printf("DSA *get_dsa%d()\n\t{\n", bits_p);
        printf("\tDSA *dsa;\n\n");
        printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
        printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
               bits_p, bits_p);
        printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
               bits_p, bits_p);
        printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
               bits_p, bits_p);
        printf
            ("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
        printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
        printf("\treturn(dsa);\n\t}\n");
    }
    if (!noout) {
        if (outformat == FORMAT_ASN1)
            i = i2d_DSAparams_bio(out, dsa);
        else if (outformat == FORMAT_PEM)
            i = PEM_write_bio_DSAparams(out, dsa);
        else {
            BIO_printf(bio_err, "bad output format specified for outfile\n");
            goto end;
        }
        if (!i) {
            BIO_printf(bio_err, "unable to write DSA parameters\n");
            ERR_print_errors(bio_err);
            goto end;
        }
    }
    if (genkey) {
        DSA *dsakey;
        assert(need_rand);
        if ((dsakey = DSAparams_dup(dsa)) == NULL)
            goto end;
        if (non_fips_allow)
            dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
        if (!DSA_generate_key(dsakey)) {
            ERR_print_errors(bio_err);
            DSA_free(dsakey);
            goto end;
        }
        if (outformat == FORMAT_ASN1)
            i = i2d_DSAPrivateKey_bio(out, dsakey);
        else if (outformat == FORMAT_PEM)
            i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL,
                                            NULL);
        else {
            BIO_printf(bio_err, "bad output format specified for outfile\n");
            DSA_free(dsakey);
            goto end;
        }
        DSA_free(dsakey);
    }
    if (need_rand)
        app_RAND_write_file(NULL, bio_err);
    ret = 0;
 end:
    if (cb != NULL)
        BN_GENCB_free(cb);
    if (in != NULL)
        BIO_free(in);
    if (out != NULL)
        BIO_free_all(out);
    if (dsa != NULL)
        DSA_free(dsa);
    apps_shutdown();
    OPENSSL_EXIT(ret);
}
['int MAIN(int argc, char **argv)\n{\n    DSA *dsa = NULL;\n    int i, badops = 0, text = 0;\n    BIO *in = NULL, *out = NULL;\n    int informat, outformat, noout = 0, C = 0, ret = 1;\n    char *infile, *outfile, *prog, *inrand = NULL;\n    int numbits = -1, num, genkey = 0;\n    int need_rand = 0;\n    int non_fips_allow = 0;\n    BN_GENCB *cb = NULL;\n# ifndef OPENSSL_NO_ENGINE\n    char *engine = NULL;\n# endif\n# ifdef GENCB_TEST\n    int timebomb = 0;\n# endif\n    apps_startup();\n    if (bio_err == NULL)\n        if ((bio_err = BIO_new(BIO_s_file())) != NULL)\n            BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);\n    if (!load_config(bio_err, NULL))\n        goto end;\n    infile = NULL;\n    outfile = NULL;\n    informat = FORMAT_PEM;\n    outformat = FORMAT_PEM;\n    prog = argv[0];\n    argc--;\n    argv++;\n    while (argc >= 1) {\n        if (strcmp(*argv, "-inform") == 0) {\n            if (--argc < 1)\n                goto bad;\n            informat = str2fmt(*(++argv));\n        } else if (strcmp(*argv, "-outform") == 0) {\n            if (--argc < 1)\n                goto bad;\n            outformat = str2fmt(*(++argv));\n        } else if (strcmp(*argv, "-in") == 0) {\n            if (--argc < 1)\n                goto bad;\n            infile = *(++argv);\n        } else if (strcmp(*argv, "-out") == 0) {\n            if (--argc < 1)\n                goto bad;\n            outfile = *(++argv);\n        }\n# ifndef OPENSSL_NO_ENGINE\n        else if (strcmp(*argv, "-engine") == 0) {\n            if (--argc < 1)\n                goto bad;\n            engine = *(++argv);\n        }\n# endif\n# ifdef GENCB_TEST\n        else if (strcmp(*argv, "-timebomb") == 0) {\n            if (--argc < 1)\n                goto bad;\n            timebomb = atoi(*(++argv));\n        }\n# endif\n        else if (strcmp(*argv, "-text") == 0)\n            text = 1;\n        else if (strcmp(*argv, "-C") == 0)\n            C = 1;\n        else if (strcmp(*argv, "-genkey") == 0) {\n            genkey = 1;\n            need_rand = 1;\n        } else if (strcmp(*argv, "-rand") == 0) {\n            if (--argc < 1)\n                goto bad;\n            inrand = *(++argv);\n            need_rand = 1;\n        } else if (strcmp(*argv, "-noout") == 0)\n            noout = 1;\n        else if (strcmp(*argv, "-non-fips-allow") == 0)\n            non_fips_allow = 1;\n        else if (sscanf(*argv, "%d", &num) == 1) {\n            numbits = num;\n            need_rand = 1;\n        } else {\n            BIO_printf(bio_err, "unknown option %s\\n", *argv);\n            badops = 1;\n            break;\n        }\n        argc--;\n        argv++;\n    }\n    if (badops) {\n bad:\n        BIO_printf(bio_err, "%s [options] [bits] <infile >outfile\\n", prog);\n        BIO_printf(bio_err, "where options are\\n");\n        BIO_printf(bio_err, " -inform arg   input format - DER or PEM\\n");\n        BIO_printf(bio_err, " -outform arg  output format - DER or PEM\\n");\n        BIO_printf(bio_err, " -in arg       input file\\n");\n        BIO_printf(bio_err, " -out arg      output file\\n");\n        BIO_printf(bio_err, " -text         print as text\\n");\n        BIO_printf(bio_err, " -C            Output C code\\n");\n        BIO_printf(bio_err, " -noout        no output\\n");\n        BIO_printf(bio_err, " -genkey       generate a DSA key\\n");\n        BIO_printf(bio_err,\n                   " -rand         files to use for random number input\\n");\n# ifndef OPENSSL_NO_ENGINE\n        BIO_printf(bio_err,\n                   " -engine e     use engine e, possibly a hardware device.\\n");\n# endif\n# ifdef GENCB_TEST\n        BIO_printf(bio_err,\n                   " -timebomb n   interrupt keygen after <n> seconds\\n");\n# endif\n        BIO_printf(bio_err,\n                   " number        number of bits to use for generating private key\\n");\n        goto end;\n    }\n    ERR_load_crypto_strings();\n    in = BIO_new(BIO_s_file());\n    out = BIO_new(BIO_s_file());\n    if ((in == NULL) || (out == NULL)) {\n        ERR_print_errors(bio_err);\n        goto end;\n    }\n    if (infile == NULL)\n        BIO_set_fp(in, stdin, BIO_NOCLOSE);\n    else {\n        if (BIO_read_filename(in, infile) <= 0) {\n            perror(infile);\n            goto end;\n        }\n    }\n    if (outfile == NULL) {\n        BIO_set_fp(out, stdout, BIO_NOCLOSE);\n# ifdef OPENSSL_SYS_VMS\n        {\n            BIO *tmpbio = BIO_new(BIO_f_linebuffer());\n            out = BIO_push(tmpbio, out);\n        }\n# endif\n    } else {\n        if (BIO_write_filename(out, outfile) <= 0) {\n            perror(outfile);\n            goto end;\n        }\n    }\n# ifndef OPENSSL_NO_ENGINE\n    setup_engine(bio_err, engine, 0);\n# endif\n    if (need_rand) {\n        app_RAND_load_file(NULL, bio_err, (inrand != NULL));\n        if (inrand != NULL)\n            BIO_printf(bio_err, "%ld semi-random bytes loaded\\n",\n                       app_RAND_load_files(inrand));\n    }\n    if (numbits > 0) {\n        cb = BN_GENCB_new();\n        if (!cb) {\n            BIO_printf(bio_err, "Error allocating BN_GENCB object\\n");\n            goto end;\n        }\n        BN_GENCB_set(cb, dsa_cb, bio_err);\n        assert(need_rand);\n        dsa = DSA_new();\n        if (!dsa) {\n            BIO_printf(bio_err, "Error allocating DSA object\\n");\n            goto end;\n        }\n        if (non_fips_allow)\n            dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;\n        BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\\n",\n                   num);\n        BIO_printf(bio_err, "This could take some time\\n");\n# ifdef GENCB_TEST\n        if (timebomb > 0) {\n            struct sigaction act;\n            act.sa_handler = timebomb_sigalarm;\n            act.sa_flags = 0;\n            BIO_printf(bio_err,\n                       "(though I\'ll stop it if not done within %d secs)\\n",\n                       timebomb);\n            if (sigaction(SIGALRM, &act, NULL) != 0) {\n                BIO_printf(bio_err, "Error, couldn\'t set SIGALRM handler\\n");\n                goto end;\n            }\n            alarm(timebomb);\n        }\n# endif\n        if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) {\n# ifdef GENCB_TEST\n            if (stop_keygen_flag) {\n                BIO_printf(bio_err, "DSA key generation time-stopped\\n");\n                ret = 0;\n                goto end;\n            }\n# endif\n            ERR_print_errors(bio_err);\n            BIO_printf(bio_err, "Error, DSA key generation failed\\n");\n            goto end;\n        }\n    } else if (informat == FORMAT_ASN1)\n        dsa = d2i_DSAparams_bio(in, NULL);\n    else if (informat == FORMAT_PEM)\n        dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);\n    else {\n        BIO_printf(bio_err, "bad input format specified\\n");\n        goto end;\n    }\n    if (dsa == NULL) {\n        BIO_printf(bio_err, "unable to load DSA parameters\\n");\n        ERR_print_errors(bio_err);\n        goto end;\n    }\n    if (text) {\n        DSAparams_print(out, dsa);\n    }\n    if (C) {\n        unsigned char *data;\n        int l, len, bits_p;\n        len = BN_num_bytes(dsa->p);\n        bits_p = BN_num_bits(dsa->p);\n        data = (unsigned char *)OPENSSL_malloc(len + 20);\n        if (data == NULL) {\n            perror("OPENSSL_malloc");\n            goto end;\n        }\n        l = BN_bn2bin(dsa->p, data);\n        printf("static unsigned char dsa%d_p[]={", bits_p);\n        for (i = 0; i < l; i++) {\n            if ((i % 12) == 0)\n                printf("\\n\\t");\n            printf("0x%02X,", data[i]);\n        }\n        printf("\\n\\t};\\n");\n        l = BN_bn2bin(dsa->q, data);\n        printf("static unsigned char dsa%d_q[]={", bits_p);\n        for (i = 0; i < l; i++) {\n            if ((i % 12) == 0)\n                printf("\\n\\t");\n            printf("0x%02X,", data[i]);\n        }\n        printf("\\n\\t};\\n");\n        l = BN_bn2bin(dsa->g, data);\n        printf("static unsigned char dsa%d_g[]={", bits_p);\n        for (i = 0; i < l; i++) {\n            if ((i % 12) == 0)\n                printf("\\n\\t");\n            printf("0x%02X,", data[i]);\n        }\n        printf("\\n\\t};\\n\\n");\n        printf("DSA *get_dsa%d()\\n\\t{\\n", bits_p);\n        printf("\\tDSA *dsa;\\n\\n");\n        printf("\\tif ((dsa=DSA_new()) == NULL) return(NULL);\\n");\n        printf("\\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\\n",\n               bits_p, bits_p);\n        printf("\\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\\n",\n               bits_p, bits_p);\n        printf("\\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\\n",\n               bits_p, bits_p);\n        printf\n            ("\\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\\n");\n        printf("\\t\\t{ DSA_free(dsa); return(NULL); }\\n");\n        printf("\\treturn(dsa);\\n\\t}\\n");\n    }\n    if (!noout) {\n        if (outformat == FORMAT_ASN1)\n            i = i2d_DSAparams_bio(out, dsa);\n        else if (outformat == FORMAT_PEM)\n            i = PEM_write_bio_DSAparams(out, dsa);\n        else {\n            BIO_printf(bio_err, "bad output format specified for outfile\\n");\n            goto end;\n        }\n        if (!i) {\n            BIO_printf(bio_err, "unable to write DSA parameters\\n");\n            ERR_print_errors(bio_err);\n            goto end;\n        }\n    }\n    if (genkey) {\n        DSA *dsakey;\n        assert(need_rand);\n        if ((dsakey = DSAparams_dup(dsa)) == NULL)\n            goto end;\n        if (non_fips_allow)\n            dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;\n        if (!DSA_generate_key(dsakey)) {\n            ERR_print_errors(bio_err);\n            DSA_free(dsakey);\n            goto end;\n        }\n        if (outformat == FORMAT_ASN1)\n            i = i2d_DSAPrivateKey_bio(out, dsakey);\n        else if (outformat == FORMAT_PEM)\n            i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL,\n                                            NULL);\n        else {\n            BIO_printf(bio_err, "bad output format specified for outfile\\n");\n            DSA_free(dsakey);\n            goto end;\n        }\n        DSA_free(dsakey);\n    }\n    if (need_rand)\n        app_RAND_write_file(NULL, bio_err);\n    ret = 0;\n end:\n    if (cb != NULL)\n        BN_GENCB_free(cb);\n    if (in != NULL)\n        BIO_free(in);\n    if (out != NULL)\n        BIO_free_all(out);\n    if (dsa != NULL)\n        DSA_free(dsa);\n    apps_shutdown();\n    OPENSSL_EXIT(ret);\n}']