Move key structures to internal API header, expose getters
authorMateusz Kulikowski <m.kulikowski@samsung.com>
Fri, 8 Apr 2016 10:48:07 +0000 (12:48 +0200)
committerMateusz Kulikowski <m.kulikowski@samsung.com>
Fri, 8 Apr 2016 11:26:23 +0000 (13:26 +0200)
- Rename get_evp|simple_key to key_get_evp|simple and expose as internal API
- Move key structures to internal API header

Change-Id: I192d456b90043446e93b788fab5c9e5625dfd3f6
Signed-off-by: Mateusz Kulikowski <m.kulikowski@samsung.com>
src/internal.h
src/key.c

index 75d42c2..a1bc9a6 100644 (file)
@@ -55,6 +55,39 @@ struct yaca_key_s
        int (*get_key_length)(const struct yaca_key_s *key);
 };
 
+/**
+ * Internal type for:
+ * - YACA_KEY_TYPE_SYMMETRIC
+ * - YACA_KEY_TYPE_DES
+ * - YACA_KEY_TYPE_IV
+ */
+struct yaca_key_simple_s
+{
+       struct yaca_key_s key;
+
+       size_t bits;
+       char d[0];
+};
+
+/**
+ * Internal type for:
+ * - YACA_KEY_TYPE_RSA_PUB
+ * - YACA_KEY_TYPE_RSA_PRIV
+ * - YACA_KEY_TYPE_DSA_PUB
+ * - YACA_KEY_TYPE_DSA_PRIV
+ *
+ * TODO: and possibly others (for every key that uses EVP_PKEY)
+ */
+struct yaca_key_evp_s
+{
+       struct yaca_key_s key;
+
+       EVP_PKEY *evp;
+};
+
 int get_digest_algorithm(yaca_digest_algo_e algo, const EVP_MD **md);
 
+struct yaca_key_simple_s *key_get_simple(const yaca_key_h key);
+struct yaca_key_evp_s *key_get_evp(const yaca_key_h key);
+
 #endif
index b169bc3..9de4611 100644 (file)
--- a/src/key.c
+++ b/src/key.c
 
 #include "internal.h"
 
-/**
- * Internal type for:
- * - YACA_KEY_TYPE_SYMMETRIC
- * - YACA_KEY_TYPE_DES
- * - YACA_KEY_TYPE_IV
- */
-struct yaca_key_simple_s
+static inline void simple_key_sanity_check(const struct yaca_key_simple_s *key)
 {
-       struct yaca_key_s key;
-
-       size_t bits;
-       char d[0];
-};
-
-/**
- * Internal type for:
- * - YACA_KEY_TYPE_RSA_PUB
- * - YACA_KEY_TYPE_RSA_PRIV
- * - YACA_KEY_TYPE_DSA_PUB
- * - YACA_KEY_TYPE_DSA_PRIV
- *
- * TODO: and possibly others (for every key that uses EVP_PKEY)
- */
-struct yaca_key_evp_s
+       assert(key->bits);
+       assert(key->bits % 8 == 0);
+}
+
+// TODO: do we need a sanity check sanity for Evp keys?
+static inline void evp_key_sanity_check(const struct yaca_key_evp_s *key)
+{
+}
+
+// TODO: do we need this variant? or the two above are enough?
+static inline void key_sanity_check(const yaca_key_h key)
 {
-       struct yaca_key_s key;
+       const struct yaca_key_simple_s *simple_key = key_get_simple(key);
+       const struct yaca_key_evp_s *evp_key = key_get_evp(key);
 
-       EVP_PKEY *evp;
-};
+       if (simple_key != NULL)
+               simple_key_sanity_check(simple_key);
 
-static struct yaca_key_simple_s *get_simple_key(const yaca_key_h key)
+       if (evp_key != NULL)
+               evp_key_sanity_check(evp_key);
+}
+
+struct yaca_key_simple_s *key_get_simple(const yaca_key_h key)
 {
        if (key == YACA_KEY_NULL)
                return NULL;
@@ -80,7 +74,7 @@ static struct yaca_key_simple_s *get_simple_key(const yaca_key_h key)
        }
 }
 
-static struct yaca_key_evp_s *get_evp_key(const yaca_key_h key)
+struct yaca_key_evp_s *key_get_evp(const yaca_key_h key)
 {
        if (key == YACA_KEY_NULL)
                return NULL;
@@ -97,34 +91,10 @@ static struct yaca_key_evp_s *get_evp_key(const yaca_key_h key)
        }
 }
 
-static inline void simple_key_sanity_check(const struct yaca_key_simple_s *key)
-{
-       assert(key->bits);
-       assert(key->bits % 8 == 0);
-}
-
-// TODO: do we need a sanity check sanity for Evp keys?
-static inline void evp_key_sanity_check(const struct yaca_key_evp_s *key)
-{
-}
-
-// TODO: do we need this variant? or the two above are enough?
-static inline void key_sanity_check(const yaca_key_h key)
-{
-       const struct yaca_key_simple_s *simple_key = get_simple_key(key);
-       const struct yaca_key_evp_s *evp_key = get_evp_key(key);
-
-       if (simple_key != NULL)
-               simple_key_sanity_check(simple_key);
-
-       if (evp_key != NULL)
-               evp_key_sanity_check(evp_key);
-}
-
 API int yaca_key_get_length(const yaca_key_h key)
 {
-       const struct yaca_key_simple_s *simple_key = get_simple_key(key);
-       const struct yaca_key_evp_s *evp_key = get_evp_key(key);
+       const struct yaca_key_simple_s *simple_key = key_get_simple(key);
+       const struct yaca_key_evp_s *evp_key = key_get_evp(key);
 
        if (simple_key != NULL) {
                simple_key_sanity_check(simple_key);
@@ -186,8 +156,8 @@ API int yaca_key_export(const yaca_key_h key,
                        size_t *data_len)
 {
        size_t byte_len;
-       struct yaca_key_simple_s *simple_key = get_simple_key(key);
-       struct yaca_key_evp_s *evp_key = get_evp_key(key);
+       struct yaca_key_simple_s *simple_key = key_get_simple(key);
+       struct yaca_key_evp_s *evp_key = key_get_evp(key);
 
        if (data == NULL || data_len == NULL)
                return YACA_ERROR_INVALID_ARGUMENT;
@@ -379,8 +349,8 @@ free_prv:
 
 API void yaca_key_free(yaca_key_h key)
 {
-       struct yaca_key_simple_s *simple_key = get_simple_key(key);
-       struct yaca_key_evp_s *evp_key = get_evp_key(key);
+       struct yaca_key_simple_s *simple_key = key_get_simple(key);
+       struct yaca_key_evp_s *evp_key = key_get_evp(key);
 
        if (simple_key != NULL)
                yaca_free(simple_key);