Fix symmetric key handling in seal/open. 02/85102/7
authorDariusz Michaluk <d.michaluk@samsung.com>
Tue, 23 Aug 2016 15:13:27 +0000 (17:13 +0200)
committerDariusz Michaluk <d.michaluk@samsung.com>
Mon, 29 Aug 2016 14:48:32 +0000 (16:48 +0200)
- generate DES key if algorithm is DES,
- use sym_key_bit_len instead of default key length.

Change-Id: Iab6b16af5e60e932aee1d807cf1edc94c99cffbb

api/yaca/yaca_seal.h
src/seal.c

index 97f8544..ac7da5c 100755 (executable)
@@ -53,6 +53,8 @@ extern "C" {
  *
  * @remarks  The @a pub_key must be #YACA_KEY_TYPE_RSA_PUB
  *
+ * @remarks  The @a sym_key_bit_len must be at least 96 bits shorter than the @a pub_key bit length
+ *
  * @remarks  The @a sym_key should be released using yaca_key_destroy()
  *
  * @remarks  The @a iv should be released using yaca_key_destroy()
index 83094ce..f9b16a4 100644 (file)
 
 #include "internal.h"
 
-static int seal_generate_sym_key(const EVP_CIPHER *cipher, yaca_key_h *sym_key)
+static int seal_generate_sym_key(yaca_encrypt_algorithm_e algo,
+                                 size_t sym_key_bit_len,
+                                 yaca_key_h *sym_key)
 {
-       int ret;
-       int key_len;
-
        assert(sym_key != NULL);
-       assert(cipher != NULL);
-
-       ret = EVP_CIPHER_key_length(cipher);
-       if (ret <= 0) {
-               ret = YACA_ERROR_INTERNAL;
-               ERROR_DUMP(ret);
-               return ret;
-       }
-       key_len = ret;
 
-       return yaca_key_generate(YACA_KEY_TYPE_SYMMETRIC, key_len * 8, sym_key);
+       if (algo == YACA_ENCRYPT_3DES_3TDEA ||
+           algo == YACA_ENCRYPT_UNSAFE_3DES_2TDEA ||
+           algo == YACA_ENCRYPT_UNSAFE_DES)
+               return yaca_key_generate(YACA_KEY_TYPE_DES, sym_key_bit_len, sym_key);
+       else
+               return yaca_key_generate(YACA_KEY_TYPE_SYMMETRIC, sym_key_bit_len, sym_key);
 }
 
 static int seal_generate_iv(const EVP_CIPHER *cipher, yaca_key_h *iv)
@@ -127,8 +122,7 @@ static int seal_encrypt_decrypt_key(const yaca_key_h asym_key,
                                           lasym_key->evp);
 
        if (ret <= 0) {
-               ret = YACA_ERROR_INTERNAL;
-               ERROR_DUMP(ret);
+               ret = ERROR_HANDLE();
                goto exit;
        }
 
@@ -170,7 +164,7 @@ API int yaca_seal_initialize(yaca_context_h *ctx,
        if (ret != YACA_ERROR_NONE)
                goto exit;
 
-       ret = seal_generate_sym_key(cipher, &lsym_key);
+       ret = seal_generate_sym_key(algo, sym_key_bit_len, &lsym_key);
        if (ret != YACA_ERROR_NONE)
                goto exit;