diff options
author | Krzysztof Kwiatkowski <[email protected]> | 2017-06-10 16:01:20 +0100 |
---|---|---|
committer | Krzysztof Kwiatkowski <[email protected]> | 2017-06-10 16:01:20 +0100 |
commit | 904cd4fe1ce7f88873891e5cb8a0ed32cec8925b (patch) | |
tree | b40716cc29354d5bc4e580c8825196692c2eab76 /src/lib | |
parent | ee16e9d29b6eba5c528dfe4e092cbd8e5c465aa9 (diff) |
FFI: Posibility to load EC privkey
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/ffi/ffi.cpp | 24 | ||||
-rw-r--r-- | src/lib/ffi/ffi.h | 7 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/lib/ffi/ffi.cpp b/src/lib/ffi/ffi.cpp index d7f164b86..3803e5dd6 100644 --- a/src/lib/ffi/ffi.cpp +++ b/src/lib/ffi/ffi.cpp @@ -1699,6 +1699,30 @@ int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, #endif } +int botan_privkey_load_ec(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name) + { +#if defined(BOTAN_HAS_ECDSA) + *key = nullptr; + try + { + Botan::Null_RNG null_rng; + Botan::EC_Group grp(curve_name); + *key = new botan_privkey_struct(new Botan::ECDSA_PrivateKey(null_rng, grp, safe_get(scalar))); + return 0; + } + catch(std::exception& e) + { + log_exception(BOTAN_CURRENT_FUNCTION, e.what()); + } + return -1; +#else + BOTAN_UNUSED(key, scalar, scalar_len, curve_name); + return BOTAN_FFI_ERROR_NOT_IMPLEMENTED; +#endif + } + int botan_pubkey_get_field(botan_mp_t output, botan_pubkey_t key, const char* field_name_cstr) diff --git a/src/lib/ffi/ffi.h b/src/lib/ffi/ffi.h index 3e64c69cd..206b749b2 100644 --- a/src/lib/ffi/ffi.h +++ b/src/lib/ffi/ffi.h @@ -862,6 +862,13 @@ BOTAN_DLL int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, uint8_t pubkey[32]); /* +* Algorithm specific key operations: ECDSA and ECDH +*/ +BOTAN_DLL int botan_privkey_load_ec(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name); + +/* * Public Key Encryption */ typedef struct botan_pk_op_encrypt_struct* botan_pk_op_encrypt_t; |