summaryrefslogtreecommitdiffabout
path: root/lib
Side-by-side diff
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
@@ -14,5 +14,6 @@ namespace opkele {
const char *exp_assoc, const char *exp_sess,
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)
throw bad_input(OPKELE_CP_ "Unexpected associate response");
@@ -27,4 +28,6 @@ namespace opkele {
unsigned char key_digest[d_len];
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) {
throw bad_input(OPKELE_CP_ "Incoherent response from OP");
@@ -74,5 +77,5 @@ namespace opkele {
dh_get_secret( secret, res,
"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"));
}catch(exception& e) {
@@ -83,5 +86,5 @@ namespace opkele {
dh_get_secret( secret, res,
"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"));
}catch(bad_input& e) {