* Author: Jeremy Filizetti <jfilizet@iu.edu>
*/
+#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
[SK_CRYPT_AES256_CTR] = "AES-256-CTR",
};
-char *sk_hmac2name[] = {
- [SK_HMAC_EMPTY] = "NONE",
- [SK_HMAC_SHA256] = "SHA256",
- [SK_HMAC_SHA512] = "SHA512",
-};
+const char *sk_hmac2name[] = { "NONE", "SHA256", "SHA512" };
static int sk_name2crypt(char *name)
{
return SK_CRYPT_INVALID;
}
-static int sk_name2hmac(char *name)
+enum cfs_crypto_hash_alg sk_name2hmac(char *name)
{
- int i;
+ enum cfs_crypto_hash_alg algo;
+ int i = 0;
- for (i = 0; i < SK_HMAC_MAX; i++) {
- if (strcasecmp(name, sk_hmac2name[i]) == 0)
- return i;
+ /* convert to lower case */
+ while (name[i]) {
+ putchar(tolower(name[i]));
+ i++;
}
- return SK_HMAC_INVALID;
+ if (strcmp(name, "none"))
+ return CFS_HASH_ALG_NULL;
+
+ algo = cfs_crypto_hash_alg(name);
+ if ((algo != CFS_HASH_ALG_SHA256) ||
+ (algo != CFS_HASH_ALG_SHA512))
+ return SK_HMAC_INVALID;
+
+ return algo;
}
static void usage(FILE *fp, char *program)
fprintf(fp, "-i|--hmac <num> Hash algorithm for integrity "
"(Default: SHA256)\n");
- for (i = 1; i < SK_HMAC_MAX; i++)
+ for (i = 1; i < sizeof(sk_hmac2name) / sizeof(sk_hmac2name[0]); i++)
fprintf(fp, " %s\n", sk_hmac2name[i]);
fprintf(fp, "-e|--expire <num> Seconds before contexts from "
printf(" client");
printf("\n");
printf("HMAC alg: %s\n", sk_hmac2name[config->skc_hmac_alg]);
- printf("Crypto alg: %s\n", sk_crypt2name[config->skc_crypt_alg]);
+ printf("Crypto alg: %s\n", cfs_crypto_hash_name(config->skc_hmac_alg));
printf("Ctx Expiration: %u seconds\n", config->skc_expire);
printf("Shared keylen: %u bits\n", config->skc_shared_keylen);
printf("Prime length: %u bits\n", config->skc_prime_bits);
char *tmp;
char *tmp2;
int crypt = SK_CRYPT_EMPTY;
- int hmac = SK_HMAC_EMPTY;
+ enum cfs_crypto_hash_alg hmac = CFS_HASH_ALG_NULL;
int expire = -1;
int shared_keylen = -1;
int prime_bits = -1;
bool generate_prime = false;
DH *dh;
- static struct option long_opt[] = {
- {"crypt", 1, 0, 'c'},
- {"data", 1, 0, 'd'},
- {"expire", 1, 0, 'e'},
- {"fsname", 1, 0, 'f'},
- {"mgsnids", 1, 0, 'g'},
- {"help", 0, 0, 'h'},
- {"hmac", 1, 0, 'i'},
- {"integrity", 1, 0, 'i'},
- {"key-bits", 1, 0, 'k'},
- {"shared", 1, 0, 'k'},
- {"load", 1, 0, 'l'},
- {"modify", 1, 0, 'm'},
- {"nodemap", 1, 0, 'n'},
- {"prime-bits", 1, 0, 'p'},
- {"read", 1, 0, 'r'},
- {"type", 1, 0, 't'},
- {"verbose", 0, 0, 'v'},
- {"write", 1, 0, 'w'},
- {0, 0, 0, 0},
- };
+ static struct option long_opts[] = {
+ { .name = "crypt", .has_arg = required_argument, .val = 'c'},
+ { .name = "data", .has_arg = required_argument, .val = 'd'},
+ { .name = "expire", .has_arg = required_argument, .val = 'e'},
+ { .name = "fsname", .has_arg = required_argument, .val = 'f'},
+ { .name = "mgsnids", .has_arg = required_argument, .val = 'g'},
+ { .name = "help", .has_arg = no_argument, .val = 'h'},
+ { .name = "hmac", .has_arg = required_argument, .val = 'i'},
+ { .name = "integrity", .has_arg = required_argument, .val = 'i'},
+ { .name = "key-bits", .has_arg = required_argument, .val = 'k'},
+ { .name = "shared", .has_arg = required_argument, .val = 'k'},
+ { .name = "load", .has_arg = required_argument, .val = 'l'},
+ { .name = "modify", .has_arg = required_argument, .val = 'm'},
+ { .name = "nodemap", .has_arg = required_argument, .val = 'n'},
+ { .name = "prime-bits", .has_arg = required_argument, .val = 'p'},
+ { .name = "read", .has_arg = required_argument, .val = 'r'},
+ { .name = "type", .has_arg = required_argument, .val = 't'},
+ { .name = "verbose", .has_arg = no_argument, .val = 'v'},
+ { .name = "write", .has_arg = required_argument, .val = 'w'},
+ { .name = NULL, } };
while ((opt = getopt_long(argc, argv,
- "c:d:e:f:g:hi:l:m:n:p:r:s:k:t:w:v", long_opt,
+ "c:d:e:f:g:hi:l:m:n:p:r:s:k:t:w:v", long_opts,
NULL)) != EOF) {
switch (opt) {
case 'c':
config->skc_shared_keylen = SK_DEFAULT_SK_KEYLEN;
config->skc_prime_bits = SK_DEFAULT_PRIME_BITS;
config->skc_crypt_alg = SK_CRYPT_AES256_CTR;
- config->skc_hmac_alg = SK_HMAC_SHA256;
+ config->skc_hmac_alg = CFS_HASH_ALG_SHA256;
for (i = 0; i < MAX_MGSNIDS; i++)
config->skc_mgsnids[i] = LNET_NID_ANY;
generate_prime = type & SK_TYPE_CLIENT;
strncpy(config->skc_nodemap, SK_DEFAULT_NODEMAP,
- strlen(SK_DEFAULT_NODEMAP));
+ sizeof(config->skc_nodemap) - 1);
if (!datafile)
datafile = "/dev/random";
if (crypt != SK_CRYPT_EMPTY)
config->skc_crypt_alg = crypt;
- if (hmac != SK_HMAC_EMPTY)
+ if (hmac != CFS_HASH_ALG_NULL)
config->skc_hmac_alg = hmac;
if (expire != -1)
config->skc_expire = expire;
if (prime_bits != -1)
config->skc_prime_bits = prime_bits;
if (fsname)
- strncpy(config->skc_fsname, fsname, strlen(fsname));
+ strncpy(config->skc_fsname, fsname,
+ sizeof(config->skc_fsname) - 1);
if (nodemap)
- strncpy(config->skc_nodemap, nodemap, strlen(nodemap));
+ strncpy(config->skc_nodemap, nodemap,
+ sizeof(config->skc_nodemap) - 1);
if (mgsnids && parse_mgsnids(mgsnids, config))
goto error;
if (sk_validate_config(config)) {