Is it me or why akcipher has two undocumented parameters: "algo OID" and "params length". They are still considered as ABI but not even their size types are documented, let alone the semantics.
Only module I can find that uses algo OID is crypto/testmgr.h, or sets a value into it.
From crypto/asymmetric/public_key.c I found that they are u32's.
And I set them zero by looking my call chain layer by layer where in all layers they are ignored:
1. tpm2_key_rsa_encrypt
2. pkcs1pad_set_pub_key
3. rsa_set_pub_key
And I found the actual call chain by tracing with kprobes.
So I just memset 8 bytes after my key data to zero given that everything is undocumented but by tracing and grepping I've managed to nail them hopefully stable values.
Feels flakky tbh to have documentation based on reverse engineering o_O I wonder why there is no even some struct for those last magical 8 bytes...
#linux #kernel #crypto