diff options
Diffstat (limited to '')
| -rw-r--r-- | lang/cpp/src/data.cpp | 24 | 
1 files changed, 24 insertions, 0 deletions
| diff --git a/lang/cpp/src/data.cpp b/lang/cpp/src/data.cpp index 2cb4fa88..32ca561b 100644 --- a/lang/cpp/src/data.cpp +++ b/lang/cpp/src/data.cpp @@ -25,6 +25,7 @@  #endif  #include "data_p.h" +#include "context_p.h"  #include <error.h>  #include <interfaces/dataprovider.h> @@ -230,3 +231,26 @@ off_t GpgME::Data::seek(off_t offset, int whence)  {      return gpgme_data_seek(d->data, offset, whence);  } + +std::vector<GpgME::Key> GpgME::Data::toKeys(Protocol proto) const +{ +    std::vector<GpgME::Key> ret; +    if (isNull()) { +        return ret; +    } +    auto ctx = GpgME::Context::createForProtocol(proto); +    if (!ctx) { +        return ret; +    } + +    if (gpgme_op_keylist_from_data_start (ctx->impl()->ctx, d->data, 0)) { +        return ret; +    } + +    gpgme_key_t key; +    while (!gpgme_op_keylist_next (ctx->impl()->ctx, &key)) { +        ret.push_back(GpgME::Key(key, false)); +    } +    delete ctx; +    return ret; +} | 
