generate keys if nonexistent