add gcm function