diff --git a/CMakeLists.txt b/CMakeLists.txt index a8619b5..ca390f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,7 +213,6 @@ set( fc_sources src/crypto/aes.cpp src/crypto/crc.cpp src/crypto/city.cpp - src/crypto/base32.cpp src/crypto/base36.cpp src/crypto/base58.cpp src/crypto/base64.cpp @@ -242,8 +241,6 @@ set( fc_sources src/network/url.cpp src/compress/smaz.cpp src/compress/zlib.cpp - vendor/cyoencode-1.0.2/src/CyoDecode.c - vendor/cyoencode-1.0.2/src/CyoEncode.c ) file( GLOB_RECURSE fc_headers ${CMAKE_CURRENT_SOURCE_DIR} *.hpp *.h ) @@ -376,7 +373,6 @@ target_include_directories(fc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/boost_1.51/include - ${CMAKE_CURRENT_SOURCE_DIR}/vendor/cyoencode-1.0.2/src ${CMAKE_CURRENT_SOURCE_DIR}/vendor/secp256k1-zkp ) diff --git a/include/fc/crypto/base32.hpp b/include/fc/crypto/base32.hpp deleted file mode 100644 index 15bf169..0000000 --- a/include/fc/crypto/base32.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include -#include - -namespace fc -{ - std::vector from_base32( const fc::string& b32 ); - fc::string to_base32( const std::vector& vec ); - fc::string to_base32( const char* data, size_t len ); -} diff --git a/src/crypto/base32.cpp b/src/crypto/base32.cpp deleted file mode 100644 index bb5354d..0000000 --- a/src/crypto/base32.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include -namespace fc -{ - std::vector from_base32( const std::string& b32 ) - { - auto len = cyoBase32DecodeGetLength( b32.size() ); - std::vector v(len); - len = cyoBase32Decode( v.data(), b32.c_str(), b32.size() ); - v.resize( len ); - return v; - } - - std::string to_base32( const char* data, size_t len ) - { - auto s = cyoBase32EncodeGetLength(len); - std::vector b32; - b32.resize(s); - cyoBase32Encode( b32.data(), data, len ); - b32.resize( b32.size()-1); // strip the nullterm - return std::string(b32.begin(),b32.end()); - } - - std::string to_base32( const std::vector& vec ) - { - return to_base32( vec.data(), vec.size() ); - } -} diff --git a/src/crypto/base58.cpp b/src/crypto/base58.cpp index 46c9adc..e1d5d33 100644 --- a/src/crypto/base58.cpp +++ b/src/crypto/base58.cpp @@ -66,71 +66,74 @@ public: /** C++ wrapper for BIGNUM (OpenSSL bignum) */ -class CBigNum +class CBigNum : public BIGNUM { - BIGNUM* bn; public: CBigNum() - : bn(BN_new()) {} + { + BN_init(this); + } CBigNum(const CBigNum& b) - : CBigNum() { - if (!BN_copy(bn, b.bn)) + BN_init(this); + if (!BN_copy(this, &b)) { - BN_clear_free(bn); + BN_clear_free(this); throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_copy failed"); } } CBigNum& operator=(const CBigNum& b) { - if (!BN_copy(bn, b.bn)) + if (!BN_copy(this, &b)) throw bignum_error("CBigNum::operator= : BN_copy failed"); return (*this); } ~CBigNum() { - BN_clear_free(bn); + BN_clear_free(this); } //CBigNum(char n) is not portable. Use 'signed char' or 'unsigned char'. - CBigNum(signed char n) :CBigNum() { if (n >= 0) setulong(n); else setint64(n); } - CBigNum(short n) :CBigNum() { if (n >= 0) setulong(n); else setint64(n); } - CBigNum(int n) :CBigNum() { if (n >= 0) setulong(n); else setint64(n); } - CBigNum(int64_t n) :CBigNum() { setint64(n); } - CBigNum(unsigned char n) :CBigNum() { setulong(n); } - CBigNum(unsigned short n) :CBigNum() { setulong(n); } - CBigNum(unsigned int n) :CBigNum() { setulong(n); } - CBigNum(uint64_t n) :CBigNum() { setuint64(n); } + CBigNum(signed char n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(short n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(int n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + //CBigNum(long n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(int64_t n) { BN_init(this); setint64(n); } + CBigNum(unsigned char n) { BN_init(this); setulong(n); } + CBigNum(unsigned short n) { BN_init(this); setulong(n); } + CBigNum(unsigned int n) { BN_init(this); setulong(n); } + //CBigNum(unsigned long n) { BN_init(this); setulong(n); } + CBigNum(uint64_t n) { BN_init(this); setuint64(n); } explicit CBigNum(const std::vector& vch) - : CBigNum() { + BN_init(this); setvch(vch); } void setulong(unsigned long n) { - if (!BN_set_word(bn, n)) + if (!BN_set_word(this, n)) throw bignum_error("CBigNum conversion from unsigned long : BN_set_word failed"); } unsigned long getulong() const { - return BN_get_word(bn); + return BN_get_word(this); } unsigned int getuint() const { - return BN_get_word(bn); + return BN_get_word(this); } int getint() const { - unsigned long n = BN_get_word(bn); - if (!BN_is_negative(bn)) + unsigned long n = BN_get_word(this); + if (!BN_is_negative(this)) return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::max() : n); else return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::min() : -(int)n); @@ -168,7 +171,7 @@ public: pch[1] = (nSize >> 16) & 0xff; pch[2] = (nSize >> 8) & 0xff; pch[3] = (nSize) & 0xff; - BN_mpi2bn(pch, p - pch, bn); + BN_mpi2bn(pch, p - pch, this); } void setuint64(uint64_t n) @@ -195,7 +198,7 @@ public: pch[1] = (nSize >> 16) & 0xff; pch[2] = (nSize >> 8) & 0xff; pch[3] = (nSize) & 0xff; - BN_mpi2bn(pch, p - pch, bn); + BN_mpi2bn(pch, p - pch, this); } @@ -211,16 +214,16 @@ public: vch2[3] = (nSize >> 0) & 0xff; // swap data to big endian reverse_copy(vch.begin(), vch.end(), vch2.begin() + 4); - BN_mpi2bn(&vch2[0], vch2.size(), bn); + BN_mpi2bn(&vch2[0], vch2.size(), this); } std::vector getvch() const { - unsigned int nSize = BN_bn2mpi(bn, NULL); + unsigned int nSize = BN_bn2mpi(this, NULL); if (nSize <= 4) return std::vector(); std::vector vch(nSize); - BN_bn2mpi(bn, &vch[0]); + BN_bn2mpi(this, &vch[0]); vch.erase(vch.begin(), vch.begin() + 4); reverse(vch.begin(), vch.end()); return vch; @@ -234,16 +237,16 @@ public: if (nSize >= 1) vch[4] = (nCompact >> 16) & 0xff; if (nSize >= 2) vch[5] = (nCompact >> 8) & 0xff; if (nSize >= 3) vch[6] = (nCompact >> 0) & 0xff; - BN_mpi2bn(&vch[0], vch.size(), bn); + BN_mpi2bn(&vch[0], vch.size(), this); return *this; } unsigned int GetCompact() const { - unsigned int nSize = BN_bn2mpi(bn, NULL); + unsigned int nSize = BN_bn2mpi(this, NULL); std::vector vch(nSize); nSize -= 4; - BN_bn2mpi(bn, &vch[0]); + BN_bn2mpi(this, &vch[0]); unsigned int nCompact = nSize << 24; if (nSize >= 1) nCompact |= (vch[4] << 16); if (nSize >= 2) nCompact |= (vch[5] << 8); @@ -278,7 +281,7 @@ public: *this += n; } if (fNegative) - BN_set_negative(bn, 1); + *this = 0 - *this; } std::string ToString(int nBase=10) const @@ -288,20 +291,20 @@ public: CBigNum bn0 = 0; std::string str; CBigNum bn = *this; - BN_set_negative(bn.bn, false); + BN_set_negative(&bn, false); CBigNum dv; CBigNum rem; - if (BN_cmp(bn.bn, bn0.bn) == 0) + if (BN_cmp(&bn, &bn0) == 0) return "0"; - while (BN_cmp(bn.bn, bn0.bn) > 0) + while (BN_cmp(&bn, &bn0) > 0) { - if (!BN_div(dv.bn, rem.bn, bn.bn, bnBase.bn, pctx)) + if (!BN_div(&dv, &rem, &bn, &bnBase, pctx)) throw bignum_error("CBigNum::ToString() : BN_div failed"); bn = dv; unsigned int c = rem.getulong(); str += "0123456789abcdef"[c]; } - if (BN_is_negative(this->bn)) + if (BN_is_negative(this)) str += "-"; reverse(str.begin(), str.end()); return str; @@ -316,50 +319,45 @@ public: bool operator!() const { - return BN_is_zero(bn); + return BN_is_zero(this); } CBigNum& operator+=(const CBigNum& b) { - if (!BN_add(bn, bn, b.bn)) + if (!BN_add(this, this, &b)) throw bignum_error("CBigNum::operator+= : BN_add failed"); return *this; } CBigNum& operator-=(const CBigNum& b) { - if (!BN_sub(bn, bn, b.bn)) - throw bignum_error("CBigNum::operator-= : BN_sub failed"); + *this = *this - b; return *this; } CBigNum& operator*=(const CBigNum& b) { CAutoBN_CTX pctx; - if (!BN_mul(bn, bn, b.bn, pctx)) + if (!BN_mul(this, this, &b, pctx)) throw bignum_error("CBigNum::operator*= : BN_mul failed"); return *this; } CBigNum& operator/=(const CBigNum& b) { - CAutoBN_CTX pctx; - if (!BN_div(bn, NULL, bn, b.bn, pctx)) - throw bignum_error("CBigNum::operator/= : BN_div failed"); + *this = *this / b; return *this; } CBigNum& operator%=(const CBigNum& b) { - CAutoBN_CTX pctx; - if (!BN_div(NULL, bn, bn, b.bn, pctx)) - throw bignum_error("CBigNum::operator%= : BN_div failed"); + *this = *this % b; return *this; } CBigNum& operator<<=(unsigned int shift) { - if (!BN_lshift(bn, bn, shift)) + if (!BN_lshift(this, this, shift)) throw bignum_error("CBigNum:operator<<= : BN_lshift failed"); return *this; } @@ -370,13 +368,13 @@ public: // if built on ubuntu 9.04 or 9.10, probably depends on version of openssl CBigNum a = 1; a <<= shift; - if (BN_cmp(a.bn, bn) > 0) + if (BN_cmp(&a, this) > 0) { *this = 0; return *this; } - if (!BN_rshift(bn, bn, shift)) + if (!BN_rshift(this, this, shift)) throw bignum_error("CBigNum:operator>>= : BN_rshift failed"); return *this; } @@ -385,7 +383,7 @@ public: CBigNum& operator++() { // prefix operator - if (!BN_add(bn, bn, BN_value_one())) + if (!BN_add(this, this, BN_value_one())) throw bignum_error("CBigNum::operator++ : BN_add failed"); return *this; } @@ -402,7 +400,7 @@ public: { // prefix operator CBigNum r; - if (!BN_sub(r.bn, bn, BN_value_one())) + if (!BN_sub(&r, this, BN_value_one())) throw bignum_error("CBigNum::operator-- : BN_sub failed"); *this = r; return *this; @@ -416,12 +414,10 @@ public: return ret; } - const BIGNUM* to_bignum() const { - return bn; - } - BIGNUM* to_bignum() { - return bn; - } + + friend inline const CBigNum operator-(const CBigNum& a, const CBigNum& b); + friend inline const CBigNum operator/(const CBigNum& a, const CBigNum& b); + friend inline const CBigNum operator%(const CBigNum& a, const CBigNum& b); }; @@ -429,7 +425,7 @@ public: inline const CBigNum operator+(const CBigNum& a, const CBigNum& b) { CBigNum r; - if (!BN_add(r.to_bignum(), a.to_bignum(), b.to_bignum())) + if (!BN_add(&r, &a, &b)) throw bignum_error("CBigNum::operator+ : BN_add failed"); return r; } @@ -437,7 +433,7 @@ inline const CBigNum operator+(const CBigNum& a, const CBigNum& b) inline const CBigNum operator-(const CBigNum& a, const CBigNum& b) { CBigNum r; - if (!BN_sub(r.to_bignum(), a.to_bignum(), b.to_bignum())) + if (!BN_sub(&r, &a, &b)) throw bignum_error("CBigNum::operator- : BN_sub failed"); return r; } @@ -445,7 +441,7 @@ inline const CBigNum operator-(const CBigNum& a, const CBigNum& b) inline const CBigNum operator-(const CBigNum& a) { CBigNum r(a); - BN_set_negative(r.to_bignum(), !BN_is_negative(r.to_bignum())); + BN_set_negative(&r, !BN_is_negative(&r)); return r; } @@ -453,7 +449,7 @@ inline const CBigNum operator*(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_mul(r.to_bignum(), a.to_bignum(), b.to_bignum(), pctx)) + if (!BN_mul(&r, &a, &b, pctx)) throw bignum_error("CBigNum::operator* : BN_mul failed"); return r; } @@ -462,7 +458,7 @@ inline const CBigNum operator/(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_div(r.to_bignum(), NULL, a.to_bignum(), b.to_bignum(), pctx)) + if (!BN_div(&r, NULL, &a, &b, pctx)) throw bignum_error("CBigNum::operator/ : BN_div failed"); return r; } @@ -471,7 +467,7 @@ inline const CBigNum operator%(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_mod(r.to_bignum(), a.to_bignum(), b.to_bignum(), pctx)) + if (!BN_mod(&r, &a, &b, pctx)) throw bignum_error("CBigNum::operator% : BN_div failed"); return r; } @@ -479,7 +475,7 @@ inline const CBigNum operator%(const CBigNum& a, const CBigNum& b) inline const CBigNum operator<<(const CBigNum& a, unsigned int shift) { CBigNum r; - if (!BN_lshift(r.to_bignum(), a.to_bignum(), shift)) + if (!BN_lshift(&r, &a, shift)) throw bignum_error("CBigNum:operator<< : BN_lshift failed"); return r; } @@ -491,12 +487,12 @@ inline const CBigNum operator>>(const CBigNum& a, unsigned int shift) return r; } -inline bool operator==(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) == 0); } -inline bool operator!=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) != 0); } -inline bool operator<=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) <= 0); } -inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) >= 0); } -inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) < 0); } -inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.to_bignum(), b.to_bignum()) > 0); } +inline bool operator==(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) == 0); } +inline bool operator!=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) != 0); } +inline bool operator<=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) <= 0); } +inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) >= 0); } +inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) < 0); } +inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) > 0); } static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; @@ -526,7 +522,7 @@ inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char CBigNum rem; while (bn > bn0) { - if (!BN_div(dv.to_bignum(), rem.to_bignum(), bn.to_bignum(), bn58.to_bignum(), pctx)) + if (!BN_div(&dv, &rem, &bn, &bn58, pctx)) throw bignum_error("EncodeBase58 : BN_div failed"); bn = dv; unsigned int c = rem.getulong(); @@ -576,7 +572,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) break; } bnChar.setulong(p1 - pszBase58); - if (!BN_mul(bn.to_bignum(), bn.to_bignum(), bn58.to_bignum(), pctx)) + if (!BN_mul(&bn, &bn, &bn58, pctx)) throw bignum_error("DecodeBase58 : BN_mul failed"); bn += bnChar; } diff --git a/src/crypto/dh.cpp b/src/crypto/dh.cpp index e7f6c59..cbd7dcc 100644 --- a/src/crypto/dh.cpp +++ b/src/crypto/dh.cpp @@ -1,9 +1,6 @@ #include #include -#if OPENSSL_VERSION_NUMBER >= 0x10100000L -#endif - namespace fc { SSL_TYPE(ssl_dh, DH, DH_free) @@ -15,19 +12,10 @@ namespace fc { bool diffie_hellman::generate_params( int s, uint8_t g ) { - ssl_dh dh; - DH_generate_parameters_ex(dh.obj, s, g, NULL); -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - ssl_bignum bn_p; - DH_get0_pqg(dh.obj, (const BIGNUM**)&bn_p.obj, NULL, NULL); - p.resize( BN_num_bytes( bn_p ) ); - if( p.size() ) - BN_bn2bin( bn_p, (unsigned char*)&p.front() ); -#else + ssl_dh dh = DH_generate_parameters( s, g, NULL, NULL ); p.resize( BN_num_bytes( dh->p ) ); if( p.size() ) BN_bn2bin( dh->p, (unsigned char*)&p.front() ); -#endif this->g = g; return fc::validate( dh, valid ); } @@ -37,14 +25,8 @@ namespace fc { if( !p.size() ) return valid = false; ssl_dh dh = DH_new(); -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - const auto bn_p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); - const auto bn_g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); - DH_set0_pqg(dh.obj, bn_p, NULL, bn_g); -#else dh->p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); dh->g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); -#endif return fc::validate( dh, valid ); } @@ -53,14 +35,8 @@ namespace fc { if( !p.size() ) return valid = false; ssl_dh dh = DH_new(); -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - const auto bn_p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); - const auto bn_g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); - DH_set0_pqg(dh.obj, bn_p, NULL, bn_g); -#else dh->p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); dh->g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); -#endif if( !fc::validate( dh, valid ) ) { @@ -68,42 +44,21 @@ namespace fc { } DH_generate_key(dh); -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - ssl_bignum bn_pub_key; - ssl_bignum bn_priv_key; - DH_get0_key(dh.obj, (const BIGNUM**)&bn_pub_key.obj, (const BIGNUM**)&bn_priv_key.obj); - pub_key.resize( BN_num_bytes( bn_pub_key ) ); - priv_key.resize( BN_num_bytes( bn_priv_key ) ); - if( pub_key.size() ) - BN_bn2bin( bn_pub_key.obj, (unsigned char*)&pub_key.front() ); - if( priv_key.size() ) - BN_bn2bin( bn_priv_key.obj, (unsigned char*)&priv_key.front() ); -#else pub_key.resize( BN_num_bytes( dh->pub_key ) ); priv_key.resize( BN_num_bytes( dh->priv_key ) ); if( pub_key.size() ) BN_bn2bin( dh->pub_key, (unsigned char*)&pub_key.front() ); if( priv_key.size() ) BN_bn2bin( dh->priv_key, (unsigned char*)&priv_key.front() ); -#endif return true; } bool diffie_hellman::compute_shared_key( const char* buf, uint32_t s ) { ssl_dh dh = DH_new(); -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - auto bn_p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); - auto bn_pub_key = BN_bin2bn( (unsigned char*)&pub_key.front(), pub_key.size(), NULL ); - auto bn_priv_key = BN_bin2bn( (unsigned char*)&priv_key.front(), priv_key.size(), NULL ); - auto bn_g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); - DH_set0_pqg(dh.obj, bn_p, NULL, bn_g); - DH_set0_key(dh.obj, bn_pub_key, bn_priv_key); -#else dh->p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL ); dh->pub_key = BN_bin2bn( (unsigned char*)&pub_key.front(), pub_key.size(), NULL ); dh->priv_key = BN_bin2bn( (unsigned char*)&priv_key.front(), priv_key.size(), NULL ); dh->g = BN_bin2bn( (unsigned char*)&g, 1, NULL ); -#endif int check; DH_check(dh,&check); diff --git a/tests/crypto/base_n_tests.cpp b/tests/crypto/base_n_tests.cpp index a501123..4ec3c1d 100644 --- a/tests/crypto/base_n_tests.cpp +++ b/tests/crypto/base_n_tests.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include #include @@ -44,29 +43,6 @@ BOOST_AUTO_TEST_CASE(hex_test) } -static void test_32( const std::string& test, const std::string& expected ) -{ - std::vector vec( test.begin(), test.end() ); - fc::string enc1 = fc::to_base32( vec ); - fc::string enc2 = fc::to_base32( test.c_str(), test.size() ); - BOOST_CHECK_EQUAL( enc1, enc2 ); - BOOST_CHECK_EQUAL( expected, enc2 ); - - std::vector dec = fc::from_base32( enc1 ); - BOOST_CHECK_EQUAL( vec.size(), dec.size() ); - BOOST_CHECK( !memcmp( vec.data(), dec.data(), vec.size() ) ); -} - -BOOST_AUTO_TEST_CASE(base32_test) -{ - test_32( TEST1, "" ); - test_32( TEST2, "AAATAMI=" ); - test_32( TEST3, "IFBEGRCFIZDUQSKKJNGE2TSPKBIVEU2UKVLFOWCZLI======" ); - test_32( TEST4, "777AB7IB7Q======" ); - test_32( TEST5, "AAAAA===" ); -} - - static void test_36( const std::string& test, const std::string& expected ) { std::vector vec( test.begin(), test.end() ); diff --git a/vendor/cyoencode-1.0.2/LICENSE.TXT b/vendor/cyoencode-1.0.2/LICENSE.TXT deleted file mode 100644 index 4e10e73..0000000 --- a/vendor/cyoencode-1.0.2/LICENSE.TXT +++ /dev/null @@ -1,27 +0,0 @@ -All the files in this library are covered under the terms of the Berkeley -Software Distribution (BSD) License: - -Copyright (c) 2009-2012, Graham Bull. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/vendor/cyoencode-1.0.2/README.TXT b/vendor/cyoencode-1.0.2/README.TXT deleted file mode 100644 index 30df17d..0000000 --- a/vendor/cyoencode-1.0.2/README.TXT +++ /dev/null @@ -1,50 +0,0 @@ -=============================================================================== -CyoEncode -http://cyoencode.sourceforge.net/ - -Copyright (c) 2009-2012, Graham Bull. All rights reserved. -=============================================================================== - -Version 1.0.2 -Release Date 5th January 2012 - -------------------------------------------------------------------------------- -1. License -------------------------------------------------------------------------------- - -CyoEncode is made available under the terms of the Berkeley Software -Distribution (BSD) licence, as detailed in LICENSE.TXT. This allows you -complete freedom to use and distribute the code in source and/or binary form, -as long as you respect the original copyright. - -------------------------------------------------------------------------------- -2. Instructions -------------------------------------------------------------------------------- - -Simply copy the required source files (CyoEncode.h/cpp and CyoDecode.h/cpp) -into your C/C++ project. - -Examples of usage can be found in the test.c file. - -For Unix/Linux developers, there's a shell script that will build the test -using GCC. - -For Windows developers, Visual Studio projects are included. - -------------------------------------------------------------------------------- -3. Release Notes -------------------------------------------------------------------------------- - -1.0.2 - 5th January 2012 -- A little refactoring, added some shared functions. -- Added VS42010 project file. -- Added x64 build configurations. - -1.0.1 - 25th September 2009 -- Added the cyoBase??Validate() functions. -- Added detection of invalid encodings in the cyoBase??Decode() functions, - rather than relying on assertions. - -1.0.0 - 19th August 2009 -- First release. - diff --git a/vendor/cyoencode-1.0.2/src/CyoDecode.c b/vendor/cyoencode-1.0.2/src/CyoDecode.c deleted file mode 100644 index d40e3a8..0000000 --- a/vendor/cyoencode-1.0.2/src/CyoDecode.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * CyoDecode.c - part of the CyoEncode library - * - * Copyright (c) 2009-2012, Graham Bull. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "CyoDecode.h" - -#include - -#include //TEMP - -/********************************** Shared ***********************************/ - -static int cyoBaseXXValidate( const char* src, size_t size, size_t inputBytes, size_t maxPadding, - unsigned char maxValue, const unsigned char table[] ) -{ - /* - * returns 0 if the source is a valid baseXX encoding - */ - - if (!src) - return -1; /*ERROR - NULL pointer*/ - - if (size % inputBytes != 0) - return -1; /*ERROR - extra characters*/ - - /* check the bytes */ - for (; size >= 1; --size, ++src) - { - unsigned char ch = *src; - if ((ch >= 0x80) || (table[ ch ] > maxValue)) - break; - } - - /* check any padding */ - for (; 1 <= size && size <= maxPadding; --size, ++src) - { - unsigned char ch = *src; - if ((ch >= 0x80) || (table[ ch ] != maxValue + 1)) - break; - } - - /* if size isn't zero then the encoded string isn't valid */ - if (size != 0) - return -2; /*ERROR - invalid baseXX character*/ - - /* OK */ - return 0; -} - -static size_t cyoBaseXXDecodeGetLength( size_t size, size_t inputBytes, size_t outputBytes ) -{ - if (size % inputBytes != 0) - return 0; /*ERROR - extra characters*/ - - /* OK */ - return (((size + inputBytes - 1) / inputBytes) * outputBytes) + 1; /*plus terminator*/ -} - -/****************************** Base16 Decoding ******************************/ - -static const size_t BASE16_INPUT = 2; -static const size_t BASE16_OUTPUT = 1; -static const size_t BASE16_MAX_PADDING = 0; -static const unsigned char BASE16_MAX_VALUE = 15; -static const unsigned char BASE16_TABLE[ 0x80 ] = { - /*00-07*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*08-0f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*10-17*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*18-1f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*20-27*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*28-2f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*30-37*/ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /*8 = '0'-'7'*/ - /*38-3f*/ 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /*2 = '8'-'9'*/ - /*40-47*/ 0xFF, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xFF, /*6 = 'A'-'F'*/ - /*48-4f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*50-57*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*58-5f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*60-67*/ 0xFF, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xFF, /*6 = 'a'-'f' (same as 'A'-'F')*/ - /*68-6f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*70-77*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*78-7f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -int cyoBase16Validate( const char* src, size_t size ) -{ - return cyoBaseXXValidate( src, size, BASE16_INPUT, BASE16_MAX_PADDING, BASE16_MAX_VALUE, BASE16_TABLE ); -} - -size_t cyoBase16DecodeGetLength( size_t size ) -{ - return cyoBaseXXDecodeGetLength( size, BASE16_INPUT, BASE16_OUTPUT ); -} - -size_t cyoBase16Decode( void* dest, const char* src, size_t size ) -{ - /* - * output 1 byte for every 2 input: - * - * outputs: 1 - * inputs: 1 = ----1111 = 1111---- - * 2 = ----2222 = ----2222 - */ - - if (dest && src && (size % BASE16_INPUT == 0)) - { - unsigned char* pDest = (unsigned char*)dest; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - unsigned char in1, in2; - - while (dwSrcSize >= 1) - { - /* 2 inputs */ - in1 = *src++; - in2 = *src++; - dwSrcSize -= BASE16_INPUT; - - /* Validate ascii */ - if (in1 >= 0x80 || in2 >= 0x80) - return 0; /*ERROR - invalid base16 character*/ - - /* Convert ascii to base16 */ - in1 = BASE16_TABLE[ in1 ]; - in2 = BASE16_TABLE[ in2 ]; - - /* Validate base16 */ - if (in1 > BASE16_MAX_VALUE || in2 > BASE16_MAX_VALUE) - return 0; /*ERROR - invalid base16 character*/ - - /* 1 output */ - *pDest++ = ((in1 << 4) | in2); - dwDestSize += BASE16_OUTPUT; - } - *pDest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer, or size isn't a multiple of 2*/ -} - -/****************************** Base32 Decoding ******************************/ - -static const size_t BASE32_INPUT = 8; -static const size_t BASE32_OUTPUT = 5; -static const size_t BASE32_MAX_PADDING = 6; -static const unsigned char BASE32_MAX_VALUE = 31; -static const unsigned char BASE32_TABLE[ 0x80 ] = { - /*00-07*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*08-0f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*10-17*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*18-1f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*20-27*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*28-2f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*30-37*/ 0xFF, 0xFF, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /*6 = '2'-'7'*/ - /*38-3f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0xFF, 0xFF, /*1 = '='*/ - /*40-47*/ 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /*7 = 'A'-'G'*/ - /*48-4f*/ 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, /*8 = 'H'-'O'*/ - /*50-57*/ 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, /*8 = 'P'-'W'*/ - /*58-5f*/ 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /*3 = 'X'-'Z'*/ - /*60-67*/ 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /*7 = 'a'-'g' (same as 'A'-'G')*/ - /*68-6f*/ 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, /*8 = 'h'-'o' (same as 'H'-'O')*/ - /*70-77*/ 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, /*8 = 'p'-'w' (same as 'P'-'W')*/ - /*78-7f*/ 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /*3 = 'x'-'z' (same as 'X'-'Z')*/ -}; - -int cyoBase32Validate( const char* src, size_t size ) -{ - return cyoBaseXXValidate( src, size, BASE32_INPUT, BASE32_MAX_PADDING, BASE32_MAX_VALUE, BASE32_TABLE ); -} - -size_t cyoBase32DecodeGetLength( size_t size ) -{ - return cyoBaseXXDecodeGetLength( size, BASE32_INPUT, BASE32_OUTPUT ); -} - -size_t cyoBase32Decode( void* dest, const char* src, size_t size ) -{ - /* - * output 5 bytes for every 8 input: - * - * outputs: 1 2 3 4 5 - * inputs: 1 = ---11111 = 11111--- - * 2 = ---222XX = -----222 XX------ - * 3 = ---33333 = --33333- - * 4 = ---4XXXX = -------4 XXXX---- - * 5 = ---5555X = ----5555 X------- - * 6 = ---66666 = -66666-- - * 7 = ---77XXX = ------77 XXX----- - * 8 = ---88888 = ---88888 - */ - - if (dest && src && (size % BASE32_INPUT == 0)) - { - unsigned char* pDest = (unsigned char*)dest; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - unsigned char in1, in2, in3, in4, in5, in6, in7, in8; - - while (dwSrcSize >= 1) - { - /* 8 inputs */ - in1 = *src++; - in2 = *src++; - in3 = *src++; - in4 = *src++; - in5 = *src++; - in6 = *src++; - in7 = *src++; - in8 = *src++; - dwSrcSize -= BASE32_INPUT; - - /* Validate ascii */ - if ( in1 >= 0x80 || in2 >= 0x80 || in3 >= 0x80 || in4 >= 0x80 - || in5 >= 0x80 || in6 >= 0x80 || in7 >= 0x80 || in8 >= 0x80) - return 0; /*ERROR - invalid base32 character*/ - - /* Convert ascii to base16 */ - in1 = BASE32_TABLE[ in1 ]; - in2 = BASE32_TABLE[ in2 ]; - in3 = BASE32_TABLE[ in3 ]; - in4 = BASE32_TABLE[ in4 ]; - in5 = BASE32_TABLE[ in5 ]; - in6 = BASE32_TABLE[ in6 ]; - in7 = BASE32_TABLE[ in7 ]; - in8 = BASE32_TABLE[ in8 ]; - - /* Validate base32 */ - if (in1 > BASE32_MAX_VALUE || in2 > BASE32_MAX_VALUE) - return 0; /*ERROR - invalid base32 character*/ - /*the following can be padding*/ - if ( in3 > BASE32_MAX_VALUE + 1 || in4 > BASE32_MAX_VALUE + 1 || in5 > BASE32_MAX_VALUE + 1 - || in6 > BASE32_MAX_VALUE + 1 || in7 > BASE32_MAX_VALUE + 1 || in8 > BASE32_MAX_VALUE + 1) - return 0; /*ERROR - invalid base32 character*/ - - /* 5 outputs */ - *pDest++ = ((in1 & 0x1f) << 3) | ((in2 & 0x1c) >> 2); - *pDest++ = ((in2 & 0x03) << 6) | ((in3 & 0x1f) << 1) | ((in4 & 0x10) >> 4); - *pDest++ = ((in4 & 0x0f) << 4) | ((in5 & 0x1e) >> 1); - *pDest++ = ((in5 & 0x01) << 7) | ((in6 & 0x1f) << 2) | ((in7 & 0x18) >> 3); - *pDest++ = ((in7 & 0x07) << 5) | (in8 & 0x1f); - dwDestSize += BASE32_OUTPUT; - - /* Padding */ - if (in8 == BASE32_MAX_VALUE + 1) - { - --dwDestSize; - assert( (in7 == BASE32_MAX_VALUE + 1 && in6 == BASE32_MAX_VALUE + 1) || (in7 != BASE32_MAX_VALUE + 1) ); - if (in6 == BASE32_MAX_VALUE + 1) - { - --dwDestSize; - if (in5 == BASE32_MAX_VALUE + 1) - { - --dwDestSize; - assert( (in4 == BASE32_MAX_VALUE + 1 && in3 == BASE32_MAX_VALUE + 1) || (in4 != BASE32_MAX_VALUE + 1) ); - if (in3 == BASE32_MAX_VALUE + 1) - { - --dwDestSize; - } - } - } - } - } - *pDest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer, or size isn't a multiple of 8*/ -} - -/****************************** Base64 Decoding ******************************/ - -static const size_t BASE64_INPUT = 4; -static const size_t BASE64_OUTPUT = 3; -static const size_t BASE64_MAX_PADDING = 2; -static const unsigned char BASE64_MAX_VALUE = 63; -static const unsigned char BASE64_TABLE[ 0x80 ] = { - /*00-07*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*08-0f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*10-17*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*18-1f*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*20-27*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /*28-2f*/ 0xFF, 0xFF, 0xFF, 0x3e, 0xFF, 0xFF, 0xFF, 0x3f, /*2 = '+' and '/'*/ - /*30-37*/ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, /*8 = '0'-'7'*/ - /*38-3f*/ 0x3c, 0x3d, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, /*2 = '8'-'9' and '='*/ - /*40-47*/ 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /*7 = 'A'-'G'*/ - /*48-4f*/ 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, /*8 = 'H'-'O'*/ - /*50-57*/ 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, /*8 = 'P'-'W'*/ - /*58-5f*/ 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /*3 = 'X'-'Z'*/ - /*60-67*/ 0xFF, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, /*7 = 'a'-'g'*/ - /*68-6f*/ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, /*8 = 'h'-'o'*/ - /*70-77*/ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, /*8 = 'p'-'w'*/ - /*78-7f*/ 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /*3 = 'x'-'z'*/ -}; - -int cyoBase64Validate( const char* src, size_t size ) -{ - return cyoBaseXXValidate( src, size, BASE64_INPUT, BASE64_MAX_PADDING, BASE64_MAX_VALUE, BASE64_TABLE ); -} - -size_t cyoBase64DecodeGetLength( size_t size ) -{ - return cyoBaseXXDecodeGetLength( size, BASE64_INPUT, BASE64_OUTPUT ); -} - -size_t cyoBase64Decode( void* dest, const char* src, size_t size ) -{ - /* - * output 3 bytes for every 4 input: - * - * outputs: 1 2 3 - * inputs: 1 = --111111 = 111111-- - * 2 = --22XXXX = ------22 XXXX---- - * 3 = --3333XX = ----3333 XX------ - * 4 = --444444 = --444444 - */ - - if (dest && src && (size % BASE64_INPUT == 0)) - { - unsigned char* pDest = (unsigned char*)dest; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - unsigned char in1, in2, in3, in4; - - while (dwSrcSize >= 1) - { - /* 4 inputs */ - in1 = *src++; - in2 = *src++; - in3 = *src++; - in4 = *src++; - dwSrcSize -= BASE64_INPUT; - - /* Validate ascii */ - if (in1 >= 0x80 || in2 >= 0x80 || in3 >= 0x80 || in4 >= 0x80) - return 0; /*ERROR - invalid base64 character*/ - - /* Convert ascii to base64 */ - in1 = BASE64_TABLE[ in1 ]; - in2 = BASE64_TABLE[ in2 ]; - in3 = BASE64_TABLE[ in3 ]; - in4 = BASE64_TABLE[ in4 ]; - - /* Validate base64 */ - if (in1 > BASE64_MAX_VALUE || in2 > BASE64_MAX_VALUE) - return 0; /*ERROR - invalid base64 character*/ - /*the following can be padding*/ - if (in3 > BASE64_MAX_VALUE + 1 || in4 > BASE64_MAX_VALUE + 1) - return 0; /*ERROR - invalid base64 character*/ - - /* 3 outputs */ - *pDest++ = ((in1 & 0x3f) << 2) | ((in2 & 0x30) >> 4); - *pDest++ = ((in2 & 0x0f) << 4) | ((in3 & 0x3c) >> 2); - *pDest++ = ((in3 & 0x03) << 6) | (in4 & 0x3f); - dwDestSize += BASE64_OUTPUT; - - /* Padding */ - if (in4 == BASE64_MAX_VALUE + 1) - { - --dwDestSize; - if (in3 == BASE64_MAX_VALUE + 1) - { - --dwDestSize; - } - } - } - *pDest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer, or size isn't a multiple of 4*/ -} diff --git a/vendor/cyoencode-1.0.2/src/CyoDecode.h b/vendor/cyoencode-1.0.2/src/CyoDecode.h deleted file mode 100644 index 873ed20..0000000 --- a/vendor/cyoencode-1.0.2/src/CyoDecode.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * CyoDecode.h - part of the CyoEncode library - * - * Copyright (c) 2009-2012, Graham Bull. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __CYODECODE_H -#define __CYODECODE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Base16 Decoding */ -int cyoBase16Validate( const char* src, size_t size ); -size_t cyoBase16DecodeGetLength( size_t size ); -size_t cyoBase16Decode( void* dest, const char* src, size_t size ); - -/* Base32 Decoding */ -int cyoBase32Validate( const char* src, size_t size ); -size_t cyoBase32DecodeGetLength( size_t size ); -size_t cyoBase32Decode( void* dest, const char* src, size_t size ); - -/* Base64 Decoding */ -int cyoBase64Validate( const char* src, size_t size ); -size_t cyoBase64DecodeGetLength( size_t size ); -size_t cyoBase64Decode( void* dest, const char* src, size_t size ); - -#ifdef __cplusplus -} -#endif - -#endif /*__CYODECODE_H*/ - diff --git a/vendor/cyoencode-1.0.2/src/CyoEncode.c b/vendor/cyoencode-1.0.2/src/CyoEncode.c deleted file mode 100644 index 3e9191f..0000000 --- a/vendor/cyoencode-1.0.2/src/CyoEncode.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * CyoEncode.c - part of the CyoEncode library - * - * Copyright (c) 2009-2012, Graham Bull. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "CyoEncode.h" - -#include - -/********************************** Shared ***********************************/ - -static size_t cyoBaseXXEncodeGetLength( size_t size, size_t inputBytes, size_t outputBytes ) -{ - return (((size + inputBytes - 1) / inputBytes) * outputBytes) + 1; /*plus terminator*/ -} - -/****************************** Base16 Encoding ******************************/ - -static const size_t BASE16_INPUT = 1; -static const size_t BASE16_OUTPUT = 2; -static const char* const BASE16_TABLE = "0123456789ABCDEF"; - -size_t cyoBase16EncodeGetLength( size_t size ) -{ - return cyoBaseXXEncodeGetLength( size, BASE16_INPUT, BASE16_OUTPUT ); -} - -size_t cyoBase16Encode( char* dest, const void* src, size_t size ) -{ - /* - * output 2 bytes for every 1 input: - * - * inputs: 1 - * outputs: 1 = ----1111 = 1111---- - * 2 = ----2222 = ----2222 - */ - - if (dest && src) - { - unsigned char* pSrc = (unsigned char*)src; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - unsigned char ch; - - while (dwSrcSize >= 1) - { - /* 1 input */ - ch = *pSrc++; - dwSrcSize -= BASE16_INPUT; - - /* 2 outputs */ - *dest++ = BASE16_TABLE[ (ch & 0xf0) >> 4 ]; - *dest++ = BASE16_TABLE[ (ch & 0x0f) ]; - dwDestSize += BASE16_OUTPUT; - } - *dest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer*/ -} - -/****************************** Base32 Encoding ******************************/ - -static const size_t BASE32_INPUT = 5; -static const size_t BASE32_OUTPUT = 8; -static const char* const BASE32_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567="; - -size_t cyoBase32EncodeGetLength( size_t size ) -{ - return cyoBaseXXEncodeGetLength( size, BASE32_INPUT, BASE32_OUTPUT ); -} - -size_t cyoBase32Encode( char* dest, const void* src, size_t size ) -{ - /* - * output 8 bytes for every 5 input: - * - * inputs: 1 2 3 4 5 - * outputs: 1 = ---11111 = 11111--- - * 2 = ---222XX = -----222 XX------ - * 3 = ---33333 = --33333- - * 4 = ---4XXXX = -------4 XXXX---- - * 5 = ---5555X = ----5555 X------- - * 6 = ---66666 = -66666-- - * 7 = ---77XXX = ------77 XXX----- - * 8 = ---88888 = ---88888 - */ - - if (dest && src) - { - unsigned char* pSrc = (unsigned char*)src; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - size_t dwBlockSize; - unsigned char n1, n2, n3, n4, n5, n6, n7, n8; - - while (dwSrcSize >= 1) - { - /* Encode inputs */ - dwBlockSize = (dwSrcSize < BASE32_INPUT ? dwSrcSize : BASE32_INPUT); - n1 = n2 = n3 = n4 = n5 = n6 = n7 = n8 = 0; - switch (dwBlockSize) - { - case 5: - n8 = (pSrc[ 4 ] & 0x1f); - n7 = ((pSrc[ 4 ] & 0xe0) >> 5); - case 4: - n7 |= ((pSrc[ 3 ] & 0x03) << 3); - n6 = ((pSrc[ 3 ] & 0x7c) >> 2); - n5 = ((pSrc[ 3 ] & 0x80) >> 7); - case 3: - n5 |= ((pSrc[ 2 ] & 0x0f) << 1); - n4 = ((pSrc[ 2 ] & 0xf0) >> 4); - case 2: - n4 |= ((pSrc[ 1 ] & 0x01) << 4); - n3 = ((pSrc[ 1 ] & 0x3e) >> 1); - n2 = ((pSrc[ 1 ] & 0xc0) >> 6); - case 1: - n2 |= ((pSrc[ 0 ] & 0x07) << 2); - n1 = ((pSrc[ 0 ] & 0xf8) >> 3); - break; - - default: - assert( 0 ); - } - pSrc += dwBlockSize; - dwSrcSize -= dwBlockSize; - - /* Validate */ - assert( n1 <= 31 ); - assert( n2 <= 31 ); - assert( n3 <= 31 ); - assert( n4 <= 31 ); - assert( n5 <= 31 ); - assert( n6 <= 31 ); - assert( n7 <= 31 ); - assert( n8 <= 31 ); - - /* Padding */ - switch (dwBlockSize) - { - case 1: n3 = n4 = 32; - case 2: n5 = 32; - case 3: n6 = n7 = 32; - case 4: n8 = 32; - case 5: - break; - - default: - assert( 0 ); - } - - /* 8 outputs */ - *dest++ = BASE32_TABLE[ n1 ]; - *dest++ = BASE32_TABLE[ n2 ]; - *dest++ = BASE32_TABLE[ n3 ]; - *dest++ = BASE32_TABLE[ n4 ]; - *dest++ = BASE32_TABLE[ n5 ]; - *dest++ = BASE32_TABLE[ n6 ]; - *dest++ = BASE32_TABLE[ n7 ]; - *dest++ = BASE32_TABLE[ n8 ]; - dwDestSize += BASE32_OUTPUT; - } - *dest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer*/ -} - -/****************************** Base64 Encoding ******************************/ - -static const size_t BASE64_INPUT = 3; -static const size_t BASE64_OUTPUT = 4; -static const char* const BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - -size_t cyoBase64EncodeGetLength( size_t size ) -{ - return cyoBaseXXEncodeGetLength( size, BASE64_INPUT, BASE64_OUTPUT ); -} - -size_t cyoBase64Encode( char* dest, const void* src, size_t size ) -{ - /* - * output 4 bytes for every 3 input: - * - * inputs: 1 2 3 - * outputs: 1 = --111111 = 111111-- - * 2 = --22XXXX = ------22 XXXX---- - * 3 = --3333XX = ----3333 XX------ - * 4 = --444444 = --444444 - */ - - if (dest && src) - { - unsigned char* pSrc = (unsigned char*)src; - size_t dwSrcSize = size; - size_t dwDestSize = 0; - size_t dwBlockSize = 0; - unsigned char n1, n2, n3, n4; - - while (dwSrcSize >= 1) - { - /* Encode inputs */ - dwBlockSize = (dwSrcSize < BASE64_INPUT ? dwSrcSize : BASE64_INPUT); - n1 = n2 = n3 = n4 = 0; - switch (dwBlockSize) - { - case 3: - n4 = (pSrc[ 2 ] & 0x3f); - n3 = ((pSrc[ 2 ] & 0xc0) >> 6); - case 2: - n3 |= ((pSrc[ 1 ] & 0x0f) << 2); - n2 = ((pSrc[ 1 ] & 0xf0) >> 4); - case 1: - n2 |= ((pSrc[ 0 ] & 0x03) << 4); - n1 = ((pSrc[ 0 ] & 0xfc) >> 2); - break; - - default: - assert( 0 ); - } - pSrc += dwBlockSize; - dwSrcSize -= dwBlockSize; - - /* Validate */ - assert( n1 <= 63 ); - assert( n2 <= 63 ); - assert( n3 <= 63 ); - assert( n4 <= 63 ); - - /* Padding */ - switch (dwBlockSize) - { - case 1: n3 = 64; - case 2: n4 = 64; - case 3: - break; - - default: - assert( 0 ); - } - - /* 4 outputs */ - *dest++ = BASE64_TABLE[ n1 ]; - *dest++ = BASE64_TABLE[ n2 ]; - *dest++ = BASE64_TABLE[ n3 ]; - *dest++ = BASE64_TABLE[ n4 ]; - dwDestSize += BASE64_OUTPUT; - } - *dest++ = '\x0'; /*append terminator*/ - - return dwDestSize; - } - else - return 0; /*ERROR - null pointer*/ -} diff --git a/vendor/cyoencode-1.0.2/src/CyoEncode.h b/vendor/cyoencode-1.0.2/src/CyoEncode.h deleted file mode 100644 index 183a66e..0000000 --- a/vendor/cyoencode-1.0.2/src/CyoEncode.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * CyoEncode.h - part of the CyoEncode library - * - * Copyright (c) 2009-2012, Graham Bull. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __CYOENCODE_H -#define __CYOENCODE_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Base16 Encoding */ -size_t cyoBase16EncodeGetLength( size_t size ); -size_t cyoBase16Encode( char* dest, const void* src, size_t size ); - -/* Base32 Encoding */ -size_t cyoBase32EncodeGetLength( size_t size ); -size_t cyoBase32Encode( char* dest, const void* src, size_t size ); - -/* Base64 Encoding */ -size_t cyoBase64EncodeGetLength( size_t size ); -size_t cyoBase64Encode( char* dest, const void* src, size_t size ); - -#ifdef __cplusplus -} -#endif - -#endif /*__CYOENCODE_H*/ - diff --git a/vendor/cyoencode-1.0.2/src/build.sh b/vendor/cyoencode-1.0.2/src/build.sh deleted file mode 100755 index 67c0907..0000000 --- a/vendor/cyoencode-1.0.2/src/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -gcc test.c CyoEncode.c CyoDecode.c -o test - diff --git a/vendor/cyoencode-1.0.2/src/cyoencode-vc100.vcxproj b/vendor/cyoencode-1.0.2/src/cyoencode-vc100.vcxproj deleted file mode 100644 index 8c3a8d2..0000000 --- a/vendor/cyoencode-1.0.2/src/cyoencode-vc100.vcxproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - cyoencode-vc100 - {C773C1E9-CAC6-40AF-A400-567F73AB0178} - cyoencodevc100 - Win32Proj - - - - Application - Unicode - true - - - Application - Unicode - true - - - Application - Unicode - - - Application - Unicode - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level4 - EditAndContinue - - - true - Console - MachineX86 - - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - - - Level4 - ProgramDatabase - - - true - Console - - - - - MaxSpeed - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level4 - ProgramDatabase - - - true - Console - true - true - MachineX86 - - - - - MaxSpeed - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level4 - ProgramDatabase - - - true - Console - true - true - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/cyoencode-1.0.2/src/cyoencode-vc71.vcproj b/vendor/cyoencode-1.0.2/src/cyoencode-vc71.vcproj deleted file mode 100644 index 26c46ff..0000000 --- a/vendor/cyoencode-1.0.2/src/cyoencode-vc71.vcproj +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/cyoencode-1.0.2/src/cyoencode-vc80.vcproj b/vendor/cyoencode-1.0.2/src/cyoencode-vc80.vcproj deleted file mode 100644 index c08685a..0000000 --- a/vendor/cyoencode-1.0.2/src/cyoencode-vc80.vcproj +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/cyoencode-1.0.2/src/cyoencode-vc90.vcproj b/vendor/cyoencode-1.0.2/src/cyoencode-vc90.vcproj deleted file mode 100644 index ee5927b..0000000 --- a/vendor/cyoencode-1.0.2/src/cyoencode-vc90.vcproj +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/cyoencode-1.0.2/src/test.c b/vendor/cyoencode-1.0.2/src/test.c deleted file mode 100644 index 9274105..0000000 --- a/vendor/cyoencode-1.0.2/src/test.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * test.c - part of the CyoEncode library - * - * Copyright (c) 2009-2012, Graham Bull. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "CyoEncode.h" -#include "CyoDecode.h" - -#include -#include -#include - -#define TEST_BASExx(base,str,expected) \ - printf( "TEST_BASE%s('%s')='%s'", #base, str, expected ); \ - required = cyoBase##base##EncodeGetLength( strlen( str )); \ - encoded = (char*)malloc( required ); \ - if (encoded == NULL) { \ - printf( "\n*** ERROR: Unable to allocate buffer for encoding ***\n" ); \ - goto exit; \ - } \ - cyoBase##base##Encode( encoded, str, strlen( str )); \ - if (strcmp( encoded, expected ) != 0) { \ - printf( "\n*** ERROR: Encoding failure ***\n" ); \ - goto exit; \ - } \ - valid = cyoBase##base##Validate( encoded, strlen( encoded )); \ - if (valid < 0) \ - { \ - printf( "\n*** ERROR: Unable to validate encoding (error %d) ***\n", valid ); \ - goto exit; \ - } \ - printf( " [passed]\n" ); \ - free( encoded ); encoded = NULL; - -#define TEST_BASE64(str,expected) TEST_BASExx(64,str,expected) -#define TEST_BASE32(str,expected) TEST_BASExx(32,str,expected) -#define TEST_BASE16(str,expected) TEST_BASExx(16,str,expected) - -#define CHECK_INVALID_BASExx(base,str,res) \ - printf( "CHECK_INVALID_BASE%s('%s')=%d", #base, str, res ); \ - valid = cyoBase##base##Validate( str, strlen( str )); \ - if (valid == 0) \ - { \ - printf( "\n*** ERROR: This is a valid encoding! ***\n" ); \ - goto exit; \ - } \ - if (valid != res) \ - { \ - printf( "\n*** ERROR: Expected a different return code! (%d) ***\n", valid ); \ - goto exit; \ - } \ - printf( " [passed]\n", #base, str ); \ - -#define CHECK_INVALID_BASE16(enc,res) CHECK_INVALID_BASExx(16,enc,res) -#define CHECK_INVALID_BASE32(enc,res) CHECK_INVALID_BASExx(32,enc,res) -#define CHECK_INVALID_BASE64(enc,res) CHECK_INVALID_BASExx(64,enc,res) - -int main( void ) -{ - const char* const original = "A wise man speaks when he has something to say"; - size_t required = 0; - char* encoded = NULL; - char* decoded = NULL; - int valid = 0; - int retcode = 1; - - printf( "Running CyoEncode tests...\n" ); - - /* Encode using Base64 */ - - printf( "Original = '%s'\n", original ); - required = cyoBase64EncodeGetLength( strlen( original )); - encoded = (char*)malloc( required ); - if (encoded == NULL) - { - printf( "*** ERROR: Unable to allocate buffer for encoding ***\n" ); - goto exit; - } - cyoBase64Encode( encoded, original, strlen( original )); - printf( "Encoded = '%s'\n", encoded ); - - /* Validate encoding */ - - valid = cyoBase64Validate( encoded, strlen( encoded )); - if (valid < 0) - { - printf( "*** ERROR: Encoding failure (error %d) ***\n", valid ); - goto exit; - } - - /* Decode using Base64 */ - - required = cyoBase64DecodeGetLength( strlen( encoded )); - decoded = (char*)malloc( required ); - if (decoded == NULL) - { - printf( "*** ERROR: Unable to allocate buffer for decoding ***\n" ); - goto exit; - } - cyoBase64Decode( decoded, encoded, strlen( encoded )); - printf( "Decoded = '%s'\n", decoded ); - - /* Validate */ - - if (strcmp( original, decoded ) != 0) - { - printf( "*** ERROR: Encoding/decoding failure ***\n" ); - goto exit; - } - - free( encoded ); - encoded = NULL; - free( decoded ); - decoded = NULL; - - /* Test vectors from RFC 4648 */ - - TEST_BASE16( "", "" ); - TEST_BASE16( "f", "66" ); - TEST_BASE16( "fo", "666F" ); - TEST_BASE16( "foo", "666F6F" ); - TEST_BASE16( "foob", "666F6F62" ); - TEST_BASE16( "fooba", "666F6F6261" ); - TEST_BASE16( "foobar", "666F6F626172" ); - - TEST_BASE32( "", "" ); - TEST_BASE32( "f", "MY======" ); - TEST_BASE32( "fo", "MZXQ====" ); - TEST_BASE32( "foo", "MZXW6===" ); - TEST_BASE32( "foob", "MZXW6YQ=" ); - TEST_BASE32( "fooba", "MZXW6YTB" ); - TEST_BASE32( "foobar", "MZXW6YTBOI======" ); - - TEST_BASE64( "", "" ); - TEST_BASE64( "f", "Zg==" ); - TEST_BASE64( "fo", "Zm8=" ); - TEST_BASE64( "foo", "Zm9v" ); - TEST_BASE64( "foob", "Zm9vYg==" ); - TEST_BASE64( "fooba", "Zm9vYmE=" ); - TEST_BASE64( "foobar", "Zm9vYmFy" ); - - /* Other tests */ - - CHECK_INVALID_BASE16( "1", -1 ); - CHECK_INVALID_BASE16( "123", -1 ); - CHECK_INVALID_BASE16( "1G", -2 ); - - CHECK_INVALID_BASE32( "A", -1 ); - CHECK_INVALID_BASE32( "ABCDEFG", -1 ); - CHECK_INVALID_BASE32( "ABCDEFG1", -2 ); - CHECK_INVALID_BASE32( "A=======", -2 ); - - CHECK_INVALID_BASE64( "A", -1 ); - CHECK_INVALID_BASE64( "ABCDE", -1 ); - CHECK_INVALID_BASE64( "A&B=", -2 ); - CHECK_INVALID_BASE64( "A===", -2 ); - - printf( "*** All tests passed ***\n" ); - retcode = 0; - -exit: - if (encoded != NULL) - free( encoded ); - if (decoded != NULL) - free( decoded ); - - return retcode; -}