static function getDH($message)
{
$dh_modulus = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_modulus');
$dh_gen = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_gen');
if ($dh_modulus === null && $dh_gen !== null || $dh_gen === null && $dh_modulus !== null) {
if ($dh_modulus === null) {
$missing = 'modulus';
} else {
$missing = 'generator';
}
return new Auth_OpenID_ServerError($message, 'If non-default modulus or generator is ' . 'supplied, both must be supplied. Missing ' . $missing);
}
$lib = Auth_OpenID_getMathLib();
if ($dh_modulus || $dh_gen) {
$dh_modulus = $lib->base64ToLong($dh_modulus);
$dh_gen = $lib->base64ToLong($dh_gen);
if ($lib->cmp($dh_modulus, 0) == 0 || $lib->cmp($dh_gen, 0) == 0) {
return new Auth_OpenID_ServerError($message, "Failed to parse dh_mod or dh_gen");
}
$dh = new Auth_OpenID_DiffieHellman($dh_modulus, $dh_gen);
} else {
$dh = new Auth_OpenID_DiffieHellman();
}
$consumer_pubkey = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_consumer_public');
if ($consumer_pubkey === null) {
return new Auth_OpenID_ServerError($message, 'Public key for DH-SHA1 session ' . 'not found in query');
}
$consumer_pubkey = $lib->base64ToLong($consumer_pubkey);
if ($consumer_pubkey === false) {
return new Auth_OpenID_ServerError($message, "dh_consumer_public is not base64");
}
return array($dh, $consumer_pubkey);
}