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.


Monday, October 19, 2020

OSS ASN.1 Studio Test Data Generator

Having spent three decades developing robust and reliable ASN.1 solutions, we know how time consuming and complex a task it is to create a comprehensive test suite to test your own ASN.1-based solutions. This is why ASN.1 Studio, our powerful state-of-the-art ASN.1 IDE, includes a powerful feature that allows you to easily configure it, and within seconds  to generate thousands of different test messages  - work that, if performed manually, would be error prone and take days or weeks to complete.


ASN.1 Studio includes several options to customize your test messages. As you can see in the image above, if constraints are applied to ASN.1 types or on the fields of a type, you can select the first value that satisfies the constraints, or select a random value using those constraints. You can also ignore the constraints and set possible values in a configuration table for the ASN.1 types and fields that ASN.1 Studio will then use to generate test messages. 

Following are a few examples of values and ranges of values for various ASN.1 types or fields that you can configure for the test message generation. 


  • For INTEGER types, you can select a range of values. 


  • You can select TRUE, FALSE, or a random value for BOOLEAN types. 


  • For OCTET STRING types, you can select the minimum and maximum length of octets, and the range for a single octet value; that is, you can specify that all the octet values should range from 0x00 to 0x1F.


  • For OBJECT IDENTIFIER types, you can specify the root arcs, a value range for additional arc values, and the number of additional arcs. 


  • For values of REAL types, you can specify ranges for mantissa values and exponent values to be used in the test messages. 


  • For optional field values in SEQUENCE/SET types, you can select Absent, Present, or Random. You can do the same for the DEFAULT and extension addition values. For SEQUENCE OF/SET OF types, you can specify the number of components. 


  • Similarly, you can specify the values for several other ASN.1 types, such as BIT STRING, CHOICE, ENUMERATED, OID-IRI, Relative-OID, Relative-OID-IRI, REAL, Recursive types, Time types, and unrestricted character string types.


The current version of ASN.1 Studio saves all newly created test messages in one file. The next release will support saving such messages in separate files.


All of our ASN.1 Tools include ASN.1 Studio. Download a trial version of the OSS ASN.1 Tools and learn more about the test message generation feature by reviewing the “How do I create one or more encoded messages” section of the ASN.1 Studio Help screen. If you have any questions about the test message feature or ASN.1 Studio, please contact us at support@oss.com.


Monday, October 12, 2020

RTOED Runtime Library

With the release of ASN.1/C Tools 11.0 and ASN.1/C++ Tools 7.0, OSS introduces a new runtime library – RTOED (Read-only function pointers TOED). It is an enhanced version of TOED, OSS’ high performance, time-optimized runtime library.

RTOED includes several new features:

• The few function pointers used in RTOED are declared as static const. When RTOED code is compiled, the C compiler will place the function pointers in your program’s read-only memory, thereby preventing them from being maliciously overwritten to alter the control flow.

• The RTOED, TOED, SOED, and LED runtime libraries all now employ an improved stack protection mechanism to handle error conditions.

• If supported by your platform, ASN.1/C TOED and RTOED can be built using secured C runtime functions as specified in Annex K of the ISO/IEC 9899 standard, Information technology — Programming languages — C. This feature will be available in ASN.1/C++ TOED and RTOED in the next release, available 1Q2021.

RTOED static runtime libraries are now included in OSS’ ASN.1/C and ASN.1/C++ Tools. Existing TOED customers can easily upgrade to RTOED. In most cases (see RTOED limitations), you won’t need to change your application code; just recompile your ASN.1 specification with the -rtoed ASN.1 compiler option and re-link with the new RTOED library.

ASN.1 Studio, our state-of-the-art ASN.1 IDE, includes a powerful feature that offers easy configuration; within seconds you can generate thousands of different test messages. This is work that, if performed manually, would be error prone and take days or weeks to complete.