Skip to content

Commit 17f066e

Browse files
committed
[#344] KMC TC/TM/AOS Apply working
1 parent 0d81c91 commit 17f066e

File tree

6 files changed

+56
-32
lines changed

6 files changed

+56
-32
lines changed

src/core/crypto_aos.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,31 +93,44 @@ int32_t Crypto_AOS_ApplySecurity(uint8_t *pTfBuffer)
9393
printf("\n");
9494
#endif
9595

96-
status = sa_if->sa_get_operational_sa_from_gvcid(tfvn, scid, vcid, 0, &sa_ptr);
96+
status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
97+
&current_managed_parameters_struct);
9798

98-
// No operational/valid SA found
99+
// No managed parameters found
99100
if (status != CRYPTO_LIB_SUCCESS)
100101
{
101102
#ifdef AOS_DEBUG
102-
printf(KRED "Error: Could not retrieve an SA!\n" RESET);
103+
printf(KRED "Error: No managed parameters found!\n" RESET);
103104
#endif
104105
mc_if->mc_log(status);
105106
return status;
106107
}
107108

108-
status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
109-
&current_managed_parameters_struct);
109+
status = sa_if->sa_get_operational_sa_from_gvcid(tfvn, scid, vcid, 0, &sa_ptr);
110110

111-
// No managed parameters found
111+
// No operational/valid SA found
112112
if (status != CRYPTO_LIB_SUCCESS)
113113
{
114114
#ifdef AOS_DEBUG
115-
printf(KRED "Error: No managed parameters found!\n" RESET);
115+
printf(KRED "Error: Could not retrieve an SA!\n" RESET);
116116
#endif
117117
mc_if->mc_log(status);
118118
return status;
119119
}
120120

121+
// status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
122+
// &current_managed_parameters_struct);
123+
124+
// // No managed parameters found
125+
// if (status != CRYPTO_LIB_SUCCESS)
126+
// {
127+
// #ifdef AOS_DEBUG
128+
// printf(KRED "Error: No managed parameters found!\n" RESET);
129+
// #endif
130+
// mc_if->mc_log(status);
131+
// return status;
132+
// }
133+
121134
#ifdef AOS_DEBUG
122135
printf(KYEL "AOS BEFORE Apply Sec:\n\t" RESET);
123136
for (int16_t i = 0; i < current_managed_parameters_struct.max_frame_size; i++)

src/core/crypto_tm.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -713,31 +713,44 @@ int32_t Crypto_TM_ApplySecurity(uint8_t *pTfBuffer)
713713
printf("\n");
714714
#endif
715715

716-
status = sa_if->sa_get_operational_sa_from_gvcid(tfvn, scid, vcid, 0, &sa_ptr);
716+
status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
717+
&current_managed_parameters_struct);
717718

718-
// No operational/valid SA found
719+
// No managed parameters found
719720
if (status != CRYPTO_LIB_SUCCESS)
720721
{
721722
#ifdef TM_DEBUG
722-
printf(KRED "Error: Could not retrieve an SA!\n" RESET);
723+
printf(KRED "Error: No managed parameters found!\n" RESET);
723724
#endif
724725
mc_if->mc_log(status);
725726
return status;
726727
}
727728

728-
status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
729-
&current_managed_parameters_struct);
729+
status = sa_if->sa_get_operational_sa_from_gvcid(tfvn, scid, vcid, 0, &sa_ptr);
730730

731-
// No managed parameters found
731+
// No operational/valid SA found
732732
if (status != CRYPTO_LIB_SUCCESS)
733733
{
734734
#ifdef TM_DEBUG
735-
printf(KRED "Error: No managed parameters found!\n" RESET);
735+
printf(KRED "Error: Could not retrieve an SA!\n" RESET);
736736
#endif
737737
mc_if->mc_log(status);
738738
return status;
739739
}
740740

741+
// status = Crypto_Get_Managed_Parameters_For_Gvcid(tfvn, scid, vcid, gvcid_managed_parameters_array,
742+
// &current_managed_parameters_struct);
743+
744+
// // No managed parameters found
745+
// if (status != CRYPTO_LIB_SUCCESS)
746+
// {
747+
// #ifdef TM_DEBUG
748+
// printf(KRED "Error: No managed parameters found!\n" RESET);
749+
// #endif
750+
// mc_if->mc_log(status);
751+
// return status;
752+
// }
753+
741754
#ifdef TM_DEBUG
742755
printf(KYEL "TM BEFORE Apply Sec:\n\t" RESET);
743756
for (int16_t i = 0; i < current_managed_parameters_struct.max_frame_size; i++)

