--- channels/chan_iax2.c.orig 2021-05-06 15:34:57.000000000 +0000 +++ channels/chan_iax2.c 2021-05-18 21:58:44.689000238 +0000 @@ -8374,6 +8374,18 @@ res = 0; } } + + if (pvt && !ast_strlen_zero(secret)) { + struct MD5Context md5; + unsigned char digest[16]; + + MD5Init(&md5); + MD5Update(&md5, (unsigned char *) challenge, strlen(challenge)); + MD5Update(&md5, (unsigned char *) secret, strlen(secret)); + MD5Final(digest, &md5); + + build_encryption_keys(digest, pvt); + } } } /* Fall back */ @@ -10942,8 +10954,8 @@ } break; } - if (iaxs[fr->callno]->authmethods & IAX_AUTH_MD5) - merge_encryption(iaxs[fr->callno],ies.encmethods); + if (iaxs[fr->callno]->authmethods & (IAX_AUTH_MD5 | IAX_AUTH_RSA)) + merge_encryption(iaxs[fr->callno], ies.encmethods); else iaxs[fr->callno]->encmethods = 0; if (!authenticate_request(fr->callno) && iaxs[fr->callno])