Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ on:
branches:
- master
- develop
- /^release\/.*$/
- 'release/**'
- 'support/**'
- 'ci/**'
pull_request:
branches:
- master
- develop
- /^release\/.*$/
- 'release/**'
- 'support/**'
- 'ci/**'

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
Expand Down
8 changes: 6 additions & 2 deletions demos/gcm-file/gcm_filehandle.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ int gcm_filehandle( int cipher,
if (direction == GCM_DECRYPT) {
tot_data -= taglen;
}
rewind(in);
fseek(in, 0, SEEK_SET);
do {
x = MIN(tot_data, LTC_FILE_READ_BUFSIZE);
x = fread(buf, 1, x, in);
Expand All @@ -140,6 +140,10 @@ int gcm_filehandle( int cipher,
}

if (direction == GCM_DECRYPT) {
if (feof(in) || ferror(in)) {
err = CRYPT_ERROR;
goto LBL_CLEANBUF;
}
x = fread(buf, 1, taglen, in);
if (x != taglen) {
err = CRYPT_ERROR;
Expand Down Expand Up @@ -170,7 +174,7 @@ int gcm_filehandle( int cipher,
#endif
if(*res == 0) {
x = ftell(out);
rewind(out);
fseek(in, 0, SEEK_SET);
while((size_t)ftell(out) < x) {
fwrite(buf, 1, LTC_FILE_READ_BUFSIZE, out);
}
Expand Down
8 changes: 6 additions & 2 deletions demos/hashsum.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
'\255')
#define HEXOF(x) (x - s_base(x))

#ifndef LTC_ARRAY_SIZE
#define LTC_ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
#endif

static char* hashsum;

static void cleanup(void)
Expand Down Expand Up @@ -190,7 +194,7 @@ int main(int argc, char **argv)
die(EXIT_FAILURE);
}

for (x = 0; x < sizeof(idxs)/sizeof(idxs[0]); ++x) {
for (x = 0; x < LTC_ARRAY_SIZE(idxs); ++x) {
idxs[x] = -2;
}
argn = 1;
Expand Down Expand Up @@ -243,7 +247,7 @@ int main(int argc, char **argv)
die(EXIT_FAILURE);
}
idx++;
if ((size_t)idx >= sizeof(idxs)/sizeof(idxs[0])) {
if ((size_t)idx >= LTC_ARRAY_SIZE(idxs)) {
fprintf(stderr, "%s: Too many '-a' options chosen\n", hashsum);
die(EXIT_FAILURE);
}
Expand Down
4 changes: 2 additions & 2 deletions demos/pem-info.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static const struct {
static const char *s_map_cipher(const char *name)
{
unsigned long n;
for (n = 0; n < sizeof(cipher_name_map)/sizeof(cipher_name_map[0]); ++n) {
for (n = 0; n < LTC_ARRAY_SIZE(cipher_name_map); ++n) {
if (strcmp(name, cipher_name_map[n].is) == 0)
return cipher_name_map[n].should;
}
Expand All @@ -61,7 +61,7 @@ static const char *s_map_mode(enum cipher_mode mode)
{
size_t n;
mode &= cm_modes | cm_1bit | cm_8bit;
for (n = 0; n < sizeof(cipher_mode_map)/sizeof(cipher_mode_map[0]); ++n) {
for (n = 0; n < LTC_ARRAY_SIZE(cipher_mode_map); ++n) {
if (cipher_mode_map[n].mode == mode)
return cipher_mode_map[n].name;
}
Expand Down
6 changes: 3 additions & 3 deletions demos/timing.c
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ static const struct {

if (ltc_mp.name == NULL) return;

for (x = 0; x < (sizeof(groups)/sizeof(groups[0])); x++) {
for (x = 0; x < LTC_ARRAY_SIZE(groups); x++) {
t2 = 0;
for (y = 0; y < 4; y++) {
t_start();
Expand Down Expand Up @@ -1408,7 +1408,7 @@ if (argc > 1) {
if (strstr(argv[1], "-h")) {
die(EXIT_SUCCESS);
} else if (strstr(argv[1], "-l")) {
for (i = 0; i < sizeof(test_functions)/sizeof(test_functions[0]); ++i) {
for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) {
printf("%s\n", test_functions[i].name);
}
exit(0);
Expand Down Expand Up @@ -1446,7 +1446,7 @@ if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT
/* single test name from commandline */
if (argc > 1) single_test = argv[1];

for (i = 0; i < sizeof(test_functions)/sizeof(test_functions[0]); ++i) {
for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) {
if (single_test && strstr(test_functions[i].name, single_test) == NULL) {
continue;
}
Expand Down
40 changes: 22 additions & 18 deletions demos/tv_gen.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@
/* SPDX-License-Identifier: Unlicense */
#include "tomcrypt_private.h"

#define OPEN_FILE(f, o) do { \
o = fopen(f, "w"); \
if (o == NULL) { \
perror("can't open " f); \
return; \
} \
} while(0)

static void hash_gen(void)
{
unsigned char md[MAXBLOCKSIZE], *buf;
unsigned long outlen, x, y, z;
FILE *out;
int err;

out = fopen("hash_tv.txt", "w");
if (out == NULL) {
perror("can't open hash_tv.txt");
return;
}
OPEN_FILE("hash_tv.txt", out);

fprintf(out, "Hash Test Vectors:\n\nThese are the hashes of nn bytes '00 01 02 03 .. (nn-1)'\n\n");
for (x = 0; hash_descriptor[x].name != NULL; x++) {
Expand Down Expand Up @@ -52,7 +56,7 @@ static void cipher_gen(void)
FILE *out;
symmetric_key skey;

out = fopen("cipher_tv.txt", "w");
OPEN_FILE("cipher_tv.txt", out);

fprintf(out,
"Cipher Test Vectors\n\nThese are test encryptions with key of nn bytes '00 01 02 03 .. (nn-1)' and original PT of the same style.\n"
Expand Down Expand Up @@ -126,7 +130,7 @@ static void hmac_gen(void)
FILE *out;
unsigned long len;

out = fopen("hmac_tv.txt", "w");
OPEN_FILE("hmac_tv.txt", out);

fprintf(out,
"HMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are HMACed. The initial key is\n"
Expand Down Expand Up @@ -179,7 +183,7 @@ static void omac_gen(void)
FILE *out;
unsigned long len;

out = fopen("omac_tv.txt", "w");
OPEN_FILE("omac_tv.txt", out);

fprintf(out,
"OMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is\n"
Expand Down Expand Up @@ -240,7 +244,7 @@ static void pmac_gen(void)
FILE *out;
unsigned long len;

out = fopen("pmac_tv.txt", "w");
OPEN_FILE("pmac_tv.txt", out);

fprintf(out,
"PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are PMAC'ed. The initial key is\n"
Expand Down Expand Up @@ -302,7 +306,7 @@ static void eax_gen(void)
plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE];
unsigned long len;

out = fopen("eax_tv.txt", "w");
OPEN_FILE("eax_tv.txt", out);
fprintf(out, "EAX Test Vectors. Uses the 00010203...NN-1 pattern for header/nonce/plaintext/key. The outputs\n"
"are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n"
"step repeated sufficiently.\n\n");
Expand Down Expand Up @@ -368,7 +372,7 @@ static void ocb_gen(void)
plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE];
unsigned long len;

out = fopen("ocb_tv.txt", "w");
OPEN_FILE("ocb_tv.txt", out);
fprintf(out, "OCB Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs\n"
"are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n"
"step repeated sufficiently. The nonce is fixed throughout.\n\n");
Expand Down Expand Up @@ -437,7 +441,7 @@ static void ocb3_gen(void)
plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE];
unsigned long len;

out = fopen("ocb3_tv.txt", "w");
OPEN_FILE("ocb3_tv.txt", out);
fprintf(out, "OCB3 Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs\n"
"are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n"
"step repeated sufficiently. The nonce is fixed throughout. AAD is fixed to 3 bytes (ASCII) 'AAD'.\n\n");
Expand Down Expand Up @@ -509,7 +513,7 @@ static void ccm_gen(void)
unsigned long len;
const unsigned int taglen[] = {4, 6, 8, 10, 12, 14, 16};

out = fopen("ccm_tv.txt", "w");
OPEN_FILE("ccm_tv.txt", out);
fprintf(out, "CCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n"
"are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n"
"step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n");
Expand All @@ -535,7 +539,7 @@ static void ccm_gen(void)
nonce[z] = z;
}

for (t = 0; t < sizeof(taglen)/sizeof(taglen[0]); ++t) {
for (t = 0; t < LTC_ARRAY_SIZE(taglen); ++t) {
for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){
for (z = 0; z < y1; z++) {
plaintext[z] = (unsigned char)(z & 255);
Expand Down Expand Up @@ -579,7 +583,7 @@ static void gcm_gen(void)
unsigned char key[MAXBLOCKSIZE], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE];
unsigned long len;

out = fopen("gcm_tv.txt", "w");
OPEN_FILE("gcm_tv.txt", out);
fprintf(out, "GCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n"
"are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n"
"step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n");
Expand Down Expand Up @@ -641,7 +645,7 @@ static void base64_gen(void)
char dst[256];
unsigned long x, len;

out = fopen("base64_tv.txt", "w");
OPEN_FILE("base64_tv.txt", out);
fprintf(out, "Base64 vectors. These are the base64 encodings of the strings 00,01,02...NN-1\n\n");
for (x = 0; x <= 32; x++) {
for (ch = 0; ch < x; ch++) {
Expand All @@ -666,7 +670,7 @@ static void ecc_gen(void)
ecc_point *G, *R;
int x;

out = fopen("ecc_tv.txt", "w");
OPEN_FILE("ecc_tv.txt", out);
fprintf(out, "ecc vectors. These are for kG for k=1,3,9,27,...,3**n until k > order of the curve outputs are <k,x,y> triplets\n\n");
G = ltc_ecc_new_point();
R = ltc_ecc_new_point();
Expand Down Expand Up @@ -713,7 +717,7 @@ static void lrw_gen(void)
tweak[x] = key[x] = iv[x] = x;
}

out = fopen("lrw_tv.txt", "w");
OPEN_FILE("lrw_tv.txt", out);
for (x = 16; x < (int)(sizeof(buf)); x += 16) {
if ((err = lrw_start(find_cipher("aes"), iv, key, 16, tweak, 0, &lrw)) != CRYPT_OK) {
fprintf(stderr, "Error starting LRW-AES: %s\n", error_to_string(err));
Expand Down
7 changes: 4 additions & 3 deletions makefile.mingw
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,10 @@ TOBJECTS=tests/base16_test.o tests/base32_test.o tests/base64_test.o tests/bcryp
tests/cipher_hash_test.o tests/common.o tests/der_test.o tests/dh_test.o tests/dsa_test.o \
tests/ecc_test.o tests/ed25519_test.o tests/file_test.o tests/mac_test.o tests/misc_test.o \
tests/modes_test.o tests/mpi_test.o tests/multi_test.o tests/no_null_termination_check_test.o \
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \
tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \
tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o tests/x25519_test.o
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o \
tests/pkcs_1_emsa_test.o tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o \
tests/prng_test.o tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o \
tests/x25519_test.o

#The following headers will be installed by "make install"
HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \
Expand Down
7 changes: 4 additions & 3 deletions makefile.msvc
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,10 @@ TOBJECTS=tests/base16_test.obj tests/base32_test.obj tests/base64_test.obj tests
tests/cipher_hash_test.obj tests/common.obj tests/der_test.obj tests/dh_test.obj tests/dsa_test.obj \
tests/ecc_test.obj tests/ed25519_test.obj tests/file_test.obj tests/mac_test.obj tests/misc_test.obj \
tests/modes_test.obj tests/mpi_test.obj tests/multi_test.obj tests/no_null_termination_check_test.obj \
tests/no_prng.obj tests/padding_test.obj tests/pem_test.obj tests/pkcs_1_eme_test.obj tests/pkcs_1_emsa_test.obj \
tests/pkcs_1_oaep_test.obj tests/pkcs_1_pss_test.obj tests/pkcs_1_test.obj tests/prng_test.obj \
tests/rotate_test.obj tests/rsa_test.obj tests/ssh_test.obj tests/store_test.obj tests/test.obj tests/x25519_test.obj
tests/no_prng.obj tests/padding_test.obj tests/pem_test.obj tests/pk_oid_test.obj tests/pkcs_1_eme_test.obj \
tests/pkcs_1_emsa_test.obj tests/pkcs_1_oaep_test.obj tests/pkcs_1_pss_test.obj tests/pkcs_1_test.obj \
tests/prng_test.obj tests/rotate_test.obj tests/rsa_test.obj tests/ssh_test.obj tests/store_test.obj tests/test.obj \
tests/x25519_test.obj

#The following headers will be installed by "make install"
HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \
Expand Down
7 changes: 4 additions & 3 deletions makefile.unix
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,10 @@ TOBJECTS=tests/base16_test.o tests/base32_test.o tests/base64_test.o tests/bcryp
tests/cipher_hash_test.o tests/common.o tests/der_test.o tests/dh_test.o tests/dsa_test.o \
tests/ecc_test.o tests/ed25519_test.o tests/file_test.o tests/mac_test.o tests/misc_test.o \
tests/modes_test.o tests/mpi_test.o tests/multi_test.o tests/no_null_termination_check_test.o \
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \
tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \
tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o tests/x25519_test.o
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o \
tests/pkcs_1_emsa_test.o tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o \
tests/prng_test.o tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o \
tests/x25519_test.o

#The following headers will be installed by "make install"
HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \
Expand Down
12 changes: 7 additions & 5 deletions makefile_include.mk
Original file line number Diff line number Diff line change
Expand Up @@ -420,9 +420,10 @@ TOBJECTS=tests/base16_test.o tests/base32_test.o tests/base64_test.o tests/bcryp
tests/cipher_hash_test.o tests/common.o tests/der_test.o tests/dh_test.o tests/dsa_test.o \
tests/ecc_test.o tests/ed25519_test.o tests/file_test.o tests/mac_test.o tests/misc_test.o \
tests/modes_test.o tests/mpi_test.o tests/multi_test.o tests/no_null_termination_check_test.o \
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \
tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \
tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o tests/x25519_test.o
tests/no_prng.o tests/padding_test.o tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o \
tests/pkcs_1_emsa_test.o tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o \
tests/prng_test.o tests/rotate_test.o tests/rsa_test.o tests/ssh_test.o tests/store_test.o tests/test.o \
tests/x25519_test.o

# The following headers will be installed by "make install"
HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \
Expand Down Expand Up @@ -494,22 +495,23 @@ $(DESTDIR)$(BINPATH):
install -p -d $(DESTDIR)$(BINPATH)

.common_install_bins: $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH)
for d in $(USEFUL_DEMOS); do $(INSTALL_CMD) -p -m 775 $$d $(DESTDIR)$(BINPATH)/ltc-$$d
for d in $(USEFUL_DEMOS); do $(INSTALL_CMD) -p -m 775 $$d $(DESTDIR)$(BINPATH)/ltc-$$d; done
$(INSTALL_CMD) -p -m 775 demos/ltc $(DESTDIR)$(BINPATH)

install_docs: $(call print-help,install_docs,Installs the Developer Manual) doc/crypt.pdf
install -p -d $(DESTDIR)$(DATAPATH)
install -p -m 644 doc/crypt.pdf $(DESTDIR)$(DATAPATH)

install_test: $(call print-help,install_test,Installs the self-test binary) test $(DESTDIR)$(BINPATH)
$(INSTALL_CMD) -p -m 775 $< $(DESTDIR)$(BINPATH)
$(INSTALL_CMD) -p -m 775 $< $(DESTDIR)$(BINPATH)/ltc-$<

install_hooks: $(call print-help,install_hooks,Installs the git hooks)
for s in `ls hooks/`; do ln -s ../../hooks/$$s .git/hooks/$$s; done

HEADER_FILES=$(notdir $(HEADERS_PUB))
.common_uninstall:
$(UNINSTALL_CMD) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
for d in $(USEFUL_DEMOS) test; do rm -f $(DESTDIR)$(BINPATH)/ltc-$$d; done
$(UNINSTALL_CMD) $(HEADER_FILES:%=$(DESTDIR)$(INCPATH)/%)

#This rule cleans the source tree of all compiled code, not including the pdf
Expand Down
2 changes: 1 addition & 1 deletion src/ciphers/aes/aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ int ECB_TEST(void)
unsigned char tmp[2][16];
int i, y;

for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) {
for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) {
zeromem(&key, sizeof(key));
if ((err = rijndael_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) {
return err;
Expand Down
2 changes: 1 addition & 1 deletion src/ciphers/aes/aes_desc.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ int AES_TEST(void)
int y;
#endif

for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) {
for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) {
zeromem(&key, sizeof(key));
if ((err = AES_SETUP(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) {
return err;
Expand Down
2 changes: 1 addition & 1 deletion src/ciphers/aes/aesni.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ int aesni_test(void)
unsigned char tmp[2][16];
int i, y;

for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) {
for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) {
zeromem(&key, sizeof(key));
if ((err = aesni_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) {
return err;
Expand Down
2 changes: 1 addition & 1 deletion src/ciphers/anubis.c
Original file line number Diff line number Diff line change
Expand Up @@ -1498,7 +1498,7 @@ int anubis_test(void)
unsigned char buf[2][16];
symmetric_key skey;

for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) {
anubis_setup(tests[x].key, tests[x].keylen, 0, &skey);
anubis_ecb_encrypt(tests[x].pt, buf[0], &skey);
anubis_ecb_decrypt(buf[0], buf[1], &skey);
Expand Down
2 changes: 1 addition & 1 deletion src/ciphers/camellia.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ int camellia_test(void)
int err;
unsigned int x;

for (x = 0; x < sizeof(tests)/sizeof(tests[0]); x++) {
for (x = 0; x < LTC_ARRAY_SIZE(tests); x++) {
zeromem(&skey, sizeof(skey));
if ((err = camellia_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) {
return err;
Expand Down
Loading