diff options
Diffstat (limited to 'src/gpg/GpgKey.cpp')
-rw-r--r-- | src/gpg/GpgKey.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/gpg/GpgKey.cpp b/src/gpg/GpgKey.cpp index 5d474327..c1116f24 100644 --- a/src/gpg/GpgKey.cpp +++ b/src/gpg/GpgKey.cpp @@ -23,3 +23,75 @@ */ #include "gpg/GpgKey.h" + +void GpgKey::parse(gpgme_key_t key) { + if(key != nullptr) { + good = true; + is_private_key = key->secret; + fpr = key->fpr; + protocol = key->protocol; + expired = (key->expired != 0u); + revoked = (key->revoked != 0u); + + disabled = key->disabled; + + can_authenticate = key->can_authenticate; + can_certify = key->can_certify; + can_encrypt = key->can_encrypt; + can_sign = key->can_sign; + + last_update = QDateTime(QDateTime::fromTime_t(key->last_update)); + + switch (key->owner_trust) { + case GPGME_VALIDITY_UNKNOWN: + owner_trust = "Unknown"; + break; + case GPGME_VALIDITY_UNDEFINED: + owner_trust = "Undefined"; + break; + case GPGME_VALIDITY_NEVER: + owner_trust = "Never"; + break; + case GPGME_VALIDITY_MARGINAL: + owner_trust = "Marginal"; + break; + case GPGME_VALIDITY_FULL: + owner_trust = "FULL"; + break; + case GPGME_VALIDITY_ULTIMATE: + owner_trust = "Ultimate"; + break; + } + + auto uid = key->uids; + + while(uid != nullptr) { + uids.push_back(UID(uid)); + uid = uid->next; + } + + + if (!uids.isEmpty()) { + name = uids.first().name; + email = uids.first().email; + comment = uids.first().comment; + } + + auto next = key->subkeys; + + while (next != nullptr) { + subKeys.push_back(GpgSubKey(next)); + next = next->next; + } + + if (!subKeys.isEmpty()) { + id = subKeys.first().id; + expires = subKeys.first().expires; + pubkey_algo = subKeys.first().pubkey_algo; + create_time = subKeys.first().timestamp; + length = subKeys.first().length; + } else { + id = ""; + } + } +} |