You may extract public key from CertificateImpl now.
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Tue, 1 Jul 2014 15:59:42 +0000 (17:59 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Fri, 12 Sep 2014 12:58:49 +0000 (14:58 +0200)
Change-Id: I3c0ed204e2622b0e8a6ca4be5c39f91d6c009def

src/manager/common/certificate-impl.cpp
src/manager/common/certificate-impl.h

index 56362d3..3e446ef 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <dpl/log/log.h>
 
+#include <generic-key.h>
 #include <certificate-impl.h>
 #include <base64.h>
 
@@ -125,6 +126,20 @@ bool CertificateImpl::empty() const {
     return m_x509 == NULL;
 }
 
+GenericKey::EvpShPtr CertificateImpl::getEvpShPtr() const {
+    return GenericKey::EvpShPtr(X509_get_pubkey(m_x509), EVP_PKEY_free);
+}
+
+GenericKey CertificateImpl::getGenericKey() const {
+    GenericKey::EvpShPtr evp(X509_get_pubkey(m_x509), EVP_PKEY_free);
+    if (EVP_PKEY_type(evp->type) == EVP_PKEY_RSA)
+        return GenericKey(evp, KeyType::KEY_RSA_PUBLIC);
+    if (EVP_PKEY_type(evp->type) == EVP_PKEY_EC)
+        return GenericKey(evp, KeyType::KEY_ECDSA_PUBLIC);
+    LogError("Unsupported key type in certificate.");
+    return GenericKey();
+}
+
 CertificateImpl::~CertificateImpl() {
     LogDebug("free cert start ptr: " << (void*)m_x509);
     X509_free(m_x509);
index ca182c3..d364056 100644 (file)
@@ -25,6 +25,8 @@
 #include <vector>
 #include <ckm/ckm-type.h>
 
+#include <generic-key.h>
+
 extern "C" {
 struct x509_st;
 typedef struct x509_st X509;
@@ -44,6 +46,9 @@ public:
     RawBuffer getDER() const;
     bool empty() const;
 
+    GenericKey::EvpShPtr getEvpShPtr() const;
+    GenericKey getGenericKey() const;
+
     X509* getX509() const;
 
     virtual ~CertificateImpl();