src/crypto/kmc/cryptography_interface_kmc_crypto_service.template.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,27 +1150,25 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
11501150
uint32_t aad_len, uint8_t encrypt_bool, uint8_t authenticate_bool,
11511151
uint8_t aad_bool, uint8_t *ecs, uint8_t *acs, char *cam_cookies)
11521152
{
1153-
printf("0\n");
11541153
int32_t status = CRYPTO_LIB_SUCCESS;
11551154
key = key; // Direct key input is not supported in KMC interface
11561155
len_key = len_key; // Direct key input is not supported in KMC interface
11571156
ecs = ecs;
11581157
acs = acs;
1159-
printf("1\n");
1158+
11601159
curl_easy_reset(curl);
11611160
status = configure_curl_connect_opts(curl, cam_cookies);
11621161
if (status != CRYPTO_LIB_SUCCESS)
11631162
{
11641163
return status;
11651164
}
1166-
printf("2\n");
11671165
// Base64 URL encode IV for KMC REST Encrypt
11681166
char *iv_base64 = (char *)calloc(1, B64ENCODE_OUT_SAFESIZE(iv_len) + 1);
11691167
if (iv != NULL)
11701168
{
11711169
base64urlEncode(iv, iv_len, iv_base64, NULL);
11721170
}
1173-
printf("3\n");
1171+
11741172
#ifdef DEBUG
11751173
printf("IV_BASE64: %s\n", iv_base64);
11761174
#endif
@@ -1181,14 +1179,14 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
11811179
#ifdef DEBUG
11821180
printf("IV Base64 URL Encoded: %s\n", iv_base64);
11831181
#endif
1184-
printf("4\n");
1182+
11851183
if (sa_ptr->ek_ref[0] == '\0')
11861184
{
11871185
status = CRYPTOGRAHPY_KMC_NULL_ENCRYPTION_KEY_REFERENCE_IN_SA;
11881186
free(iv_base64);
11891187
return status;
11901188
}
1191-
printf("5\n");
1189+
11921190
char *encrypt_uri;
11931191
if (aad_bool == CRYPTO_TRUE)
11941192
{
@@ -1202,7 +1200,7 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
12021200

12031201
uint32_t mac_size_str_len = 0;
12041202
char *mac_size_str = int_to_str(mac_size * 8, &mac_size_str_len);
1205-
printf("6\n");
1203+
12061204
int len_encrypt_endpoint = strlen(encrypt_offset_endpoint) + strlen(sa_ptr->ek_ref) + strlen(iv_base64) +
12071205
strlen(AES_GCM_TRANSFORMATION) + aad_offset_str_len + mac_size_str_len;
12081206
char *encrypt_endpoint_final = (char *)malloc(len_encrypt_endpoint);
@@ -1218,7 +1216,7 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
12181216
snprintf(encrypt_endpoint_final, len_encrypt_endpoint, encrypt_offset_endpoint_null_iv, sa_ptr->ek_ref,
12191217
AES_GCM_TRANSFORMATION, aad_offset_str, mac_size_str);
12201218
}
1221-
printf("7\n");
1219+
12221220
free(aad_offset_str);
12231221
free(mac_size_str);
12241222
#ifdef DEBUG
@@ -1228,7 +1226,7 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
12281226
encrypt_uri[0] = '\0';
12291227
strcat(encrypt_uri, kmc_root_uri);
12301228
strcat(encrypt_uri, encrypt_endpoint_final);
1231-
printf("8\n");
1229+
12321230
// Prepare encrypt_payload with AAD at the front for KMC Crypto Service.
12331231
if (encrypt_bool == CRYPTO_FALSE) // Not encrypting data, only passing in AAD for TAG.
12341232
{
@@ -1252,7 +1250,7 @@ static int32_t cryptography_aead_encrypt(uint8_t *data_out, size_t len_data_out,
12521250
}
12531251
else // No AAD -- just prepare the endpoint URI
12541252
{
1255-
printf("6.2\n");
1253+
12561254
int len_encrypt_endpoint =
12571255
strlen(encrypt_endpoint) + strlen(sa_ptr->ek_ref) + strlen(iv_base64) + strlen(AES_GCM_TRANSFORMATION);
12581256
char *encrypt_endpoint_final = (char *)malloc(len_encrypt_endpoint);

src/sa/test_sadb_mariadb_sql/create_sadb_ivv_unit_tests.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ INSERT INTO TC_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv
2626
VALUES (6,'kmc/test/key130',3,X'02',1,0,16,16,NULL,0,36,X'000000000000000000000000000000000000000000000000000000000000000000000000',5,3,X'05FFFC',0,3,4,0,1,1,X'00',2);
2727

2828
-- SCID 44 (MMT) Security Associations AES/GCM/NoPadding --
29-
-- SA 7 - Only Keyed SA Available (VC 33)
29+
-- SA 7 - Only Keyed SA Available (VC 0) (Edited for TM Enc Testing)
3030
INSERT INTO TC_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)
31-
VALUES (7,'kmc/test/key130',2,X'01',1,1,12,12,16,X'000000000000000000000001',19,X'00000000000000000000000000000000000000',5,0,0,44,33,0);
31+
VALUES (7,'kmc/test/key130',3,X'01',1,1,12,12,16,X'000000000000000000000001',20,X'00000000000000000000000000000000000000',5,0,0,44,0,0);
3232

3333
-- SA 8 - Only Unkeyed SA Available (VC 32)
3434
INSERT INTO TC_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)
@@ -115,7 +115,7 @@ VALUES (6,'kmc/test/key130',3,X'02',1,0,16,16,NULL,0,36,X'0000000000000000000000
115115
-- SCID 44 (MMT) Security Associations AES/GCM/NoPadding --
116116
-- SA 7 - Only Keyed SA Available (VC 33)
117117
INSERT INTO TM_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)
118-
VALUES (7,'kmc/test/key130',2,X'01',1,1,12,12,16,X'000000000000000000000001',19,X'00000000000000000000000000000000000000',5,0,0,44,33,0);
118+
VALUES (7,'kmc/test/key130',3,X'01',1,1,12,12,16,X'000000000000000000000001',20,X'00000000000000000000000000000000000000',5,0,0,44,0,0);
119119

120120
-- SA 8 - Only Unkeyed SA Available (VC 32)
121121
INSERT INTO TM_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)
@@ -202,7 +202,7 @@ VALUES (6,'kmc/test/key130',3,X'02',1,0,16,16,NULL,0,36,X'0000000000000000000000
202202
-- SCID 44 (MMT) Security Associations AES/GCM/NoPadding --
203203
-- SA 7 - Only Keyed SA Available (VC 33)
204204
INSERT INTO AOS_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)
205-
VALUES (7,'kmc/test/key130',2,X'01',1,1,12,12,16,X'000000000000000000000001',19,X'00000000000000000000000000000000000000',5,0,0,44,33,0);
205+
VALUES (7,'kmc/test/key130',3,X'01',1,1,12,12,16,X'000000000000000000000001',20,X'00000000000000000000000000000000000000',5,0,1,3,0,0);
206206

