From: Vsevolod Stakhov Date: Wed, 27 Feb 2019 14:47:29 +0000 (+0000) Subject: [Minor] Understand full ed25519 private keys X-Git-Tag: 1.9.0~74 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e65e1123fcf918409bba94cf621fac172532769e;p=thirdparty%2Frspamd.git [Minor] Understand full ed25519 private keys --- diff --git a/src/libserver/dkim.c b/src/libserver/dkim.c index 2a66146ed4..129d78c9c3 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);