Hello ,
Hope you are doing well.
To answer your questions:
1. Just to confirm the two variables that you are referring to are the following:

Is this correct?
If so, the variable that is passed for the first one is actually a pointer and the second one is getting the actual value of the variable. From the example you may see that it pubN is receiving the pointer(size of pointer is 8) for the pubkey0 containing a value which is actually 2048 bits long. The pubE is receiving the value pub_e of 0x10001.
2. For details as to the purpose of Casper and the objective in which modexp was implemented. I believe you will find this information in the following application note:
Asymmetric Cryptographic Accelerator CASPER
Best Regards,
Sabina
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------