Skip to content

Commit b8cd0b2

Browse files
authored
Merge pull request #215 from Zondax/add-manifest
Add manifest
2 parents 7eeb612 + 93199f8 commit b8cd0b2

30 files changed

Lines changed: 88 additions & 79 deletions

File tree

.github/workflows/guidelines_enforcer.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,3 @@ jobs:
2121
guidelines_enforcer:
2222
name: Call Ledger guidelines_enforcer
2323
uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1
24-
with:
25-
relative_app_directory: app
26-
run_for_devices: '["nanos", "nanosp", "nanox"]'

app/Makefile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ else ifeq ($(COIN),oasis_validator)
4848
DEFINES += APP_VALIDATOR
4949
APPNAME = "OasisVal"
5050
APPPATH = "43'/474'"
51-
APPCURVE =
52-
ifeq ($(TARGET_NAME),TARGET_NANOS)
53-
APP_STACK_SIZE:=1956
54-
endif
51+
APPCURVE = --curve ed25519
5552

5653
ifeq ($(TARGET_NAME),TARGET_NANOX)
5754
$(error "Oasis Validator App is not supported in Nano X")

app/Makefile.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
APPVERSION_M=2
22
APPVERSION_N=5
3-
APPVERSION_P=8
3+
APPVERSION_P=9

app/src/consumer/parser_impl_con.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,8 +1383,8 @@ __Z_INLINE parser_error_t _readRuntimeEncrypted(parser_tx_t *v, CborValue *rootI
13831383
cx_sha256_t ctx;
13841384
memset(&ctx, 0, sizeof(ctx));
13851385
cx_sha256_init_no_throw(&ctx);
1386-
cx_hash_no_throw(&ctx.header, CX_LAST, buffer, buffer_size, (unsigned char *)&v->oasis.runtime.call.body.encrypted.data_hash,
1387-
sizeof(v->oasis.runtime.call.body.encrypted.data_hash));
1386+
CHECK_CX_PARSER_OK(cx_hash_no_throw(&ctx.header, CX_LAST, buffer, buffer_size, (unsigned char *)&v->oasis.runtime.call.body.encrypted.data_hash,
1387+
sizeof(v->oasis.runtime.call.body.encrypted.data_hash)));
13881388
#else
13891389
picohash_ctx_t ctx;
13901390
picohash_init_sha256(&ctx);
@@ -1432,8 +1432,8 @@ __Z_INLINE parser_error_t _readRuntimeEvmBody(parser_tx_t *v, CborValue *rootIte
14321432
cx_sha256_t ctx;
14331433
memset(&ctx, 0, sizeof(ctx));
14341434
cx_sha256_init_no_throw(&ctx);
1435-
cx_hash_no_throw(&ctx.header, CX_LAST, buffer, buffer_size, (unsigned char *)&v->oasis.runtime.call.body.encrypted.data_hash,
1436-
sizeof(v->oasis.runtime.call.body.encrypted.data_hash));
1435+
CHECK_CX_PARSER_OK(cx_hash_no_throw(&ctx.header, CX_LAST, buffer, buffer_size, (unsigned char *)&v->oasis.runtime.call.body.encrypted.data_hash,
1436+
sizeof(v->oasis.runtime.call.body.encrypted.data_hash)));
14371437
#else
14381438
picohash_ctx_t ctx;
14391439
picohash_init_sha256(&ctx);

app/src/consumer/parser_impl_con.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@
2323
extern "C" {
2424
#endif
2525

26+
#define CHECK_CX_PARSER_OK(CALL) \
27+
do { \
28+
cx_err_t __cx_err = CALL; \
29+
if (__cx_err != CX_OK) { \
30+
return parser_unexepected_error; \
31+
} \
32+
} while (0)
33+
2634
extern const char context_prefix_tx[];
2735
extern const char context_prefix_entity[];
2836
extern const char context_prefix_entity_metadata[];

app/src/crypto.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ __Z_INLINE zxerr_t keccak_hash(const unsigned char *in, unsigned int inLen,
4242
cx_sha3_t ctx;
4343
zxerr_t error = zxerr_unknown;
4444

45-
CATCH_CXERROR(cx_keccak_init_no_throw(&ctx, outLen * 8))
46-
CATCH_CXERROR(cx_hash_no_throw((cx_hash_t *)&ctx, CX_LAST, in, inLen, out, outLen))
45+
CATCH_CXERROR(cx_keccak_init_no_throw(&ctx, outLen * 8));
46+
CATCH_CXERROR(cx_hash_no_throw((cx_hash_t *)&ctx, CX_LAST, in, inLen, out, outLen));
4747
error = zxerr_ok;
4848

4949
catch_cx_error:
@@ -96,7 +96,7 @@ zxerr_t crypto_extractPublicKeySr25519(uint8_t *pubKey, uint16_t pubKeyLen) {
9696
get_sr25519_sk(privateKeyData);
9797
}
9898

99-
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(pubKey, privateKeyData))
99+
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(pubKey, privateKeyData));
100100
error = zxerr_ok;
101101

102102
catch_cx_error:
@@ -128,11 +128,11 @@ zxerr_t crypto_extractPublicKeyEd25519(uint8_t *pubKey, uint16_t pubKeyLen) {
128128
privateKeyData,
129129
NULL,
130130
NULL,
131-
0))
131+
0));
132132

133-
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, 32, &cx_privateKey))
134-
CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_Ed25519, NULL, 0, &cx_publicKey))
135-
CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_Ed25519, &cx_publicKey, &cx_privateKey, 1))
133+
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, 32, &cx_privateKey));
134+
CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_Ed25519, NULL, 0, &cx_publicKey));
135+
CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_Ed25519, &cx_publicKey, &cx_privateKey, 1));
136136
// Format pubkey
137137
for (int i = 0; i < 32; i++) {
138138
pubKey[i] = cx_publicKey.W[64 - i];
@@ -171,11 +171,11 @@ zxerr_t crypto_extractPublicKeySecp256k1(uint8_t *pubKey, uint16_t pubKeyLen, ui
171171
privateKeyData,
172172
chainCode,
173173
NULL,
174-
0))
174+
0));
175175

176-
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, SK_SECP256K1_SIZE, &cx_privateKey))
177-
CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, NULL, 0, &cx_publicKey))
178-
CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_256K1, &cx_publicKey, &cx_privateKey, 1))
176+
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, SK_SECP256K1_SIZE, &cx_privateKey));
177+
CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, NULL, 0, &cx_publicKey));
178+
CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_256K1, &cx_publicKey, &cx_privateKey, 1));
179179
memcpy(pubKey, cx_publicKey.W, PK_LEN_SECP256K1_FULL);
180180
error = zxerr_ok;
181181

@@ -224,16 +224,16 @@ zxerr_t crypto_signSecp256k1(uint8_t *output, uint16_t outputLen, const uint8_t
224224
privateKeyData,
225225
NULL,
226226
NULL,
227-
0))
227+
0));
228228

229-
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, SK_SECP256K1_SIZE, &cx_privateKey))
229+
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, SK_SECP256K1_SIZE, &cx_privateKey));
230230
CATCH_CXERROR(cx_ecdsa_sign_no_throw(&cx_privateKey,
231231
CX_RND_RFC6979 | CX_LAST,
232232
CX_SHA256,
233233
message,
234234
messageLen,
235235
signature_object->der_signature,
236-
&maxSignatureLen, &info))
236+
&maxSignatureLen, &info));
237237

238238
const err_convert_e err_c = convertDERtoRSV(signature_object->der_signature, info, signature_object->r, signature_object->s, &signature_object->v);
239239
if (err_c == no_error) {
@@ -274,15 +274,15 @@ zxerr_t crypto_signEd25519(uint8_t *output, uint16_t outputLen, const uint8_t *m
274274
privateKeyData,
275275
NULL,
276276
NULL,
277-
0))
277+
0));
278278

279-
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, 32, &cx_privateKey))
279+
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, 32, &cx_privateKey));
280280
CATCH_CXERROR(cx_eddsa_sign_no_throw(&cx_privateKey,
281281
CX_SHA512,
282282
message,
283283
messageLen,
284284
output,
285-
outputLen))
285+
outputLen));
286286

287287
*sigSize = ED25519_SIGNATURE_SIZE;
288288
error = zxerr_ok;
@@ -316,7 +316,7 @@ zxerr_t crypto_sign_sr25519(uint8_t *output, uint16_t outputLen, const uint8_t *
316316
sk,
317317
NULL,
318318
NULL,
319-
0))
319+
0));
320320