207207
-- SA 8 - Only Unkeyed SA Available (VC 32)
208208
INSERT INTO AOS_security_associations (spi,ekid,sa_state,ecs,est,ast,shivf_len,iv_len,stmacf_len,iv,abm_len,abm,arsnw,arsn_len,tfvn,scid,vcid,mapid)

test/kmc/ut_aos_kmc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
/**
20-
* Unit Tests that make use of TC Functionality with KMC Service.
20+
* Unit Tests that make use of AOS Functionality with KMC Service.
2121
**/
2222

2323
#include "ut_aos_apply.h"
@@ -164,7 +164,7 @@ UTEST(AOS_APPLY_KMC, HAPPY_PATH_ENC_AOS_CBC_KMC)
164164
Crypto_Config_Kmc_Crypto_Service("https", "itc.kmc.nasa.gov", 8443, "crypto-service", "/certs/ammos-ca-bundle.crt",
165165
NULL, CRYPTO_TRUE, CLIENT_CERTIFICATE, "PEM", CLIENT_CERTIFICATE_KEY, NULL, NULL);
166166
GvcidManagedParameters_t AOS_UT_Managed_Parameters0 = {
167-
0, 0x0003, 0, AOS_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, AOS_SEGMENT_HDRS_NA, 1786, AOS_NO_OCF, 1};
167+
1, 0x0003, 0, AOS_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, AOS_SEGMENT_HDRS_NA, 1786, AOS_NO_OCF, 1};
168168
Crypto_Config_Add_Gvcid_Managed_Parameters(AOS_UT_Managed_Parameters0);
169169

170170
int32_t return_val = Crypto_Init();

test/kmc/ut_tm_kmc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
/**
20-
* Unit Tests that make use of TC Functionality with KMC Service.
20+
* Unit Tests that make use of TM Functionality with KMC Service.
2121
**/
2222

2323
#include "ut_tm_apply.h"
@@ -166,7 +166,7 @@ UTEST(TM_APPLY_KMC, HAPPY_PATH_ENC_TM_CBC_KMC)
166166
Crypto_Config_Kmc_Crypto_Service("https", "itc.kmc.nasa.gov", 8443, "crypto-service", "/certs/ammos-ca-bundle.crt",
167167
NULL, CRYPTO_TRUE, CLIENT_CERTIFICATE, "PEM", CLIENT_CERTIFICATE_KEY, NULL, NULL);
168168
GvcidManagedParameters_t TM_UT_Managed_Parameters = {
169-
0, 0x0003, 0, TM_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TM_SEGMENT_HDRS_NA, 1786, TM_NO_OCF, 1};
169+
0, 0x002C, 0, TM_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TM_SEGMENT_HDRS_NA, 1786, TM_NO_OCF, 1};
170170
Crypto_Config_Add_Gvcid_Managed_Parameters(TM_UT_Managed_Parameters);
171171

172172
printf("has_fecf: %d\n", current_managed_parameters_struct.has_fecf);

0 commit comments

Comments
 (0)