The problem is not about the encryption based on a public key algorithm.
The problem is the moment when your code gets decrypted. No matter which AES you chose - there exists
always possibility of unpacking the application. I mean crackers always have the possibility of obtaining at least one valid key (for instance: look at expensive 3D apps like GameSpace or Messiah) and that moment is critical for the protection. From all protectors ASProtect has the best (most secure) implementation of keys generation and validation, so what? It is and will be cracked by unpacking.
If you want to build a serious protection, not another ASProtect clone (let's be honest: nowadays protectors are clones of ASProtect), then you have to implement a fancy VM or/and own CPUs (a real challange

). Such a solution gives you
a chance to stop the crackers for a long time and excludes from "the game" 99% of all crackers.
Regards.