Пример #1
0
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;
}
Пример #2
0
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;
}