# HG changeset patch # User Mychaela Falconia # Date 1615799240 0 # Node ID 9c9f6adbaedb3ac6cc88aa993c736a073d575c3e # Parent 47a491a16de3653ee4079104f741fea0187285a6 sim-iccid-mkrange utility added diff -r 47a491a16de3 -r 9c9f6adbaedb .hgignore --- a/.hgignore Mon Mar 15 08:43:08 2021 +0000 +++ b/.hgignore Mon Mar 15 09:07:20 2021 +0000 @@ -14,4 +14,5 @@ ^uicc/fc-uicc-tool$ ^utils/sim-iccid-mkfull$ +^utils/sim-iccid-mkrange$ ^utils/sws-email2db$ diff -r 47a491a16de3 -r 9c9f6adbaedb libutil/Makefile --- a/libutil/Makefile Mon Mar 15 08:43:08 2021 +0000 +++ b/libutil/Makefile Mon Mar 15 09:07:20 2021 +0000 @@ -1,10 +1,10 @@ CC= gcc CFLAGS= -O2 -OBJS= alpha_decode.o alpha_fromfile.o alpha_valid.o decimal_str.o \ - filesearch.o gsm7_decode.o gsm7_encode.o gsm7_encode_table.o \ - gsm7_pack.o gsm7_unpack.o hexdigits.o hexread.o hexstr.o iccid_luhn.o \ - nibbles2asc.o number_decode.o number_encode.o pinentry.o plmncodes.o \ - plmnlist.o revnibbles.o shorthand.o +OBJS= alpha_decode.o alpha_fromfile.o alpha_valid.o decimal_incr.o \ + decimal_str.o filesearch.o gsm7_decode.o gsm7_encode.o \ + gsm7_encode_table.o gsm7_pack.o gsm7_unpack.o hexdigits.o hexread.o \ + hexstr.o iccid_luhn.o nibbles2asc.o number_decode.o number_encode.o \ + pinentry.o plmncodes.o plmnlist.o revnibbles.o shorthand.o LIB= libutil.a all: ${LIB} diff -r 47a491a16de3 -r 9c9f6adbaedb libutil/decimal_incr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libutil/decimal_incr.c Mon Mar 15 09:07:20 2021 +0000 @@ -0,0 +1,22 @@ +/* + * This module implements a function for incrementing decimal strings, + * to be used in producing ranges of ICCID and IMSI numbers. + */ + +#include + +void +decimal_string_increment(str, ndigits) + u_char *str; + unsigned ndigits; +{ + u_char *p; + + for (p = str + ndigits; p > str; ) { + --p; + (*p)++; + if (*p < 10) + return; + *p = 0; + } +} diff -r 47a491a16de3 -r 9c9f6adbaedb utils/Makefile --- a/utils/Makefile Mon Mar 15 08:43:08 2021 +0000 +++ b/utils/Makefile Mon Mar 15 09:07:20 2021 +0000 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -PROGS= sim-iccid-mkfull sws-email2db +PROGS= sim-iccid-mkfull sim-iccid-mkrange sws-email2db LIBUTIL=../libutil/libutil.a INSTALL_PREFIX= /opt/freecalypso @@ -12,6 +12,9 @@ sim-iccid-mkfull: sim-iccid-mkfull.o ${LIBUTIL} ${CC} ${CFLAGS} -o $@ $@.o ${LIBUTIL} +sim-iccid-mkrange: sim-iccid-mkrange.o ${LIBUTIL} + ${CC} ${CFLAGS} -o $@ $@.o ${LIBUTIL} + sws-email2db: sws-email2db.c ${CC} ${CFLAGS} -o $@ $@.c diff -r 47a491a16de3 -r 9c9f6adbaedb utils/sim-iccid-mkrange.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils/sim-iccid-mkrange.c Mon Mar 15 09:07:20 2021 +0000 @@ -0,0 +1,36 @@ +/* + * This program is a special utility for generating lists of ICCIDs + * following the 18+1 convention. The first argument is the starting + * ICCID without Luhn (entered as shorthand, expanded to 18 digits), + * the second argument is the number of consecutive ICCIDs to generate. + * The output is a list of full 19-digit ICCIDs. + */ + +#include +#include +#include + +main(argc, argv) + char **argv; +{ + u_char digits[19]; + char asc[20]; + unsigned total, n; + int rc; + + if (argc != 3) { + fprintf(stderr, "usage: %s start-iccid num-cards\n", argv[0]); + exit(1); + } + rc = parse_decimal_shorthand(argv[1], digits, 18); + if (rc < 0) + exit(1); /* error msg already printed */ + total = atoi(argv[2]); + for (n = 0; n < total; n++) { + digits[18] = compute_iccid_luhn(digits); + nibbles_to_ascii(digits, 19, asc); + puts(asc); + decimal_string_increment(digits, 18); + } + exit(0); +}