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.