321321
if (mode == HDW_ED25519_SLIP10) {
322322
uint8_t privateKeyData_expanded[SK_LEN_25519] = {0};
@@ -327,9 +327,9 @@ zxerr_t crypto_sign_sr25519(uint8_t *output, uint16_t outputLen, const uint8_t *
327327
get_sr25519_sk(sk);
328328
}
329329

330-
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(pk, sk))
330+
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(pk, sk));
331331
sign_sr25519_phase1(sk, pk, ctx, ctx_len, data, len, output);
332-
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(output, output + PK_LEN_SR25519))
332+
CATCH_CXERROR(crypto_scalarmult_ristretto255_base_sdk(output, output + PK_LEN_SR25519));
333333
*sigSize = SIG_LEN;
334334
error = zxerr_ok;
335335

@@ -366,15 +366,15 @@ zxerr_t _sign(uint8_t *output, uint16_t outputLen, const uint8_t *message, uint1
366366
privateKeyData,
367367
NULL,
368368
NULL,
369-
0))
370-
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey))
369+
0));
370+
CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey));
371371
CATCH_CXERROR(cx_ecdsa_sign_no_throw(&cx_privateKey,
372372
CX_RND_RFC6979 | CX_LAST,
373373
CX_SHA256,
374374
message,
375375
messageLen,
376376
signature->der_signature,
377-
&signatureLength, &tmpInfo))
377+
&signatureLength, &tmpInfo));
378378

