- if (enc) {
- if (hsalt) {
- if (!set_hex(hsalt, salt, sizeof(salt))) {
- BIO_printf(bio_err, "invalid hex salt value\n");
+ if (hsalt != NULL && !set_hex(hsalt, salt, sizeof(salt))) {
+ BIO_printf(bio_err, "invalid hex salt value\n");
+ goto end;
+ }
+ if (enc) { /* encryption */
+ if (hsalt == NULL) {
+ if (RAND_bytes(salt, sizeof(salt)) <= 0) {
+ BIO_printf(bio_err, "RAND_bytes failed\n");
+ goto end;
+ }
+ /*
+ * If -P option then don't bother writing.
+ * If salt is given, shouldn't either ?
+ */
+ if ((printkey != 2)
+ && (BIO_write(wbio, magic,
+ sizeof(magic) - 1) != sizeof(magic) - 1
+ || BIO_write(wbio,
+ (char *)salt,
+ sizeof(salt)) != sizeof(salt))) {
+ BIO_printf(bio_err, "error writing output file\n");