Hello,

Fixed the wrong URL for Github gist
>> I've figured out that my problem was in LOAD commands, now reading GP code, I've written this loader:
>> https://gist.github.com/Novitoll/f0dbyour070f06d8a268adf571d5c8eb3947

Here is the valid link:
https://gist.github.com/Novitoll/f0db070f06d8a268adf571d5c8eb3947

Please assist. Stuck here. Method component is not LOADed... Reading JCVM spec for "6.9 Method Component",
but this is not helping, I guess. I've removed all "static" from Applet as well. idk what to do more :( 
Forgot to mention, that I'm compiling CAP from here
https://github.com/simhacks/hello-stk.git

I've also tried https://github.com/martinpaljak/ant-javacard, no luck as well. Same thing on Method component loading.
JDK's are 2.x, e.g. default as in repositories.
And local java and javac are openjdk-8. also tried with openjdk-11 — same thing



On Fri, Feb 4, 2022 at 12:37 AM Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote:
Hello,

Sorry for posting this question here, I've asked this GPPro Martin as well.
Not sure if I should've included him as well.. Just there is a few people to
ask help for this level of details.

I've figured out that my problem was in LOAD commands, now reading GP code, I've written this loader:
https://gist.github.com/Novitoll/f0dbyour070f06d8a268adf571d5c8eb3947

Every component in CAP file is in separate APDU with LOAD instruction.
First 5 is loaded successfully with DATA=00, SW=9000, however on Method it fails.
As you can see from my script, I've fixed Descriptor size to 0000 in Directory field.
And in Header C482xxyy, where xxyy is calculated properly, which is a sum of
all size fields in Directory, e.g.

016a = 0011+001f+000c+001e+0042+0018+006d+0032+0017+0000+0000

Question: Can't figure out why Method LOAD fails? By checking GP 2.1 spec, it doesnt
help me understand the problem.
Concatenated components to < 255 block size also fails,
only separate components work for LOAD.

[+] Install for load
>> 80e602001207d07002ca449001000006ef04c60201850000c0000000
<< 009000
[+] LOAD - Header
>> 80e8000018c482016a010011decaffed010204000107d07002ca44900100c0000000
<< 009000
[+] LOAD - Directory
>> 80e800012202001f0011001f000c001e00420018006d003200170000000000040002002202010000c0000000
<< 009000
[+] LOAD - Import
>> 80e800022104001e02000107a0000000620101060210a0000000090003ffffffff891071000200c0000000
<< 009000
[+] LOAD - Applet
>> 80e800030f03000c0108d07002ca44900101002000c0000000
<< 009000
[+] LOAD - Class
>> 80e800041b06001843800301ff0007020000002f00398002008101010881000000c0000000
<< 009000
[!!!!] LOAD - Method (FAILED)
>> 80e800057007006d000911188c00048d00012c18197b0002037b00029210240303038b000388007a02318f00053d8c00062e1b8b00077a0120188b000860037a7a02228d00092d1d10076b101a8b000a321fae006b06188c000b7a06118d000c2c1903077b000d037b000d928b000e198b000f3b7a00c0000000
<< 9000 (should be 009000)

[-] LOAD - StaticField (FAILED due to last failed LOAD)
>> 80e80006350800.....
<< 6A86 (because prev. p2=05 is not loaded)

P.S.: I couldnt find the right spec explaining "C482XXYY" in Header.cap, how it should be calculated,
this answer below helped me navigate, but for Method.cap loading - it still fails
https://community.oracle.com/tech/developers/discussion/1753814/globalpaltform-load-command-data-field


On Mon, Jan 24, 2022 at 6:24 PM Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote:
Hello Vadim,

> Is there a specific reason to write your own code for that?
I was told that the OSS shadysim.py is a raw version, moreover
there are bytes in strings that are not explained in comments etc.
I wanted to understand every byte I need to send, reading specs,
so I've managed to write this script, APDUs are same as in shadysim.py,
except the encryption part as my SPI, KIC, KID are different from sysmoUSIM-J2.

> If not, give https://github.com/martinpaljak/GlobalPlatformPro a try.
I will try again, thanks. Last time I was stuck at --key-enc (KIC1),
--key-mac (KID1),
params are not taken and default keys are used for some reason.
Generally, I chose initially applet installation via SMS-DELIVER, AFAIK,
GP is a different approach.

Another question please:
- If I have already installed USIM applet on SIM card, and I want to
install another one,
will it be a conflict? As EF_DIR needs to be updated probably? Or last
SELECTed AID
is saved on UICC (per specification) and it will "replace" the older
applet, or should I
DELETE the original one?

Thanks
On Mon, Jan 24, 2022 at 5:59 PM Vadim Yanitskiy <vyanitskiy@sysmocom.de> wrote:
>
> Hi Sabyrzhan,
>
> AFAIU, in your script you're using the GlobalPlatform API to manage
> cardlets.  Is there a specific reason to write your own code for that?
> If not, give https://github.com/martinpaljak/GlobalPlatformPro a try.
>
> Best regards,
> Vadim.
>
> --
> - Vadim Yanitskiy <vyanitskiy at sysmocom.de>    http://www.sysmocom.de/
> =======================================================================
> * sysmocom - systems for mobile communications GmbH
> * Alt-Moabit 93
> * 10559 Berlin, Germany
> * Sitz / Registered office: Berlin, HRB 134158 B
> * Geschaeftsfuehrer / Managing Director: Harald Welte



--
         Sabr


--
         Sabr


--
         Sabr