diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-02-27 14:47:29 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-02-27 14:59:11 +0000 |
commit | e65e1123fcf918409bba94cf621fac172532769e (patch) | |
tree | 973d6283ecd911751f8dd8222088de1a41927351 /src/libserver | |
parent | 4545435a70e281bc30a5f3c3c649af42d4aad8ba (diff) | |
download | rspamd-e65e1123fcf918409bba94cf621fac172532769e.tar.gz rspamd-e65e1123fcf918409bba94cf621fac172532769e.zip |
[Minor] Understand full ed25519 private keys
Diffstat (limited to 'src/libserver')
-rw-r--r-- | src/libserver/dkim.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/libserver/dkim.c b/src/libserver/dkim.c index 2a66146ed..129d78c9c 100644 --- a/src/libserver/dkim.c +++ b/src/libserver/dkim.c @@ -2681,13 +2681,25 @@ rspamd_dkim_sign_key_load (const gchar *key, gsize len, key = tmp; } - if (type == RSPAMD_DKIM_KEY_RAW && len == 32) { - unsigned char pk[32]; - nkey->type = RSPAMD_DKIM_KEY_EDDSA; - nkey->key.key_eddsa = g_malloc ( - rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519)); - ed25519_seed_keypair (pk, nkey->key.key_eddsa, (char *)key); - nkey->keylen = rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519); + if (type == RSPAMD_DKIM_KEY_RAW && (len == 32 || + len == rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519))) { + if (len == 32) { + /* Seeded key, need scalarmult */ + unsigned char pk[32]; + nkey->type = RSPAMD_DKIM_KEY_EDDSA; + nkey->key.key_eddsa = g_malloc ( + rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519)); + ed25519_seed_keypair (pk, nkey->key.key_eddsa, (char *) key); + nkey->keylen = rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519); + } + else { + /* Full ed25519 key */ + unsigned klen = rspamd_cryptobox_sk_sig_bytes (RSPAMD_CRYPTOBOX_MODE_25519); + nkey->type = RSPAMD_DKIM_KEY_EDDSA; + nkey->key.key_eddsa = g_malloc (klen); + memcpy (nkey->key.key_eddsa, key, klen); + nkey->keylen = klen; + } } else { nkey->key_bio = BIO_new_mem_buf (key, len); |