diff options
author | Martin Willi <martin@revosec.ch> | 2010-08-10 14:38:44 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2010-08-10 18:46:30 +0200 |
commit | 33ddaaabec136e358bf38a6aeb7855f466603007 (patch) | |
tree | 859a922eddbf0810e7e8917afdbde1a7a8de22b7 /src/libstrongswan/plugins | |
parent | 3547a9b87de314d31f88adb8a0098a885cdf7c5d (diff) | |
download | strongswan-33ddaaabec136e358bf38a6aeb7855f466603007.tar.bz2 strongswan-33ddaaabec136e358bf38a6aeb7855f466603007.tar.xz |
Added support for different encryption schemes to private/public keys
Diffstat (limited to 'src/libstrongswan/plugins')
12 files changed, 50 insertions, 16 deletions
diff --git a/src/libstrongswan/plugins/agent/agent_private_key.c b/src/libstrongswan/plugins/agent/agent_private_key.c index deef4d809..7fc840f8b 100644 --- a/src/libstrongswan/plugins/agent/agent_private_key.c +++ b/src/libstrongswan/plugins/agent/agent_private_key.c @@ -299,7 +299,8 @@ METHOD(private_key_t, get_type, key_type_t, } METHOD(private_key_t, decrypt, bool, - private_agent_private_key_t *this, chunk_t crypto, chunk_t *plain) + private_agent_private_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "private key decryption not supported by ssh-agent"); return FALSE; diff --git a/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_private_key.c b/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_private_key.c index d94700cf4..63002d2fe 100644 --- a/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_private_key.c +++ b/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_private_key.c @@ -226,13 +226,20 @@ METHOD(private_key_t, sign, bool, } METHOD(private_key_t, decrypt, bool, - private_gcrypt_rsa_private_key_t *this, chunk_t encrypted, chunk_t *plain) + private_gcrypt_rsa_private_key_t *this, encryption_scheme_t scheme, + chunk_t encrypted, chunk_t *plain) { gcry_error_t err; gcry_sexp_t in, out; chunk_t padded; u_char *pos = NULL;; + if (scheme != ENCRYPT_RSA_PKCS1) + { + DBG1(DBG_LIB, "encryption scheme %N not supported", + encryption_scheme_names, scheme); + return FALSE; + } err = gcry_sexp_build(&in, NULL, "(enc-val(flags)(rsa(a %b)))", encrypted.len, encrypted.ptr); if (err) diff --git a/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_public_key.c b/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_public_key.c index 4e557c743..7eae5949d 100644 --- a/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_public_key.c +++ b/src/libstrongswan/plugins/gcrypt/gcrypt_rsa_public_key.c @@ -193,11 +193,18 @@ METHOD(public_key_t, verify, bool, } METHOD(public_key_t, encrypt_, bool, - private_gcrypt_rsa_public_key_t *this, chunk_t plain, chunk_t *encrypted) + private_gcrypt_rsa_public_key_t *this, encryption_scheme_t scheme, + chunk_t plain, chunk_t *encrypted) { gcry_sexp_t in, out; gcry_error_t err; + if (scheme != ENCRYPT_RSA_PKCS1) + { + DBG1(DBG_LIB, "encryption scheme %N not supported", + encryption_scheme_names, scheme); + return FALSE; + } /* "pkcs1" uses PKCS 1.5 (section 8.1) block type 2 encryption: * 00 | 02 | RANDOM | 00 | DATA */ err = gcry_sexp_build(&in, NULL, "(data(flags pkcs1)(value %b))", diff --git a/src/libstrongswan/plugins/gmp/gmp_rsa_private_key.c b/src/libstrongswan/plugins/gmp/gmp_rsa_private_key.c index a07ace296..e21e7131d 100644 --- a/src/libstrongswan/plugins/gmp/gmp_rsa_private_key.c +++ b/src/libstrongswan/plugins/gmp/gmp_rsa_private_key.c @@ -314,11 +314,18 @@ METHOD(private_key_t, sign, bool, } METHOD(private_key_t, decrypt, bool, - private_gmp_rsa_private_key_t *this, chunk_t crypto, chunk_t *plain) + private_gmp_rsa_private_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { chunk_t em, stripped; bool success = FALSE; + if (scheme != ENCRYPT_RSA_PKCS1) + { + DBG1(DBG_LIB, "encryption scheme %N not supported", + encryption_scheme_names, scheme); + return FALSE; + } /* rsa decryption using PKCS#1 RSADP */ stripped = em = rsadp(this, crypto); diff --git a/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c b/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c index 369021a73..762238f49 100644 --- a/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c +++ b/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c @@ -309,20 +309,20 @@ METHOD(public_key_t, verify, bool, #define MIN_PS_PADDING 8 METHOD(public_key_t, encrypt_, bool, - private_gmp_rsa_public_key_t *this, chunk_t plain, chunk_t *crypto) + private_gmp_rsa_public_key_t *this, encryption_scheme_t scheme, + chunk_t plain, chunk_t *crypto) { chunk_t em; u_char *pos; int padding, i; rng_t *rng; - rng = lib->crypto->create_rng(lib->crypto, RNG_WEAK); - if (rng == NULL) + if (scheme != ENCRYPT_RSA_PKCS1) { - DBG1(DBG_LIB, "no random generator available"); + DBG1(DBG_LIB, "encryption scheme %N not supported", + encryption_scheme_names, scheme); return FALSE; } - /* number of pseudo-random padding octets */ padding = this->k - plain.len - 3; if (padding < MIN_PS_PADDING) @@ -331,6 +331,12 @@ METHOD(public_key_t, encrypt_, bool, MIN_PS_PADDING); return FALSE; } + rng = lib->crypto->create_rng(lib->crypto, RNG_WEAK); + if (rng == NULL) + { + DBG1(DBG_LIB, "no random generator available"); + return FALSE; + } /* padding according to PKCS#1 7.2.1 (RSAES-PKCS1-v1.5-ENCRYPT) */ DBG2(DBG_LIB, "padding %u bytes of data to the rsa modulus size of" diff --git a/src/libstrongswan/plugins/openssl/openssl_ec_private_key.c b/src/libstrongswan/plugins/openssl/openssl_ec_private_key.c index 1b5a24f22..ffd9ac62e 100644 --- a/src/libstrongswan/plugins/openssl/openssl_ec_private_key.c +++ b/src/libstrongswan/plugins/openssl/openssl_ec_private_key.c @@ -171,7 +171,8 @@ METHOD(private_key_t, sign, bool, } METHOD(private_key_t, decrypt, bool, - private_openssl_ec_private_key_t *this, chunk_t crypto, chunk_t *plain) + private_openssl_ec_private_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "EC private key decryption not implemented"); return FALSE; diff --git a/src/libstrongswan/plugins/openssl/openssl_ec_public_key.c b/src/libstrongswan/plugins/openssl/openssl_ec_public_key.c index 814e774d1..16257178d 100644 --- a/src/libstrongswan/plugins/openssl/openssl_ec_public_key.c +++ b/src/libstrongswan/plugins/openssl/openssl_ec_public_key.c @@ -169,7 +169,8 @@ METHOD(public_key_t, verify, bool, } METHOD(public_key_t, encrypt, bool, - private_openssl_ec_public_key_t *this, chunk_t crypto, chunk_t *plain) + private_openssl_ec_public_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "EC public key encryption not implemented"); return FALSE; diff --git a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c index 14bb25cbc..291acb0c3 100644 --- a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c +++ b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c @@ -166,7 +166,8 @@ METHOD(private_key_t, sign, bool, } METHOD(private_key_t, decrypt, bool, - private_openssl_rsa_private_key_t *this, chunk_t crypto, chunk_t *plain) + private_openssl_rsa_private_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "RSA private key decryption not implemented"); return FALSE; diff --git a/src/libstrongswan/plugins/openssl/openssl_rsa_public_key.c b/src/libstrongswan/plugins/openssl/openssl_rsa_public_key.c index 54701da1c..e3ce66db5 100644 --- a/src/libstrongswan/plugins/openssl/openssl_rsa_public_key.c +++ b/src/libstrongswan/plugins/openssl/openssl_rsa_public_key.c @@ -148,7 +148,8 @@ METHOD(public_key_t, verify, bool, } METHOD(public_key_t, encrypt, bool, - private_openssl_rsa_public_key_t *this, chunk_t crypto, chunk_t *plain) + private_openssl_rsa_public_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "RSA public key encryption not implemented"); return FALSE; diff --git a/src/libstrongswan/plugins/pgp/pgp_builder.c b/src/libstrongswan/plugins/pgp/pgp_builder.c index 84c9bfddd..440e70a18 100644 --- a/src/libstrongswan/plugins/pgp/pgp_builder.c +++ b/src/libstrongswan/plugins/pgp/pgp_builder.c @@ -129,7 +129,7 @@ static bool sign_not_allowed(private_key_t *this, signature_scheme_t scheme, /** * Implementation of private_key_t.decrypt for signature-only keys */ -static bool decrypt_not_allowed(private_key_t *this, +static bool decrypt_not_allowed(private_key_t *this, encryption_scheme_t scheme, chunk_t crypto, chunk_t *plain) { DBG1(DBG_LIB, "decryption failed - signature only key"); diff --git a/src/libstrongswan/plugins/pkcs11/pkcs11_private_key.c b/src/libstrongswan/plugins/pkcs11/pkcs11_private_key.c index 80c0f00d4..87ef89e00 100644 --- a/src/libstrongswan/plugins/pkcs11/pkcs11_private_key.c +++ b/src/libstrongswan/plugins/pkcs11/pkcs11_private_key.c @@ -193,7 +193,8 @@ METHOD(private_key_t, sign, bool, } METHOD(private_key_t, decrypt, bool, - private_pkcs11_private_key_t *this, chunk_t crypto, chunk_t *plain) + private_pkcs11_private_key_t *this, encryption_scheme_t scheme, + chunk_t crypto, chunk_t *plain) { return FALSE; } diff --git a/src/libstrongswan/plugins/pkcs11/pkcs11_public_key.c b/src/libstrongswan/plugins/pkcs11/pkcs11_public_key.c index e2677a542..468c2bb27 100644 --- a/src/libstrongswan/plugins/pkcs11/pkcs11_public_key.c +++ b/src/libstrongswan/plugins/pkcs11/pkcs11_public_key.c @@ -119,7 +119,8 @@ METHOD(public_key_t, verify, bool, } METHOD(public_key_t, encrypt, bool, - private_pkcs11_public_key_t *this, chunk_t plain, chunk_t *crypto) + private_pkcs11_public_key_t *this, encryption_scheme_t scheme, + chunk_t plain, chunk_t *crypto) { return FALSE; } |