kaa_error_t kaa_init_rsa_keypair(void) { #ifdef KAA_RUNTIME_KEY_GENERATION /* Initialization should be performed only once */ static bool initialized = false; if (!initialized) { if (mbedtls_pk_parse_keyfile(&kaa_pk_context_, KAA_PRIVATE_KEY_STORAGE, NULL)) { if (rsa_genkey(&kaa_pk_context_)) { mbedtls_pk_free(&kaa_pk_context_); return KAA_ERR_BADDATA; } if (write_rsa_key(&kaa_pk_context_, KAA_PRIVATE_KEY_STORAGE, PRIVATE_KEY)) { mbedtls_pk_free(&kaa_pk_context_); return KAA_ERR_BADDATA; } if (write_rsa_key(&kaa_pk_context_, KAA_PUBLIC_KEY_STORAGE, PUBLIC_KEY)) { mbedtls_pk_free(&kaa_pk_context_); return KAA_ERR_BADDATA; } } if (mbedtls_pk_parse_public_keyfile(&pk_pub_context, KAA_PUBLIC_KEY_STORAGE)) { pk_pub_context = kaa_pk_context_; } initialized = true; } #else if (mbedtls_pk_parse_key(&kaa_pk_context_, KAA_RSA_PRIVATE_KEY, KAA_RSA_PRIVATE_KEY_LENGTH, NULL, 0)) { return KAA_ERR_BADDATA; } #endif /* KAA_RUNTIME_KEY_GENERATION */ return KAA_ERR_NONE; }
int main(int argc, char *argv[]) { rsa_pub pub; rsa_priv key; int do_seed = 1; int MODULUS_BITS = 2048; ZZ E; E = 65537; char *filein = NULL; char *filename = "/dev/fd/1"; // stdout int c; while((c = getopt(argc, argv, "e:n:so:i:h")) != EOF) switch (c) { case 'e': E = atoi(optarg); break; case 'n': MODULUS_BITS = atoi(optarg); break; case 's': do_seed = 0; break; case 'i': filein = optarg; break; case 'o': filename = optarg; break; case 'h': usage(); exit(0); } if (do_seed) seed(); if (filein) read_rsa_key(filein, pub, key, MODULUS_BITS); else make_rsa_key(pub, key, MODULUS_BITS, E); write_rsa_key(filename, pub, key, MODULUS_BITS); return 0; }