def AuthenticationInformation(self, request, context): """ Adds a subscriber to the store """ start = time.clock_gettime(time.CLOCK_THREAD_CPUTIME_ID) start2 = time.clock_gettime(time.CLOCK_MONOTONIC) imsi = request.user_name aia = s6a_proxy_pb2.AuthenticationInformationAnswer() try: plmn = request.visited_plmn re_sync_info = request.resync_info #resync_info = # rand + auts, rand is of 16 bytes + auts is of 14 bytes sizeof_resync_info = 30 if re_sync_info and (re_sync_info != b'\x00' * sizeof_resync_info): rand = re_sync_info[:16] auts = re_sync_info[16:] self.lte_processor.resync_lte_auth_seq(imsi, rand, auts) rand, xres, autn, kasme = \ self.lte_processor.generate_lte_auth_vector(imsi, plmn) metrics.S6A_AUTH_SUCCESS_TOTAL.inc() # Generate and return response message aia.error_code = s6a_proxy_pb2.SUCCESS eutran_vector = aia.eutran_vectors.add() eutran_vector.rand = bytes(rand) eutran_vector.xres = xres eutran_vector.autn = autn eutran_vector.kasme = kasme end = time.clock_gettime(time.CLOCK_THREAD_CPUTIME_ID) end2 = time.clock_gettime(time.CLOCK_MONOTONIC) logging.warning('LTE authentication servicer spends: {} ms'.format( (end - start) * 1e3)) logging.warning('LTE authentication servicer takes: {} ms'.format( (end2 - start2) * 1e3)) return aia except CryptoError as e: logging.error("Auth error for %s: %s", imsi, e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_AUTHENTICATION_REJECTED).inc() aia.error_code = metrics.DIAMETER_AUTHENTICATION_REJECTED return aia except SubscriberNotFoundError as e: logging.warning("Subscriber not found: %s", e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_ERROR_USER_UNKNOWN).inc() aia.error_code = metrics.DIAMETER_ERROR_USER_UNKNOWN return aia
def AuthenticationInformation(self, request, context): print_grpc(request, self._print_grpc_payload, "AIR:") imsi = request.user_name aia = s6a_proxy_pb2.AuthenticationInformationAnswer() try: plmn = request.visited_plmn re_sync_info = request.resync_info # resync_info = # rand + auts, rand is of 16 bytes + auts is of 14 bytes sizeof_resync_info = 30 if re_sync_info and (re_sync_info != b'\x00' * sizeof_resync_info): rand = re_sync_info[:16] auts = re_sync_info[16:] self.lte_processor.resync_lte_auth_seq(imsi, rand, auts) rand, xres, autn, kasme = \ self.lte_processor.generate_lte_auth_vector(imsi, plmn) metrics.S6A_AUTH_SUCCESS_TOTAL.inc() # Generate and return response message aia.error_code = s6a_proxy_pb2.SUCCESS eutran_vector = aia.eutran_vectors.add() eutran_vector.rand = bytes(rand) eutran_vector.xres = xres eutran_vector.autn = autn eutran_vector.kasme = kasme logging.info("Auth success: %s", imsi) return aia except CryptoError as e: logging.error("Auth error for %s: %s", imsi, e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_AUTHENTICATION_REJECTED, ).inc() aia.error_code = metrics.DIAMETER_AUTHENTICATION_REJECTED return aia except SubscriberNotFoundError as e: logging.warning("Subscriber not found: %s", e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_ERROR_USER_UNKNOWN, ).inc() aia.error_code = metrics.DIAMETER_ERROR_USER_UNKNOWN return aia except ServiceNotActive as e: logging.error("Service not active for %s: %s", imsi, e) metrics.M5G_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_ERROR_UNAUTHORIZED_SERVICE, ).inc() aia.error_code = metrics.DIAMETER_ERROR_UNAUTHORIZED_SERVICE return aia finally: print_grpc(aia, self._print_grpc_payload, "AIA:")
def AuthenticationInformation(self, request, context): """ Adds a subscriber to the store """ imsi = request.user_name aia = s6a_proxy_pb2.AuthenticationInformationAnswer() # sign and send to brokerd # TODO: # process locally try: plmn = request.visited_plmn re_sync_info = request.resync_info #resync_info = # rand + auts, rand is of 16 bytes + auts is of 14 bytes sizeof_resync_info = 30 if re_sync_info and (re_sync_info != b'\x00' * sizeof_resync_info): rand = re_sync_info[:16] auts = re_sync_info[16:] self.lte_processor.resync_lte_auth_seq(imsi, rand, auts) rand, xres, autn, kasme = \ self.lte_processor.generate_lte_auth_vector(imsi, plmn) metrics.S6A_AUTH_SUCCESS_TOTAL.inc() # Generate and return response message aia.error_code = s6a_proxy_pb2.SUCCESS eutran_vector = aia.eutran_vectors.add() eutran_vector.rand = bytes(rand) eutran_vector.xres = xres eutran_vector.autn = autn eutran_vector.kasme = kasme logging.info("Auth success: %s", imsi) return aia except CryptoError as e: logging.error("Auth error for %s: %s", imsi, e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_AUTHENTICATION_REJECTED).inc() aia.error_code = metrics.DIAMETER_AUTHENTICATION_REJECTED return aia except SubscriberNotFoundError as e: logging.warning("Subscriber not found: %s", e) metrics.S6A_AUTH_FAILURE_TOTAL.labels( code=metrics.DIAMETER_ERROR_USER_UNKNOWN).inc() aia.error_code = metrics.DIAMETER_ERROR_USER_UNKNOWN return aia