Skip to content

Repository files navigation

euicc-schema

The schema of the eUICC profile package format, and what the schema produces: the C codec, the element reference, and the test profiles. The format is eUICC Profile Package: Interoperable Format, version 3.4.1, from the Trusted Connectivity Alliance. The industry calls this format SAIP.

Everything here answers one question: what is a valid profile package? The tools that work with packages build on this repository:

Repository Role
asn1c-vn the language: read and write ASN.1 value notation
euicc-schema (this one) the vocabulary: the types, the members, the limits
euicc-tools the command: build, check, diff, fmt, and the editor support

What it holds

  • profile-3.4.1.asn -- the ASN.1 module PEDefinitions, from the public specification.
  • dist/ -- the C codec that asn1c generates from the module. make dist writes it. asn1c is a submodule of this repository.
  • testdata/ -- the GSMA TS.48 test profiles, as DER and as GSMA's own text decodings.
  • asn1-docs.json -- what the reference site adds to the generated pages.

Documentation

eUICC Profile Reference

The reference gives one page for each element of the format. A page holds the type of the element, its size limit, its position in the tree, and the rules that constrain it.

The reference is generated. The elements and the types come from the ASN.1 module in this repository. The rules come from saip-validator. asn1-docs joins the two.

Build

git clone --recurse-submodules https://github.com/waigel/euicc-schema.git
cd euicc-schema
make dist

make dist writes the codec into dist/ with asn1c. PEDefinitions imports the PKIX modules, and the asn1c repository does not ship them, so the build extracts Certificate from asn1c/examples/rfc3280.txt.

You need a C compiler, make and perl. You also need asn1c. Install it with brew install asn1c, or build it from the asn1c/ submodule.

To build against another revision of the specification, run make PROFILE_ASN=profile-x.y.z.asn.

ept, the converter

ept is asn1c's converter, built against this codec. It converts a profile package between DER, BER, unaligned PER, XER and a readable text form. For building and checking packages, euicc-tools is the maintained front end; ept remains for the conversions it does not cover.

make                                  # compiles ./ept
./ept -iber -otext profile.der        # DER as readable text
./ept -iber -oxer  profile.der        # DER as XML, and -ixer -oder back
./ept -iber -onull -c profile.der     # the ASN.1 constraints, no output
./ept -p UICCCapability -iber -otext capability.der   # another type

For every option, run ./ept -h.

Tests

make test

For each profile in testdata/, the test does two things. It checks the ASN.1 constraints. Then it converts the profile from DER to XER and back, and compares the result against the original byte for byte.

The test profiles are the GSMA TS.48 Generic eUICC Test Profiles, version 7.0, SAIP 2.3.

Notes

The build uses -idirafter and not -I.. The PKIX module produces a Time.h. On a case-insensitive filesystem, that header hides the system <time.h>.

License and attribution

The code of this project, its Makefile and its documentation are under the MIT License. Three parts have their own terms:

  • The PEDefinitions module (profile-3.4.1.asn) is © Trusted Connectivity Alliance ltd. It comes from the public specification and is not under an open source license. Its copyright notice states:

    the information contained in this document may be used, disclosed and reproduced without the prior written authorization of Trusted Connectivity Alliance

    The specification carries no warranty. Read its IPR disclaimer.

  • The profiles in testdata/, both the *.der files and the *.txt decodings, are © GSMA. They come from the TS.48 repository under the Apache License 2.0.

  • The code generator and the runtime skeletons are asn1c by Lev Walkin, under a BSD license.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages