GCM code added.
code has not been tested yet