|
|
|
@ -66,6 +66,41 @@ bool crypto_keys_load_public( struct crypto_keys* keys, const char* filename )
|
|
|
|
|
|
|
|
|
|
return !!keys->pubkey;
|
|
|
|
|
}
|
|
|
|
|
void crypt_keys_generate( struct crypto_keys* keys )
|
|
|
|
|
{
|
|
|
|
|
if( keys->privkey ) {
|
|
|
|
|
EVP_PKEY_free( keys->privkey );
|
|
|
|
|
keys->privkey = NULL;
|
|
|
|
|
}
|
|
|
|
|
if( keys->pubkey ) {
|
|
|
|
|
EVP_PKEY_free( keys->pubkey );
|
|
|
|
|
keys->pubkey = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EVP_PKEY_CTX* pkey_context = EVP_PKEY_CTX_new_id( EVP_PKEY_RSA, NULL );
|
|
|
|
|
EVP_PKEY_keygen_init( pkey_context );
|
|
|
|
|
EVP_PKEY_CTX_set_rsa_keygen_bits( pkey_context, 2048 );
|
|
|
|
|
EVP_PKEY_keygen( pkey_context, &keys->privkey );
|
|
|
|
|
|
|
|
|
|
keys->pubkey = keys->privkey;
|
|
|
|
|
EVP_PKEY_up_ref(keys->pubkey);
|
|
|
|
|
}
|
|
|
|
|
void crypto_keys_save_public( struct crypto_keys* keys, const char* filename )
|
|
|
|
|
{
|
|
|
|
|
FILE* f = fopen( filename, "w");
|
|
|
|
|
if( !f ) { return; }
|
|
|
|
|
|
|
|
|
|
PEM_write_PUBKEY( f, keys->pubkey );
|
|
|
|
|
fclose(f);
|
|
|
|
|
}
|
|
|
|
|
void crypto_keys_save_private( struct crypto_keys* keys, const char* filename )
|
|
|
|
|
{
|
|
|
|
|
FILE* f = fopen( filename, "w");
|
|
|
|
|
if( !f ) { return; }
|
|
|
|
|
|
|
|
|
|
PEM_write_PrivateKey( f, keys->privkey, NULL, NULL, 0, NULL, NULL );
|
|
|
|
|
fclose(f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char* crypto_keys_sign( struct crypto_keys* keys, void* data, unsigned int size )
|
|
|
|
|
{
|
|
|
|
|