diff options
Diffstat (limited to 'beecrypt/endianness.c')
-rw-r--r-- | beecrypt/endianness.c | 422 |
1 files changed, 8 insertions, 414 deletions
diff --git a/beecrypt/endianness.c b/beecrypt/endianness.c index c280fc64b..85a5654c5 100644 --- a/beecrypt/endianness.c +++ b/beecrypt/endianness.c @@ -57,419 +57,13 @@ uint32_t swapu32(uint32_t n) int64_t swap64(int64_t n) { - #if HAVE_LONG_LONG - return ( ((n & 0xffLL) << 56) | - ((n & 0xff00LL) << 40) | - ((n & 0xff0000LL) << 24) | - ((n & 0xff000000LL) << 8) | - ((n & 0xff00000000LL) >> 8) | - ((n & 0xff0000000000LL) >> 24) | - ((n & 0xff000000000000LL) >> 40) | - ((n & 0xff00000000000000LL) >> 56) ); - #else - return ( ((n & 0xffL) << 56) | - ((n & 0xff00L) << 40) | - ((n & 0xff0000L) << 24) | - ((n & 0xff000000L) << 8) | - ((n & 0xff00000000L) >> 8) | - ((n & 0xff0000000000L) >> 24) | - ((n & 0xff000000000000L) >> 40) | - ((n & 0xff00000000000000L) >> 56) ); - #endif + return ( ((n & ((int64_t) 0xff) ) << 56) | + ((n & ((int64_t) 0xff) << 8) << 40) | + ((n & ((int64_t) 0xff) << 16) << 24) | + ((n & ((int64_t) 0xff) << 24) << 8) | + ((n & ((int64_t) 0xff) << 32) >> 8) | + ((n & ((int64_t) 0xff) << 40) >> 24) | + ((n & ((int64_t) 0xff) << 48) >> 40) | + ((n & ((int64_t) 0xff) << 56) >> 56) ); } /*@=bitwisesigned =shiftimplementation@*/ - -int encodeByte(javabyte b, byte *data) -{ - *data = b; - return 1; -} - -int encodeShort(javashort s, byte *data) -{ - #if (!WORDS_BIGENDIAN) - s = swap16(s); - #endif - memcpy(data, &s, 2); - return 2; -} - -int encodeInt(javaint i, byte* data) -{ - #if (!WORDS_BIGENDIAN) - i = swap32(i); - #endif - memcpy(data, &i, 4); - return 4; -} - -int encodeLong(javalong l, byte* data) -{ - #if (!WORDS_BIGENDIAN) - l = swap64(l); - #endif - memcpy(data, &l, 8); - return 8; -} - -int encodeChar(javachar c, byte* data) -{ - #if (!WORDS_BIGENDIAN) - c = swapu16(c); - #endif - memcpy(data, &c, 2); - return 2; -} - -int encodeInts(const javaint* i, byte* data, int count) -{ - register int rc = ((uint32_t)count) << 2; - #if (WORDS_BIGENDIAN) - memcpy(data, i, rc); - #else - javaint tmp; - while (count--) - { - tmp = swap32(*(i++)); - memcpy(data, &tmp, 4); - data += 4; - } - #endif - return rc; -} - -int encodeIntsPartial(const javaint* i, byte* data, int bytecount) -{ - register int rc = bytecount; - #if (WORDS_BIGENDIAN) - memcpy(data, i, rc); - #else - javaint tmp; - - while (bytecount > 0) - { - tmp = swap32(*(i++)); - memcpy(data, &tmp, (bytecount > 4) ? 4 : bytecount); - data += 4; - bytecount -= 4; - } - #endif - return rc; -} - -int encodeIntsPartialPad(const javaint* i, byte* data, int bytecount, byte padvalue) -{ - register int rc = bytecount; - - #if (WORDS_BIGENDIAN) - memcpy(data, i, rc); - if (rc & 0x3) - memset(data+rc, padvalue, 4 -(rc & 0x3)); - #else - javaint tmp; - - while (bytecount > 0) - { - tmp = swap32(*(i++)); - memcpy(data, &tmp, (bytecount > 4) ? 4 : bytecount); - data += 4; - bytecount -= 4; - } - if (bytecount) - memset(data+bytecount, padvalue, -bytecount); - #endif - return rc; -} - -int encodeChars(const javachar* c, byte* data, int count) -{ - register int rc = ((uint32_t)count) << 1; - #if (WORDS_BIGENDIAN) - memcpy(data, c, rc); - #else - javaint tmp; - while (count--) - { - tmp = swapu16(*(c++)); - memcpy(data, &tmp, 2); - data += 2; - } - #endif - return rc; -} - -int decodeByte(javabyte* b, const byte* data) -{ - *b = *data; - return 1; -} - -int decodeShort(javashort* s, const byte* data) -{ - #if (WORDS_BIGENDIAN) - memcpy(s, data, 2); - #else - javashort tmp; - memcpy(&tmp, data, 2); - *s = swap16(tmp); - #endif - return 2; -} - -int decodeInt(javaint* i, const byte* data) -{ - #if (WORDS_BIGENDIAN) - memcpy(i, data, 4); - #else - javaint tmp; - memcpy(&tmp, data, 4); - *i = swap32(tmp); - #endif - return 4; -} - -int decodeLong(javalong* l, const byte* data) -{ - #if (WORDS_BIGENDIAN) - memcpy(l, data, 8); - #else - javalong tmp; - memcpy(&tmp, data, 8); - *l = swap64(tmp); - #endif - return 8; -} - -int decodeChar(javachar* c, const byte* data) -{ - #if (WORDS_BIGENDIAN) - memcpy(c, data, 2); - #else - javachar tmp; - memcpy(&tmp, data, 2); - *c = swapu16(tmp); - #endif - return 2; -} - -int decodeInts(javaint* i, const byte* data, int count) -{ - register int rc = ((uint32_t)count) << 2; - #if (WORDS_BIGENDIAN) - memcpy(i, data, rc); - #else - javaint tmp; - while (count--) - { - memcpy(&tmp, data, 4); - *(i++) = swap32(tmp); - data += 4; - } - #endif - return rc; -} - -int decodeIntsPartial(javaint* i, const byte* data, int bytecount) -{ - register int rc = bytecount; - #if (WORDS_BIGENDIAN) - memcpy(i, data, rc); - if (rc & 0x3) - memset(((byte*) i) + rc, 0, 4 - (rc & 0x3)); - #else - javaint tmp; - while (bytecount >= 4) - { - memcpy(&tmp, data, 4); - *(i++) = swap32(tmp); - data += 4; - bytecount -= 4; - } - if (bytecount) - { - tmp = 0; - memcpy(&tmp, data, bytecount); - *(i++) = swap32(tmp); - } - #endif - return rc; -} - -int decodeChars(javachar* c, const byte* data, int count) -{ - register int rc = ((uint32_t)count) << 1; - #if (WORDS_BIGENDIAN) - memcpy(c, data, rc); - #else - javachar tmp; - while (count--) - { - memcpy(&tmp, data, 2); - *(c++) = swapu16(tmp); - data += 2; - } - #endif - return rc; -} - -int readByte(javabyte* b, FILE* ifp) -{ - return fread(b, 1, 1, ifp); -} - -int readShort(javashort* s, FILE* ifp) -{ - register int rc = fread(s, 2, 1, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == 1) - { - register javashort tmp = *s; - *s = swap16(tmp); - } - #endif - return rc; -} - -int readInt(javaint* i, FILE* ifp) -{ - register int rc = fread(i, 4, 1, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == 1) - { - register javaint tmp = *i; - *i = swap32(tmp); - } - #endif - return rc; -} - -int readLong(javalong* l, FILE* ifp) -{ - register int rc = fread(l, 8, 1, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == 1) - { - register javalong tmp = *l; - *l = swap64(tmp); - } - #endif - return rc; -} - -int readChar(javachar* c, FILE* ifp) -{ - register int rc = fread(c, 2, 1, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == 1) - { - register javachar tmp = *c; - *c = swapu16(tmp); - } - #endif - return rc; -} - -int readInts(javaint* i, FILE* ifp, int count) -{ - register int rc = fread(i, 4, count, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == count) - { - while (count > 0) - { - register javaint tmp = *i; - *(i++) = swap32(tmp); - count--; - } - } - #endif - return rc; -} - -int readChars(javachar* c, FILE* ifp, int count) -{ - register int rc = fread(c, 2, count, ifp); - #if !(WORDS_BIGENDIAN) - if (rc == count) - { - while (count > 0) - { - register javachar tmp = *c; - *(c++) = swap16(tmp); - count--; - } - } - #endif - return rc; -} - -int writeByte(javabyte b, FILE* ofp) -{ - return fwrite(&b, 1, 1, ofp); -} - -int writeShort(javashort s, FILE* ofp) -{ - #if !(WORDS_BIGENDIAN) - s = swap16(s); - #endif - return fwrite(&s, 2, 1, ofp); -} - -int writeInt(javaint i, FILE* ofp) -{ - #if !(WORDS_BIGENDIAN) - i = swap32(i); - #endif - return fwrite(&i, 4, 1, ofp); -} - -int writeLong(javalong l, FILE* ofp) -{ - #if !(WORDS_BIGENDIAN) - l = swap64(l); - #endif - return fwrite(&l, 8, 1, ofp); -} - -int writeChar(javachar c, FILE* ofp) -{ - #if !(WORDS_BIGENDIAN) - c = swap16(c); - #endif - return fwrite(&c, 2, 1, ofp); -} - -int writeInts(const javaint* i, FILE* ofp, int count) -{ - #if WORDS_BIGENDIAN - return fwrite(i, 4, count, ofp); - #else - register int total = 0; - while (count-- > 0) - { - register int rc = writeInt(*(i++), ofp); - if (rc < 0) - break; - total += rc; - } - return total; - #endif -} - -int writeChars(const javachar* c, FILE* ofp, int count) -{ - #if WORDS_BIGENDIAN - return fwrite(c, 2, count, ofp); - #else - register int total = 0; - while (count-- > 0) - { - register int rc = writeChar(*(c++), ofp); - if (rc < 0) - break; - total += rc; - } - return total; - #endif -} |