commit 4757c52a704bc36b916804ea8ab2821d1019a001
Author: Dasan <n-dasan@ti.com>
Date:   Wed May 14 15:13:02 2025 +0530

    GCM support
    
    Signed-off-by: Dasan <n-dasan@ti.com>

diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/example.syscfg b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/example.syscfg
new file mode 100644
index 0000000..52e87f5
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/example.syscfg
@@ -0,0 +1,348 @@
+/**
+ * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
+ * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
+ * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "hsm0-0" --product "TIFS@07.03.01" --product "MCU_PLUS_SDK@07.03.01"
+ * @versions {"tool":"1.20.0+3587"}
+ */
+
+/**
+ * Import the modules used in this configuration.
+ */
+const dthe           = scripting.addModule("/drivers/dthe/dthe", {}, false);
+const dthe1          = dthe.addInstance();
+const mpu_firewall   = scripting.addModule("/drivers/mpu_firewall/mpu_firewall", {}, false);
+const mpu_firewall1  = mpu_firewall.addInstance();
+const mpu_firewall2  = mpu_firewall.addInstance();
+const mpu_firewall3  = mpu_firewall.addInstance();
+const mpu_firewall4  = mpu_firewall.addInstance();
+const mpu_firewall5  = mpu_firewall.addInstance();
+const mpu_firewall6  = mpu_firewall.addInstance();
+const mpu_firewall7  = mpu_firewall.addInstance();
+const mpu_firewall8  = mpu_firewall.addInstance();
+const mpu_firewall9  = mpu_firewall.addInstance();
+const mpu_firewall10 = mpu_firewall.addInstance();
+const mpu_firewall11 = mpu_firewall.addInstance();
+const mpu_firewall12 = mpu_firewall.addInstance();
+const mpu_firewall13 = mpu_firewall.addInstance();
+const mpu_firewall14 = mpu_firewall.addInstance();
+const mpu_firewall15 = mpu_firewall.addInstance();
+const mpu_firewall16 = mpu_firewall.addInstance();
+const mpu_firewall17 = mpu_firewall.addInstance();
+const clock          = scripting.addModule("/kernel/dpl/clock");
+const debug_log      = scripting.addModule("/kernel/dpl/debug_log");
+const dpl_cfg        = scripting.addModule("/kernel/dpl/dpl_cfg");
+const mpu_armv7      = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
+const mpu_armv71     = mpu_armv7.addInstance();
+const mpu_armv72     = mpu_armv7.addInstance();
+const mpu_armv73     = mpu_armv7.addInstance();
+const hsmserver      = scripting.addModule("/modules/hsmserver/hsmserver", {}, false);
+const hsmserver1     = hsmserver.addInstance();
+const keyring        = scripting.addModule("/modules/keyring/keyring", {}, false);
+const keyring1       = keyring.addInstance();
+
+/**
+ * Write custom configuration values to the imported modules.
+ */
+dthe1.$name = "CONFIG_DTHE0";
+
+mpu_firewall1.$name                          = "CONFIG_MPU_FIREWALL0";
+mpu_firewall1.mpu_region.create(1);
+mpu_firewall1.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION0";
+mpu_firewall1.mpu_region[0].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall1.mpu_region[0].aidConfig        = ["AIDX","CPSW","ICSSM","M4FSS0_0","R5FSS0_0","R5FSS0_1","R5FSS1_0","R5FSS1_1"];
+
+mpu_firewall2.$name                          = "CONFIG_MPU_FIREWALL1";
+mpu_firewall2.instance                       = "L2OCRAM_BANK1_SLV";
+mpu_firewall2.mpu_region.create(1);
+mpu_firewall2.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION1";
+mpu_firewall2.mpu_region[0].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall2.mpu_region[0].aidConfig        = ["AIDX","CPSW","ICSSM","M4FSS0_0","R5FSS0_0","R5FSS0_1","R5FSS1_0","R5FSS1_1"];
+
+mpu_firewall3.$name                        = "CONFIG_MPU_FIREWALL2";
+mpu_firewall3.instance                     = "L2OCRAM_BANK2_SLV";
+mpu_firewall3.mpu_region.create(1);
+mpu_firewall3.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION2";
+mpu_firewall3.mpu_region[0].allaidConfig   = true;
+mpu_firewall3.mpu_region[0].allPermissions = true;
+
+mpu_firewall4.$name                        = "CONFIG_MPU_FIREWALL3";
+mpu_firewall4.instance                     = "L2OCRAM_BANK3_SLV";
+mpu_firewall4.mpu_region.create(1);
+mpu_firewall4.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION3";
+mpu_firewall4.mpu_region[0].allaidConfig   = true;
+mpu_firewall4.mpu_region[0].allPermissions = true;
+
+mpu_firewall5.$name                          = "CONFIG_MPU_FIREWALL4";
+mpu_firewall5.instance                       = "R5SS0_CORE0_AXIS_SLV";
+mpu_firewall5.mpu_region.create(4);
+mpu_firewall5.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION4";
+mpu_firewall5.mpu_region[0].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall5.mpu_region[0].allaidConfig     = true;
+mpu_firewall5.mpu_region[0].allPermissions   = true;
+mpu_firewall5.mpu_region[1].$name            = "CONFIG_MPU_FIREWALL_REGION9";
+mpu_firewall5.mpu_region[1].startAddr        = 0x78100000;
+mpu_firewall5.mpu_region[1].aidConfig        = ["AIDX","CPSW","ICSSM","M4FSS0_0","R5FSS0_0","R5FSS0_1","R5FSS1_0","R5FSS1_1"];
+mpu_firewall5.mpu_region[1].allaidConfig     = true;
+mpu_firewall5.mpu_region[1].allPermissions   = true;
+mpu_firewall5.mpu_region[2].$name            = "CONFIG_MPU_FIREWALL_REGION10";
+mpu_firewall5.mpu_region[2].startAddr        = 0x74000000;
+mpu_firewall5.mpu_region[2].size             = 0x800000;
+mpu_firewall5.mpu_region[2].allaidConfig     = true;
+mpu_firewall5.mpu_region[2].allPermissions   = true;
+mpu_firewall5.mpu_region[3].$name            = "CONFIG_MPU_FIREWALL_REGION20";
+mpu_firewall5.mpu_region[3].startAddr        = 0x74800000;
+mpu_firewall5.mpu_region[3].size             = 0x800000;
+mpu_firewall5.mpu_region[3].allaidConfig     = true;
+mpu_firewall5.mpu_region[3].allPermissions   = true;
+
+mpu_firewall6.$name                          = "CONFIG_MPU_FIREWALL5";
+mpu_firewall6.instance                       = "R5SS0_CORE1_AXIS_SLV";
+mpu_firewall6.mpu_region.create(4);
+mpu_firewall6.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION5";
+mpu_firewall6.mpu_region[0].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall6.mpu_region[0].allaidConfig     = true;
+mpu_firewall6.mpu_region[0].allPermissions   = true;
+mpu_firewall6.mpu_region[1].$name            = "CONFIG_MPU_FIREWALL_REGION21";
+mpu_firewall6.mpu_region[1].startAddr        = 0x78300000;
+mpu_firewall6.mpu_region[1].allaidConfig     = true;
+mpu_firewall6.mpu_region[1].allPermissions   = true;
+mpu_firewall6.mpu_region[2].$name            = "CONFIG_MPU_FIREWALL_REGION22";
+mpu_firewall6.mpu_region[2].startAddr        = 0x75000000;
+mpu_firewall6.mpu_region[2].size             = 0x800000;
+mpu_firewall6.mpu_region[2].allaidConfig     = true;
+mpu_firewall6.mpu_region[2].allPermissions   = true;
+mpu_firewall6.mpu_region[3].$name            = "CONFIG_MPU_FIREWALL_REGION23";
+mpu_firewall6.mpu_region[3].startAddr        = 0x75800000;
+mpu_firewall6.mpu_region[3].size             = 0x800000;
+mpu_firewall6.mpu_region[3].allaidConfig     = true;
+mpu_firewall6.mpu_region[3].allPermissions   = true;
+
+mpu_firewall7.$name                        = "CONFIG_MPU_FIREWALL6";
+mpu_firewall7.instance                     = "R5SS1_CORE0_AXIS_SLV";
+mpu_firewall7.mpu_region.create(4);
+mpu_firewall7.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION6";
+mpu_firewall7.mpu_region[0].allaidConfig   = true;
+mpu_firewall7.mpu_region[0].allPermissions = true;
+mpu_firewall7.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION24";
+mpu_firewall7.mpu_region[1].startAddr      = 0x78500000;
+mpu_firewall7.mpu_region[1].allPermissions = true;
+mpu_firewall7.mpu_region[1].allaidConfig   = true;
+mpu_firewall7.mpu_region[2].$name          = "CONFIG_MPU_FIREWALL_REGION25";
+mpu_firewall7.mpu_region[2].startAddr      = 0x76000000;
+mpu_firewall7.mpu_region[2].size           = 0x800000;
+mpu_firewall7.mpu_region[2].allaidConfig   = true;
+mpu_firewall7.mpu_region[2].allPermissions = true;
+mpu_firewall7.mpu_region[3].$name          = "CONFIG_MPU_FIREWALL_REGION26";
+mpu_firewall7.mpu_region[3].startAddr      = 0x76800000;
+mpu_firewall7.mpu_region[3].size           = 0x800000;
+mpu_firewall7.mpu_region[3].allaidConfig   = true;
+mpu_firewall7.mpu_region[3].allPermissions = true;
+
+mpu_firewall8.$name                        = "CONFIG_MPU_FIREWALL7";
+mpu_firewall8.instance                     = "R5SS1_CORE1_AXIS_SLV";
+mpu_firewall8.mpu_region.create(4);
+mpu_firewall8.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION7";
+mpu_firewall8.mpu_region[0].allaidConfig   = true;
+mpu_firewall8.mpu_region[0].allPermissions = true;
+mpu_firewall8.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION27";
+mpu_firewall8.mpu_region[1].startAddr      = 0x78700000;
+mpu_firewall8.mpu_region[1].allaidConfig   = true;
+mpu_firewall8.mpu_region[1].allPermissions = true;
+mpu_firewall8.mpu_region[2].$name          = "CONFIG_MPU_FIREWALL_REGION28";
+mpu_firewall8.mpu_region[2].startAddr      = 0x77000000;
+mpu_firewall8.mpu_region[2].size           = 0x800000;
+mpu_firewall8.mpu_region[2].allaidConfig   = true;
+mpu_firewall8.mpu_region[2].allPermissions = true;
+mpu_firewall8.mpu_region[3].$name          = "CONFIG_MPU_FIREWALL_REGION29";
+mpu_firewall8.mpu_region[3].startAddr      = 0x77800000;
+mpu_firewall8.mpu_region[3].size           = 0x800000;
+mpu_firewall8.mpu_region[3].allaidConfig   = true;
+mpu_firewall8.mpu_region[3].allPermissions = true;
+
+mpu_firewall9.$name                        = "CONFIG_MPU_FIREWALL8";
+mpu_firewall9.instance                     = "MBOX_RAM_SLV";
+mpu_firewall9.mpu_region.create(1);
+mpu_firewall9.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION8";
+mpu_firewall9.mpu_region[0].allaidConfig   = true;
+mpu_firewall9.mpu_region[0].allPermissions = true;
+
+mpu_firewall10.$name                          = "CONFIG_MPU_FIREWALL10";
+mpu_firewall10.instance                       = "HSM_SLV";
+mpu_firewall10.mpu_region.create(6);
+mpu_firewall10.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION18";
+mpu_firewall10.mpu_region[0].startAddr        = 0x44000400;
+mpu_firewall10.mpu_region[0].size             = 0x400;
+mpu_firewall10.mpu_region[0].aidConfig        = ["M4FSS0_0","R5FSS0_0","R5FSS0_1"];
+mpu_firewall10.mpu_region[0].permissionConfig = ["PER0","PER1","PER3","PER4","PER6","PER7"];
+mpu_firewall10.mpu_region[1].$name            = "CONFIG_MPU_FIREWALL_REGION19";
+mpu_firewall10.mpu_region[1].startAddr        = 0x44000000;
+mpu_firewall10.mpu_region[1].size             = 0x400;
+mpu_firewall10.mpu_region[1].permissionConfig = ["PER0","PER3","PER6","PER7"];
+mpu_firewall10.mpu_region[1].aidConfig        = ["R5FSS0_0","R5FSS0_1"];
+mpu_firewall10.mpu_region[2].$name            = "CONFIG_MPU_FIREWALL_REGION49";
+mpu_firewall10.mpu_region[2].startAddr        = 0x40020000;
+mpu_firewall10.mpu_region[2].size             = 0x100000;
+mpu_firewall10.mpu_region[2].permissionConfig = ["PER0","PER3","PER6","PER7"];
+mpu_firewall10.mpu_region[3].$name            = "CONFIG_MPU_FIREWALL_REGION50";
+mpu_firewall10.mpu_region[3].startAddr        = 0x40140000;
+mpu_firewall10.mpu_region[3].permissionConfig = ["PER0","PER3","PER6","PER7"];
+mpu_firewall10.mpu_region[3].size             = 0x100000;
+mpu_firewall10.mpu_region[4].$name            = "CONFIG_MPU_FIREWALL_REGION51";
+mpu_firewall10.mpu_region[4].startAddr        = 0x20020000;
+mpu_firewall10.mpu_region[4].size             = 0x30000;
+mpu_firewall10.mpu_region[4].aidConfig        = ["M4FSS0_0"];
+mpu_firewall10.mpu_region[4].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall10.mpu_region[4].allPermissions   = true;
+mpu_firewall10.mpu_region[5].$name            = "CONFIG_MPU_FIREWALL_REGION52";
+mpu_firewall10.mpu_region[5].startAddr        = 0x40000000;
+mpu_firewall10.mpu_region[5].size             = 0x8000000;
+mpu_firewall10.mpu_region[5].aidConfig        = ["M4FSS0_0"];
+mpu_firewall10.mpu_region[5].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall10.mpu_region[5].allPermissions   = true;
+
+mpu_firewall11.$name                        = "CONFIG_MPU_FIREWALL11";
+mpu_firewall11.instance                     = "DTHE_SLV";
+mpu_firewall11.mpu_region.create(8);
+mpu_firewall11.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION11";
+mpu_firewall11.mpu_region[0].allPermissions = true;
+mpu_firewall11.mpu_region[0].size           = 0x800;
+mpu_firewall11.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall11.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION42";
+mpu_firewall11.mpu_region[1].startAddr      = 0xCE010000;
+mpu_firewall11.mpu_region[1].size           = 0x7FFF;
+mpu_firewall11.mpu_region[1].aidConfig      = ["M4FSS0_0"];
+mpu_firewall11.mpu_region[1].allPermissions = true;
+mpu_firewall11.mpu_region[2].$name          = "CONFIG_MPU_FIREWALL_REGION43";
+mpu_firewall11.mpu_region[2].startAddr      = 0xCE00A000;
+mpu_firewall11.mpu_region[2].aidConfig      = ["M4FSS0_0"];
+mpu_firewall11.mpu_region[2].allPermissions = true;
+mpu_firewall11.mpu_region[2].size           = 0x1000;
+mpu_firewall11.mpu_region[3].$name          = "CONFIG_MPU_FIREWALL_REGION44";
+mpu_firewall11.mpu_region[3].startAddr      = 0xCE006000;
+mpu_firewall11.mpu_region[3].aidConfig      = ["M4FSS0_0"];
+mpu_firewall11.mpu_region[3].allPermissions = true;
+mpu_firewall11.mpu_region[3].size           = 0x1000;
+mpu_firewall11.mpu_region[4].$name          = "CONFIG_MPU_FIREWALL_REGION45";
+mpu_firewall11.mpu_region[4].startAddr      = 0xCE004000;
+mpu_firewall11.mpu_region[4].aidConfig      = ["M4FSS0_0"];
+mpu_firewall11.mpu_region[4].allPermissions = true;
+mpu_firewall11.mpu_region[4].size           = 0x1000;
+mpu_firewall11.mpu_region[5].$name          = "CONFIG_MPU_FIREWALL_REGION46";
+mpu_firewall11.mpu_region[5].startAddr      = 0xCE007000;
+mpu_firewall11.mpu_region[5].size           = 0x1000;
+mpu_firewall11.mpu_region[5].allaidConfig   = true;
+mpu_firewall11.mpu_region[5].allPermissions = true;
+mpu_firewall11.mpu_region[6].$name          = "CONFIG_MPU_FIREWALL_REGION47";
+mpu_firewall11.mpu_region[6].startAddr      = 0xCE005000;
+mpu_firewall11.mpu_region[6].size           = 0x1000;
+mpu_firewall11.mpu_region[6].allaidConfig   = true;
+mpu_firewall11.mpu_region[6].allPermissions = true;
+mpu_firewall11.mpu_region[7].$name          = "CONFIG_MPU_FIREWALL_REGION48";
+mpu_firewall11.mpu_region[7].startAddr      = 0xCE000800;
+mpu_firewall11.mpu_region[7].size           = 0x800;
+mpu_firewall11.mpu_region[7].allaidConfig   = true;
+mpu_firewall11.mpu_region[7].allPermissions = true;
+
+mpu_firewall12.$name                          = "CONFIG_MPU_FIREWALL12";
+mpu_firewall12.instance                       = "SCRM2SCRP0_SLV";
+mpu_firewall12.mpu_region.create(2);
+mpu_firewall12.mpu_region[0].$name            = "CONFIG_MPU_FIREWALL_REGION12";
+mpu_firewall12.mpu_region[0].allPermissions   = true;
+mpu_firewall12.mpu_region[0].startAddr        = 0x53600000;
+mpu_firewall12.mpu_region[0].size             = 0x400;
+mpu_firewall12.mpu_region[0].aidConfig        = ["M4FSS0_0"];
+mpu_firewall12.mpu_region[1].$name            = "CONFIG_MPU_FIREWALL_REGION30";
+mpu_firewall12.mpu_region[1].permissionConfig = ["PER0","PER1","PER2","PER3","PER4","PER5","PER6","PER7"];
+mpu_firewall12.mpu_region[1].allPermissions   = true;
+mpu_firewall12.mpu_region[1].size             = 0x3600000;
+mpu_firewall12.mpu_region[1].allaidConfig     = true;
+
+mpu_firewall13.$name                        = "CONFIG_MPU_FIREWALL13";
+mpu_firewall13.instance                     = "SCRM2SCRP1_SLV";
+mpu_firewall13.mpu_region.create(2);
+mpu_firewall13.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION13";
+mpu_firewall13.mpu_region[0].allPermissions = true;
+mpu_firewall13.mpu_region[0].startAddr      = 0x53600000;
+mpu_firewall13.mpu_region[0].size           = 0x400;
+mpu_firewall13.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall13.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION32";
+mpu_firewall13.mpu_region[1].allPermissions = true;
+mpu_firewall13.mpu_region[1].size           = 0x3600000;
+mpu_firewall13.mpu_region[1].allaidConfig   = true;
+
+mpu_firewall14.$name                        = "CONFIG_MPU_FIREWALL14";
+mpu_firewall14.instance                     = "R5SS0_CORE0_AHB_MST";
+mpu_firewall14.mpu_region.create(2);
+mpu_firewall14.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION14";
+mpu_firewall14.mpu_region[0].allPermissions = true;
+mpu_firewall14.mpu_region[0].startAddr      = 0x53600000;
+mpu_firewall14.mpu_region[0].size           = 0x400;
+mpu_firewall14.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall14.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION34";
+mpu_firewall14.mpu_region[1].allPermissions = true;
+mpu_firewall14.mpu_region[1].size           = 0x3600000;
+mpu_firewall14.mpu_region[1].allaidConfig   = true;
+
+mpu_firewall15.$name                        = "CONFIG_MPU_FIREWALL15";
+mpu_firewall15.instance                     = "R5SS0_CORE1_AHB_MST";
+mpu_firewall15.mpu_region.create(2);
+mpu_firewall15.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION15";
+mpu_firewall15.mpu_region[0].allPermissions = true;
+mpu_firewall15.mpu_region[0].startAddr      = 0x53600000;
+mpu_firewall15.mpu_region[0].size           = 0x400;
+mpu_firewall15.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall15.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION36";
+mpu_firewall15.mpu_region[1].allPermissions = true;
+mpu_firewall15.mpu_region[1].size           = 0x3600000;
+mpu_firewall15.mpu_region[1].allaidConfig   = true;
+
+mpu_firewall16.$name                        = "CONFIG_MPU_FIREWALL16";
+mpu_firewall16.instance                     = "R5SS1_CORE0_AHB_MST";
+mpu_firewall16.mpu_region.create(2);
+mpu_firewall16.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION16";
+mpu_firewall16.mpu_region[0].allPermissions = true;
+mpu_firewall16.mpu_region[0].startAddr      = 0x53600000;
+mpu_firewall16.mpu_region[0].size           = 0x400;
+mpu_firewall16.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall16.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION38";
+mpu_firewall16.mpu_region[1].allPermissions = true;
+mpu_firewall16.mpu_region[1].size           = 0x3600000;
+mpu_firewall16.mpu_region[1].allaidConfig   = true;
+
+mpu_firewall17.$name                        = "CONFIG_MPU_FIREWALL17";
+mpu_firewall17.instance                     = "R5SS1_CORE1_AHB_MST";
+mpu_firewall17.mpu_region.create(2);
+mpu_firewall17.mpu_region[0].$name          = "CONFIG_MPU_FIREWALL_REGION17";
+mpu_firewall17.mpu_region[0].allPermissions = true;
+mpu_firewall17.mpu_region[0].startAddr      = 0x53600000;
+mpu_firewall17.mpu_region[0].size           = 0x400;
+mpu_firewall17.mpu_region[0].aidConfig      = ["M4FSS0_0"];
+mpu_firewall17.mpu_region[1].$name          = "CONFIG_MPU_FIREWALL_REGION39";
+mpu_firewall17.mpu_region[1].allPermissions = true;
+mpu_firewall17.mpu_region[1].size           = 0x3600000;
+mpu_firewall17.mpu_region[1].allaidConfig   = true;
+
+clock.timerInputClkHz = 20000000;
+
+debug_log.enableCssLog         = false;
+debug_log.enableMemLog         = true;
+debug_log.enableLogZoneError   = false;
+debug_log.enableLogZoneWarning = false;
+
+mpu_armv71.$name      = "CONFIG_MPU_REGION0";
+mpu_armv71.size       = 31;
+mpu_armv71.attributes = "Device";
+
+mpu_armv72.$name      = "CONFIG_MPU_REGION1";
+mpu_armv72.size       = 11;
+mpu_armv72.baseAddr   = 0x44000000;
+mpu_armv72.attributes = "Cached+Sharable";
+
+mpu_armv73.$name      = "CONFIG_MPU_REGION2";
+mpu_armv73.baseAddr   = 0xCE000000;
+mpu_armv73.size       = 25;
+mpu_armv73.attributes = "Device";
+
+hsmserver1.$name = "CONFIG_HSMSERVER0";
+
+keyring1.$name = "CONFIG_KEYRING0";
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/main.c b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/main.c
new file mode 100644
index 0000000..765afda
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/main.c
@@ -0,0 +1,52 @@
+/*
+ * TIFS-MCU Source File
+ *
+ * This example demonstrates the DTHE AES GCM
+ *
+ * Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com/
+ * ALL RIGHTS RESERVED 
+ * Licensed under the TI Software License Agreement found in [as_installed]/license.txt
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include "ti_drivers_config.h"
+#include "ti_board_config.h"
+#include "ti_drivers_open_close.h"
+#include "ti_board_open_close.h"
+#include "tifs_modules_config.h"
+#include <secure_ipc_notify/sipc_notify.h>
+#include <modules/hsmserver/hsmserver.h>
+#include <modules/hsmserver/hsm_srv_debug.h>
+
+/** common memory log base address */
+#define MEMLOG_BASE_ADDRESS        (0x70080000U)
+
+/** global memory log array */
+extern char gDebugMemLog[DebugP_MEM_LOG_SIZE];
+
+void crypto_aes_gcm_main(void *args);
+
+int main()
+{
+    System_init();
+    Modules_init();
+    Board_init();
+    Drivers_open();
+    Board_driversOpen();
+    HsmServer_sendBootNotify(SystemP_WAIT_FOREVER);
+
+    crypto_aes_gcm_main(NULL);
+
+    /*copying Hsm memory log to R5 memory log*/
+    memset((void *)MEMLOG_BASE_ADDRESS, 0x00, DebugP_MEM_LOG_SIZE);
+    memcpy((void *)MEMLOG_BASE_ADDRESS, (void *)gDebugMemLog, DebugP_MEM_LOG_SIZE);
+
+    Board_driversClose();
+    Drivers_close();
+    Board_deinit();
+    Modules_deinit();
+    System_deinit();
+
+    return 0;
+}
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/example.projectspec b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/example.projectspec
new file mode 100644
index 0000000..11b2eff
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/example.projectspec
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectSpec>
+    <applicability>
+        <when>
+            <context
+                deviceFamily="ARM"
+                deviceId="Cortex M.AM263x"
+            />
+        </when>
+    </applicability>
+
+    <project
+        title="Crypto Aes Gcm"
+        name = "crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang"
+        products="sysconfig;com.ti.TIFS_AM263X;com.ti.MCU_PLUS_SDK_AM263X;"
+        configurations="
+            Debug,
+            Release,
+            Development_debug,
+            Development_release,
+        "
+        connection="TIXDS110_Connection.xml"
+        toolChain="TICLANG"
+        cgtVersion="4.0.0"
+        device="Cortex M.AM263x"
+        deviceCore="Cortex_M4F_0"
+        ignoreDefaultDeviceSettings="true"
+        ignoreDefaultCCSSettings="true"
+        endianness="little"
+        outputFormat="ELF"
+        outputType="executable"
+
+        compilerBuildOptions="
+            -I${CG_TOOL_ROOT}/include/c
+            -I${TIFS_PATH}/source/drivers/
+            -I${TIFS_PATH}/source/
+            -I${TIFS_PATH}/examples/
+            -I${TIFS_PATH}/source/imports/
+            -I${TIFS_PATH}/source/imports/security_common/drivers/
+            -I${TIFS_PATH}..
+            -I${TIFS_PATH}../../..
+            -I${TIFS_PATH}../../../../../../../source
+            -I${TIFS_PATH}/source
+            -I${TIFS_PATH}../../../../../../../source/drivers
+            -I${TIFS_PATH}/source/drivers
+            -I${TIFS_PATH}../../../../../../../source/drivers/crypto/dthe
+            -I${TIFS_PATH}/source/drivers/crypto/dthe
+            -I${TIFS_PATH}../../../../../../../source/drivers/hsm_ctrl
+            -I${TIFS_PATH}/source/drivers/hsm_ctrl
+            -I${TIFS_PATH}../../../../../../../source/drivers/nvm/efuse
+            -I${TIFS_PATH}/source/drivers/nvm/efuse
+            -I${TIFS_PATH}../../../../../../../source/drivers/efuse/f021
+            -I${TIFS_PATH}/source/drivers/efuse/f021
+            -I${TIFS_PATH}../../../../../../../source/drivers/mpu_firewall/v0
+            -I${TIFS_PATH}/source/drivers/mpu_firewall/v0
+            -I${TIFS_PATH}../../../../../../../source/drivers/mpu_firewall/v0/soc/am263x
+            -I${TIFS_PATH}/source/drivers/mpu_firewall/v0/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/drivers/secmgr
+            -I${TIFS_PATH}/source/drivers/secmgr
+            -I${TIFS_PATH}../../../../../../../source/drivers/stack_canaries
+            -I${TIFS_PATH}/source/drivers/stack_canaries
+            -I${TIFS_PATH}../../../../../../../source/imports
+            -I${TIFS_PATH}/source/imports
+            -I${TIFS_PATH}../../../../../../../source/imports/board/led
+            -I${TIFS_PATH}/source/imports/board/led
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/edma/v0
+            -I${TIFS_PATH}/source/imports/drivers/edma/v0
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/pinmux/am263x
+            -I${TIFS_PATH}/source/imports/drivers/pinmux/am263x
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/soc/am263x
+            -I${TIFS_PATH}/source/imports/drivers/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/uart/v0
+            -I${TIFS_PATH}/source/imports/drivers/uart/v0
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/uart/v0/dma
+            -I${TIFS_PATH}/source/imports/drivers/uart/v0/dma
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/uart/v0/dma/edma
+            -I${TIFS_PATH}/source/imports/drivers/uart/v0/dma/edma
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/watchdog/v0
+            -I${TIFS_PATH}/source/imports/drivers/watchdog/v0
+            -I${TIFS_PATH}../../../../../../../source/imports/drivers/watchdog/v0/soc/am263x
+            -I${TIFS_PATH}/source/imports/drivers/watchdog/v0/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/imports/kernel/nortos/dpl/common
+            -I${TIFS_PATH}/source/imports/kernel/nortos/dpl/common
+            -I${TIFS_PATH}../../../../../../../source/imports/kernel/nortos/dpl/m4
+            -I${TIFS_PATH}/source/imports/kernel/nortos/dpl/m4
+            -I${TIFS_PATH}../../../../../../../source/imports/kernel/nortos/dpl/m4/ram
+            -I${TIFS_PATH}/source/imports/kernel/nortos/dpl/m4/ram
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/crypto
+            -I${TIFS_PATH}/source/imports/security_common/drivers/crypto
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/crypto/dthe
+            -I${TIFS_PATH}/source/imports/security_common/drivers/crypto/dthe
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/crypto/dthe/dma/edma
+            -I${TIFS_PATH}/source/imports/security_common/drivers/crypto/dthe/dma/edma
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/crypto/pka
+            -I${TIFS_PATH}/source/imports/security_common/drivers/crypto/pka
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/crypto/rng
+            -I${TIFS_PATH}/source/imports/security_common/drivers/crypto/rng
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/secure_ipc_notify
+            -I${TIFS_PATH}/source/imports/security_common/drivers/secure_ipc_notify
+            -I${TIFS_PATH}../../../../../../../source/imports/security_common/drivers/secure_ipc_notify/soc/am263x
+            -I${TIFS_PATH}/source/imports/security_common/drivers/secure_ipc_notify/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/modules/aes_cmac
+            -I${TIFS_PATH}/source/modules/aes_cmac
+            -I${TIFS_PATH}../../../../../../../source/modules/asset
+            -I${TIFS_PATH}/source/modules/asset
+            -I${TIFS_PATH}../../../../../../../source/modules/anti_rollback
+            -I${TIFS_PATH}/source/modules/anti_rollback
+            -I${TIFS_PATH}../../../../../../../source/modules/cert_auth
+            -I${TIFS_PATH}/source/modules/cert_auth
+            -I${TIFS_PATH}../../../../../../../source/modules/crypto
+            -I${TIFS_PATH}/source/modules/crypto
+            -I${TIFS_PATH}../../../../../../../source/modules/dkek
+            -I${TIFS_PATH}/source/modules/dkek
+            -I${TIFS_PATH}../../../../../../../source/modules/ecdsa
+            -I${TIFS_PATH}/source/modules/ecdsa
+            -I${TIFS_PATH}../../../../../../../source/modules/ext_otp
+            -I${TIFS_PATH}/source/modules/ext_otp
+            -I${TIFS_PATH}../../../../../../../source/modules/firewall
+            -I${TIFS_PATH}/source/modules/firewall
+            -I${TIFS_PATH}../../../../../../../source/modules/firewall/soc/am263x
+            -I${TIFS_PATH}/source/modules/firewall/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/modules/hkdf
+            -I${TIFS_PATH}/source/modules/hkdf
+            -I${TIFS_PATH}../../../../../../../source/modules/hsmserver
+            -I${TIFS_PATH}/source/modules/hsmserver
+            -I${TIFS_PATH}../../../../../../../source/modules/hsmserver/soc/am263x/
+            -I${TIFS_PATH}/source/modules/hsmserver/soc/am263x/
+            -I${TIFS_PATH}../../../../../../../source/modules/kdf
+            -I${TIFS_PATH}/source/modules/kdf
+            -I${TIFS_PATH}../../../../../../../source/modules/keyring
+            -I${TIFS_PATH}/source/modules/keyring
+            -I${TIFS_PATH}../../../../../../../source/modules/keyring/soc/am263x
+            -I${TIFS_PATH}/source/modules/keyring/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/modules/memlog
+            -I${TIFS_PATH}/source/modules/memlog
+            -I${TIFS_PATH}../../../../../../../source/modules/rot_switching
+            -I${TIFS_PATH}/source/modules/rot_switching
+            -I${TIFS_PATH}../../../../../../../source/modules/rot_switching/soc/am263x
+            -I${TIFS_PATH}/source/modules/rot_switching/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/modules/sec_boot
+            -I${TIFS_PATH}/source/modules/sec_boot
+            -I${TIFS_PATH}../../../../../../../source/modules/sec_debug
+            -I${TIFS_PATH}/source/modules/sec_debug
+            -I${TIFS_PATH}../../../../../../../source/modules/utils
+            -I${TIFS_PATH}/source/modules/utils
+            -I${TIFS_PATH}../../../../../../../source/soc
+            -I${TIFS_PATH}/source/soc
+            -I${TIFS_PATH}../../../../../../../source/soc/am263x
+            -I${TIFS_PATH}/source/soc/am263x
+            -I${TIFS_PATH}../../../../../../../source/modules/hsmserver/tifs/dthe
+            -I${TIFS_PATH}/source/modules/hsmserver/tifs/dthe
+            -I${TIFS_PATH}../../../../../../../source/modules/keyring
+            -I${TIFS_PATH}/source/modules/keyring
+	        -I${TIFS_PATH}/source/modules/hsmserver/tifs/hsse/soc/am263x
+            -I${TIFS_PATH}/source/modules/hsmserver/tifs/hsse
+            -I${TIFS_PATH}/source/modules/cert_auth/tifs/
+            -mcpu=cortex-m4
+            -mfloat-abi=soft
+            -fstack-protector-strong
+            -Wall
+            -Werror
+            -g
+            -Wno-gnu-variable-sized-type-not-at-end
+            -Wno-unused-function
+            -DSOC_AM263X
+            -DDEV_TYPE_HS=1
+        "
+        linkerBuildOptions="
+            -i${CG_TOOL_ROOT}/lib
+            -m=crypto_aes_gcm.${ConfigName}.map
+            --ram_model
+            --reread_libs
+        "
+
+        postBuildStep="$(MAKE) -C ${CCS_PROJECT_DIR} -f makefile_ccs_bootimage_gen OUTNAME=${BuildArtifactFileBaseName} PROFILE=${ConfigName} TIFS_PATH=${TIFS_PATH} CG_TOOL_ROOT=${CG_TOOL_ROOT} CCS_INSTALL_DIR=${CCS_INSTALL_DIR} CCS_IDE_MODE=${CCS_IDE_MODE} DEVICE=am263x"
+
+        enableSysConfigTool="true"
+        sysConfigBuildOptions="
+            --context hsm0-0 --part AM263x --package ZCZ
+        "
+
+        description="A Crypto Aes Gcm NORTOS project">
+
+        <configuration name="Development_release"
+            compilerBuildOptions="
+                    -D__DEVELOPMENT_FLOW
+                    -Os
+                "
+                linkerBuildOptions="
+                    -llibc.a
+                "
+        ></configuration>
+        <configuration name="Development_debug"
+            compilerBuildOptions="
+                    -D__DEVELOPMENT_FLOW
+                    -D_DEBUG_=1
+                "
+                linkerBuildOptions="
+                    -llibc.a
+                "
+        ></configuration>
+        <configuration name="Debug"
+            compilerBuildOptions="
+                -D_DEBUG_=1
+            "
+            linkerBuildOptions="
+                -llibc.a
+            "
+        ></configuration>
+        <configuration name="Release"
+            compilerBuildOptions="
+                -Os
+            "
+            linkerBuildOptions="
+                -llibc.a
+            "
+        ></configuration>
+        <pathVariable name="TIFS_PATH" path="${COM_TI_TIFS_AM263X_INSTALL_DIR}" scope="project" />
+        <pathVariable name="MCU_PLUS_SDK_PATH" path="${COM_TI_MCU_PLUS_SDK_AM263X_INSTALL_DIR}" scope="project" />
+        <file path="../main.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../crypto_aes_gcm.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_version.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/AddrTranslateP.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/CacheP_null.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/ClockP_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/ClockP_nortos_m4.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/CycleCounterP_m4.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_log.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_memTraceLogWriter.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_shmLogWriter.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_uartLogWriter.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/DebugP_uartScanf.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/ext_otp/ext_otp_interface.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/ecdsa/ecdsa.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/firewall/firewall_interface.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/crypto/crypto_rng_interface.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/HeapP_internal.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/HeapP_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/ram/HwiP_armv7m.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/ram/HwiP_armv7m_handlers_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/MpuP_armv7m.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/SemaphoreP_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/SysTickTimerP.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/TaskP_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/TimerP_rti_nortos.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/aes_cmac/aes_cmac_256.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/kdf/aes_cmac_kdf.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/cert_auth/asn1_parse.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/cert_auth/asn1_utils.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/asset/asset.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/m4/boot_armv7m.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/cert_auth/cert_auth.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/crypto_util.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/dkek/dkek.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/dthe/dma.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/dthe/dthe.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/dthe/dthe_aes.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/dthe/dma/edma/dthe_edma.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/crypto/dthe/dthe_secure_enable.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/dthe/dthe_sha.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/crypto/dthe/dthe_soc_ctrl.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/edma/v0/edma.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/nvm/efuse/nvm.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/efuse/f021/efuse.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/pka/eip29t2_firmware.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hkdf/hkdf.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_dkek.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_dthe_service.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_firewall_srv.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/hsm_ctrl/hsm_soc_ctrl.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_srv_debug.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_swrev.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_proc_auth_boot.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_rot_switching.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_utils.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_ext_otp.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsmserver.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/soc/am263x//hsmserver_send_boot_notify.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/tifs/dthe/hsm_defines.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/board/led/led.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/memlog/memlog.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/mpu_firewall/v0/mpu_firewall.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/mpu_firewall/v0/soc/am263x/mpu_firewall_v0_cfg.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/soc/am263x/otp_defines.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/anti_rollback/anti_rollback.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/pinmux/am263x/pinmux.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/pka/pka.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/pka/pka_eddsa.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/kernel/nortos/dpl/common/printf.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/sec_boot/sec_boot.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/sec_debug/sec_dbg.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/secmgr/secmgr.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/firewall/soc/am263x/secure_asset_exclusion_list.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/secure_ipc_notify/soc/am263x/sipc_notify_cfg.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/secure_ipc_notify/sipc_notify_src.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/soc/am263x/soc.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/soc/am263x/soc_rcm.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/soc/soc_tifs.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/drivers/stack_canaries/stack_check.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/uart/v0/dma/uart_dma.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/uart/v0/dma/edma/uart_dma_edma.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/uart/v0/uart_v0.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/rot_switching/soc/am263x/update_key_rev.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/utils/utils.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/watchdog/v0/watchdog_rti.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/drivers/watchdog/v0/soc/am263x/watchdog_soc.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/rot_switching/rot_switching.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/imports/security_common/drivers/crypto/rng/rng.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/hsmserver/hsm_keyring.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/keyring/keyring.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/keyring/keyring.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../../../../../../../source/modules/keyring/soc/am263x/keyring_soc.c" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="linker.cmd" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="../example.syscfg" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="syscfg_c.rov.xs" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+        <file path="makefile_ccs_bootimage_gen" openOnCreation="false" excludeFromBuild="false" action="copy">
+        </file>
+    </project>
+</projectSpec>
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/linker.cmd b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/linker.cmd
new file mode 100644
index 0000000..a379443
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/linker.cmd
@@ -0,0 +1,81 @@
+#define MAX_MEMORY_SIZE             (192*1024)
+#define IVT_SIZE                    320
+#define AVAILABLE_MEMORY            (MAX_MEMORY_SIZE - IVT_SIZE)
+
+#define M4_PROCESS_STACK_SIZE       2048
+#define M4_MAIN_STACK_SIZE          (16*1024)
+#define M4_TOTAL_STACK_SIZE         (M4_PROCESS_STACK_SIZE + M4_MAIN_STACK_SIZE + 8)
+
+#define HSM_RAM_CODE_DATA_SIZE          (144*1024)
+#define HSM_RAM_UNINIT_DATA_SIZE        (AVAILABLE_MEMORY - HSM_RAM_CODE_DATA_SIZE - M4_TOTAL_STACK_SIZE)
+
+/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */
+--retain="*(.vectors)"
+/* This is the stack that is used by code running within main()
+ * In case of NORTOS,
+ * - This means all the code outside of ISR uses this stack
+ * In case of FreeRTOS
+ * - This means all the code until vTaskStartScheduler() is called in main()
+ *   uses this stack.
+ * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack
+ */
+--stack_size=8192
+/* This is the heap size for malloc() API in NORTOS and FreeRTOS
+ * This is also the heap used by pvPortMalloc in FreeRTOS
+ */
+--heap_size=1024
+
+
+SECTIONS
+{
+    /* This has the M4F entry point and vector table, this MUST be at 0x0 */
+    .vectors:   {} palign(8) > VECTORS
+    .text:      {} palign(8) > HSM_RAM_CODE_DATA     /* This is where code resides */
+
+    .bss:       {} palign(8) > HSM_RAM_CODE_DATA|OCRAM_BANK0     /* This is where uninitialized globals go */
+    RUN_START(__BSS_START)
+    RUN_END(__BSS_END)
+
+    .data:      {} palign(8) > HSM_RAM_CODE_DATA     /* This is where initialized globals and static go */
+    .rodata:    {} palign(8) > HSM_RAM_CODE_DATA     /* This is where const's go */
+    .sysmem:    {} palign(8) > HSM_RAM_UNINIT     /* This is where the malloc heap goes */
+    .stack:     {
+        . += M4_MAIN_STACK_SIZE;
+        M4_MAIN_STACK_ADDRESS = .;
+    } palign(8) > STACK     /* This is where the main() stack goes */
+
+    .processStack: {
+        . += M4_PROCESS_STACK_SIZE;
+        M4_PROCESS_STACK_ADDRESS = .;
+    } palign(8) > STACK
+
+    /* Sections needed for C++ projects */
+    .ARM.exidx:     {} palign(8) > HSM_RAM_CODE_DATA  /* Needed for C++ exception handling */
+    .init_array:    {} palign(8) > HSM_RAM_CODE_DATA  /* Contains function pointers called before main */
+    .fini_array:    {} palign(8) > HSM_RAM_CODE_DATA /* Contains function pointers called after main */
+    .bss.sipc_hsm_queue_mem   (NOLOAD) : {} > MAILBOX_HSM
+    .bss.sipc_secure_host_queue_mem   (NOLOAD) : {} > MAILBOX_R5F
+    .bss.filebuf (NOLOAD) : {} > OCRAM_BANK0
+
+    /*-----------------------------------------------------------------------------
+     * ASSETS:
+     * - The assets are always placed at the beginning of the SECURE_RAM. This is
+     *   fixed address where ROM shares some important information for HSMRt functioning.
+     *-----------------------------------------------------------------------------*/
+    .assets (NOLOAD):
+    {
+    } > ASSETS
+}
+
+MEMORY
+{
+    VECTORS             : ORIGIN = 0x00000000 , LENGTH = IVT_SIZE
+    HSM_RAM_CODE_DATA   : ORIGIN = end(VECTORS), LENGTH = HSM_RAM_CODE_DATA_SIZE
+    HSM_RAM_UNINIT      : ORIGIN = end(HSM_RAM_CODE_DATA), LENGTH = HSM_RAM_UNINIT_DATA_SIZE
+    STACK               : ORIGIN = end(HSM_RAM_UNINIT), LENGTH = M4_TOTAL_STACK_SIZE
+    MAILBOX_HSM         : ORIGIN = 0x44000000 , LENGTH = 0x000003CE
+    MAILBOX_R5F         : ORIGIN = 0x44000400 , LENGTH = 0x000003CE
+    ASSETS              : ORIGIN = 0x46050000 , LENGTH = 0x000003C0
+    OCRAM_BANK0         : ORIGIN = 0x70067800 , LENGTH = 0x18000 /** For storing dthe test input and output buffers*/
+    OCRAM_BANK1         : ORIGIN = 0x70080000 , LENGTH = 0x2500 /** For storing dthe test memory logs*/
+}
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile
new file mode 100644
index 0000000..4c8ec2e
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile
@@ -0,0 +1,506 @@
+#
+# Auto generated makefile - DO NOT MODIFY
+#
+
+export TIFS_PATH?=$(abspath ../../../../../../..)
+include $(TIFS_PATH)/imports.mak
+include $(TIFS_PATH)/devconfig/devconfig.mak
+
+CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH)
+
+CC=$(CG_TOOL_ROOT)/bin/tiarmclang
+LNK=$(CG_TOOL_ROOT)/bin/tiarmclang
+STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip
+OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy
+
+BIN2C=$(TIFS_PATH)/tools/bin2c/bin2c.py
+ifeq ($(OS), Windows_NT)
+	PYTHON=python
+else
+	PYTHON=python3
+endif
+
+PROFILE?=release
+ConfigName:=$(PROFILE)
+
+OUTNAME:=crypto_aes_gcm.$(PROFILE).out
+
+BOOTIMAGE_PATH=$(abspath .)
+BOOTIMAGE_NAME_GP:=crypto_aes_gcm.$(PROFILE).appimage
+BOOTIMAGE_NAME_HS:=crypto_aes_gcm.$(PROFILE).hs.appimage
+BOOTIMAGE_BIN_NAME:=crypto_aes_gcm.$(PROFILE).bin
+
+#add RPRC generation targets. 
+# we dont support appimage signing yet. 
+
+BOOTIMAGE_RPRC_NAME:=crypto_aes_gcm.$(PROFILE).rprc
+BOOTIMAGE_RPRC_NAME_XIP:=crypto_aes_gcm.$(PROFILE).rprc_xip
+BOOTIMAGE_RPRC_NAME_TMP:=crypto_aes_gcm.$(PROFILE).rprc_tmp
+
+LIC_TSPA = ti_tspa
+
+ifeq ($(DEVICE_TYPE),HS)
+	BOOTIMAGE_NAME=$(BOOTIMAGE_NAME_HS)
+else
+	BOOTIMAGE_NAME=$(BOOTIMAGE_NAME_GP)
+endif
+
+FILES_common := \
+	main.c \
+	crypto_aes_gcm.c \
+	hsm_version.c \
+	AddrTranslateP.c \
+	CacheP_null.c \
+	ClockP_nortos.c \
+	ClockP_nortos_m4.c \
+	CycleCounterP_m4.c \
+	DebugP_log.c \
+	DebugP_memTraceLogWriter.c \
+	DebugP_nortos.c \
+	DebugP_shmLogWriter.c \
+	DebugP_uartLogWriter.c \
+	DebugP_uartScanf.c \
+	ext_otp_interface.c \
+	ecdsa.c \
+	firewall_interface.c \
+	crypto_rng_interface.c \
+	HeapP_internal.c \
+	HeapP_nortos.c \
+	HwiP_armv7m.c \
+	HwiP_armv7m_handlers_nortos.c \
+	MpuP_armv7m.c \
+	SemaphoreP_nortos.c \
+	SysTickTimerP.c \
+	TaskP_nortos.c \
+	TimerP_rti_nortos.c \
+	aes_cmac_256.c \
+	aes_cmac_kdf.c \
+	asn1_parse.c \
+	asn1_utils.c \
+	asset.c \
+	boot_armv7m.c \
+	cert_auth.c \
+	crypto_util.c \
+	dkek.c \
+	dma.c \
+	dthe.c \
+	dthe_aes.c \
+	dthe_edma.c \
+	dthe_secure_enable.c \
+	dthe_sha.c \
+	dthe_soc_ctrl.c \
+	edma.c \
+	nvm.c \
+	efuse.c \
+	eip29t2_firmware.c \
+	hkdf.c \
+	hsm_dkek.c \
+	hsm_dthe_service.c \
+	hsm_firewall_srv.c \
+	hsm_soc_ctrl.c \
+	hsm_srv_debug.c \
+	hsm_swrev.c \
+	hsm_proc_auth_boot.c \
+	hsm_rot_switching.c \
+	hsm_utils.c \
+	hsm_ext_otp.c \
+	hsmserver.c \
+	hsmserver_send_boot_notify.c \
+	hsm_defines.c \
+	led.c \
+	memlog.c \
+	mpu_firewall.c \
+	mpu_firewall_v0_cfg.c \
+	otp_defines.c \
+	anti_rollback.c \
+	pinmux.c \
+	pka.c \
+	pka_eddsa.c \
+	printf.c \
+	sec_boot.c \
+	sec_dbg.c \
+	secmgr.c \
+	secure_asset_exclusion_list.c \
+	sipc_notify_cfg.c \
+	sipc_notify_src.c \
+	soc.c \
+	soc_rcm.c \
+	soc_tifs.c \
+	stack_check.c \
+	uart_dma.c \
+	uart_dma_edma.c \
+	uart_v0.c \
+	update_key_rev.c \
+	utils.c \
+	watchdog_rti.c \
+	watchdog_soc.c \
+	rot_switching.c \
+	rng.c \
+	hsm_keyring.c \
+	keyring.c \
+	keyring_soc.c \
+	ti_drivers_config.c \
+	ti_drivers_open_close.c \
+	ti_board_config.c \
+	ti_board_open_close.c \
+	ti_dpl_config.c \
+	ti_pinmux_config.c \
+	ti_power_clock_config.c \
+    tifs_modules_config.c \
+
+FILES_PATH_common = \
+	.. \
+	../../.. \
+	../../../../../../../source \
+	/source \
+	../../../../../../../source/drivers \
+	/source/drivers \
+	../../../../../../../source/drivers/crypto/dthe \
+	/source/drivers/crypto/dthe \
+	../../../../../../../source/drivers/hsm_ctrl \
+	/source/drivers/hsm_ctrl \
+	../../../../../../../source/drivers/nvm/efuse \
+	/source/drivers/nvm/efuse \
+	../../../../../../../source/drivers/efuse/f021 \
+	/source/drivers/efuse/f021 \
+	../../../../../../../source/drivers/mpu_firewall/v0 \
+	/source/drivers/mpu_firewall/v0 \
+	../../../../../../../source/drivers/mpu_firewall/v0/soc/am263x \
+	/source/drivers/mpu_firewall/v0/soc/am263x \
+	../../../../../../../source/drivers/secmgr \
+	/source/drivers/secmgr \
+	../../../../../../../source/drivers/stack_canaries \
+	/source/drivers/stack_canaries \
+	../../../../../../../source/imports \
+	/source/imports \
+	../../../../../../../source/imports/board/led \
+	/source/imports/board/led \
+	../../../../../../../source/imports/drivers/edma/v0 \
+	/source/imports/drivers/edma/v0 \
+	../../../../../../../source/imports/drivers/pinmux/am263x \
+	/source/imports/drivers/pinmux/am263x \
+	../../../../../../../source/imports/drivers/soc/am263x \
+	/source/imports/drivers/soc/am263x \
+	../../../../../../../source/imports/drivers/uart/v0 \
+	/source/imports/drivers/uart/v0 \
+	../../../../../../../source/imports/drivers/uart/v0/dma \
+	/source/imports/drivers/uart/v0/dma \
+	../../../../../../../source/imports/drivers/uart/v0/dma/edma \
+	/source/imports/drivers/uart/v0/dma/edma \
+	../../../../../../../source/imports/drivers/watchdog/v0 \
+	/source/imports/drivers/watchdog/v0 \
+	../../../../../../../source/imports/drivers/watchdog/v0/soc/am263x \
+	/source/imports/drivers/watchdog/v0/soc/am263x \
+	../../../../../../../source/imports/kernel/nortos/dpl/common \
+	/source/imports/kernel/nortos/dpl/common \
+	../../../../../../../source/imports/kernel/nortos/dpl/m4 \
+	/source/imports/kernel/nortos/dpl/m4 \
+	../../../../../../../source/imports/kernel/nortos/dpl/m4/ram \
+	/source/imports/kernel/nortos/dpl/m4/ram \
+	../../../../../../../source/imports/security_common/drivers/crypto \
+	/source/imports/security_common/drivers/crypto \
+	../../../../../../../source/imports/security_common/drivers/crypto/dthe \
+	/source/imports/security_common/drivers/crypto/dthe \
+	../../../../../../../source/imports/security_common/drivers/crypto/dthe/dma/edma \
+	/source/imports/security_common/drivers/crypto/dthe/dma/edma \
+	../../../../../../../source/imports/security_common/drivers/crypto/pka \
+	/source/imports/security_common/drivers/crypto/pka \
+	../../../../../../../source/imports/security_common/drivers/crypto/rng \
+	/source/imports/security_common/drivers/crypto/rng \
+	../../../../../../../source/imports/security_common/drivers/secure_ipc_notify \
+	/source/imports/security_common/drivers/secure_ipc_notify \
+	../../../../../../../source/imports/security_common/drivers/secure_ipc_notify/soc/am263x \
+	/source/imports/security_common/drivers/secure_ipc_notify/soc/am263x \
+	../../../../../../../source/modules/aes_cmac \
+	/source/modules/aes_cmac \
+	../../../../../../../source/modules/asset \
+	/source/modules/asset \
+	../../../../../../../source/modules/anti_rollback \
+	/source/modules/anti_rollback \
+	../../../../../../../source/modules/cert_auth \
+	/source/modules/cert_auth \
+	../../../../../../../source/modules/crypto \
+	/source/modules/crypto \
+	../../../../../../../source/modules/dkek \
+	/source/modules/dkek \
+	../../../../../../../source/modules/ecdsa \
+	/source/modules/ecdsa \
+	../../../../../../../source/modules/ext_otp \
+	/source/modules/ext_otp \
+	../../../../../../../source/modules/firewall \
+	/source/modules/firewall \
+	../../../../../../../source/modules/firewall/soc/am263x \
+	/source/modules/firewall/soc/am263x \
+	../../../../../../../source/modules/hkdf \
+	/source/modules/hkdf \
+	../../../../../../../source/modules/hsmserver \
+	/source/modules/hsmserver \
+	../../../../../../../source/modules/hsmserver/soc/am263x/ \
+	/source/modules/hsmserver/soc/am263x/ \
+	../../../../../../../source/modules/kdf \
+	/source/modules/kdf \
+	../../../../../../../source/modules/keyring \
+	/source/modules/keyring \
+	../../../../../../../source/modules/keyring/soc/am263x \
+	/source/modules/keyring/soc/am263x \
+	../../../../../../../source/modules/memlog \
+	/source/modules/memlog \
+	../../../../../../../source/modules/rot_switching \
+	/source/modules/rot_switching \
+	../../../../../../../source/modules/rot_switching/soc/am263x \
+	/source/modules/rot_switching/soc/am263x \
+	../../../../../../../source/modules/sec_boot \
+	/source/modules/sec_boot \
+	../../../../../../../source/modules/sec_debug \
+	/source/modules/sec_debug \
+	../../../../../../../source/modules/utils \
+	/source/modules/utils \
+	../../../../../../../source/soc \
+	/source/soc \
+	../../../../../../../source/soc/am263x \
+	/source/soc/am263x \
+	../../../../../../../source/modules/hsmserver/tifs/dthe \
+	/source/modules/hsmserver/tifs/dthe \
+	../../../../../../../source/modules/keyring \
+	/source/modules/keyring \
+	generated \
+
+INCLUDES_common := \
+	-I${CG_TOOL_ROOT}/include/c \
+	-I${TIFS_PATH}/source/drivers/ \
+	-I${TIFS_PATH}/source/ \
+	-I${TIFS_PATH}/examples/ \
+	-I${TIFS_PATH}/source/imports/ \
+	-I${TIFS_PATH}/source/imports/security_common/drivers/ \
+	-I${TIFS_PATH}/source/modules/hsmserver/tifs/hsse \
+	-I${TIFS_PATH}/source/modules/cert_auth/tifs/ \
+	-I${TIFS_PATH}/source/modules/hsmserver/tifs/hsse/soc/am263x \
+	-Igenerated \
+
+DEFINES_common := \
+				-DSOC_AM263X \
+    			-DDEV_TYPE_HS=1
+
+CFLAGS_common := \
+	-mcpu=cortex-m4 \
+	-mfloat-abi=soft \
+	-fstack-protector-strong \
+	-Wall \
+	-Werror \
+	-g \
+	-Wno-gnu-variable-sized-type-not-at-end \
+	-Wno-unused-function \
+
+CFLAGS_debug := \
+	-D_DEBUG_=1 \
+
+CFLAGS_release := \
+	-Os \
+
+LNK_FILES_common = \
+	linker.cmd \
+
+LIBS_PATH_common = \
+	-Wl,-i${CG_TOOL_ROOT}/lib \
+
+LIBS_common = \
+	-llibc.a \
+
+LFLAGS_common = \
+	-Wl,--ram_model \
+	-Wl,--reread_libs \
+
+LIBS_NAME = \
+	libc.a \
+
+LIBS_PATH_NAME = \
+	${CG_TOOL_ROOT}/lib \
+
+ifeq ($(DEVELOPMENT),yes)
+DEFINES_common += -D__DEVELOPMENT_FLOW
+endif
+
+FILES := $(FILES_common) $(FILES_$(PROFILE))
+ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE))
+FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE))
+CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE))
+DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE))
+INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE))
+LIBS := $(LIBS_common) $(LIBS_$(PROFILE))
+LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE))
+LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE))
+LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE))
+
+OBJDIR := obj/$(PROFILE)/
+OBJS := $(FILES:%.c=%.obj)
+OBJS += $(ASMFILES:%.S=%.obj)
+DEPS := $(FILES:%.c=%.d)
+
+vpath %.obj $(OBJDIR)
+vpath %.c $(FILES_PATH)
+vpath %.S $(FILES_PATH)
+vpath %.lib $(LIBS_PATH_NAME)
+vpath %.a $(LIBS_PATH_NAME)
+
+$(OBJDIR)/%.obj %.obj: %.c
+	@echo  Compiling: am263x:hsm0-0:nortos:ti-arm-clang $(OUTNAME): $<
+	$(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $<
+
+$(OBJDIR)/%.obj %.obj: %.S
+	@echo  Compiling: am263x:hsm0-0:nortos:ti-arm-clang $(LIBNAME): $<
+	$(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $<
+
+all: $(BOOTIMAGE_NAME)
+
+SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h
+SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h
+SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h
+SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c
+SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h
+SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h
+SYSCFG_GEN_FILES+=generated/tifs_modules_config.c generated/tifs_modules_config.h
+
+ifeq ($(SYSCFG_DISABLED),no)
+$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME)
+else
+$(OUTNAME): $(OBJS) $(LNK_FILES) $(LIBS_NAME)
+endif
+	@echo  .
+	@echo  Linking: am263x:hsm0-0:nortos:ti-arm-clang $@ ...
+	$(LNK) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES)
+	@echo  Linking: am263x:hsm0-0:nortos:ti-arm-clang $@ Done !!!
+	@echo  .
+
+clean:
+	@echo  Cleaning: am263x:hsm0-0:nortos:ti-arm-clang $(OUTNAME) ...
+	$(RMDIR) $(OBJDIR)
+	$(RM) $(OUTNAME)
+
+	$(RM) $(BOOTIMAGE_NAME)
+	$(RM) $(BOOTIMAGE_BIN_NAME)
+
+	$(RM) $(HSMRT_IMG)
+	$(PYTHON) $(BIN2C) $(TIFS_PATH)/tools/bin/am263x/v10_01_00/tifs_am263x_hs_fs.release.hsmimage.bin $(HSMRT_IMG) HSMRT_IMG $(LIC_TSPA)
+
+scrub:
+	@echo  Scrubing: am263x:hsm0-0:nortos:ti-arm-clang crypto_aes_gcm ...
+	$(RMDIR) obj
+
+ifeq ($(OS),Windows_NT)
+	$(RM) \*.out
+	$(RM) \*.map
+	$(RM) \*.mcelf*
+	$(RM) \*.appimage*
+	$(RM) \*.rprc*
+	$(RM) \*.tiimage*
+	$(RM) \*.bin
+else
+	$(RM) *.out
+	$(RM) *.map
+	$(RM) *.mcelf*
+	$(RM) *.appimage*
+	$(RM) *.rprc*
+	$(RM) *.tiimage*
+	$(RM) *.bin
+endif
+	$(RMDIR) generated
+
+$(OBJS): | $(OBJDIR)
+
+$(OBJDIR):
+	$(MKDIR) $@
+
+
+.NOTPARALLEL:
+
+.INTERMEDIATE: syscfg
+$(SYSCFG_GEN_FILES): syscfg
+
+syscfg: ../example.syscfg
+	@echo Generating SysConfig files ...
+	$(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_TIFSPRODUCT) --product $(SYSCFG_SDKPRODUCT) --context hsm0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg
+
+syscfg-gui:
+	$(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_TIFSPRODUCT) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context hsm0-0 --part AM263x --package ZCZ --output generated/  ../example.syscfg
+
+#
+# Generation of boot image which can be loaded by ROM Boot Loader (RBL)
+#
+
+ifeq ($(OS),Windows_NT)
+EXE_EXT=.exe
+endif
+BOOTIMAGE_CERT_GEN_CMD=$(PYTHON) $(TIFS_PATH)/tools/boot/signing/mcu_rom_image_gen.py
+BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt
+
+OBJCOPY=$(CCS_PATH)/utils/tiobj2bin/tiobj2bin
+
+ifeq ($(DEVICE_TYPE),HS)
+BOOTIMAGE_CERT_KEY=$(HSM_SIGNING_KEY)
+else
+BOOTIMAGE_CERT_KEY=$(MCU_PLUS_SDK_PATH)/tools/boot/signing/mcu_gpkey.pem
+endif
+RUN_ADDRESS=0x00000000
+
+SBL_PREBUILT_PATH=$(MCU_PLUS_SDK_PATH)/tools/boot/sbl_prebuilt/am263x
+HSMRT_IMG=$(MCU_PLUS_SDK_PATH)/source/security/security_common/drivers/hsmclient/soc/am263x/hsmRtImg.h
+HSMRT_BIN_PATH=$(MCU_PLUS_SDK_PATH)/source/security/security_common/drivers/hsmclient/soc/am263x/
+
+$(BOOTIMAGE_BIN_NAME): $(OUTNAME)
+	$(OBJCOPY) $(OUTNAME) $(BOOTIMAGE_BIN_NAME) $(CGT_TI_ARM_CLANG_PATH)/bin/tiarmofd $(CGT_TI_ARM_CLANG_PATH)/bin/tiarmhex $(CCS_PATH)/utils/tiobj2bin/mkhex4bin
+
+BOOTIMAGE_CORE_ID_r5fss0-0 = 0
+BOOTIMAGE_CORE_ID_r5fss0-1 = 1
+BOOTIMAGE_CORE_ID_r5fss1-0 = 2
+BOOTIMAGE_CORE_ID_r5fss1-1 = 3
+SBL_RUN_ADDRESS=0x70002000
+SBL_DEV_ID=55
+
+
+
+#Tools to make multicore image and rprc image.  
+MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MCU_PLUS_SDK_PATH)/tools/boot/multicoreImageGen/multicoreImageGen.js
+OUTRPRC_CMD = $(SYSCFG_NODE) $(MCU_PLUS_SDK_PATH)/tools/boot/out2rprc/elf2rprc.js
+
+
+ifeq ($(OS),Windows_NT)
+  XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.exe
+else
+  UNAME_S = $(shell uname -s)
+  ifeq ($(UNAME_S), Darwin)
+    XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.out.mac
+  else
+    XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.out
+endif
+endif
+
+$(BOOTIMAGE_NAME): $(BOOTIMAGE_BIN_NAME)
+	@echo  Boot image: am263x:hsm0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ...
+
+ifeq ($(DEVICE_TYPE),HS)
+ifeq ($(DBG_ENABLED),no)
+ifeq ($(ENC_ENABLED),yes)
+	$(BOOTIMAGE_CERT_GEN_CMD) --tifs-enc --enc-key $(HSM_ENCRYPTION_KEY) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --kd-salt $(KD_SALT) --debug DBG_SOC_DEFAULT --device am263x
+else	
+	$(BOOTIMAGE_CERT_GEN_CMD) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --debug DBG_SOC_DEFAULT --device am263x
+endif
+else
+ifeq ($(ENC_ENABLED),yes)
+	$(BOOTIMAGE_CERT_GEN_CMD) --tifs-enc --enc-key $(HSM_ENCRYPTION_KEY) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --kd-salt $(KD_SALT) --debug DBG_PUBLIC_ENABLE --device am263x
+else
+	$(BOOTIMAGE_CERT_GEN_CMD) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --debug DBG_PUBLIC_ENABLE --device am263x
+endif
+endif
+endif
+
+	$(RM) $(HSMRT_IMG)
+
+ifeq ($(DEVICE_TYPE),HS)
+	@echo initiating HSMRt image bin2c conversion..... 
+	$(COPY) $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) $(HSMRT_BIN_PATH)
+	$(PYTHON) $(BIN2C) $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) $(HSMRT_IMG) HSMRT_IMG $(LIC_TSPA)
+
+	@echo  Boot image: am263x:hsm0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!!
+	@echo  .
+endif
+-include $(addprefix $(OBJDIR)/, $(DEPS))
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen
new file mode 100644
index 0000000..8a24079
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen
@@ -0,0 +1,121 @@
+#
+# Auto generated makefile - DO NOT MODIFY
+#
+
+# Below variables need to be defined outside this file or via command line
+# - MCU_PLUS_SDK_PATH
+# - PROFILE
+# - CG_TOOL_ROOT
+# - OUTNAME
+# - CCS_INSTALL_DIR
+# - CCS_IDE_MODE
+
+CCS_PATH=$(CCS_INSTALL_DIR)
+include $(TIFS_PATH)/imports.mak
+include $(TIFS_PATH)/devconfig/devconfig.mak
+
+STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip
+OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy
+
+ifeq ($(OS), Windows_NT)
+	PYTHON=python
+else
+	PYTHON=python3
+endif
+
+BIN2C=$(TIFS_PATH)/tools/bin2c/bin2c.py
+
+OUTFILE=$(PROFILE)/$(OUTNAME).out
+BOOTIMAGE_PATH=$(abspath ${PROFILE})
+BOOTIMAGE_NAME_GP:=crypto_aes_gcm.$(PROFILE).appimage
+BOOTIMAGE_NAME_HS:=crypto_aes_gcm.$(PROFILE).hs.appimage
+BOOTIMAGE_BIN_NAME:=crypto_aes_gcm.$(PROFILE).bin
+BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt
+
+
+ifeq ($(DEVICE_TYPE),HS)
+	BOOTIMAGE_NAME=$(BOOTIMAGE_NAME_HS)
+else
+	BOOTIMAGE_NAME=$(BOOTIMAGE_NAME_GP)
+endif
+
+BOOTIMAGE_CORE_ID_r5fss0-0 = 0
+BOOTIMAGE_CORE_ID_r5fss0-1 = 1
+BOOTIMAGE_CORE_ID_r5fss1-0 = 2
+BOOTIMAGE_CORE_ID_r5fss1-1 = 3
+SBL_DEV_ID=55
+
+MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MCU_PLUS_SDK_PATH)/tools/boot/multicoreImageGen/multicoreImageGen.js
+OUTRPRC_CMD = $(CCS_NODE) $(MCU_PLUS_SDK_PATH)/tools/boot/out2rprc/elf2rprc.js
+
+ifeq ($(OS),Windows_NT)
+EXE_EXT=.exe
+endif
+# Generation of boot image which can be loaded by Secondary Boot Loader (SBL)
+BOOTIMAGE_CERT_GEN_CMD=$(PYTHON) $(TIFS_PATH)/tools/boot/signing/mcu_rom_image_gen.py
+MCELF_IMAGE_GEN = $(MCU_PLUS_SDK_PATH)/tools/boot/multicore-elf/genimage.py
+
+ifeq ($(DEVICE_TYPE),HS)
+BOOTIMAGE_CERT_KEY=$(HSM_SIGNING_KEY)
+else
+BOOTIMAGE_CERT_KEY=$(MCU_PLUS_SDK_PATH)/tools/boot/signing/mcu_gpkey.pem
+endif
+
+RUN_ADDRESS=0x00000000
+
+SBL_PREBUILT_PATH=$(MCU_PLUS_SDK_PATH)/tools/boot/sbl_prebuilt/am263x
+HSMRT_IMG=$(MCU_PLUS_SDK_PATH)/source/security/security_common/drivers/hsmclient/soc/am263x/hsmRtImg.h
+HSMRT_BIN_PATH=$(MCU_PLUS_SDK_PATH)/source/security/security_common/drivers/hsmclient/soc/am263x/
+APP_IMAGE_SIGN_CMD = $(TIFS_PATH)/tools/boot/signing/mcu_appimage_x509_cert_gen.py
+
+ifeq ($(OS),Windows_NT)
+XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.exe
+else
+UNAME_S = $(shell uname -s)
+ifeq ($(UNAME_S), Darwin)
+	XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.out.mac
+else
+	XIPGEN_CMD=$(MCU_PLUS_SDK_PATH)/tools/boot/xipGen/xipGen.out
+endif
+endif
+
+MULTI_CORE_IMAGE_PARAMS = \
+	$(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_hsm0-0) \
+
+MULTI_CORE_IMAGE_PARAMS_XIP = \
+	$(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_hsm0-0)  \
+
+
+all: 
+ifeq ($(CCS_IDE_MODE),cloud)
+#	No post build steps
+else
+	@echo  Boot image: am263x:hsm0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ...
+	$(OBJCOPY) --strip-sections -O binary $(OUTFILE) $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME)
+ifeq ($(DEVICE_TYPE),HS)
+ifeq ($(DBG_ENABLED),no)
+ifeq ($(ENC_ENABLED),yes)
+	$(BOOTIMAGE_CERT_GEN_CMD) --tifs-enc --enc-key $(HSM_ENCRYPTION_KEY) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --kd-salt $(KD_SALT) --debug DBG_SOC_DEFAULT --device am263x
+else
+	$(BOOTIMAGE_CERT_GEN_CMD) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --debug DBG_SOC_DEFAULT --device am263x
+endif
+else
+ifeq ($(ENC_ENABLED),yes)
+	$(BOOTIMAGE_CERT_GEN_CMD) --tifs-enc --enc-key $(HSM_ENCRYPTION_KEY) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --kd-salt $(KD_SALT) --debug DBG_PUBLIC_ENABLE --device am263x
+else
+	$(BOOTIMAGE_CERT_GEN_CMD) --image-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --core HSM --swrv 1 --loadaddr $(RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) --debug DBG_PUBLIC_ENABLE --device am263x
+endif
+endif
+endif
+endif
+
+	$(RM) $(HSMRT_IMG)
+ifeq ($(DEVICE_TYPE),HS)
+	@echo initiating HSMRt image bin2c conversion.....
+	$(COPY) $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) $(HSMRT_BIN_PATH) 
+	$(PYTHON) $(BIN2C) $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME) $(HSMRT_IMG) HSMRT_IMG $(LIC_TSPA)
+
+	@echo  Boot image: am263x:hsm0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!!
+	@echo  .
+endif
+
diff --git a/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_projectspec
new file mode 100644
index 0000000..3113194
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang/makefile_projectspec
@@ -0,0 +1,20 @@
+#
+# Auto generated makefile - DO NOT MODIFY
+#
+
+export TIFS_PATH?=$(abspath ../../../../../../..)
+include $(TIFS_PATH)/imports.mak
+
+PROFILE?=Release
+
+PROJECT_NAME=crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang
+
+all:
+	$(CCS_ECLIPSE) -noSplash -data $(TIFS_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE)
+
+clean:
+	$(CCS_ECLIPSE) -noSplash -data $(TIFS_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean
+
+export:
+	$(MKDIR) $(TIFS_PATH)/ccs_projects
+	$(CCS_ECLIPSE) -noSplash -data $(TIFS_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full
diff --git a/examples/dthe/aes/crypto_aes_gcm/crypto_aes_gcm.c b/examples/dthe/aes/crypto_aes_gcm/crypto_aes_gcm.c
new file mode 100644
index 0000000..060b04e
--- /dev/null
+++ b/examples/dthe/aes/crypto_aes_gcm/crypto_aes_gcm.c
@@ -0,0 +1,478 @@
+/*
+ * TIFS-MCU Source File
+ *
+ * This example demonstrates the DTHE AES 128, 192, 256 bit key GCM Encryption and Decryption.
+ *
+ * Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/
+ * ALL RIGHTS RESERVED
+ * Licensed under the TI Software License Agreement found in [as_installed]/license.txt
+ */
+
+#include <string.h>
+#include <kernel/dpl/DebugP.h>
+#include <crypto/dthe/dthe.h>
+#include <crypto/dthe/dthe_aes.h>
+#include <crypto/dthe/dthe_secure_enable.h>
+#include <crypto/asym_crypt.h>
+#include <crypto/rng/rng.h>
+#include "ti_drivers_config.h"
+#include "ti_drivers_open_close.h"
+#include "ti_board_open_close.h"
+
+/* Buffer Size*/
+#define APP_CRYPTO_AES_GCM_MAX_BUFF_SIZE                 (128U)
+
+
+#define APP_CRYPTO_AES_GCM_INOUT_LENGTH_2                (80U)
+
+/* IV length*/
+#define APP_CRYPTO_AES_GCM_IV_LENGTH_IN_BYTES            (12U)
+
+/* Tag length*/
+#define APP_CRYPTO_AES_GCM_TAG_LENGTH                    (16U)
+
+/* AES GCM KEY Cache alignment size */
+#define APP_CRYPTO_AES_GCM_CACHE_ALIGNMENT              (32U)
+
+/*********************************************************************************************************************/
+/* Test Vector 1  (Key Len 128 bits) */
+static uint8_t gCryptoAesGcmKey1[] =
+{
+    0xfeU, 0xffU, 0xe9U, 0x92U, 0x86U, 0x65U, 0x73U, 0x1cU, 0x6dU, 0x6aU, 0x8fU, 0x94U, 0x67U, 0x30U, 0x83U, 0x08U,
+};
+
+static uint8_t gCryptoAesGcmIv1[] =
+{
+    0xcaU, 0xfeU, 0xbaU, 0xbeU, 0xfaU, 0xceU, 0xdbU, 0xadU, 0xdeU, 0xcaU, 0xf8U, 0x88U,
+};
+
+static uint8_t gCryptoAesGcmHash1[] =
+{
+    0xb8U, 0x3bU, 0x53U, 0x37U, 0x08U, 0xbfU, 0x53U, 0x5dU, 0x0aU, 0xa6U, 0xe5U, 0x29U, 0x80U, 0xd5U, 0x3bU, 0x78U,
+};
+
+
+static uint8_t gCryptoAesGcmAADText1[] =
+{
+    0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU, 0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU,
+    0xabU, 0xadU, 0xdaU, 0xd2U,
+};
+
+
+static uint8_t gCryptoAesGcmPlainText1[] =
+{
+    0xd9U, 0x31U, 0x32U, 0x25U, 0xf8U, 0x84U, 0x06U, 0xe5U, 0xa5U, 0x59U, 0x09U, 0xc5U, 0xafU, 0xf5U, 0x26U, 0x9aU,
+    0x86U, 0xa7U, 0xa9U, 0x53U, 0x15U, 0x34U, 0xf7U, 0xdaU, 0x2eU, 0x4cU, 0x30U, 0x3dU, 0x8aU, 0x31U, 0x8aU, 0x72U,
+    0x1cU, 0x3cU, 0x0cU, 0x95U, 0x95U, 0x68U, 0x09U, 0x53U, 0x2fU, 0xcfU, 0x0eU, 0x24U, 0x49U, 0xa6U, 0xb5U, 0x25U,
+    0xb1U, 0x6aU, 0xedU, 0xf5U, 0xaaU, 0x0dU, 0xe6U, 0x57U, 0xbaU, 0x63U, 0x7bU, 0x39U,
+};
+
+static uint8_t gCryptoAesGcmEncryptedText1[] =
+{
+    0x42U, 0x83U, 0x1eU, 0xc2U, 0x21U, 0x77U, 0x74U, 0x24U, 0x4bU, 0x72U, 0x21U, 0xb7U, 0x84U, 0xd0U, 0xd4U, 0x9cU,
+    0xe3U, 0xaaU, 0x21U, 0x2fU, 0x2cU, 0x02U, 0xa4U, 0xe0U, 0x35U, 0xc1U, 0x7eU, 0x23U, 0x29U, 0xacU, 0xa1U, 0x2eU,
+    0x21U, 0xd5U, 0x14U, 0xb2U, 0x54U, 0x66U, 0x93U, 0x1cU, 0x7dU, 0x8fU, 0x6aU, 0x5aU, 0xacU, 0x84U, 0xaaU, 0x05U,
+    0x1bU, 0xa3U, 0x0bU, 0x39U, 0x6aU, 0x0aU, 0xacU, 0x97U, 0x3dU, 0x58U, 0xe0U, 0x91U,
+};
+
+static uint8_t gCryptoAesGcmTag1[] =
+{
+    0x5bU, 0xc9U, 0x4fU, 0xbcU, 0x32U, 0x21U, 0xa5U, 0xdbU, 0x94U, 0xfaU, 0xe9U, 0x5aU, 0xe7U, 0x12U, 0x1aU, 0x47U,
+};
+
+/*********************************************************************************************************************/
+/* Test Vector 2 (Key Len 192 bits)  */
+static uint8_t gCryptoAesGcmKey2[] =
+{
+    0xfeU, 0xffU, 0xe9U, 0x92U, 0x86U, 0x65U, 0x73U, 0x1cU, 0x6dU, 0x6aU, 0x8fU, 0x94U, 0x67U, 0x30U, 0x83U, 0x08U,
+    0xfeU, 0xffU, 0xe9U, 0x92U, 0x86U, 0x65U, 0x73U, 0x1cU
+};
+
+static uint8_t gCryptoAesGcmIv2[] =
+{
+    0xcaU, 0xfeU, 0xbaU, 0xbeU, 0xfaU, 0xceU, 0xdbU, 0xadU, 0xdeU, 0xcaU, 0xf8U, 0x88U, 0x00U, 0x00U, 0x00U, 0x00U,
+};
+
+static uint8_t gCryptoAesGcmHash2[] =
+{
+    0x46U, 0x69U, 0x23U, 0xecU, 0x9aU, 0xe6U, 0x82U, 0x21U, 0x4fU, 0x2cU, 0x08U, 0x2bU, 0xadU, 0xb3U, 0x92U, 0x49U,
+};
+
+static uint8_t gCryptoAesGcmAADText2[] =
+{
+    0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU, 0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU,
+    0xabU, 0xadU, 0xdaU, 0xd2U,
+};
+
+static uint8_t gCryptoAesGcmPlainText2[] =
+{
+    0xd9U, 0x31U, 0x32U, 0x25U, 0xf8U, 0x84U, 0x06U, 0xe5U, 0xa5U, 0x59U, 0x09U, 0xc5U, 0xafU, 0xf5U, 0x26U, 0x9aU,
+    0x86U, 0xa7U, 0xa9U, 0x53U, 0x15U, 0x34U, 0xf7U, 0xdaU, 0x2eU, 0x4cU, 0x30U, 0x3dU, 0x8aU, 0x31U, 0x8aU, 0x72U,
+    0x1cU, 0x3cU, 0x0cU, 0x95U, 0x95U, 0x68U, 0x09U, 0x53U, 0x2fU, 0xcfU, 0x0eU, 0x24U, 0x49U, 0xa6U, 0xb5U, 0x25U,
+    0xb1U, 0x6aU, 0xedU, 0xf5U, 0xaaU, 0x0dU, 0xe6U, 0x57U, 0xbaU, 0x63U, 0x7bU, 0x39U,
+};
+
+static uint8_t gCryptoAesGcmEncryptedText2[] =
+{
+    0x39U, 0x80U, 0xcaU, 0x0bU, 0x3cU, 0x00U, 0xe8U, 0x41U, 0xebU, 0x06U, 0xfaU, 0xc4U, 0x87U, 0x2aU, 0x27U, 0x57U,
+    0x85U, 0x9eU, 0x1cU, 0xeaU, 0xa6U, 0xefU, 0xd9U, 0x84U, 0x62U, 0x85U, 0x93U, 0xb4U, 0x0cU, 0xa1U, 0xe1U, 0x9cU,
+    0x7dU, 0x77U, 0x3dU, 0x00U, 0xc1U, 0x44U, 0xc5U, 0x25U, 0xacU, 0x61U, 0x9dU, 0x18U, 0xc8U, 0x4aU, 0x3fU, 0x47U,
+    0x18U, 0xe2U, 0x44U, 0x8bU, 0x2fU, 0xe3U, 0x24U, 0xd9U, 0xccU, 0xdaU, 0x27U, 0x10U,
+};
+
+static uint8_t gCryptoAesGcmTag2[] =
+{
+    0x25U, 0x19U, 0x49U, 0x8eU, 0x80U, 0xf1U, 0x47U, 0x8fU, 0x37U, 0xbaU, 0x55U, 0xbdU, 0x6dU, 0x27U, 0x61U, 0x8cU,
+};
+
+/***********************************************************************************************************************/
+/* Test Vector 3 (Key len 256 bits) */
+static uint8_t gCryptoAesGcmKey3[] =
+{
+    0xfeU, 0xffU, 0xe9U, 0x92U, 0x86U, 0x65U, 0x73U, 0x1cU, 0x6dU, 0x6aU, 0x8fU, 0x94U, 0x67U, 0x30U, 0x83U, 0x08U,
+    0xfeU, 0xffU, 0xe9U, 0x92U, 0x86U, 0x65U, 0x73U, 0x1cU, 0x6dU, 0x6aU, 0x8fU, 0x94U, 0x67U, 0x30U, 0x83U, 0x08U,
+};
+
+static uint8_t gCryptoAesGcmIv3[] =
+{
+    0xcaU, 0xfeU, 0xbaU, 0xbeU, 0xfaU, 0xceU, 0xdbU, 0xadU, 0xdeU, 0xcaU, 0xf8U, 0x88U, 0x00U, 0x00U, 0x00U, 0x00U,
+};
+
+static uint8_t gCryptoAesGcmHash3[] =
+{
+    0xacU, 0xbeU, 0xf2U, 0x05U, 0x79U, 0xb4U, 0xb8U, 0xebU, 0xceU, 0x88U, 0x9bU, 0xacU, 0x87U, 0x32U, 0xdaU, 0xd7U,
+};
+
+static uint8_t gCryptoAesGcmAADText3[] =
+{
+    0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU, 0xfeU, 0xedU, 0xfaU, 0xceU, 0xdeU, 0xadU, 0xbeU, 0xefU,
+    0xabU, 0xadU, 0xdaU, 0xd2U,
+};
+
+static uint8_t gCryptoAesGcmPlainText3[] =
+{
+    0xd9U, 0x31U, 0x32U, 0x25U, 0xf8U, 0x84U, 0x06U, 0xe5U, 0xa5U, 0x59U, 0x09U, 0xc5U, 0xafU, 0xf5U, 0x26U, 0x9aU,
+    0x86U, 0xa7U, 0xa9U, 0x53U, 0x15U, 0x34U, 0xf7U, 0xdaU, 0x2eU, 0x4cU, 0x30U, 0x3dU, 0x8aU, 0x31U, 0x8aU, 0x72U,
+    0x1cU, 0x3cU, 0x0cU, 0x95U, 0x95U, 0x68U, 0x09U, 0x53U, 0x2fU, 0xcfU, 0x0eU, 0x24U, 0x49U, 0xa6U, 0xb5U, 0x25U,
+    0xb1U, 0x6aU, 0xedU, 0xf5U, 0xaaU, 0x0dU, 0xe6U, 0x57U, 0xbaU, 0x63U, 0x7bU, 0x39U,
+};
+
+static uint8_t gCryptoAesGcmEncryptedText3[] =
+{
+    0x52U, 0x2dU, 0xc1U, 0xf0U, 0x99U, 0x56U, 0x7dU, 0x07U, 0xf4U, 0x7fU, 0x37U, 0xa3U, 0x2aU, 0x84U, 0x42U, 0x7dU,
+    0x64U, 0x3aU, 0x8cU, 0xdcU, 0xbfU, 0xe5U, 0xc0U, 0xc9U, 0x75U, 0x98U, 0xa2U, 0xbdU, 0x25U, 0x55U, 0xd1U, 0xaaU,
+    0x8cU, 0xb0U, 0x8eU, 0x48U, 0x59U, 0x0dU, 0xbbU, 0x3dU, 0xa7U, 0xb0U, 0x8bU, 0x10U, 0x56U, 0x82U, 0x88U, 0x38U,
+    0xc5U, 0xf6U, 0x1eU, 0x63U, 0x93U, 0xbaU, 0x7aU, 0x0aU, 0xbcU,0xc9U, 0xf6U, 0x62U,
+};
+
+static uint8_t gCryptoAesGcmTag3[] =
+{
+    0x76U, 0xfcU, 0x6eU, 0xceU, 0x0fU, 0x4eU, 0x17U, 0x68U, 0xcdU, 0xdfU, 0x88U, 0x53U, 0xbbU, 0x2dU, 0x55U, 0x1bU,
+};
+
+/***********************************************************************************************************************/
+/* Structure to hold input parameter for GCM example*/
+struct crypto_aes_gcm_test_input
+{
+   uint8_t  testId;
+   uint8_t  *plainText;
+   uint8_t  *AADText;
+   uint8_t  *encryptedText;
+   uint8_t  *tag;
+   uint8_t  *key;
+   uint8_t  *Iv;
+   uint32_t dataLenBytes;
+   uint32_t aadLength;
+   uint8_t  keySize;
+   uint8_t  *ptrHashInput;
+};
+
+/* Internal Functions Declaration*/
+static DTHE_AES_Return_t apps_crypto_aes_gcm_execute(DTHE_Handle aesHandle, struct crypto_aes_gcm_test_input inputParam, uint8_t gcmMode, int32_t *testStatus);
+
+AsymCrypt_Handle    gAsymCryptHandle = NULL;
+DTHE_Handle			gShaHandle = NULL;
+RNG_Handle          gRngHandle = NULL;
+
+void crypto_aes_gcm_main(void *args)
+{
+    DTHE_AES_Return_t   status;
+    int32_t             testStatus = SystemP_SUCCESS;
+    DTHE_Handle         aesHandle;
+    struct crypto_aes_gcm_test_input inputParam;
+
+    Drivers_open();
+    Board_driversOpen();
+
+    /* opens DTHe driver */
+    aesHandle = DTHE_open(0);
+    DebugP_assert(aesHandle != NULL);
+
+    DebugP_log("Starting DTHE GCM Test Examples!\r\n");
+
+    /* Test 1: GCM with 128 bit Key, Mode 3 (no precomputed hash)*/
+    DebugP_log("\r\n[CRYPTO] Test 1 : GCM with 128-bit key, mode 3 (hash computed)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 1U;
+    inputParam.plainText      = gCryptoAesGcmPlainText1;
+    inputParam.AADText        = gCryptoAesGcmAADText1;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText1;
+    inputParam.tag            = gCryptoAesGcmTag1;
+    inputParam.key            = gCryptoAesGcmKey1;
+    inputParam.Iv             = gCryptoAesGcmIv1;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText1);
+    inputParam.aadLength      = sizeof(gCryptoAesGcmAADText1);
+    inputParam.keySize        = DTHE_AES_KEY_128_SIZE;
+    inputParam.ptrHashInput   = NULL;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_3, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Test 2: GCM with 192 bit Key, Mode 3*/
+    DebugP_log("\r\n[CRYPTO] Test 2 : GCM with 192-bit key, mode 3 (hash computed)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 2U;
+    inputParam.plainText      = gCryptoAesGcmPlainText2;
+    inputParam.AADText        = gCryptoAesGcmAADText2;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText2;
+    inputParam.tag            = gCryptoAesGcmTag2;
+    inputParam.key            = gCryptoAesGcmKey2;
+    inputParam.Iv             = gCryptoAesGcmIv2;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText2);
+    inputParam.aadLength     = sizeof(gCryptoAesGcmAADText2);
+    inputParam.keySize        = DTHE_AES_KEY_192_SIZE;
+    inputParam.ptrHashInput   = NULL;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_3, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Test 3: GCM with 256 bit Key, Mode 3*/
+    DebugP_log("\r\n[CRYPTO] Test 3 : GCM with 256-bit key, mode 3 (hash computed)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 3U;
+    inputParam.plainText      = gCryptoAesGcmPlainText3;
+    inputParam.AADText        = gCryptoAesGcmAADText3;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText3;
+    inputParam.tag            = gCryptoAesGcmTag3;
+    inputParam.key            = gCryptoAesGcmKey3;
+    inputParam.Iv             = gCryptoAesGcmIv3;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText3);
+    inputParam.aadLength     = sizeof(gCryptoAesGcmAADText3);
+    inputParam.keySize        = DTHE_AES_KEY_256_SIZE;
+    inputParam.ptrHashInput   = NULL;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_3, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Test 4: GCM with 128 bit Key, Mode 2*/
+    DebugP_log("\r\n[CRYPTO] Test 4 : GCM with 128-bit key, mode 2 (hash pre-loaded)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 4U;
+    inputParam.plainText      = gCryptoAesGcmPlainText1;
+    inputParam.AADText        = gCryptoAesGcmAADText1;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText1;
+    inputParam.tag            = gCryptoAesGcmTag1;
+    inputParam.key            = gCryptoAesGcmKey1;
+    inputParam.Iv             = gCryptoAesGcmIv1;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText1);
+    inputParam.aadLength     = sizeof(gCryptoAesGcmAADText1);
+    inputParam.keySize        = DTHE_AES_KEY_128_SIZE;
+    inputParam.ptrHashInput   = gCryptoAesGcmHash1;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_2, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Test 5: GCM with 192 bit Key, Mode 2*/
+    DebugP_log("\r\n[CRYPTO] Test 5 : GCM with 192-bit key, mode 2 (hash pre-loaded)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 5U;
+    inputParam.plainText      = gCryptoAesGcmPlainText2;
+    inputParam.AADText        = gCryptoAesGcmAADText2;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText2;
+    inputParam.tag            = gCryptoAesGcmTag2;
+    inputParam.key            = gCryptoAesGcmKey2;
+    inputParam.Iv             = gCryptoAesGcmIv2;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText2);
+    inputParam.aadLength     = sizeof(gCryptoAesGcmAADText2);
+    inputParam.keySize        = DTHE_AES_KEY_192_SIZE;
+    inputParam.ptrHashInput   = gCryptoAesGcmHash2;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_2, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Test 6: GCM with 256 bit Key, Mode 2*/
+    DebugP_log("\r\n[CRYPTO] Test 6 : GCM with 256-bit key, mode 2 (hash pre-loaded)\r\n");
+    memset(&inputParam,0,sizeof(inputParam));
+    inputParam.testId         = 6U;
+    inputParam.plainText      = gCryptoAesGcmPlainText3;
+    inputParam.AADText        = gCryptoAesGcmAADText3;
+    inputParam.encryptedText  = gCryptoAesGcmEncryptedText3;
+    inputParam.tag            = gCryptoAesGcmTag3;
+    inputParam.key            = gCryptoAesGcmKey3;
+    inputParam.Iv             = gCryptoAesGcmIv3;
+    inputParam.dataLenBytes   = sizeof(gCryptoAesGcmPlainText3);
+    inputParam.aadLength     = sizeof(gCryptoAesGcmAADText3);
+    inputParam.keySize        = DTHE_AES_KEY_256_SIZE;
+    inputParam.ptrHashInput   = gCryptoAesGcmHash3;
+
+    status =  apps_crypto_aes_gcm_execute(aesHandle, inputParam, DTHE_AES_GCM_MODE_2, &testStatus);
+
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    (void)DTHE_close(aesHandle);
+
+    if(testStatus == SystemP_SUCCESS)
+    {
+        DebugP_log("All tests have passed!!\r\n");
+    }
+    else
+    {
+        DebugP_log("Some tests have FAILED!!\r\n");
+    }
+
+    Board_driversClose();
+    Drivers_close();
+
+    return;
+}
+
+/* Function to execute AES GCM Encryption-Decryption along with Authentication*/
+static DTHE_AES_Return_t apps_crypto_aes_gcm_execute(DTHE_Handle aesHandle, struct crypto_aes_gcm_test_input inputParam, uint8_t gcmMode, int32_t *testStatus)
+{
+    DTHE_AES_Return_t   status;
+    DTHE_AES_Params     aesParams;
+    uint32_t            aesResultEnc[APP_CRYPTO_AES_GCM_MAX_BUFF_SIZE/4U];
+    uint32_t            aesResultDec[APP_CRYPTO_AES_GCM_MAX_BUFF_SIZE/4U];
+    uint32_t            aesGcmTagEnc[4U];
+    uint32_t            aesGcmTagDec[4U];
+
+    /*Initiate Encryption operation*/
+    DebugP_log("[CRYPTO] Initiated DTHE AES GCM Encryption with TAG generation\r\n");
+
+    /* Initialize the AES Parameters: */
+    (void)memset ((void *)&aesParams, 0, sizeof(DTHE_AES_Params));
+
+    /* Initialize the results: We set the result to a non-zero value. */
+    (void)memset ((void *)&aesResultEnc[0], 0xFF, sizeof(aesResultEnc));
+    (void)memset ((void *)&aesResultDec[0], 0xFF, sizeof(aesResultDec));
+    (void)memset ((void *)&aesGcmTagEnc[0], 0xFF, sizeof(aesGcmTagEnc));
+    (void)memset ((void *)&aesGcmTagDec[0], 0xFF, sizeof(aesGcmTagDec));
+
+    /* Initialize the Encryption parameters */
+    aesParams.algoType          = DTHE_AES_GCM_MODE;
+    aesParams.gcmModeSelect     = gcmMode;
+    aesParams.opType            = DTHE_AES_ENCRYPT;
+    aesParams.ptrKey            = (uint32_t*)inputParam.key;
+    aesParams.ptrKey1           = (uint32_t*)inputParam.ptrHashInput;
+    aesParams.keyLen            = inputParam.keySize;
+    aesParams.ptrIV             = (uint32_t*)inputParam.Iv;
+    aesParams.ptrEncryptedData  = (uint32_t*)SOC_virtToPhy(&aesResultEnc[0]);
+    aesParams.dataLenBytes      = inputParam.dataLenBytes;
+    aesParams.ptrPlainTextData  = (uint32_t*)SOC_virtToPhy(inputParam.plainText);
+    aesParams.ptrAAD            = (uint32_t *)SOC_virtToPhy(inputParam.AADText);
+    aesParams.aadLength         =  inputParam.aadLength;
+    aesParams.ptrTag            = (uint32_t*)&aesGcmTagEnc[0];
+    aesParams.useKEKMode        = FALSE;
+
+
+    /* Opens aes driver */
+    status = DTHE_AES_open(aesHandle);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Encryption */
+    status = DTHE_AES_execute(aesHandle, &aesParams);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Comaring Aes operation result with expected result */
+    if (memcmp ((void *)inputParam.encryptedText, (void *)&aesResultEnc[0], inputParam.dataLenBytes) == 0)
+    {
+        if(memcmp ((void *)inputParam.tag, (void *)&aesGcmTagEnc[0], 16) == 0)
+        {
+            *testStatus |= SystemP_SUCCESS;
+        }
+		else
+		{
+			*testStatus |= SystemP_FAILURE;
+            DebugP_log("[CRYPTO] DTHE AES GCM Authentication Tag generation failed\r\n");
+		}
+    }
+    else
+    {
+        *testStatus |= SystemP_FAILURE;
+        DebugP_log("[CRYPTO] DTHE AES GCM Encryption failed\r\n");
+    }
+
+    /* Closing AES Driver */
+    status = DTHE_AES_close(aesHandle);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    if(*testStatus == SystemP_SUCCESS)
+    {
+        DebugP_log("[CRYPTO] DTHE AES GCM Encryption and Tag generation Success!\r\n");
+
+    }
+
+    /*Initiate Decryption operation*/
+    DebugP_log("[CRYPTO] Initiated DTHE AES GCM Decryption with TAG verification\r\n");
+
+    (void)memset ((void *)&aesParams, 0, sizeof(DTHE_AES_Params));
+
+    /* Initialize the Decryption parameters */
+    aesParams.algoType          = DTHE_AES_GCM_MODE;
+    aesParams.gcmModeSelect     = gcmMode;
+    aesParams.opType            = DTHE_AES_DECRYPT;
+    aesParams.ptrKey            = (uint32_t*)inputParam.key;
+    aesParams.ptrKey1           = (uint32_t*)inputParam.ptrHashInput;
+    aesParams.keyLen            = inputParam.keySize;
+    aesParams.ptrIV             = (uint32_t*)inputParam.Iv;
+    aesParams.ptrEncryptedData  = (uint32_t*)SOC_virtToPhy(inputParam.encryptedText);
+    aesParams.dataLenBytes      = inputParam.dataLenBytes;
+    aesParams.ptrPlainTextData  = (uint32_t*)SOC_virtToPhy(&aesResultDec[0]);
+    aesParams.ptrAAD            = (uint32_t *)SOC_virtToPhy(inputParam.AADText);
+    aesParams.aadLength         =  inputParam.aadLength;
+    aesParams.ptrTag            = (uint32_t*)&aesGcmTagDec[0];
+    aesParams.useKEKMode        = FALSE;
+
+    /* Opens aes driver */
+    status = DTHE_AES_open(aesHandle);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Decryption */
+    status = DTHE_AES_execute(aesHandle, &aesParams);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    /* Comaring Aes operation result with expected result */
+    if (memcmp ((void *)inputParam.plainText, (void *)&aesResultDec[0], inputParam.dataLenBytes) == 0)
+    {
+        if(memcmp ((void *)inputParam.tag, (void *)&aesGcmTagDec[0], 16U) == 0)
+        {
+            *testStatus |= SystemP_SUCCESS;
+        }
+        else
+		{
+			*testStatus |= SystemP_FAILURE;
+            DebugP_log("[CRYPTO] DTHE AES GCM Authentication Tag verification failed\r\n");
+		}
+    }
+    else
+    {
+        *testStatus |= SystemP_FAILURE;
+        DebugP_log("[CRYPTO] DTHE AES GCM Decryption failed\r\n");
+    }
+
+    /* Closing AES Driver */
+    status = DTHE_AES_close(aesHandle);
+    DebugP_assert(DTHE_AES_RETURN_SUCCESS == status);
+
+    if(*testStatus == SystemP_SUCCESS)
+    {
+        DebugP_log("[CRYPTO] DTHE AES GCM Decryption and Authentication Success!\r\n");
+    }
+
+    return status;
+}
diff --git a/makefile.am263x b/makefile.am263x
index 0aa036e..850d5ea 100644
--- a/makefile.am263x
+++ b/makefile.am263x
@@ -41,6 +41,7 @@ help:
 	@echo  $(MAKE) -s -C examples/dthe/aes/crypto_aes_cfb_256/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
 	@echo  $(MAKE) -s -C examples/dthe/aes/crypto_aes_ctr_128/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
 	@echo  $(MAKE) -s -C examples/dthe/aes/crypto_aes_ctr_256/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
+	@echo  $(MAKE) -s -C examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
 	@echo  $(MAKE) -s -C examples/dthe/sha/crypto_sha_256/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
 	@echo  $(MAKE) -s -C examples/dthe/sha/crypto_sha_512/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
 	@echo  $(MAKE) -s -C examples/dthe/sha/crypto_hmac_sha_256/am263x/hsm0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg]
@@ -80,6 +81,7 @@ BUILD_COMBO_EXAMPLE_ALL += crypto_aes_cfb_128_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_aes_cfb_256_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_aes_ctr_128_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang
+BUILD_COMBO_EXAMPLE_ALL += crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_sha_512_am263x_hsm0-0_nortos_ti-arm-clang
 BUILD_COMBO_EXAMPLE_ALL += crypto_hmac_sha_256_am263x_hsm0-0_nortos_ti-arm-clang
@@ -145,6 +147,9 @@ examples-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_ALL)
  crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang:
 	$(MAKE) -C examples/dthe/aes/crypto_aes_ctr_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile all
 
+ crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang:
+	$(MAKE) -C examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang -f makefile all
+
  crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang:
 	$(MAKE) -C examples/dthe/sha/crypto_sha_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile all
 
@@ -220,6 +225,7 @@ BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_aes_cfb_128_am263x_hsm0-0_nortos_ti-arm-
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_aes_cfb_256_am263x_hsm0-0_nortos_ti-arm-clang_clean
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_aes_ctr_128_am263x_hsm0-0_nortos_ti-arm-clang_clean
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang_clean
+BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang_clean
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_clean
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_sha_512_am263x_hsm0-0_nortos_ti-arm-clang_clean
 BUILD_COMBO_EXAMPLE_CLEAN_ALL += crypto_hmac_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_clean
@@ -285,6 +291,9 @@ examples-private-clean: $(BUILD_COMBO_EXAMPLE_PRIVATE_CLEAN_ALL)
  crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang_clean:
 	$(MAKE) -C examples/dthe/aes/crypto_aes_ctr_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile clean
 
+ crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang_clean:
+	$(MAKE) -C examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang -f makefile clean
+
  crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_clean:
 	$(MAKE) -C examples/dthe/sha/crypto_sha_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile clean
 
@@ -360,6 +369,7 @@ BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_aes_cfb_128_am263x_hsm0-0_nortos_ti-arm-
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_aes_cfb_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_aes_ctr_128_am263x_hsm0-0_nortos_ti-arm-clang_scrub
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub
+BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang_scrub
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_sha_512_am263x_hsm0-0_nortos_ti-arm-clang_scrub
 BUILD_COMBO_EXAMPLE_SCRUB_ALL += crypto_hmac_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub
@@ -425,6 +435,9 @@ examples-scrub-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_SCRUB_ALL)
  crypto_aes_ctr_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub:
 	$(MAKE) -C examples/dthe/aes/crypto_aes_ctr_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile scrub
 
+ crypto_aes_gcm_am263x_hsm0-0_nortos_ti-arm-clang_scrub:
+	$(MAKE) -C examples/dthe/aes/crypto_aes_gcm/am263x/hsm0-0_nortos/ti-arm-clang -f makefile scrub
+
  crypto_sha_256_am263x_hsm0-0_nortos_ti-arm-clang_scrub:
 	$(MAKE) -C examples/dthe/sha/crypto_sha_256/am263x/hsm0-0_nortos/ti-arm-clang -f makefile scrub
 
diff --git a/source/imports/security_common/drivers/crypto/dthe/dthe_aes.c b/source/imports/security_common/drivers/crypto/dthe/dthe_aes.c
index 0bfd5c1..d3596d8 100644
--- a/source/imports/security_common/drivers/crypto/dthe/dthe_aes.c
+++ b/source/imports/security_common/drivers/crypto/dthe/dthe_aes.c
@@ -74,6 +74,8 @@ static void DTHE_AES_clearIV(CSL_AesRegs *ptrAesRegs);
 static void DTHE_AES_setIV(CSL_AesRegs *ptrAesRegs, const uint32_t* ptrIV);
 static void DTHE_AES_set128BitKey2Part1(CSL_AesRegs *ptrAesRegs, const uint32_t* ptrKey);
 static void DTHE_AES_set128BitKey2Part2(CSL_AesRegs *ptrAesRegs, const uint32_t* ptrKey);
+static void DTHE_AES_clearKey2Part1(CSL_AesRegs *ptrAesRegs);
+static void DTHE_AES_clearKey2Part2(CSL_AesRegs *ptrAesRegs);
 static void DTHE_AES_pollInputReady(CSL_AesRegs *ptrAesRegs);
 static void DTHE_AES_writeDataBlock(CSL_AesRegs *ptrAesRegs, const uint32_t* ptrData);
 static void DTHE_AES_pollOutputReady(CSL_AesRegs *ptrAesRegs);
@@ -203,6 +205,19 @@ static void DTHE_AES_controlMode(CSL_AesRegs *ptrAesRegs, uint32_t algoType)
         CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_F9, CSL_AES_S_CTRL_F9_RESETVAL);
         CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_XTS, CSL_AES_S_CTRL_XTS_NOOP);
     }
+    else if(algoType == DTHE_AES_GCM_MODE)
+    {
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_GCM, CSL_AES_S_CTRL_GCM_NOOP);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_CTR, CSL_AES_S_CTRL_CTR_CTR);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_CBCMAC, CSL_AES_S_CTRL_CBCMAC_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_MODE, CSL_AES_S_CTRL_MODE_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_ICM, CSL_AES_S_CTRL_ICM_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_CFB, CSL_AES_S_CTRL_CFB_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_F8, CSL_AES_S_CTRL_F8_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_F9, CSL_AES_S_CTRL_F9_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_XTS, CSL_AES_S_CTRL_XTS_RESETVAL);
+        CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_CCM, CSL_AES_S_CTRL_CCM_RESETVAL);
+    }
     else if(algoType == DTHE_AES_CCM_MODE)
     {
         CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_CCM, CSL_AES_S_CTRL_CCM_CCM);
@@ -338,7 +353,7 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
     uint32_t*       ptrWordOutputBuffer;
     uint32_t        dataLenWords;
     uint16_t        numBlocks;
-    uint32_t        partialDataSize;
+    uint32_t        partialDataSize = 0U;
     uint32_t        index = 0U;
     uint32_t        numBytes = 0U;
     uint8_t         inPartialBlock[32U];
@@ -359,13 +374,34 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
             (gStreamState == AES_STATE_NEW))
         {
             DTHE_AES_controlMode(ptrAesRegs, ptrParams->algoType);
+            
+            /* Update mode selection for GCM if provided, else set to default mode-3*/
+            if(ptrParams->algoType == DTHE_AES_GCM_MODE)
+            {
+                if(ptrParams->gcmModeSelect != 0)
+                {
+                    CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_GCM, ptrParams->gcmModeSelect);
+                }
+                else
+                {
+                    /*Default mode value set to Mode-3*/
+                    CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_GCM, DTHE_AES_GCM_MODE_3);
+                }
+            }
 
             /* Key Size setting */
             DTHE_AES_setKeySize(ptrAesRegs, ptrParams->keyLen);
 
             if((ptrParams->streamState == DTHE_AES_ONE_SHOT_SUPPORT)&&(ptrParams->dataLenBytes == 0))
             {
-                status = DTHE_AES_RETURN_FAILURE;
+                if(((ptrParams->algoType == DTHE_AES_CCM_MODE) || (ptrParams->algoType == DTHE_AES_GCM_MODE)) && (ptrParams->aadLength != 0U))
+                {
+                    /*Valid option*/
+                }
+                else
+                {
+                    status = DTHE_AES_RETURN_FAILURE;
+                }
             }
 
             /* Sanity Check: For Decryption data length always needs to be aligned */
@@ -401,6 +437,7 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                     ||(ptrParams->algoType == DTHE_AES_CTR_MODE)\
                     ||(ptrParams->algoType == DTHE_AES_ICM_MODE)\
                     ||(ptrParams->algoType == DTHE_AES_CFB_MODE)\
+                    ||(ptrParams->algoType == DTHE_AES_GCM_MODE)\
                     ||(ptrParams->algoType == DTHE_AES_CCM_MODE))
                 {
                     if (ptrParams->ptrIV == NULL)
@@ -415,6 +452,10 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                     /* Normal Key Mode: */
                     CSL_REG32_FINS(&ptrAesRegs->SYSCONFIG,AES_S_SYSCONFIG_DIRECTBUSEN,0U);
 
+                    /* Clear KEY2 (KEY2_PART1) and KEY3 (KEY2_PART2) registers*/
+                    DTHE_AES_clearKey2Part1(ptrAesRegs);
+                    DTHE_AES_clearKey2Part2(ptrAesRegs);
+
                     /* Normal Mode: Key should always be specified */
                     if (ptrParams->ptrKey != NULL)
                     {
@@ -427,6 +468,14 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                         DTHE_AES_set128BitKey2Part1(ptrAesRegs, ptrParams->ptrKey1);
                         DTHE_AES_set128BitKey2Part2(ptrAesRegs, ptrParams->ptrKey2);
                     }
+
+                    if(((ptrParams->algoType == DTHE_AES_GCM_MODE) && \
+                      ((ptrParams->gcmModeSelect == DTHE_AES_GCM_MODE_1)|| \
+                       (ptrParams->gcmModeSelect == DTHE_AES_GCM_MODE_2 ))))
+
+                    {
+                        DTHE_AES_set128BitKey2Part1(ptrAesRegs, ptrParams->ptrKey1);
+                    }
                 }
 
                 DTHE_AES_setOpType(ptrAesRegs, ptrParams->opType);
@@ -455,7 +504,22 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                     /* Enable Save Context in CTRL register*/
                     CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_SAVE_CONTEXT, 1U);
                 }
-                if (ptrParams->algoType == DTHE_AES_CCM_MODE)
+                else if(ptrParams->algoType == DTHE_AES_GCM_MODE)
+                {
+                    DTHE_AES_CTRWidth(ptrAesRegs, DTHE_AES_CTR_WIDTH_32);
+                    /* Clear the IV value */
+                    DTHE_AES_clearIV(ptrAesRegs);
+
+                    if (ptrParams->ptrIV != NULL)
+                    {
+                    	DTHE_AES_setIV(ptrAesRegs, ptrParams->ptrIV);
+                        ptrAesRegs->IV_IN_3 = 0x01000000U;
+                  	}
+
+                    /* Enable Save Context in CTRL register*/
+                    CSL_REG32_FINS(&ptrAesRegs->CTRL, AES_S_CTRL_SAVE_CONTEXT, 1U);
+                }
+                else if (ptrParams->algoType == DTHE_AES_CCM_MODE)
                 {
                     /* Clear the IV value */
                     DTHE_AES_clearIV(ptrAesRegs);
@@ -486,7 +550,8 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                 }
 				
 				/*Setup Aad data*/
-                if(ptrParams->algoType == DTHE_AES_CCM_MODE)
+                if((ptrParams->algoType == DTHE_AES_GCM_MODE)\
+                ||(ptrParams->algoType == DTHE_AES_CCM_MODE))
                 {   
                     /*Send AAD Data*/
                     if((ptrParams->aadLength%4U)==0U)
@@ -549,6 +614,8 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                                 /* Write the data: */
                                 DTHE_AES_writeDataBlock(ptrAesRegs, (uint32_t*)&inPartialBlock[0]);
                             }
