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: 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: If that succeeds, run:
@ -21,6 +21,8 @@ hexidecimal values.
`--enable-base64encode` enables Base64 encoding (not on by default) `--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 Additional features that can be included when configuring wolfssl for
encryption or decryption are: 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 */ /* replicates old pwdKey if pwdKeys match */
if (keyType == 1) { if (keyType == 1) {
if (wc_PBKDF2(key, pwdKey, (int) strlen((const char*)pwdKey), salt, 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"); printf("pwdKey set error.\n");
wolfCLU_freeBins(input, output, NULL, NULL, NULL); wolfCLU_freeBins(input, output, NULL, NULL, NULL);
return ENCRYPT_ERROR; 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 fExtPriv[6] = ".priv\0";
char fExtPub[6] = ".pub\0\0"; char fExtPub[6] = ".pub\0\0";
char* fOutNameBuf = NULL; char* fOutNameBuf = NULL;
#ifdef NO_AES
size_t maxDerBufSz = 4 * keySz * keySz-42;
#else
size_t maxDerBufSz = 4 * keySz * AES_BLOCK_SIZE; size_t maxDerBufSz = 4 * keySz * AES_BLOCK_SIZE;
#endif
byte* derBuf = NULL; byte* derBuf = NULL;
int derBufSz = -1; 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 fExtPub[6] = ".pub\0\0";
char* fOutNameBuf = NULL; 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; byte* derBuf = NULL;
int derBufSz = -1; int derBufSz = -1;
@ -443,7 +451,7 @@ int wolfCLU_genKey_PWDBASED(RNG* rng, byte* pwdKey, int size, byte* salt, int pa
/* stretches pwdKey */ /* stretches pwdKey */
ret = (int) wc_PBKDF2(pwdKey, pwdKey, (int) strlen((const char*)pwdKey), salt, SALT_SIZE, ret = (int) wc_PBKDF2(pwdKey, pwdKey, (int) strlen((const char*)pwdKey), salt, SALT_SIZE,
4096, size, SHA256); 4096, size, WC_SHA256);
if (ret != 0) if (ret != 0)
return ret; return ret;

View File

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

View File

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