added client-side signing and key generation