Merge pull request #663 from digitallumens/pkcs15-crypt/stdin

pkcs15-crypt: Allow the use of stdin if no input file is specified.
This commit is contained in:
Frank Morgner 2016-01-22 14:36:02 +01:00
commit b09d2777d1
2 changed files with 19 additions and 13 deletions

View File

@ -62,7 +62,8 @@
<option>--input</option> <replaceable>file</replaceable>,
<option>-i</option> <replaceable>file</replaceable>
</term>
<listitem><para>Specifies the input file to use.</para></listitem>
<listitem><para>Specifies the input file to use. Defaults to stdin if
not specified.</para></listitem>
</varlistentry>
<varlistentry>
@ -78,7 +79,8 @@
<option>--output</option> <replaceable>file</replaceable>,
<option>-o</option> <replaceable>file</replaceable>
</term>
<listitem><para>Any output will be sent to the specified file.</para></listitem>
<listitem><para>Any output will be sent to the specified file. Defaults
to stdout if not specified.</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -88,8 +88,8 @@ static const char *option_help[] = {
"Decipher operation",
"Selects the private key ID to use",
"Uses reader number <arg>",
"Selects the input file to use",
"Outputs to file <arg>",
"Selects the input file to use (defaults to stdin)",
"Outputs to file <arg> (defaults to stdout)",
"Format for ECDSA signature <arg>: 'rs' (default), 'sequence', 'openssl'",
"Outputs raw 8 bit data",
"Input file is a SHA-1 hash",
@ -157,13 +157,19 @@ static int read_input(u8 *buf, int buflen)
FILE *inf;
int c;
inf = fopen(opt_input, "rb");
if (inf == NULL) {
fprintf(stderr, "Unable to open '%s' for reading.\n", opt_input);
return -1;
if (opt_input==NULL) {
inf = stdin;
} else {
inf = fopen(opt_input, "rb");
if (inf == NULL) {
fprintf(stderr, "Unable to open '%s' for reading.\n", opt_input);
return -1;
}
}
c = fread(buf, 1, buflen, inf);
fclose(inf);
if (inf!=stdin) {
fclose(inf);
}
if (c < 0) {
perror("read");
return -1;
@ -203,8 +209,7 @@ static int sign(struct sc_pkcs15_object *obj)
int r, c, len;
if (opt_input == NULL) {
fprintf(stderr, "No input file specified.\n");
return 2;
fprintf(stderr, "No input file specified. Reading from stdin\n");
}
c = read_input(buf, sizeof(buf));
@ -258,8 +263,7 @@ static int decipher(struct sc_pkcs15_object *obj)
int r, c, len;
if (opt_input == NULL) {
fprintf(stderr, "No input file specified.\n");
return 2;
fprintf(stderr, "No input file specified. Reading from stdin\n");
}
c = read_input(buf, sizeof(buf));
if (c < 0)