Bug fixes for when certain options are disabled

pull/89/head
connerwolfssl 2018-03-12 13:53:50 -06:00
parent c830060820
commit 9a11636cb2
5 changed files with 69 additions and 24 deletions

View File

@ -6,7 +6,7 @@ This is the wolfSSL: Command Line Utility (wolfCLU).
To use this feature, please configure and install wolfssl with the following commands:
./configure --enable-pwdbased --enable-opensslextra && make && make check
./configure --enable-pwdbased --enable-opensslextra --enable-keygen && make && make check
If that succeeds, run:
@ -21,6 +21,8 @@ hexidecimal values.
`--enable-base64encode` enables Base64 encoding (not on by default)
`--enable-keygen` enables key generation (not on by default)
Additional features that can be included when configuring wolfssl for
encryption or decryption are:

View File

@ -116,7 +116,7 @@ int wolfCLU_decrypt(char* alg, char* mode, byte* pwdKey, byte* key, int size,
/* replicates old pwdKey if pwdKeys match */
if (keyType == 1) {
if (wc_PBKDF2(key, pwdKey, (int) strlen((const char*)pwdKey), salt,
SALT_SIZE, 4096, size, SHA256) != 0) {
SALT_SIZE, 4096, size, WC_SHA256) != 0) {
printf("pwdKey set error.\n");
wolfCLU_freeBins(input, output, NULL, NULL, NULL);
return ENCRYPT_ERROR;

View File

@ -159,8 +159,12 @@ int wolfCLU_genKey_ECC(RNG* rng, char* fName, int directive, int fmt,
char fExtPriv[6] = ".priv\0";
char fExtPub[6] = ".pub\0\0";
char* fOutNameBuf = NULL;
#ifdef NO_AES
size_t maxDerBufSz = 4 * keySz * keySz-42;
#else
size_t maxDerBufSz = 4 * keySz * AES_BLOCK_SIZE;
#endif
byte* derBuf = NULL;
int derBufSz = -1;
@ -299,7 +303,11 @@ int wolfCLU_genKey_RSA(RNG* rng, char* fName, int directive, int fmt, int
char fExtPub[6] = ".pub\0\0";
char* fOutNameBuf = NULL;
size_t maxDerBufSz = 5 * keySz * AES_BLOCK_SIZE;
#ifdef NO_AES
size_t maxDerBufSz = 4 * keySz * keySz-42;
#else
size_t maxDerBufSz = 4 * keySz * AES_BLOCK_SIZE;
#endif
byte* derBuf = NULL;
int derBufSz = -1;
@ -443,7 +451,7 @@ int wolfCLU_genKey_PWDBASED(RNG* rng, byte* pwdKey, int size, byte* salt, int pa
/* stretches pwdKey */
ret = (int) wc_PBKDF2(pwdKey, pwdKey, (int) strlen((const char*)pwdKey), salt, SALT_SIZE,
4096, size, SHA256);
4096, size, WC_SHA256);
if (ret != 0)
return ret;

View File

@ -100,27 +100,27 @@ int wolfCLU_hash(char* in, char* out, char* alg, int size)
}
#endif
#ifndef NO_SHA
else if (strcmp(alg, "sha") == 0) {
if (strcmp(alg, "sha") == 0) {
ret = wc_ShaHash(input, length, output);
}
#endif
#ifndef NO_SHA256
else if (strcmp(alg, "sha256") == 0) {
if (strcmp(alg, "sha256") == 0) {
ret = wc_Sha256Hash(input, length, output);
}
#endif
#ifdef WOLFSSL_SHA384
else if (strcmp(alg, "sha384") == 0) {
if (strcmp(alg, "sha384") == 0) {
ret = wc_Sha384Hash(input, length, output);
}
#endif
#ifdef WOLFSSL_SHA512
else if (strcmp(alg, "sha512") == 0) {
if (strcmp(alg, "sha512") == 0) {
ret = wc_Sha512Hash(input, length, output);
}
#endif
#ifdef HAVE_BLAKE2
else if (strcmp(alg, "blake2b") == 0) {
if (strcmp(alg, "blake2b") == 0) {
ret = wc_InitBlake2b(&hash, size);
if (ret != 0) return ret;
ret = wc_Blake2bUpdate(&hash, input, length);
@ -132,12 +132,12 @@ int wolfCLU_hash(char* in, char* out, char* alg, int size)
#ifndef NO_CODING
#ifdef WOLFSSL_BASE64_ENCODE
else if (strcmp(alg, "base64enc") == 0) {
if (strcmp(alg, "base64enc") == 0) {
ret = Base64_Encode(input, length, output, (word32*)&size);
outputAsHexString = 0;
}
#endif /* WOLFSSL_BASE64_ENCODE */
else if (strcmp(alg, "base64dec") == 0) {
if (strcmp(alg, "base64dec") == 0) {
ret = Base64_Decode(input, length, output, (word32*)&size);
outputAsHexString = 0;
}

View File

@ -79,8 +79,9 @@ void wolfCLU_verboseHelp()
/* hash options */
const char* algsenc[] = { /* list of acceptable algorithms */
"Algorihms:"
#ifndef NO_MD5
"md5"
,"md5"
#endif
#ifndef NO_SHA
,"sha"
@ -107,8 +108,9 @@ void wolfCLU_verboseHelp()
/* benchmark options */
const char* algsother[] = { /* list of acceptable algorithms */
"ALGS: "
#ifndef NO_AES
"aes-cbc"
, "aes-cbc"
#endif
#ifdef WOLFSSL_AES_COUNTER
, "aes-ctr"
@ -234,8 +236,9 @@ void wolfCLU_hashHelp()
printf("\n");
/* hash options */
const char* algsenc[] = { /* list of acceptable algorithms */
"Algorithms: "
#ifndef NO_MD5
"md5"
,"md5"
#endif
#ifndef NO_SHA
,"sha"
@ -280,8 +283,9 @@ void wolfCLU_benchHelp()
/* benchmark options */
const char* algsother[] = { /* list of acceptable algorithms */
"ALGS: "
#ifndef NO_AES
"aes-cbc"
, "aes-cbc"
#endif
#ifdef WOLFSSL_AES_COUNTER
, "aes-ctr"
@ -340,6 +344,24 @@ void wolfCLU_certHelp()
}
void wolfCLU_genKeyHelp() {
const char* keysother[] = { /* list of acceptable key types */
"KEYS: "
#ifdef HAVE_ED25519
,"ed25519"
#endif
#ifdef HAVE_ECC
,"ecc"
#endif
#ifdef HAVE_CURVE25519
,"curve25519"
#endif
};
printf("Available keys with current configure settings:\n");
for(i = 0; i < (int) sizeof(keysother)/(int) sizeof(keysother[0]); i++) {
printf("%s\n", keysother[i]);
}
printf("\n\n");
printf("***************************************************************\n");
printf("\ngenkey USAGE:\nwolfssl -genkey <keytype> -out <filename> -outform"
@ -364,8 +386,9 @@ int wolfCLU_getAlgo(char* name, char** alg, char** mode, int* size)
char* sz = 0; /* key size provided */
const char* acceptAlgs[] = { /* list of acceptable algorithms */
"ALGS: "
#ifndef NO_AES
"aes"
, "aes"
#endif
#ifndef NO_DES3
, "3des"
@ -406,38 +429,50 @@ int wolfCLU_getAlgo(char* name, char** alg, char** mode, int* size)
*size = atoi(sz);
/* checks key sizes for acceptability */
#ifndef NO_AES
if (strcmp(*alg, "aes") == 0) {
#ifdef NO_AES
printf("AES not compiled in.\n");
return NOT_COMPILED_IN;
#else
ret = AES_BLOCK_SIZE;
if (*size != 128 && *size != 192 && *size != 256) {
printf("Invalid AES pwdKey size. Should be: %d\n", ret);
ret = FATAL_ERROR;
}
#endif
}
#endif
#ifndef NO_DES3
else if (strcmp(*alg, "3des") == 0) {
#ifdef NO_DES3
printf("3DES not compiled in.\n");
return NOT_COMPILED_IN;
#else
ret = DES3_BLOCK_SIZE;
if (*size != 56 && *size != 112 && *size != 168) {
printf("Invalid 3DES pwdKey size\n");
ret = FATAL_ERROR;
}
#endif
}
#endif
#ifdef HAVE_CAMELLIA
else if (strcmp(*alg, "camellia") == 0) {
#ifndef HAVE_CAMELIA
printf("CAMELIA not compile in.\n");
return NOT_COMPILED_IN;
#else
ret = CAMELLIA_BLOCK_SIZE;
if (*size != 128 && *size != 192 && *size != 256) {
printf("Invalid Camellia pwdKey size\n");
ret = FATAL_ERROR;
}
#endif
}
#endif
else {
printf("Invalid algorithm: %s\n", *alg);
ret = FATAL_ERROR;
}
return ret;
}