Pem to Der implemented, test case added

pull/32/head
kaleb-himes 2016-11-25 14:20:08 -07:00
parent 8f1b696c53
commit efcfa2f014
3 changed files with 74 additions and 14 deletions

View File

@ -2,5 +2,7 @@ enum {
USER_INPUT_ERROR = -1001,
INPUT_FILE_ERROR = -1002,
PEM_TO_DER_ERROR = -1003, /* converting pem to der failed */
DER_TO_PEM_ERROR = -1004, /* converting der to pem failed */
};

View File

@ -21,6 +21,7 @@
#include <stdio.h>
#include <wolfssl/wolfcrypt/asn_public.h>
#include <wolfssl/ssl.h> /* wolfSSL_CertPemToDer */
#include "clu_include/clu_header_main.h"
#include "clu_include/clu_error_codes.h"
#include "clu_include/x509/clu_parse.h"
@ -68,8 +69,18 @@ int wolfCLU_parse_file(char* infile, int inform, char* outfile, int outform)
byte* inBuf = NULL;
byte* outBuf = NULL;
if (infile == NULL || outfile == NULL)
return BAD_FUNC_ARG;
/* MALLOC buffer for the certificate to be processed */
inBuf = (byte*) XMALLOC(MAX_CERT_SIZE, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (inBuf == NULL) return MEMORY_E;
XMEMSET(inBuf, 0, MAX_CERT_SIZE);
instream = fopen(infile, "rb");
outstream = fopen(outfile, "wb");
/*----------------------------------------------------------------------------*/
/* read in der, output der */
/*----------------------------------------------------------------------------*/
@ -80,22 +91,20 @@ int wolfCLU_parse_file(char* infile, int inform, char* outfile, int outform)
/* read in der, output pem */
/*----------------------------------------------------------------------------*/
else if ( (inform && !outform) ) {
/* MALLOC buffer for the certificate to be processed */
inBuf = (byte*) XMALLOC(MAX_CERT_SIZE, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (inBuf == NULL) return MEMORY_E;
XMEMSET(inBuf, 0, MAX_CERT_SIZE);
/* read in the certificate to be processed */
inBufSz = fread(inBuf, 1, MAX_CERT_SIZE, instream);
if (inBufSz <= 0) return FREAD_ERROR;
if (inBufSz <= 0) {
ret = FREAD_ERROR;
goto clu_parse_cleanup;
}
/* MALLOC buffer for the result of conversion from der to pem */
outBuf = (byte*) XMALLOC(MAX_CERT_SIZE, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (outBuf == NULL) {
XFREE(inBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
return MEMORY_E;
ret = MEMORY_E;
goto clu_parse_cleanup;
}
XMEMSET(outBuf, 0, MAX_CERT_SIZE);
@ -104,17 +113,61 @@ int wolfCLU_parse_file(char* infile, int inform, char* outfile, int outform)
CERT_TYPE);
if (outBufSz < 0) {
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
return DER_TO_PEM_ERROR;
ret = DER_TO_PEM_ERROR;
goto clu_parse_cleanup;
}
/* write the result of conversion to the outfile specified */
ret = fwrite(outBuf, 1, outBufSz, outstream);
}
if (ret <= 0) {
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
ret = FWRITE_ERROR;
goto clu_parse_cleanup;
}
/* success cleanup */
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
}
/*----------------------------------------------------------------------------*/
/* read in pem, output der */
/*----------------------------------------------------------------------------*/
else if ( (!inform && outform) ) {
printf("in parse: in = pem, out = der\n");
inBufSz = fread(inBuf, 1, MAX_CERT_SIZE, instream);
if (inBufSz <= 0) {
ret = FREAD_ERROR;
goto clu_parse_cleanup;
}
/* MALLOC buffer for the result of converstion from pem to der */
outBuf = (byte*) XMALLOC(MAX_CERT_SIZE, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (outBuf == NULL) {
XFREE(inBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
ret = MEMORY_E;
goto clu_parse_cleanup;
}
XMEMSET(outBuf, 0, MAX_CERT_SIZE);
/* convert inBuf from pem to der, store result in outBuf */
outBufSz = wolfSSL_CertPemToDer(inBuf, inBufSz, outBuf, MAX_CERT_SIZE,
CERT_TYPE);
if (outBufSz < 0) {
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
ret = PEM_TO_DER_ERROR;
goto clu_parse_cleanup;
}
/* write the result of conversion to the outfile specified */
ret = fwrite(outBuf, 1, outBufSz, outstream);
if (ret <= 0) {
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
ret = FWRITE_ERROR;
goto clu_parse_cleanup;
}
/* success cleanup */
wolfsslFreeBins(inBuf, outBuf, NULL, NULL, NULL);
}
/*----------------------------------------------------------------------------*/
/* read in pem, output pem */
@ -123,9 +176,11 @@ int wolfCLU_parse_file(char* infile, int inform, char* outfile, int outform)
printf("in parse: in = pem, out = pem\n");
}
ret = 0;
clu_parse_cleanup:
fclose(outstream);
fclose(instream);
ret = 0;
return ret;
}

View File

@ -92,16 +92,19 @@ function run3() {
cert_test_case "-inform der -in testing-certs/ca-cert.der -outform pem -out tmp.pem" \
testing-certs/ca-cert.pem tmp.pem
echo "TEST 3.b"
test_case "-inform pem -in ca-cert.pem -outform der -out out.txt"
cert_test_case "-inform pem -outform der -in testing-certs/ca-cert.pem -out tmp.der" \
testing-certs/ca-cert.der tmp.der
# test_case "-inform pem -in ca-cert.pem -outform der -out out.txt"
echo "TEST 3.c"
test_case "-inform der -in ca-cert.pem -outform der -out out.txt"
echo "TEST 3.d"
test_case "-inform pem -in ca-cert.pem -outform pem -out out.txt"
}
run1
run2
#run1
#run2
run3
rm out.txt
rm tmp.pem
rm tmp.der