Push Tracker
ria-ran--sim-drop/CHANGELOG.md
A ashkan@beigi.net 1ade8dfc2c Phase 2: real 3GPP profile encodings + changelog
Upgrade create_esim_profile from a loose JSON mock to a structured
profile-package-v2 that embeds real 3GPP field encodings:
- enc_iccid: EF_ICCID nibble-swapped BCD, 10-byte 0xF-padded (TS 31.102 4.2.1)
- enc_imsi:  EF_IMSI length octet + parity nibble + nibble-swapped BCD (4.2.2)
- build_lpa_activation_code: SGP.22 LPA:1$<smdp>$<matching-id> string

Wire apn and smdp_address through config into the provisioning call; add
smdp_address to config.yaml.example. Add CHANGELOG.md.

Full SGP.22 SAIP/ASN.1 UPP generation via osmocom pySim remains a follow-up
(not on PyPI; needs SM-DP+/LPA for OTA install) and is noted in the changelog.

Tests: +9 (encoders, round-trips, activation code); 53 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 06:03:48 +00:00

47 lines
2.0 KiB
Markdown

# Changelog
All notable changes to this project are documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- **Phase-2 profile generation.** `create_esim_profile` now emits a structured
profile package with real 3GPP encodings instead of a loose JSON mock:
- `enc_iccid` — EF_ICCID encoding (nibble-swapped BCD, 10-byte, 0xF padded)
per 3GPP TS 31.102 §4.2.1.
- `enc_imsi` — EF_IMSI encoding (length octet + parity nibble + nibble-swapped
BCD) per 3GPP TS 31.102 §4.2.2.
- `build_lpa_activation_code` — SGP.22 LPA activation string
(`LPA:1$<smdp>$<matching-id>`) so the profile carries a device-consumable
activation reference.
- `CHANGELOG.md`.
### Changed
- Profile package `type` is now `profile-package-v2`; it embeds the raw
credentials plus the encoded EF byte values and the LPA activation code.
### Fixed
- `generate_imsi` hardcoded a 10-digit MSIN, producing invalid 16-digit IMSIs
for a 3-digit MNC (e.g. MCC 302 / MNC 720). MSIN length is now
`15 - len(mcc) - len(mnc)`.
- `check_rate_limit` compared timestamps as strings across mismatched formats
(SQLite `CURRENT_TIMESTAMP` vs Python `isoformat`), making the rate-limit
window unreliable. Both sides are now normalized via SQLite `datetime()`.
### Notes
- Full SGP.22 SIMalliance Interoperable Profile (SAIP / ASN.1 UPP) generation
via osmocom pySim remains the follow-up step; it needs an SM-DP+ / LPA to be
installed onto consumer devices over the air. The current package targets
programmable SIMs and core-network sync.
## [0.1.0] — 2026-07-01
### Added
- Initial Phase-1 closed-loop eSIM provisioning stack: Flask API, SQLite
subscriber store, credential generator (IMSI/Ki/OPc/ICCID), Open5GS and
free5gc core adapters, captive portal, operational scripts, systemd units,
network configs, and a test suite.