Rather than creating a generic object here, is it reasonable to create an openpgp_msg_publickey and then override as necessary so that the objects returned are the same regardless of whether the returned key is a subkey or not?