diff options
| author | Iain Lane <iain.lane@canonical.com> | 2018-10-03 09:30:23 +0100 |
|---|---|---|
| committer | Iain Lane <iain.lane@canonical.com> | 2018-10-03 09:33:16 +0100 |
| commit | 898733d427e7b640bab0ea0fa578b3224102fde2 (patch) | |
| tree | 91c16e4d9d2c363858d1c9ea8a937e0f2c25373a /libnm-core/crypto.c | |
| parent | 9ba7891e6e49755ef4f3c9e3ef424a9ef06cf58c (diff) | |
| parent | eca0cfe89a2a7ec88abe9c03075160f46b338137 (diff) | |
Merge tag 'debian/1.12.4-1' into cosmic
network-manager Debian release 1.12.4-1
Diffstat (limited to 'libnm-core/crypto.c')
| -rw-r--r-- | libnm-core/crypto.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/libnm-core/crypto.c b/libnm-core/crypto.c index c4e48475..319f8055 100644 --- a/libnm-core/crypto.c +++ b/libnm-core/crypto.c @@ -158,7 +158,13 @@ parse_old_openssl_key_file (const guint8 *data, goto parse_error; } } else if (!strncmp (p, DEK_INFO_TAG, strlen (DEK_INFO_TAG))) { + static const char *const known_ciphers[] = { CIPHER_DES_EDE3_CBC, + CIPHER_DES_CBC, + CIPHER_AES_128_CBC, + CIPHER_AES_192_CBC, + CIPHER_AES_256_CBC }; char *comma; + guint i; if (enc_tags++ != 1 || str->len != 0) { g_set_error (error, NM_CRYPTO_ERROR, @@ -187,13 +193,13 @@ parse_old_openssl_key_file (const guint8 *data, iv = g_strdup (comma); /* Get the private key cipher */ - if (!strcasecmp (p, "DES-EDE3-CBC")) { - cipher = g_strdup (p); - } else if (!strcasecmp (p, "DES-CBC")) { - cipher = g_strdup (p); - } else if (!strcasecmp (p, "AES-128-CBC")) { - cipher = g_strdup (p); - } else { + for (i = 0; i < G_N_ELEMENTS (known_ciphers); i++) { + if (!g_ascii_strcasecmp (p, known_ciphers[i])) { + cipher = g_strdup (known_ciphers[i]); + break; + } + } + if (i == G_N_ELEMENTS (known_ciphers)) { g_set_error (error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_INVALID_DATA, _("Malformed PEM file: unknown private key cipher '%s'."), @@ -383,12 +389,16 @@ crypto_make_des_aes_key (const char *cipher, g_return_val_if_fail (password != NULL, NULL); g_return_val_if_fail (out_len != NULL, NULL); - if (!strcmp (cipher, "DES-EDE3-CBC")) + if (!strcmp (cipher, CIPHER_DES_EDE3_CBC)) digest_len = 24; - else if (!strcmp (cipher, "DES-CBC")) + else if (!strcmp (cipher, CIPHER_DES_CBC)) digest_len = 8; - else if (!strcmp (cipher, "AES-128-CBC")) + else if (!strcmp (cipher, CIPHER_AES_128_CBC)) digest_len = 16; + else if (!strcmp (cipher, CIPHER_AES_192_CBC)) + digest_len = 24; + else if (!strcmp (cipher, CIPHER_AES_256_CBC)) + digest_len = 32; else { g_set_error (error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_UNKNOWN_CIPHER, |