Move MODP_CUSTOM va_arg fetching out of loop
It seems problematic at least on PPC with gcc 4.3, fixes #208.
This commit is contained in:
@@ -359,29 +359,25 @@ METHOD(crypto_factory_t, create_dh, diffie_hellman_t*,
|
|||||||
{
|
{
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
entry_t *entry;
|
entry_t *entry;
|
||||||
|
va_list args;
|
||||||
|
chunk_t g, p;
|
||||||
diffie_hellman_t *diffie_hellman = NULL;
|
diffie_hellman_t *diffie_hellman = NULL;
|
||||||
|
|
||||||
|
if (group == MODP_CUSTOM)
|
||||||
|
{
|
||||||
|
va_start(args, group);
|
||||||
|
g = va_arg(args, chunk_t);
|
||||||
|
p = va_arg(args, chunk_t);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
this->lock->read_lock(this->lock);
|
this->lock->read_lock(this->lock);
|
||||||
enumerator = this->dhs->create_enumerator(this->dhs);
|
enumerator = this->dhs->create_enumerator(this->dhs);
|
||||||
while (enumerator->enumerate(enumerator, &entry))
|
while (enumerator->enumerate(enumerator, &entry))
|
||||||
{
|
{
|
||||||
if (entry->algo == group)
|
if (entry->algo == group)
|
||||||
{
|
{
|
||||||
if (group == MODP_CUSTOM)
|
diffie_hellman = entry->create_dh(group, g, p);
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
chunk_t g, p;
|
|
||||||
|
|
||||||
va_start(args, group);
|
|
||||||
g = va_arg(args, chunk_t);
|
|
||||||
p = va_arg(args, chunk_t);
|
|
||||||
va_end(args);
|
|
||||||
diffie_hellman = entry->create_dh(MODP_CUSTOM, g, p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
diffie_hellman = entry->create_dh(group);
|
|
||||||
}
|
|
||||||
if (diffie_hellman)
|
if (diffie_hellman)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user