Hi all! Solved the issue by using s.decode.base64t instead of s.decode.base64 ...
Thanks anyway! *Sérgio Charrua* On Fri, May 10, 2024 at 9:40 AM Sergio Charrua <sergio.char...@voip.pt> wrote: > Hi all! > > I have been dealing with STIR/SHAKEN for a few weeks now, and while doing > some tests I have found an issue which I can't find the reason for. > > The script has the following route logic: > > route[HANDLE_STIRSHAKEN] > { > > xlog("L_INFO", "HANDLE_STIRSHAKEN - STIR/SHAKEN Logic"); > > if ($hdrc(Identity) == 0 ){ > xlog("L_INFO", "HANDLE_STIRSHAKEN - No Identity Header -> Skipping > this logic"); > return; > } > > #Verify Call Identity > xlog("L_INFO", "HANDLE_STIRSHAKEN - Identity Header: $hdr(Identity)"); > $var(header_1)= $(hdr(Identity){s.select,0,.}); > $var(header_2)= $(hdr(Identity){s.select,1,.}); > xlog("L_INFO", "HANDLE_STIRSHAKEN - Encoded Header 1: $var(header_1)"); > xlog("L_INFO", "HANDLE_STIRSHAKEN - Encoded Header 2: $var(header_2)"); > xlog("L_INFO", "HANDLE_STIRSHAKEN - Decoded Header 1: > $(var(header_1){s.decode.base64})"); > xlog("L_INFO", "HANDLE_STIRSHAKEN - Decoded Header 2: > $(var(header_2){s.decode.base64})"); > > xlog("L_INFO", "HANDLE_STIRSHAKEN - Parsing!"); > $var(hdr_1_json_payload) = $(var(header_1){s.decode.base64}); # Header > 1 > xlog("L_INFO", "HANDLE_STIRSHAKEN - Parsed!"); > > xlog("L_INFO", "HANDLE_STIRSHAKEN - Header 1 payload = > $var(hdr_1_json_payload) "); > > $var(hdr_2_json_payload) = $(var(header_2){s.decode.base64}); # Header > 2 > jansson_get_field($var(hdr_2_json_payload), "attest", > "$var(attest_value)"); > jansson_get_field($var(hdr_2_json_payload), "ppt", "$var(ppt_value)"); > jansson_get_field($var(hdr_2_json_payload), "typ", "$var(typ_value)"); > jansson_get_field($var(hdr_2_json_payload), "x5u", "$var(x5u_value)"); > > xlog("L_INFO", "HANDLE_STIRSHAKEN - $var(attest_value) $var(ppt_value) > $var(typ_value) $var(x5u_value) "); > > } > > > All it does is parse the Identity header received on the initial INVITE, > decodes it (it is encoded in base64) and writes some JSON values on log. > Nothing serious.... > > As the Identity header is divided into multiple parts, separated by a ".", > I get the first 2 parts in 2 private variables, as per lines: > > $var(header_1)= $(hdr(Identity){s.select,0,.}); > $var(header_2)= $(hdr(Identity){s.select,1,.}); > > Logs show correctly that both variables are populated: > > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: HANDLE_STIRSHAKEN - Encoded Header 1: > eyJhbGciOiAiRVMyNTYiLCJwcHQiOiAic2hha2VuIiwidHlwIjogInBhc3Nwb3J0IiwieDV1IjogImh0dHBzOi8vY2VydGlmaWNh > dGVzLmNsZWFyaXAuY29tL2IxNWQ3Y2M5LTBmMjYtNDZjMi04M2VhLWEzZTYzYTgyZWMzYS83Y2M0ZGI2OTVkMTNlZGFkYTRkMWY5ODYxYjliODBmZS5jcnQifQ > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 230 > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: HANDLE_STIRSHAKEN - Encoded Header 2: > eyJhdHRlc3QiOiAiQSIsImRlc3QiOiB7InRuIjogWyIxNDA0NTI2NjA2MCJdfSwiaWF0IjogMTU0ODg1OTk4Miwib3JpZyI6IHsi > dG4iOiAiMTgwMDEyMzQ1NjcifSwib3JpZ2lkIjogIjNhNDdjYTIzLWQ3YWItNDQ2Yi04MjFkLTMzZDVkZWVkYmVkNCJ9 > > > However, when decoding both values: > > xlog("L_INFO", "HANDLE_STIRSHAKEN - Decoded Header 1: > $(var(header_1){s.decode.base64})"); > xlog("L_INFO", "HANDLE_STIRSHAKEN - Decoded Header 2: > $(var(header_2){s.decode.base64})"); > > only $var(header_2) gets decoded: > > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 38 > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: *HANDLE_STIRSHAKEN - Decoded Header 1:* > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 182 > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: *HANDLE_STIRSHAKEN - Decoded Header 2: > {"attest": "A","dest": {"tn": ["14045266060"]},"iat": 1548859982,"orig": > {"tn": "18001234567"},"origid": "3a47ca23-d7ab-446b-821d-33d5deedbed4"}* > > As you can veri > And to ease debugging, I have isolated the line that generates the issue: > > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: HANDLE_STIRSHAKEN - Parsing! > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > *May 10 09:09:42 kamailio1 kamailio[153201]: ERROR: {1 10 INVITE > 1-1966540@10.20.0.1 <1-1966540@10.20.0.1>} <core> [core/lvalue.c:351]: > lval_pvar_assign(): non existing right pvar* > *May 10 09:09:42 kamailio1 kamailio[153201]: ERROR: {1 10 INVITE > 1-1966540@10.20.0.1 <1-1966540@10.20.0.1>} <core> [core/lvalue.c:411]: > lval_assign(): assignment failed at pos: (21,32-21,64)* > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/parser/msg_parser.c:324]: > parse_headers(): flags=ffffffffffffffff > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 34 > May 10 09:09:42 kamailio1 kamailio[153201]: DEBUG: {1 10 INVITE > 1-1966540@10.20.0.1} <core> [core/pvapi.c:1418]: pv_printf_mode(): final > buffer length 27 > May 10 09:09:42 kamailio1 kamailio[153201]: INFO: {1 10 INVITE > 1-1966540@10.20.0.1} <script>: HANDLE_STIRSHAKEN - Parsed! > > Even though the $var(header_1) contains a base64 encoded string, the > decoder seems to fail. > If I copy the value contained in $var(header_1) to an online decoder like > https://www.base64decode.org/ the string gets decoded correctly. > > I have even modified the line : > > $var(header_1)= $(hdr(Identity){s.select,0,.}); > > to get the reverse index from the Identity string by doing > > $var(header_1)= $(hdr(Identity){s.select,-6,.}); > > It gets the same encoded string, same value (as expected), but the result > is the same: Kamailio's s.decode.base64 fails with the same error. > i'm not sure what > assignment failed at pos: (21,32-21,64) > could mean.... > > I don't think my code is wrong, as the same function is used on > $var(header_2) value and it works, but maybe someone can correct me. > > Greatly appreciate your help. > > Cheers, > > *Sérgio Charrua* > > > > > > >
__________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions To unsubscribe send an email to sr-users-le...@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: