Tuesday, August 16, 2022

OSS CAGL for Data Analysis

Data Analysis is the process of inspecting, cleansing, transforming, and modeling data with the goal of discovering useful information, forming conclusions, and supporting decision-making. The main purpose of data analytics is to apply statistical analysis and technologies on data to find trends and solve problems. Data analytics has become increasingly important in the enterprise as a means of shaping business processes and improving business results.

There is valuable information available in ASN.1 binary encoded data, whether Call Detail Records (CDR), Radio Resource Control information (RRC), and  Location services information (LCS), etc. used in telecommunications, or Basic Safety Messages (BSM), and  Signal Phase and Timing (SPaT) messages used  in intelligent transportation systems. There is a need to convert these binary messages to a human readable format, e.g. XML, JSON, or CSV. OSS CAGL (Compile-And-Go Library) enables you to perform these conversions dynamically.


Using CAGL an add-on to the OSS ASN.1 Tools for C, you can write a few lines of code to dynamically parse the ASN.1 schema of your binary messages and convert those messages to XML, JSON or CSV. Once the data is transformed into one of these text formats, data analysis tools can be used to examine the converted data in order to gather valuable information to drive your business decisions.


An application, using CAGL, can be used for any ASN.1 schema and messages, i.e. you can change the schema on the fly. You don’t have to rebuild your application to support new schemas. You can easily implement various applications that must work with multiple schemas at runtime, such as protocol analyzers. The CAGL parsing model is analogous to that of DOM, in that it allows you to parse ASN.1 modules and then use the result to immediately parse either XML documents or PER, OER, COER, BER, CER, DER and JSON messages, and convert between these as you wish.


You can review CAGL’s documentation for more information. For a free trial, please contact OSS Nokalva sales department at info@oss.com.


Friday, November 5, 2021

ASN.1 Value Notation Support in the Time-Optimized Runtime

OSS ASN.1 tools now support an ASN.1 value notation feature. The representation structures/objects can be encoded into value notation format and those values can then be decoded to the representation structures/classes. 

This feature is very useful for testing your application. The test messages can be kept in a human readable value notation format. You can parse the value notation into the representation structures/objects, serialize representation structures/objects into value notation format, and convert them to any ASN.1 binary (e.g. BER, PER, OER), JSON, or XML encoding format. It is also important to note that even though ASN.1 value notation is human readable, it is less verbose than XML and JSON, and thus more suitable for creating test messages.

The feature is also useful for creating eUICC profiles. The user can create the profile in value notation format and then use the OSS ASN.1 encoder to convert it to DER format. 

The sample messages in the standards are usually in value notation format. Such messages can be easily checked, modified, and converted to any standard ASN.1 encoding format. 

The feature is currently available in the time-optimized runtime of the OSS ASN.1 C, C++, Java, and C# tools. You can find details of the feature in the online documentation. A free evaluation is available here. If you have questions about value notation support in the OSS ASN.1 tools, please contact technical support at support@oss.com.

Tuesday, August 17, 2021

Using OSS ASN.1/Java Tools with Kotlin

Overview

Kotlin was designed so that it interoperates seamlessly with Java. Kotlin code can directly call any existing Java code without making any changes to it. This allows the OSS ASN.1 Tools for Java to easily be used with an application written in Kotlin.


Users of the OSS ASN.1/Java Tools typically deal with the following tasks:

1. Work with the API of Java classes generated for an ASN.1 schema. Use constructors, getters, and setters to create, examine, or modify objects that represent messages and their components.

2. Work with the API of ASN.1/Java coding services to serialize or deserialize objects that represent messages to or from encodings.


Using generated Java classes in a Kotlin application

A Kotlin application can invoke the constructors defined in generated Java classes as is, while getters and setters are mapped to Kotlin properties.


For example, this VehicleIdentification Java class


public class VehicleIdentification extends Sequence {

    public VehicleIdentification();

    public VehicleIdentification(WMInumber wMInumber, VDS vDS);

    public WMInumber getWMInumber();

    public void setWMInumber(WMInumber wMInumber);

    public boolean hasWMInumber();

    public void deleteWMInumber();

    public VDS getVDS();

    public void setVDS(VDS vDS);

    public boolean hasVDS();

    public void deleteVDS();

}


represents the VehicleIdentification component of the DENM message from the CAM/DENM ASN.1 Schema. Kotlin will map the following getters and setters of the Java class


     public WMInumber getWMInumber();

    public void setWMInumber(WMInumber wMInumber);

    public VDS getVDS();

    public void setVDS(VDS vDS);


to the "wmInumber" and "vds" Kotlin properties. The Kotlin application can then use the following code to instantiate the VehicleIdentification object:


val vehicleIdentification = VehicleIdentification().apply {

    wmInumber = WMInumber("WVW")

    vds = VDS("ZZZ1JZ")

}


Alternatively, the constructor with arguments defined in the generated VehicleIdentification Java class can be used


val vehicleIdentification = 

    VehicleIdentification(WMInumber("WVW"), VDS("ZZZ1JZ"))


and use the following code to modify or access the "vds" component of the VehicleIdentification:


vehicleIdentification.vds = VDS("ZZZ2JZ")

val vds = vehicleIdentification.vds


Using coding services in a Kotlin application

Using coding services in a Kotlin application is straightforward: just instantiate and configure the appropriate Coder object and invoke its encode() or decode() method to serialize or deserialize the message.


For example, a Kotlin application can use the following code to serialize the top-level CAM message from the CAM/DENM schema to an in-memory buffer:


//Instantiate and configure the appropriate Coder object

val coder = Camdenm.getPERUnalignedCoder().apply {

    enableEncoderConstraints()

    enableDecoderConstraints()

}

//Create the CAM message using the API of the generated Java classes

val pdu = CAM(...)

//Encode the "pdu" object that represents the CAM message to an

//in-memory buffer

val encoded = ByteArrayOutputStream().use {

    coder.encode(pdu, it)

    it.toByteArray()

}


The message can also be serialized to a disk file:


//Encode the "pdu" object that represents the CAM message to a

//disk file

val file = File("cam.uper")

file.outputStream().buffered().use {

    coder.encode(pdu, it)

}


Use the following code to decode the message from an in-memory encoding and examine its contents:


val decoded = encoded.inputStream().use {

    coder.decode(it, CAM())

}

val camBody = decoded.cam


Or the message can be decoded from a disk file:


val file = File("cam.uper")

val decoded = file.inputStream().buffered().use {

    coder.decode(it, CAM())

}


You can download a free trial of the OSS ASN.1 Tools for Java and access the online documentation on the OSS Nokalva website. Please contact our technical support at support@oss.com with any questions about support for Kotlin or to receive a sample program that demonstrates how the OSS ASN.1 Tools for Java can be used with Kotlin. Complete details about calling Java from Kotlin are available here.

Thursday, May 20, 2021

OSS NAS Tools for Python

Building on the success of its OSS NAS Tools for C/C++/Java/C# and NAS-1Step products, OSS Nokalva is excited to announce an addition to its NAS portfolio: the OSS NAS Tools for Python. Available for 3GPP 5G and LTE Release 16, the Tools can be used to process NAS messages for UE and Core Network solutions.



The OSS NAS Tools for Python facilitates the conversion of NAS messages, which conform to 3GPP Technical Specifications 24.301 and 24.501, to and from JSON and XML formats. The Tools are available on Windows and Linux platforms.


Among many useful features, the OSS NAS Tools for Python supports

  • Conversion of NAS binary messages to JSON format

  • Conversion of NAS binary messages to XML format

  • Enhanced diagnostics that can report multiple defects in erroneous NAS messages


You can download a free trial of the OSS NAS Tools for Python and access online documentation on the OSS Nokalva website. Please contact us with any questions about the Tools.



Monday, February 22, 2021

OSS NAS Tools for C#

 Building on the success of its OSS NAS Tools for C/C++/Java and NAS-1Step products, OSS Nokalva is excited to announce an addition to its NAS portfolio: the OSS NAS Tools for C#. Available for 3GPP 5G and LTE Releases 15 and 16, the Tools can be used to process NAS messages for UE and Core Network solutions.


The OSS NAS Tools for C# facilitates the creation, serialization, and deserialization of NAS messages that conform to 3GPP Technical Specifications 24.301 and 24.501. Current users of the OSS ASN.1 Tools for C# will feel at home with the OSS NAS Tools for C# because both the API and the C# classes are very similar to those used with protocols specified in ASN.1. The Tools can be used on Windows, Linux, and macOS with supported .NET platforms installed.




Among many useful features, the OSS NAS Tools for C# supports

  • Serialization and deserialization of binary NAS messages to and from C# objects

  • Conversion of NAS binary messages to JSON format

  • Conversion of NAS binary messages to XML format

  • Printing, copying, and comparison of deserialized and unserialized NAS messages

  • Enhanced diagnostics that can report multiple defects in erroneous NAS messages


You can download a free trial of the OSS NAS Tools for C# and access online documentation on the OSS Nokalva website. Please contact us with any questions about the Tools.



Monday, January 4, 2021

What's New in 2021 - OSS ASN.1 and NAS Tools

OSS Nokalva is ready to support our customers in 2021 with tools that work in diverse, often complex, environments that require flexibility and reliability. For those working in rapidly evolving sectors, such as 5G and ITS (Intelligent Transportation Systems), OSS is equipped to deliver solid, dependable solutions.

As ITS standardization continues at a rapid pace, milestones in this generational technology happen regularly. Now that 3GPP Release 16 has been finalized, development and deployment activities can progress in earnest. Moving forward, 3GPP will be working on Release 17 in 2021 and 2022.


OSS ASN.1 Tools

In 2021, OSS will release new versions of the ASN.1 Tools that include the following new features and enhancements:

  • Value notation encoding/decoding support in ASN.1/C TOED 

  • New API to access ASN.1 metadata from the generated ASN.1/C# code 

  • CSV support in the ASN.1/Java Tools 

  • Support for safe C runtime functions in the ASN.1/C++ Tools

  • Sample programs for the latest versions of ITS ASN.1 protocols (SAE J2735, IEEE 1609.2, ETSI CAM/DENM, etc.)

  • New and updated samples that demonstrate how ASN.1-based protocols can be used with the OSS ASN.1 Tools


OSS NAS Products

The OSS NAS/C, NAS/C++, NAS/Java Tools and NAS-1Step will be upgraded to the latest versions of LTE and 5G Release 15 and 16. Support for 3GPP Release 17 will be added when it is available.

Following the success of our other OSS NAS Tools, we will release the first version of the OSS NAS/C# Tools, available for LTE and 5G Release 16, in early 2021. Users will be able to serialize or parse NAS messages to or from C# objects. In addition, the Tools will provide direct conversion of NAS messages to XML or JSON format. These Tools will also be updated to support 3GPP Release 17 when it is available.

 

OSS S1, X2, and LPPa APIs 

OSS will also update the existing S1/X2 and LPPa ASN.1 APIs for C and Java to support LTE Release 17, once it is available.


Monday, December 21, 2020

OSS ASN.1/Java BERTool TLV Utility

 There has always been a need to present ASN.1 BER/CER/DER (Basic, Canonical, and Distinguished Encoding Rules) binary messages in human readable format to more easily examine their correctness and pinpoint the location of errors in problematic messages without requiring access to their schemas.


To satisfy this need, earlier versions of the OSS ASN.1/Java Tools included a native osstlv utility.  While the utility is quite useful, there are limitations resulting from it being written in C. The utility can not be invoked programmatically from a Java application. Also, as a native utility, it was not always possible to use it on the same machine/platform where the problematic BER messages were detected. These limitations failed to meet the basic requirement of platform-independent Java applications: the ability  to run on any platform. 


Beginning with release 8.3 of the ASN.1/Java Tools, a new platform-independent osstlv utility is included in the Tools. It is written in Java and is available as a self-contained executable jar that can be run as a standalone application. The utility can also be invoked programmatically using the API (BERTool.dumpTLV()). This new utility supports a new ExtendedDump format, as well as the hexadecimal, decomposed, and syntax TLV formats already supported in the old native osstlv utility. The new API enables you to develop custom formats to suit your needs.


The new Extended Dump TLV format is similar to the hexadecimal memory dump. It includes three fields separated by colons: file offset, encoding in hexadecimal, and encoding in ASCII. The Tag-Length and Contents parts are printed on separate lines. The ASCII representation for the Tag-Length part contains the character 'C' for constructed encodings and 'P' for primitive, as well as formatted tag and length.


Examples:

Definite length encoding:

0000 : 30 2A                               : C [UNIVERSAL 16] 42

0002 : 30 06                               : C [UNIVERSAL 16] 6

0004 : 02 01                               : P [UNIVERSAL 2] 1

0006 : 0A                                  : .

0007 : 01 01                               : P [UNIVERSAL 1] 1

0009 : FF                                  : .

0010 : 30 00                               : C [UNIVERSAL 16] 0

0012 : 30 1E                               : C [UNIVERSAL 16] 30

0014 : 09 09                               : P [UNIVERSAL 9] 9

0016 : 80 35 09 54 0A 2B E5 20 DF          : .5.T.+. .

0025 : 17 11                               : P [UNIVERSAL 23] 17

0027 : 39 32 30 34 32 33 31 37 34 33 33 34 : 920423174334

0039 : 2D 30 37 30 30                      : -0700

 



Indefinite length encoding:

0000 : 30 80                               : C [UNIVERSAL 16] indef

0002 : 30 80                               : C [UNIVERSAL 16] indef

0004 : 02 01                               : P [UNIVERSAL 2] 1

0006 : 0A                                  : .

0007 : 01 01                               : P [UNIVERSAL 1] 1

0009 : FF                                  : .

0010 : 00 00                               : END-OF-CONTENTS

0012 : 30 80                               : C [UNIVERSAL 16] indef

0014 : 00 00                               : END-OF-CONTENTS

0016 : 30 80                               : C [UNIVERSAL 16] indef

0018 : 09 09                               : P [UNIVERSAL 9] 9

0020 : 80 35 09 54 0A 2B E5 20 DF          : .5.T.+. .

0029 : 17 11                               : P [UNIVERSAL 23] 17

0031 : 39 32 30 34 32 33 31 37 34 33 33 34 : 920423174334

0043 : 2D 30 37 30 30                      : -0700

0048 : 00 00                               : END-OF-CONTENTS

0050 : 00 00                               : END-OF-CONTENTS

 

Detailed information about the new ossltv utility class can be found in the ASN.1/Java Tools online documentation. Download a trial of the Tools and evaluate for yourself the usefulness of this utility.