diff options
author | Werner Koch <[email protected]> | 2025-02-26 12:09:05 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2025-02-26 13:11:20 +0000 |
commit | 0a64c7d0c6d0463cf2e06b3a01ef5be4d879bcf0 (patch) | |
tree | 56a7aa2ce0456a127edc3b85f812dbf487357d99 /src/engine-gpg.c | |
parent | Remove now unused functions. (diff) | |
download | gpgme-0a64c7d0c6d0463cf2e06b3a01ef5be4d879bcf0.tar.gz gpgme-0a64c7d0c6d0463cf2e06b3a01ef5be4d879bcf0.zip |
Add API gpgme_op_random_bytes.
* src/genrandom.c: New.
* src/Makefile.am: Add new file.
* src/engine-backend.h (struct engine_ops): Add func ptr getdirect.
Adjust all engine_ops.
* src/engine-gpg.c (gpg_getdirect): New.
(_gpgme_engine_ops_gpg): Connect new handler.
* src/gpgme.h.in (gpgme_random_mode_t): New.
(GPGME_RANDOM_MODE_NORMAL): New.
(GPGME_RANDOM_MODE_ZBASE32): New.
(gpgme_op_random_bytes): New public function
* src/libgpgme.vers: Add function.
* src/gpgme.def: Add function.
* tests/run-genrandom.c: New.
* tests/Makefile.am: Add new file.
--
This is a first take on this the mode parameter allows to extend the
function if ever needed. Due to the gpg calling and fd setup overhead
this function is not yet very fast but its purpose is to get
"approved" random bytes. We might eventually extend it to keep a
small internal cache of random numbers and get for example 128 random
bytes directly from gpg and deliver only the few required.
GnuPG-bug-id: 6694
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r-- | src/engine-gpg.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 0768ea74..66303263 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -4173,6 +4173,29 @@ gpg_setownertrust (void *engine, gpgme_key_t key, const char *value) } +static gpgme_error_t +gpg_getdirect (void *engine, const char *argv[], + gpgme_data_t dataout, unsigned int flags) +{ + engine_gpg_t gpg = engine; + gpgme_error_t err; + int i; + + if (!engine || !argv || !dataout || flags) + return gpg_error (GPG_ERR_INV_VALUE); + + for (i=0; !err && argv[i]; i++) + if ((err = add_arg (gpg, argv[i]))) + return err; + + err = add_data (gpg, dataout, 1, 1); + if (!err) + err = start (gpg); + + return err; +} + + struct engine_ops _gpgme_engine_ops_gpg = { @@ -4214,6 +4237,7 @@ struct engine_ops _gpgme_engine_ops_gpg = gpg_setexpire, gpg_setownertrust, NULL, /* opassuan_transact */ + gpg_getdirect, NULL, /* conf_load */ NULL, /* conf_save */ NULL, /* conf_dir */ |