379379
const err_convert_e err_c = convertDERtoRSV(signature->der_signature, tmpInfo, signature->r, signature->s, &signature->v);
380380
if (err_c == no_error) {

app/src/ristretto.c

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ static cx_err_t fe25519_cneg_sdk(fe25519_sdk h, const fe25519_sdk f, unsigned in
121121
{
122122
fe25519_sdk negf;
123123

124-
CHECK_CXERROR(fe25519_neg_sdk(negf, f))
124+
CHECK_CXERROR(fe25519_neg_sdk(negf, f));
125125
fe25519_copy_sdk(h, f);
126126
fe25519_cmov_sdk(h, negf, b);
127127

@@ -153,29 +153,29 @@ static cx_err_t ristretto255_sqrt_ratio_m1_sdk(fe25519_sdk x, const fe25519_sdk
153153
fe25519_sdk x_sqrtm1;
154154
int has_p_root, has_f_root;
155155

156-
CHECK_CXERROR(fe25519_sq_sdk(v3, v))
157-
CHECK_CXERROR(fe25519_mul_sdk(v3, v3, v)) /* v3 = v^3 */
158-
CHECK_CXERROR(fe25519_sq_sdk(x, v3))
159-
CHECK_CXERROR(fe25519_mul_sdk(x, x, u))
160-
CHECK_CXERROR(fe25519_mul_sdk(x, x, v)) /* x = uv^7 */
156+
CHECK_CXERROR(fe25519_sq_sdk(v3, v));
157+
CHECK_CXERROR(fe25519_mul_sdk(v3, v3, v)); /* v3 = v^3 */
158+
CHECK_CXERROR(fe25519_sq_sdk(x, v3));
159+
CHECK_CXERROR(fe25519_mul_sdk(x, x, u));
160+
CHECK_CXERROR(fe25519_mul_sdk(x, x, v)); /* x = uv^7 */
161161

162-
CHECK_CXERROR(fe25519_pow22523_sdk(x, x)) /* x = (uv^7)^((q-5)/8) */
163-
CHECK_CXERROR(fe25519_mul_sdk(x, x, v3))
164-
CHECK_CXERROR(fe25519_mul_sdk(x, x, u)) /* x = uv^3(uv^7)^((q-5)/8) */
162+
CHECK_CXERROR(fe25519_pow22523_sdk(x, x)); /* x = (uv^7)^((q-5)/8) */
163+
CHECK_CXERROR(fe25519_mul_sdk(x, x, v3));
164+
CHECK_CXERROR(fe25519_mul_sdk(x, x, u)); /* x = uv^3(uv^7)^((q-5)/8) */
165165

166-
CHECK_CXERROR(fe25519_sq_sdk(vxx, x))
167-
CHECK_CXERROR(fe25519_mul_sdk(vxx, vxx, v)) /* vx^2 */
168-
CHECK_CXERROR(fe25519_sub_sdk(m_root_check, vxx, u)) /* vx^2-u */
169-
CHECK_CXERROR(fe25519_add_sdk(p_root_check, vxx, u)) /* vx^2+u */
170-
CHECK_CXERROR(fe25519_mul_sdk(f_root_check, u, fe25519_sqrtm1_sdk)) /* u*sqrt(-1) */
171-
CHECK_CXERROR(fe25519_add_sdk(f_root_check, vxx, f_root_check)) /* vx^2+u*sqrt(-1) */
166+
CHECK_CXERROR(fe25519_sq_sdk(vxx, x));
167+
CHECK_CXERROR(fe25519_mul_sdk(vxx, vxx, v)); /* vx^2 */
168+
CHECK_CXERROR(fe25519_sub_sdk(m_root_check, vxx, u)); /* vx^2-u */
169+
CHECK_CXERROR(fe25519_add_sdk(p_root_check, vxx, u)); /* vx^2+u */
170+
CHECK_CXERROR(fe25519_mul_sdk(f_root_check, u, fe25519_sqrtm1_sdk)); /* u*sqrt(-1) */
171+
CHECK_CXERROR(fe25519_add_sdk(f_root_check, vxx, f_root_check)); /* vx^2+u*sqrt(-1) */
172172

173173
has_p_root = fe25519_iszero_sdk(p_root_check);
174174
has_f_root = fe25519_iszero_sdk(f_root_check);
175-
CHECK_CXERROR(fe25519_mul_sdk(x_sqrtm1,x, fe25519_sqrtm1_sdk))
175+
CHECK_CXERROR(fe25519_mul_sdk(x_sqrtm1,x, fe25519_sqrtm1_sdk));
176176

177177
fe25519_cmov_sdk(x, x_sqrtm1, has_p_root | has_f_root);
178-
CHECK_CXERROR(fe25519_abs_sdk(x, x))
178+
CHECK_CXERROR(fe25519_abs_sdk(x, x));
179179

180180
return CX_OK;
181181
}
@@ -198,28 +198,28 @@ static cx_err_t ristretto255_p3_tobytes_sdk(fe25519_sdk s, const ge25519_p3_sdk
198198
fe25519_sdk zmy;
199199
int rotate;
200200

201-
CHECK_CXERROR(fe25519_add_sdk(u1, h->Z, h->Y)) /* u1 = Z+Y */
202-
CHECK_CXERROR(fe25519_sub_sdk(zmy, h->Z, h->Y)) /* zmy = Z-Y */
203-
CHECK_CXERROR(fe25519_mul_sdk(u1, u1, zmy)) /* u1 = (Z+Y)*(Z-Y) */
204-
CHECK_CXERROR(fe25519_mul_sdk(u2, h->X, h->Y)) /* u2 = X*Y */
201+
CHECK_CXERROR(fe25519_add_sdk(u1, h->Z, h->Y)); /* u1 = Z+Y */
202+
CHECK_CXERROR(fe25519_sub_sdk(zmy, h->Z, h->Y)); /* zmy = Z-Y */
203+
CHECK_CXERROR(fe25519_mul_sdk(u1, u1, zmy)); /* u1 = (Z+Y)*(Z-Y) */
204+
CHECK_CXERROR(fe25519_mul_sdk(u2, h->X, h->Y)); /* u2 = X*Y */
205205

206-
CHECK_CXERROR(fe25519_sq_sdk(u1_u2u2, u2)) /* u1_u2u2 = u2^2 */
207-
CHECK_CXERROR(fe25519_mul_sdk(u1_u2u2, u1, u1_u2u2)) /* u1_u2u2 = u1*u2^2 */
206+
CHECK_CXERROR(fe25519_sq_sdk(u1_u2u2, u2)); /* u1_u2u2 = u2^2 */
207+
CHECK_CXERROR(fe25519_mul_sdk(u1_u2u2, u1, u1_u2u2)); /* u1_u2u2 = u1*u2^2 */
208208

209209
fe25519_1_sdk(one);
210-
CHECK_CXERROR(ristretto255_sqrt_ratio_m1_sdk(inv_sqrt, one, u1_u2u2))
210+
CHECK_CXERROR(ristretto255_sqrt_ratio_m1_sdk(inv_sqrt, one, u1_u2u2));
211211

212-
CHECK_CXERROR(fe25519_mul_sdk(den1, inv_sqrt, u1))
213-
CHECK_CXERROR(fe25519_mul_sdk(den2, inv_sqrt, u2))
214-
CHECK_CXERROR(fe25519_mul_sdk(z_inv, den1, den2))
215-
CHECK_CXERROR(fe25519_mul_sdk(z_inv, z_inv, h->T))
212+
CHECK_CXERROR(fe25519_mul_sdk(den1, inv_sqrt, u1));
213+
CHECK_CXERROR(fe25519_mul_sdk(den2, inv_sqrt, u2));
214+
CHECK_CXERROR(fe25519_mul_sdk(z_inv, den1, den2));
215+
CHECK_CXERROR(fe25519_mul_sdk(z_inv, z_inv, h->T));
216216

217-
CHECK_CXERROR(fe25519_mul_sdk(ix, h->X, fe25519_sqrtm1_sdk))
218-
CHECK_CXERROR(fe25519_mul_sdk(iy, h->Y, fe25519_sqrtm1_sdk))
217+
CHECK_CXERROR(fe25519_mul_sdk(ix, h->X, fe25519_sqrtm1_sdk));
218+
CHECK_CXERROR(fe25519_mul_sdk(iy, h->Y, fe25519_sqrtm1_sdk));
219219

220-
CHECK_CXERROR(fe25519_mul_sdk(eden, den1, ed25519_invsqrtamd_sdk))
220+
CHECK_CXERROR(fe25519_mul_sdk(eden, den1, ed25519_invsqrtamd_sdk));
221221

222-
CHECK_CXERROR(fe25519_mul_sdk(t_z_inv, h->T, z_inv))
222+
CHECK_CXERROR(fe25519_mul_sdk(t_z_inv, h->T, z_inv));
223223
rotate = fe25519_isnegative_sdk(t_z_inv);
224224

225225
fe25519_copy_sdk(x_, h->X);
@@ -231,12 +231,12 @@ static cx_err_t ristretto255_p3_tobytes_sdk(fe25519_sdk s, const ge25519_p3_sdk
231231
fe25519_cmov_sdk(y_, ix, rotate);
232232
fe25519_cmov_sdk(den_inv, eden, rotate);
233233

234-
CHECK_CXERROR(fe25519_mul_sdk(x_z_inv, x_, z_inv))
235-
CHECK_CXERROR(fe25519_cneg_sdk(y_, y_, fe25519_isnegative_sdk(x_z_inv)))
234+
CHECK_CXERROR(fe25519_mul_sdk(x_z_inv, x_, z_inv));
235+
CHECK_CXERROR(fe25519_cneg_sdk(y_, y_, fe25519_isnegative_sdk(x_z_inv)));;
236236

237-
CHECK_CXERROR(fe25519_sub_sdk(s_, h->Z, y_))
238-
CHECK_CXERROR(fe25519_mul_sdk(s_, den_inv, s_))
239-
CHECK_CXERROR(fe25519_abs_sdk(s, s_))
237+
CHECK_CXERROR(fe25519_sub_sdk(s_, h->Z, y_));
238+
CHECK_CXERROR(fe25519_mul_sdk(s_, den_inv, s_));
239+
CHECK_CXERROR(fe25519_abs_sdk(s, s_));
240240

241241
return CX_OK;
242242
}
@@ -253,18 +253,18 @@ cx_err_t crypto_scalarmult_ristretto255_base_sdk(unsigned char *q,const unsigned
253253

254254
uint8_t Pxy[ED25519_SDKPOINT_BYTES];
255255
memcpy(Pxy, ED25519_GEN, sizeof(Pxy));
256-
CHECK_CXERROR(cx_ecfp_scalar_mult_no_throw(CX_CURVE_Ed25519, Pxy, t, ED25519_SCALAR_BYTES))
256+
CHECK_CXERROR(cx_ecfp_scalar_mult_no_throw(CX_CURVE_Ed25519, Pxy, t, ED25519_SCALAR_BYTES));
257257

258258
ge25519_p3_sdk Q_sdk;
259259
MEMZERO(&Q_sdk, sizeof(ge25519_p3_sdk));
260260
memcpy(Q_sdk.X, &Pxy[1],ED25519_SCALAR_BYTES);
261261
memcpy(Q_sdk.Y, &Pxy[1+ED25519_SCALAR_BYTES],ED25519_SCALAR_BYTES);
262262
fe25519_1_sdk(Q_sdk.Z);
263-
CHECK_CXERROR(fe25519_mul_sdk(Q_sdk.T, Q_sdk.X,Q_sdk.Y))
263+
CHECK_CXERROR(fe25519_mul_sdk(Q_sdk.T, Q_sdk.X,Q_sdk.Y));
264264

265265
fe25519_sdk s;
266266

267-
CHECK_CXERROR(ristretto255_p3_tobytes_sdk(s, &Q_sdk))
267+
CHECK_CXERROR(ristretto255_p3_tobytes_sdk(s, &Q_sdk));
268268

269269
if (fe25519_iszero_sdk(s)) {
270270
return CX_INTERNAL_ERROR;

deps/nanosplus-secure-sdk

0 commit comments

Comments
 (0)