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 |
profile-3.4.1.asn-- the ASN.1 modulePEDefinitions, from the public specification.dist/-- the C codec that asn1c generates from the module.make distwrites 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.
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.
git clone --recurse-submodules https://github.com/waigel/euicc-schema.git
cd euicc-schema
make distmake 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 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 typeFor every option, run ./ept -h.
make testFor 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.
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>.
The code of this project, its Makefile and its documentation are under the MIT License. Three parts have their own terms:
-
The
PEDefinitionsmodule (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*.derfiles and the*.txtdecodings, 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.