+
+                            partialDataSize = 0U;
                         }
                     }
                 }
@@ -727,7 +794,7 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                             /* Read the decrypted data into the decrypted block: */
                             DTHE_AES_readDataBlock(ptrAesRegs, (uint32_t *)&outPartialBlock[0U]);
 
-                            if((ptrParams->algoType == DTHE_AES_ECB_MODE)||(ptrParams->algoType == DTHE_AES_CBC_MODE)||(ptrParams->algoType == DTHE_AES_CCM_MODE))
+                            if((ptrParams->algoType == DTHE_AES_ECB_MODE)||(ptrParams->algoType == DTHE_AES_CBC_MODE))
                             {
                                 /* Copy the data into the output buffer, always is going to be 16U */
                                 (void)memcpy ((void *)&ptrWordOutputBuffer[index << 2U],
@@ -747,7 +814,7 @@ DTHE_AES_Return_t DTHE_AES_execute(DTHE_Handle handle, const DTHE_AES_Params* pt
                         numBytes = numBytes + partialDataSize;
                     }
 
-                    if((ptrParams->algoType == DTHE_AES_CBC_MAC_MODE)||(ptrParams->algoType == DTHE_AES_CMAC_MODE)||(ptrParams->algoType == DTHE_AES_CCM_MODE))
+                    if((ptrParams->algoType == DTHE_AES_CBC_MAC_MODE)||(ptrParams->algoType == DTHE_AES_CMAC_MODE)||(ptrParams->algoType == DTHE_AES_GCM_MODE)||(ptrParams->algoType == DTHE_AES_CCM_MODE))
                     {
                         DTHE_AES_pollContextReady(ptrAesRegs);
                         DTHE_AES_readTag(ptrAesRegs, &ptrParams->ptrTag[0]);
@@ -958,6 +1025,40 @@ static void DTHE_AES_set128BitKey2Part2(CSL_AesRegs *ptrAesRegs, const uint32_t*
     return;
 }
 
+/**
+ * \brief                   The function is used to configure the key in the AES module This will only configure the 128bit keys.
+ *
+ * \param   ptrAesRegs      Pointer to the EIP38T AES Registers
+ *
+ * \param   ptrKey          Pointer to the 128bit key to be used.
+ *
+ */
+static void DTHE_AES_clearKey2Part1(CSL_AesRegs *ptrAesRegs)
+{
+    /* Clear Key2 [3:0] register fields*/
+    ptrAesRegs->KEY2_0 = 0U;
+    ptrAesRegs->KEY2_1 = 0U;
+    ptrAesRegs->KEY2_2 = 0U;
+    ptrAesRegs->KEY2_3 = 0U;
+}
+
+/**
+ * \brief                   The function is used to configure the key in the AES module This will only configure the 128bit keys.
+ *
+ * \param   ptrAesRegs      Pointer to the EIP38T AES Registers
+ *
+ * \param   ptrKey          Pointer to the 128bit key to be used.
+ *
+ */
+static void DTHE_AES_clearKey2Part2(CSL_AesRegs *ptrAesRegs)
+{
+    /* Clear Key3/ Key2[7:4] register fields*/
+    ptrAesRegs->KEY2_4 = 0U;
+    ptrAesRegs->KEY2_5 = 0U;
+    ptrAesRegs->KEY2_6 = 0U;
+    ptrAesRegs->KEY2_7 = 0U;
+}
+
 /**
  * \brief                   The function is used to set the Initialization Vector (IV) in the AES module.
  *
diff --git a/source/imports/security_common/drivers/crypto/dthe/dthe_aes.h b/source/imports/security_common/drivers/crypto/dthe/dthe_aes.h
index 062ebbc..44fec73 100644
--- a/source/imports/security_common/drivers/crypto/dthe/dthe_aes.h
+++ b/source/imports/security_common/drivers/crypto/dthe/dthe_aes.h
@@ -84,8 +84,10 @@ extern "C" {
 #define DTHE_AES_CBC_MAC_MODE                               (0x00000080U)
 /** \brief Flag for AES CMAC Mode */
 #define DTHE_AES_CMAC_MODE                                  (0x00000100U)
+/** \brief Flag for AES GCM Mode */
+#define DTHE_AES_GCM_MODE                                   (0x00000200U)
 /** \brief Flag for AES CCM Mode */
-#define DTHE_AES_CCM_MODE                                   (0x00000120U)
+#define DTHE_AES_CCM_MODE                                   (0x00000400U)
 
 /** \brief Size of AES key is of 128-bit */
 #define DTHE_AES_KEY_128_SIZE                               (0x00000001U)
@@ -119,7 +121,12 @@ extern "C" {
 /** \brief AES STREAM SUPPORT : FINISH */
 #define DTHE_AES_STREAM_FINISH                              (0xEE55FF66U)
 
-
+/** \brief AES GCM Operation Select Mode 1 */
+#define DTHE_AES_GCM_MODE_1                                 (0x1U)
+/** \brief AES GCM Operation Select Mode 2 */
+#define DTHE_AES_GCM_MODE_2                                 (0x2U)
+/** \brief AES GCM Operation Select Mode 3 */
+#define DTHE_AES_GCM_MODE_3                                 (0x3U)
 
 /* ========================================================================== */
 /*                         Structure Declarations                             */
@@ -280,6 +287,12 @@ typedef struct DTHE_AES_Params_t
      *<  CCMM value
      */
     uint32_t           ccmM;
+
+    /**
+     *< To be used only for GCM, additional mode selection for GCM operation
+     * Supported values are 1, 2 and 3
+     */
+    uint32_t           gcmModeSelect;
 }DTHE_AES_Params;
 /* ========================================================================== */
 /*                            Global Variables                                */
