summaryrefslogtreecommitdiffabout
path: root/lib
authorMichael Krelin <hacker@klever.net>2008-01-23 21:13:27 (UTC)
committer Michael Krelin <hacker@klever.net>2008-01-23 21:13:27 (UTC)
commitdc5dad0709ae8dd0a4be74248a22a78e47ba90e2 (patch) (side-by-side diff)
treeeebd2a18bec33c4250036e1fd92d38cd4268777e /lib
parent2a116bce75236e46946bb9564790c26c6a59b9a4 (diff)
downloadlibopkele-dc5dad0709ae8dd0a4be74248a22a78e47ba90e2.zip
libopkele-dc5dad0709ae8dd0a4be74248a22a78e47ba90e2.tar.gz
libopkele-dc5dad0709ae8dd0a4be74248a22a78e47ba90e2.tar.bz2
check associate reply for consistency
Reject associate replies returning secret of inconsistent with association type length. This way severely broken OPs which return SHA1 association as SHA256 will still work in dumb mode. Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'lib') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/basic_rp.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/basic_rp.cc b/lib/basic_rp.cc
index 763a391..2da8416 100644
--- a/lib/basic_rp.cc
+++ b/lib/basic_rp.cc
@@ -15,3 +15,4 @@ namespace opkele {
util::dh_t& dh,
- size_t d_len, unsigned char *(*d_fun)(const unsigned char*,size_t,unsigned char*) ) try {
+ size_t d_len, unsigned char *(*d_fun)(const unsigned char*,size_t,unsigned char*),
+ size_t exp_s_len) try {
if(om.get_field("assoc_type")!=exp_assoc || om.get_field("session_type")!=exp_sess)
@@ -28,2 +29,4 @@ namespace opkele {
secret.enxor_from_base64((*d_fun)(ckptr,cklen,key_digest),om.get_field("enc_mac_key"));
+ if(secret.size()!=exp_s_len)
+ throw bad_input(OPKELE_CP_ "Secret length isn't consistent with association type");
}catch(opkele::failed_lookup& ofl) {
@@ -75,3 +78,3 @@ namespace opkele {
"HMAC-SHA256", "DH-SHA256",
- dh, SHA256_DIGEST_LENGTH, SHA256 );
+ dh, SHA256_DIGEST_LENGTH, SHA256, SHA256_DIGEST_LENGTH );
expires_in = util::string_to_long(res.get_field("expires_in"));
@@ -84,3 +87,3 @@ namespace opkele {
"HMAC-SHA1", "DH-SHA1",
- dh, SHA_DIGEST_LENGTH, SHA1 );
+ dh, SHA_DIGEST_LENGTH, SHA1, SHA_DIGEST_LENGTH );
expires_in = util::string_to_long(res.get_field("expires_in"));