|
26 | 26 | #define SE05X_EC_SIGNATURE_HEADER_LENGTH 6 |
27 | 27 | #define SE05X_EC_SIGNATURE_DER_LENGTH SE05X_EC_SIGNATURE_HEADER_LENGTH + SE05X_EC_SIGNATURE_RAW_LENGTH |
28 | 28 | #define SE05X_SHA256_LENGTH 32 |
29 | | -#define SE05X_SN_LENGTH 18 |
30 | 29 | #define SE05X_DER_BUFFER_SIZE 256 |
31 | 30 | #define SE05X_TEMP_OBJECT 9999 |
32 | 31 |
|
@@ -111,8 +110,6 @@ static void setECSignatureRsValuesInDER(const byte* rawSignature, byte* signatur |
111 | 110 |
|
112 | 111 | int SE05XClass::begin() |
113 | 112 | { |
114 | | - sss_status_t status; |
115 | | - |
116 | 113 | memset(&_boot_ctx, 0, sizeof(ex_sss_boot_ctx_t)); |
117 | 114 |
|
118 | 115 | se05x_ic_power_on(); |
@@ -158,17 +155,39 @@ int SE05XClass::readConfiguration(byte data[]) |
158 | 155 | return 1; |
159 | 156 | } |
160 | 157 |
|
| 158 | +int SE05XClass::serialNumber(byte sn[]) |
| 159 | +{ |
| 160 | + return serialNumber(sn, SE05X_SN_LENGTH); |
| 161 | +} |
| 162 | + |
| 163 | +int SE05XClass::serialNumber(byte sn[], size_t length) |
| 164 | +{ |
| 165 | + size_t uidLen = SE05X_SN_LENGTH; |
| 166 | + byte UID[SE05X_SN_LENGTH]; |
| 167 | + |
| 168 | + if(!sn) { |
| 169 | + return 0; |
| 170 | + } |
| 171 | + |
| 172 | + sss_status_t status = sss_session_prop_get_au8(&_boot_ctx.session, kSSS_SessionProp_UID, UID, &uidLen); |
| 173 | + if ((status != kStatus_SSS_Success)) { |
| 174 | + SE05X_PRINT_ERROR("Error in Se05x_API_ReadObject \n"); |
| 175 | + return 0; |
| 176 | + } |
| 177 | + memcpy(sn, UID, length < SE05X_SN_LENGTH ? length : SE05X_SN_LENGTH); |
| 178 | + return 1; |
| 179 | +} |
| 180 | + |
161 | 181 | String SE05XClass::serialNumber() |
162 | 182 | { |
163 | 183 | String result = (char*)NULL; |
164 | 184 | byte UID[SE05X_SN_LENGTH]; |
165 | | - size_t uidLen = 18; |
166 | 185 |
|
167 | | - sss_session_prop_get_au8(&_boot_ctx.session, kSSS_SessionProp_UID, UID, &uidLen); |
| 186 | + serialNumber(UID, sizeof(UID)); |
168 | 187 |
|
169 | | - result.reserve(uidLen*2); |
| 188 | + result.reserve(SE05X_SN_LENGTH * 2); |
170 | 189 |
|
171 | | - for (int i = 0; i < uidLen; i++) { |
| 190 | + for (size_t i = 0; i < SE05X_SN_LENGTH; i++) { |
172 | 191 | byte b = UID[i]; |
173 | 192 |
|
174 | 193 | if (b < 16) { |
@@ -591,8 +610,6 @@ int SE05XClass::deleteAllObjects(void) |
591 | 610 |
|
592 | 611 | int SE05XClass::getObjectHandle(int objectId, sss_object_t * object) |
593 | 612 | { |
594 | | - sss_status_t status; |
595 | | - |
596 | 613 | if(kStatus_SSS_Success != sss_key_object_init(object, &_boot_ctx.ks)) { |
597 | 614 | SE05X_PRINT_ERROR("sss_key_object_init Failed"); |
598 | 615 | return 0; |
|
0 commit comments