@@ -595,6 +595,97 @@ int SE05XClass::readSlot(int slot, byte data[], int length)
595
595
return readBinaryObject (slot, data, length, &size);
596
596
}
597
597
598
+ int SE05XClass::AES_ECB_encrypt (int objectId, const byte data[], size_t data_length, byte output[], size_t *output_len)
599
+ {
600
+ smStatus_t status;
601
+ status = Se05x_API_CipherOneShot (&_se05x_session, objectId, kSE05x_CipherMode_AES_ECB_NOPAD , data, data_length, 0 , 0 , output, output_len, kSE05x_Cipher_Oper_OneShot_Encrypt );
602
+ if (status != SM_OK) {
603
+ SMLOG_E (" Error in Se05x_API_CipherOneShot \n " );
604
+ return 0 ;
605
+ }
606
+ return 1 ;
607
+ }
608
+
609
+ int SE05XClass::AES_ECB_decrypt (int objectId, const byte data[], size_t data_length, byte output[], size_t *output_len)
610
+ {
611
+ smStatus_t status;
612
+ status = Se05x_API_CipherOneShot (&_se05x_session, objectId, kSE05x_CipherMode_AES_ECB_NOPAD , data, data_length, 0 , 0 , output, output_len, kSE05x_Cipher_Oper_OneShot_Decrypt );
613
+ if (status != SM_OK) {
614
+ SMLOG_E (" Error in Se05x_API_CipherOneShot \n " );
615
+ return 0 ;
616
+ }
617
+ return 1 ;
618
+ }
619
+
620
+ int SE05XClass::writeAESKey (int objectId, const byte data[], size_t length)
621
+ {
622
+ smStatus_t status;
623
+ SE05x_Result_t result;
624
+ uint16_t offset = 0 ;
625
+ uint16_t size;
626
+
627
+ status = Se05x_API_CheckObjectExists (&_se05x_session, objectId, &result);
628
+ if (status != SM_OK) {
629
+ SMLOG_E (" Error in Se05x_API_CheckObjectExists \n " );
630
+ return 0 ;
631
+ }
632
+
633
+ if (result == kSE05x_Result_SUCCESS ) {
634
+ SMLOG_E (" Object exists \n " );
635
+ return 0 ;
636
+ }
637
+
638
+ uint16_t left = length;
639
+
640
+ status = Se05x_API_WriteSymmKey (&_se05x_session, NULL , 3 , objectId, NULL , data, length, kSE05x_INS_NA , kSE05x_SymmKeyType_AES );
641
+
642
+ if (status != SM_OK) {
643
+ SMLOG_E (" Error in Se05x_API_WriteSymmKey \n " );
644
+ return 0 ;
645
+ }
646
+ return 1 ;
647
+ }
648
+
649
+ int SE05XClass::writeHMACKey (int objectId, const byte data[], size_t length)
650
+ {
651
+ smStatus_t status;
652
+ SE05x_Result_t result;
653
+ uint8_t exists = 0 ;
654
+ uint16_t offset = 0 ;
655
+ uint16_t size;
656
+
657
+ status = Se05x_API_CheckObjectExists (&_se05x_session, objectId, &result);
658
+ if (status != SM_OK) {
659
+ SMLOG_E (" Error in Se05x_API_CheckObjectExists \n " );
660
+ return 0 ;
661
+ }
662
+
663
+ if (result == kSE05x_Result_SUCCESS ) {
664
+ SMLOG_E (" Object exists \n " );
665
+ exists = 1 ;
666
+ }
667
+
668
+ status = Se05x_API_WriteSymmKey (&_se05x_session, NULL , 0 , objectId, SE05x_KeyID_KEK_NONE, data, length, kSE05x_INS_NA , kSE05x_SymmKeyType_HMAC );
669
+
670
+ if (status != SM_OK) {
671
+ SMLOG_E (" Error in Se05x_API_WriteSymmKey \n " );
672
+ return 0 ;
673
+ }
674
+ return 1 ;
675
+ }
676
+
677
+ int SE05XClass::HMAC_Generate (int objectId, uint8_t mac_operation, const byte data[], size_t data_length, byte output[], size_t *output_len)
678
+ {
679
+ smStatus_t status;
680
+ status = Se05x_API_MACOneShot_G (&_se05x_session, objectId, mac_operation, data, data_length, output, output_len);
681
+
682
+ if (status != SM_OK) {
683
+ SMLOG_E (" Error in Se05x_API_CipherOneShot \n " );
684
+ return status;
685
+ }
686
+ return 1 ;
687
+ }
688
+
598
689
int SE05XClass::writeBinaryObject (int objectId, const byte data[], size_t length)
599
690
{
600
691
smStatus_t status;
@@ -668,7 +759,7 @@ int SE05XClass::deleteBinaryObject(int objectId)
668
759
669
760
status = Se05x_API_DeleteSecureObject (&_se05x_session, objectId);
670
761
if (status != SM_OK) {
671
- SMLOG_E (" Error in Se05x_API_CheckObjectExists \n " );
762
+ SMLOG_E (" Error in Se05x_API_DeleteSecureObject \n " );
672
763
return 0 ;
673
764
}
674
765
0 commit comments