charm-crypto-framework 0.61.1__cp313-cp313-macosx_10_13_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- charm/__init__.py +5 -0
- charm/adapters/__init__.py +0 -0
- charm/adapters/abenc_adapt_hybrid.py +90 -0
- charm/adapters/dabenc_adapt_hybrid.py +145 -0
- charm/adapters/ibenc_adapt_hybrid.py +72 -0
- charm/adapters/ibenc_adapt_identityhash.py +80 -0
- charm/adapters/kpabenc_adapt_hybrid.py +91 -0
- charm/adapters/pkenc_adapt_bchk05.py +121 -0
- charm/adapters/pkenc_adapt_chk04.py +91 -0
- charm/adapters/pkenc_adapt_hybrid.py +98 -0
- charm/adapters/pksig_adapt_naor01.py +89 -0
- charm/config.py +7 -0
- charm/core/__init__.py +0 -0
- charm/core/benchmark/benchmark_util.c +353 -0
- charm/core/benchmark/benchmark_util.h +61 -0
- charm/core/benchmark/benchmarkmodule.c +476 -0
- charm/core/benchmark/benchmarkmodule.h +162 -0
- charm/core/benchmark.cpython-313-darwin.so +0 -0
- charm/core/crypto/AES/AES.c +1464 -0
- charm/core/crypto/AES.cpython-313-darwin.so +0 -0
- charm/core/crypto/DES/DES.c +113 -0
- charm/core/crypto/DES.cpython-313-darwin.so +0 -0
- charm/core/crypto/DES3/DES3.c +26 -0
- charm/core/crypto/DES3.cpython-313-darwin.so +0 -0
- charm/core/crypto/__init__.py +0 -0
- charm/core/crypto/cryptobase/XOR.c +80 -0
- charm/core/crypto/cryptobase/_counter.c +496 -0
- charm/core/crypto/cryptobase/_counter.h +54 -0
- charm/core/crypto/cryptobase/block_template.c +900 -0
- charm/core/crypto/cryptobase/block_template.h +69 -0
- charm/core/crypto/cryptobase/cryptobasemodule.c +220 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt.h +90 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_argchk.h +44 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_cfg.h +186 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_cipher.h +941 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_custom.h +556 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_des.c +1912 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_hash.h +407 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_mac.h +496 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_macros.h +435 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_math.h +534 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_misc.h +103 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_pk.h +653 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_pkcs.h +90 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_prng.h +199 -0
- charm/core/crypto/cryptobase/stream_template.c +271 -0
- charm/core/crypto/cryptobase/strxor.c +229 -0
- charm/core/crypto/cryptobase.cpython-313-darwin.so +0 -0
- charm/core/engine/__init__.py +5 -0
- charm/core/engine/protocol.py +293 -0
- charm/core/engine/util.py +174 -0
- charm/core/math/__init__.py +0 -0
- charm/core/math/elliptic_curve/ecmodule.c +1986 -0
- charm/core/math/elliptic_curve/ecmodule.h +230 -0
- charm/core/math/elliptic_curve.cpython-313-darwin.so +0 -0
- charm/core/math/elliptic_curve.pyi +63 -0
- charm/core/math/integer/integermodule.c +2539 -0
- charm/core/math/integer/integermodule.h +145 -0
- charm/core/math/integer.cpython-313-darwin.so +0 -0
- charm/core/math/integer.pyi +76 -0
- charm/core/math/pairing/miracl/miracl_config.h +37 -0
- charm/core/math/pairing/miracl/miracl_interface.h +118 -0
- charm/core/math/pairing/miracl/miracl_interface2.h +126 -0
- charm/core/math/pairing/miracl/pairingmodule2.c +2094 -0
- charm/core/math/pairing/miracl/pairingmodule2.h +307 -0
- charm/core/math/pairing/pairingmodule.c +2230 -0
- charm/core/math/pairing/pairingmodule.h +241 -0
- charm/core/math/pairing/relic/pairingmodule3.c +1853 -0
- charm/core/math/pairing/relic/pairingmodule3.h +233 -0
- charm/core/math/pairing/relic/relic_interface.c +1337 -0
- charm/core/math/pairing/relic/relic_interface.h +217 -0
- charm/core/math/pairing/relic/test_relic.c +171 -0
- charm/core/math/pairing.cpython-313-darwin.so +0 -0
- charm/core/math/pairing.pyi +69 -0
- charm/core/utilities/base64.c +248 -0
- charm/core/utilities/base64.h +15 -0
- charm/schemes/__init__.py +0 -0
- charm/schemes/abenc/__init__.py +0 -0
- charm/schemes/abenc/abenc_accountability_jyjxgd20.py +647 -0
- charm/schemes/abenc/abenc_bsw07.py +146 -0
- charm/schemes/abenc/abenc_ca_cpabe_ar17.py +684 -0
- charm/schemes/abenc/abenc_dacmacs_yj14.py +298 -0
- charm/schemes/abenc/abenc_lsw08.py +159 -0
- charm/schemes/abenc/abenc_maabe_rw15.py +236 -0
- charm/schemes/abenc/abenc_maabe_yj14.py +297 -0
- charm/schemes/abenc/abenc_tbpre_lww14.py +309 -0
- charm/schemes/abenc/abenc_unmcpabe_yahk14.py +223 -0
- charm/schemes/abenc/abenc_waters09.py +144 -0
- charm/schemes/abenc/abenc_yct14.py +208 -0
- charm/schemes/abenc/abenc_yllc15.py +178 -0
- charm/schemes/abenc/ac17.py +248 -0
- charm/schemes/abenc/bsw07.py +141 -0
- charm/schemes/abenc/cgw15.py +277 -0
- charm/schemes/abenc/dabe_aw11.py +204 -0
- charm/schemes/abenc/dfa_fe12.py +144 -0
- charm/schemes/abenc/pk_hve08.py +179 -0
- charm/schemes/abenc/waters11.py +143 -0
- charm/schemes/aggrsign_MuSig.py +150 -0
- charm/schemes/aggrsign_bls.py +267 -0
- charm/schemes/blindsig_ps16.py +654 -0
- charm/schemes/chamhash_adm05.py +113 -0
- charm/schemes/chamhash_rsa_hw09.py +100 -0
- charm/schemes/commit/__init__.py +0 -0
- charm/schemes/commit/commit_gs08.py +77 -0
- charm/schemes/commit/commit_pedersen92.py +53 -0
- charm/schemes/encap_bchk05.py +62 -0
- charm/schemes/grpsig/__init__.py +0 -0
- charm/schemes/grpsig/groupsig_bgls04.py +114 -0
- charm/schemes/grpsig/groupsig_bgls04_var.py +115 -0
- charm/schemes/hibenc/__init__.py +0 -0
- charm/schemes/hibenc/hibenc_bb04.py +105 -0
- charm/schemes/hibenc/hibenc_lew11.py +193 -0
- charm/schemes/ibenc/__init__.py +0 -0
- charm/schemes/ibenc/clpkc_rp03.py +119 -0
- charm/schemes/ibenc/ibenc_CW13_z.py +168 -0
- charm/schemes/ibenc/ibenc_bb03.py +94 -0
- charm/schemes/ibenc/ibenc_bf01.py +121 -0
- charm/schemes/ibenc/ibenc_ckrs09.py +120 -0
- charm/schemes/ibenc/ibenc_cllww12_z.py +172 -0
- charm/schemes/ibenc/ibenc_lsw08.py +120 -0
- charm/schemes/ibenc/ibenc_sw05.py +238 -0
- charm/schemes/ibenc/ibenc_waters05.py +144 -0
- charm/schemes/ibenc/ibenc_waters05_z.py +164 -0
- charm/schemes/ibenc/ibenc_waters09.py +107 -0
- charm/schemes/ibenc/ibenc_waters09_z.py +147 -0
- charm/schemes/joye_scheme.py +106 -0
- charm/schemes/lem_scheme.py +207 -0
- charm/schemes/pk_fre_ccv11.py +107 -0
- charm/schemes/pk_vrf.py +127 -0
- charm/schemes/pkenc/__init__.py +0 -0
- charm/schemes/pkenc/pkenc_cs98.py +108 -0
- charm/schemes/pkenc/pkenc_elgamal85.py +122 -0
- charm/schemes/pkenc/pkenc_gm82.py +98 -0
- charm/schemes/pkenc/pkenc_paillier99.py +118 -0
- charm/schemes/pkenc/pkenc_rabin.py +254 -0
- charm/schemes/pkenc/pkenc_rsa.py +186 -0
- charm/schemes/pksig/__init__.py +0 -0
- charm/schemes/pksig/pksig_CW13_z.py +135 -0
- charm/schemes/pksig/pksig_bls04.py +87 -0
- charm/schemes/pksig/pksig_boyen.py +156 -0
- charm/schemes/pksig/pksig_chch.py +97 -0
- charm/schemes/pksig/pksig_chp.py +70 -0
- charm/schemes/pksig/pksig_cl03.py +150 -0
- charm/schemes/pksig/pksig_cl04.py +87 -0
- charm/schemes/pksig/pksig_cllww12_z.py +142 -0
- charm/schemes/pksig/pksig_cyh.py +132 -0
- charm/schemes/pksig/pksig_dsa.py +76 -0
- charm/schemes/pksig/pksig_ecdsa.py +71 -0
- charm/schemes/pksig/pksig_hess.py +104 -0
- charm/schemes/pksig/pksig_hw.py +110 -0
- charm/schemes/pksig/pksig_lamport.py +63 -0
- charm/schemes/pksig/pksig_ps01.py +135 -0
- charm/schemes/pksig/pksig_ps02.py +124 -0
- charm/schemes/pksig/pksig_ps03.py +119 -0
- charm/schemes/pksig/pksig_rsa_hw09.py +206 -0
- charm/schemes/pksig/pksig_schnorr91.py +77 -0
- charm/schemes/pksig/pksig_waters.py +115 -0
- charm/schemes/pksig/pksig_waters05.py +121 -0
- charm/schemes/pksig/pksig_waters09.py +121 -0
- charm/schemes/pre_mg07.py +150 -0
- charm/schemes/prenc/pre_afgh06.py +126 -0
- charm/schemes/prenc/pre_bbs98.py +123 -0
- charm/schemes/prenc/pre_nal16.py +216 -0
- charm/schemes/protocol_a01.py +272 -0
- charm/schemes/protocol_ao00.py +215 -0
- charm/schemes/protocol_cns07.py +274 -0
- charm/schemes/protocol_schnorr91.py +125 -0
- charm/schemes/sigma1.py +64 -0
- charm/schemes/sigma2.py +129 -0
- charm/schemes/sigma3.py +126 -0
- charm/schemes/threshold/__init__.py +59 -0
- charm/schemes/threshold/dkls23_dkg.py +556 -0
- charm/schemes/threshold/dkls23_presign.py +1089 -0
- charm/schemes/threshold/dkls23_sign.py +761 -0
- charm/schemes/threshold/xrpl_wallet.py +967 -0
- charm/test/__init__.py +0 -0
- charm/test/adapters/__init__.py +0 -0
- charm/test/adapters/abenc_adapt_hybrid_test.py +29 -0
- charm/test/adapters/dabenc_adapt_hybrid_test.py +56 -0
- charm/test/adapters/ibenc_adapt_hybrid_test.py +36 -0
- charm/test/adapters/ibenc_adapt_identityhash_test.py +32 -0
- charm/test/adapters/kpabenc_adapt_hybrid_test.py +30 -0
- charm/test/benchmark/abenc_yllc15_bench.py +92 -0
- charm/test/benchmark/benchmark_test.py +148 -0
- charm/test/benchmark_threshold.py +260 -0
- charm/test/conftest.py +38 -0
- charm/test/fuzz/__init__.py +1 -0
- charm/test/fuzz/conftest.py +5 -0
- charm/test/fuzz/fuzz_policy_parser.py +76 -0
- charm/test/fuzz/fuzz_serialization.py +83 -0
- charm/test/schemes/__init__.py +0 -0
- charm/test/schemes/abenc/__init__.py +0 -0
- charm/test/schemes/abenc/abenc_bsw07_test.py +39 -0
- charm/test/schemes/abenc/abenc_dacmacs_yj14_test.py +16 -0
- charm/test/schemes/abenc/abenc_lsw08_test.py +33 -0
- charm/test/schemes/abenc/abenc_maabe_yj14_test.py +16 -0
- charm/test/schemes/abenc/abenc_tbpre_lww14_test.py +16 -0
- charm/test/schemes/abenc/abenc_waters09_test.py +38 -0
- charm/test/schemes/abenc/abenc_yllc15_test.py +74 -0
- charm/test/schemes/chamhash_adm05_test.py +31 -0
- charm/test/schemes/chamhash_rsa_hw09_test.py +29 -0
- charm/test/schemes/commit/__init__.py +0 -0
- charm/test/schemes/commit/commit_gs08_test.py +24 -0
- charm/test/schemes/commit/commit_pedersen92_test.py +26 -0
- charm/test/schemes/dabe_aw11_test.py +45 -0
- charm/test/schemes/encap_bchk05_test.py +21 -0
- charm/test/schemes/grpsig/__init__.py +0 -0
- charm/test/schemes/grpsig/groupsig_bgls04_test.py +35 -0
- charm/test/schemes/grpsig/groupsig_bgls04_var_test.py +39 -0
- charm/test/schemes/hibenc/__init__.py +0 -0
- charm/test/schemes/hibenc/hibenc_bb04_test.py +28 -0
- charm/test/schemes/ibenc/__init__.py +0 -0
- charm/test/schemes/ibenc/ibenc_bb03_test.py +26 -0
- charm/test/schemes/ibenc/ibenc_bf01_test.py +24 -0
- charm/test/schemes/ibenc/ibenc_ckrs09_test.py +25 -0
- charm/test/schemes/ibenc/ibenc_lsw08_test.py +31 -0
- charm/test/schemes/ibenc/ibenc_sw05_test.py +32 -0
- charm/test/schemes/ibenc/ibenc_waters05_test.py +31 -0
- charm/test/schemes/ibenc/ibenc_waters09_test.py +27 -0
- charm/test/schemes/pk_vrf_test.py +29 -0
- charm/test/schemes/pkenc/__init__.py +0 -0
- charm/test/schemes/pkenc_test.py +255 -0
- charm/test/schemes/pksig/__init__.py +0 -0
- charm/test/schemes/pksig_test.py +376 -0
- charm/test/schemes/rsa_alg_test.py +340 -0
- charm/test/schemes/threshold_test.py +1792 -0
- charm/test/serialize/__init__.py +0 -0
- charm/test/serialize/serialize_test.py +40 -0
- charm/test/toolbox/__init__.py +0 -0
- charm/test/toolbox/conversion_test.py +30 -0
- charm/test/toolbox/ecgroup_test.py +53 -0
- charm/test/toolbox/integer_arithmetic_test.py +441 -0
- charm/test/toolbox/paddingschemes_test.py +238 -0
- charm/test/toolbox/policy_parser_stress_test.py +969 -0
- charm/test/toolbox/secretshare_test.py +28 -0
- charm/test/toolbox/symcrypto_test.py +108 -0
- charm/test/toolbox/test_policy_expression.py +16 -0
- charm/test/vectors/__init__.py +1 -0
- charm/test/vectors/test_bls_vectors.py +289 -0
- charm/test/vectors/test_pedersen_vectors.py +315 -0
- charm/test/vectors/test_schnorr_vectors.py +368 -0
- charm/test/zkp_compiler/__init__.py +9 -0
- charm/test/zkp_compiler/benchmark_zkp.py +258 -0
- charm/test/zkp_compiler/test_and_proof.py +240 -0
- charm/test/zkp_compiler/test_batch_verify.py +248 -0
- charm/test/zkp_compiler/test_dleq_proof.py +264 -0
- charm/test/zkp_compiler/test_or_proof.py +231 -0
- charm/test/zkp_compiler/test_proof_serialization.py +121 -0
- charm/test/zkp_compiler/test_range_proof.py +241 -0
- charm/test/zkp_compiler/test_representation_proof.py +325 -0
- charm/test/zkp_compiler/test_schnorr_proof.py +221 -0
- charm/test/zkp_compiler/test_thread_safety.py +169 -0
- charm/test/zkp_compiler/test_zkp_parser.py +139 -0
- charm/toolbox/ABEnc.py +26 -0
- charm/toolbox/ABEncMultiAuth.py +66 -0
- charm/toolbox/ABEnumeric.py +800 -0
- charm/toolbox/Commit.py +24 -0
- charm/toolbox/DFA.py +89 -0
- charm/toolbox/FSA.py +1254 -0
- charm/toolbox/Hash.py +39 -0
- charm/toolbox/IBEnc.py +62 -0
- charm/toolbox/IBSig.py +64 -0
- charm/toolbox/PKEnc.py +66 -0
- charm/toolbox/PKSig.py +56 -0
- charm/toolbox/PREnc.py +32 -0
- charm/toolbox/ZKProof.py +289 -0
- charm/toolbox/__init__.py +0 -0
- charm/toolbox/bitstring.py +49 -0
- charm/toolbox/broadcast.py +220 -0
- charm/toolbox/conversion.py +100 -0
- charm/toolbox/eccurve.py +149 -0
- charm/toolbox/ecgroup.py +143 -0
- charm/toolbox/enum.py +60 -0
- charm/toolbox/hash_module.py +91 -0
- charm/toolbox/integergroup.py +323 -0
- charm/toolbox/iterate.py +22 -0
- charm/toolbox/matrixops.py +76 -0
- charm/toolbox/mpc_utils.py +296 -0
- charm/toolbox/msp.py +175 -0
- charm/toolbox/mta.py +985 -0
- charm/toolbox/node.py +120 -0
- charm/toolbox/ot/__init__.py +22 -0
- charm/toolbox/ot/base_ot.py +374 -0
- charm/toolbox/ot/dpf.py +642 -0
- charm/toolbox/ot/mpfss.py +228 -0
- charm/toolbox/ot/ot_extension.py +589 -0
- charm/toolbox/ot/silent_ot.py +378 -0
- charm/toolbox/paddingschemes.py +423 -0
- charm/toolbox/paddingschemes_test.py +238 -0
- charm/toolbox/pairingcurves.py +85 -0
- charm/toolbox/pairinggroup.py +186 -0
- charm/toolbox/policy_expression_spec.py +70 -0
- charm/toolbox/policytree.py +189 -0
- charm/toolbox/reCompiler.py +346 -0
- charm/toolbox/redundancyschemes.py +65 -0
- charm/toolbox/schemebase.py +188 -0
- charm/toolbox/secretshare.py +104 -0
- charm/toolbox/secretutil.py +174 -0
- charm/toolbox/securerandom.py +73 -0
- charm/toolbox/sigmaprotocol.py +46 -0
- charm/toolbox/specialprimes.py +45 -0
- charm/toolbox/symcrypto.py +279 -0
- charm/toolbox/threshold_sharing.py +553 -0
- charm/toolbox/xmlserialize.py +94 -0
- charm/toolbox/zknode.py +105 -0
- charm/zkp_compiler/__init__.py +89 -0
- charm/zkp_compiler/and_proof.py +460 -0
- charm/zkp_compiler/batch_verify.py +324 -0
- charm/zkp_compiler/dleq_proof.py +423 -0
- charm/zkp_compiler/or_proof.py +305 -0
- charm/zkp_compiler/range_proof.py +417 -0
- charm/zkp_compiler/representation_proof.py +466 -0
- charm/zkp_compiler/schnorr_proof.py +273 -0
- charm/zkp_compiler/thread_safe.py +150 -0
- charm/zkp_compiler/zk_demo.py +489 -0
- charm/zkp_compiler/zkp_factory.py +330 -0
- charm/zkp_compiler/zkp_generator.py +370 -0
- charm/zkp_compiler/zkparser.py +269 -0
- charm_crypto_framework-0.61.1.dist-info/METADATA +337 -0
- charm_crypto_framework-0.61.1.dist-info/RECORD +323 -0
- charm_crypto_framework-0.61.1.dist-info/WHEEL +5 -0
- charm_crypto_framework-0.61.1.dist-info/licenses/LICENSE.txt +165 -0
- charm_crypto_framework-0.61.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
|
|
2
|
+
/* ---- HELPER MACROS ---- */
|
|
3
|
+
#ifdef ENDIAN_NEUTRAL
|
|
4
|
+
|
|
5
|
+
#define STORE32L(x, y) \
|
|
6
|
+
do { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
|
|
7
|
+
(y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0)
|
|
8
|
+
|
|
9
|
+
#define LOAD32L(x, y) \
|
|
10
|
+
do { x = ((ulong32)((y)[3] & 255)<<24) | \
|
|
11
|
+
((ulong32)((y)[2] & 255)<<16) | \
|
|
12
|
+
((ulong32)((y)[1] & 255)<<8) | \
|
|
13
|
+
((ulong32)((y)[0] & 255)); } while(0)
|
|
14
|
+
|
|
15
|
+
#define STORE64L(x, y) \
|
|
16
|
+
do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
|
|
17
|
+
(y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
|
|
18
|
+
(y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
|
|
19
|
+
(y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0)
|
|
20
|
+
|
|
21
|
+
#define LOAD64L(x, y) \
|
|
22
|
+
do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \
|
|
23
|
+
(((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \
|
|
24
|
+
(((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \
|
|
25
|
+
(((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0)
|
|
26
|
+
|
|
27
|
+
#define STORE32H(x, y) \
|
|
28
|
+
do { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \
|
|
29
|
+
(y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } while(0)
|
|
30
|
+
|
|
31
|
+
#define LOAD32H(x, y) \
|
|
32
|
+
do { x = ((ulong32)((y)[0] & 255)<<24) | \
|
|
33
|
+
((ulong32)((y)[1] & 255)<<16) | \
|
|
34
|
+
((ulong32)((y)[2] & 255)<<8) | \
|
|
35
|
+
((ulong32)((y)[3] & 255)); } while(0)
|
|
36
|
+
|
|
37
|
+
#define STORE64H(x, y) \
|
|
38
|
+
do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
|
|
39
|
+
(y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
|
|
40
|
+
(y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
|
|
41
|
+
(y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0)
|
|
42
|
+
|
|
43
|
+
#define LOAD64H(x, y) \
|
|
44
|
+
do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \
|
|
45
|
+
(((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \
|
|
46
|
+
(((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
|
|
47
|
+
(((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } while(0)
|
|
48
|
+
|
|
49
|
+
#endif /* ENDIAN_NEUTRAL */
|
|
50
|
+
|
|
51
|
+
#ifdef ENDIAN_LITTLE
|
|
52
|
+
|
|
53
|
+
#ifdef LTC_HAVE_BSWAP_BUILTIN
|
|
54
|
+
|
|
55
|
+
#define STORE32H(x, y) \
|
|
56
|
+
do { ulong32 __t = __builtin_bswap32 ((x)); \
|
|
57
|
+
XMEMCPY ((y), &__t, 4); } while(0)
|
|
58
|
+
|
|
59
|
+
#define LOAD32H(x, y) \
|
|
60
|
+
do { XMEMCPY (&(x), (y), 4); \
|
|
61
|
+
(x) = __builtin_bswap32 ((x)); } while(0)
|
|
62
|
+
|
|
63
|
+
#elif !defined(LTC_NO_BSWAP) && (defined(INTEL_CC) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__) || defined(__x86_64__))))
|
|
64
|
+
|
|
65
|
+
#define STORE32H(x, y) \
|
|
66
|
+
asm __volatile__ ( \
|
|
67
|
+
"bswapl %0 \n\t" \
|
|
68
|
+
"movl %0,(%1)\n\t" \
|
|
69
|
+
"bswapl %0 \n\t" \
|
|
70
|
+
::"r"(x), "r"(y));
|
|
71
|
+
|
|
72
|
+
#define LOAD32H(x, y) \
|
|
73
|
+
asm __volatile__ ( \
|
|
74
|
+
"movl (%1),%0\n\t" \
|
|
75
|
+
"bswapl %0\n\t" \
|
|
76
|
+
:"=r"(x): "r"(y));
|
|
77
|
+
|
|
78
|
+
#else
|
|
79
|
+
|
|
80
|
+
#define STORE32H(x, y) \
|
|
81
|
+
do { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \
|
|
82
|
+
(y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } while(0)
|
|
83
|
+
|
|
84
|
+
#define LOAD32H(x, y) \
|
|
85
|
+
do { x = ((ulong32)((y)[0] & 255)<<24) | \
|
|
86
|
+
((ulong32)((y)[1] & 255)<<16) | \
|
|
87
|
+
((ulong32)((y)[2] & 255)<<8) | \
|
|
88
|
+
((ulong32)((y)[3] & 255)); } while(0)
|
|
89
|
+
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
#ifdef LTC_HAVE_BSWAP_BUILTIN
|
|
93
|
+
|
|
94
|
+
#define STORE64H(x, y) \
|
|
95
|
+
do { ulong64 __t = __builtin_bswap64 ((x)); \
|
|
96
|
+
XMEMCPY ((y), &__t, 8); } while(0)
|
|
97
|
+
|
|
98
|
+
#define LOAD64H(x, y) \
|
|
99
|
+
do { XMEMCPY (&(x), (y), 8); \
|
|
100
|
+
(x) = __builtin_bswap64 ((x)); } while(0)
|
|
101
|
+
|
|
102
|
+
/* x86_64 processor */
|
|
103
|
+
#elif !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__))
|
|
104
|
+
|
|
105
|
+
#define STORE64H(x, y) \
|
|
106
|
+
asm __volatile__ ( \
|
|
107
|
+
"bswapq %0 \n\t" \
|
|
108
|
+
"movq %0,(%1)\n\t" \
|
|
109
|
+
"bswapq %0 \n\t" \
|
|
110
|
+
::"r"(x), "r"(y): "memory");
|
|
111
|
+
|
|
112
|
+
#define LOAD64H(x, y) \
|
|
113
|
+
asm __volatile__ ( \
|
|
114
|
+
"movq (%1),%0\n\t" \
|
|
115
|
+
"bswapq %0\n\t" \
|
|
116
|
+
:"=r"(x): "r"(y): "memory");
|
|
117
|
+
|
|
118
|
+
#else
|
|
119
|
+
|
|
120
|
+
#define STORE64H(x, y) \
|
|
121
|
+
do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
|
|
122
|
+
(y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
|
|
123
|
+
(y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
|
|
124
|
+
(y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0)
|
|
125
|
+
|
|
126
|
+
#define LOAD64H(x, y) \
|
|
127
|
+
do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \
|
|
128
|
+
(((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \
|
|
129
|
+
(((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
|
|
130
|
+
(((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } while(0)
|
|
131
|
+
|
|
132
|
+
#endif
|
|
133
|
+
|
|
134
|
+
#ifdef ENDIAN_32BITWORD
|
|
135
|
+
|
|
136
|
+
#define STORE32L(x, y) \
|
|
137
|
+
do { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } while(0)
|
|
138
|
+
|
|
139
|
+
#define LOAD32L(x, y) \
|
|
140
|
+
do { XMEMCPY(&(x), y, 4); } while(0)
|
|
141
|
+
|
|
142
|
+
#define STORE64L(x, y) \
|
|
143
|
+
do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
|
|
144
|
+
(y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
|
|
145
|
+
(y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
|
|
146
|
+
(y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0)
|
|
147
|
+
|
|
148
|
+
#define LOAD64L(x, y) \
|
|
149
|
+
do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \
|
|
150
|
+
(((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \
|
|
151
|
+
(((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \
|
|
152
|
+
(((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0)
|
|
153
|
+
|
|
154
|
+
#else /* 64-bit words then */
|
|
155
|
+
|
|
156
|
+
#define STORE32L(x, y) \
|
|
157
|
+
do { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } while(0)
|
|
158
|
+
|
|
159
|
+
#define LOAD32L(x, y) \
|
|
160
|
+
do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0)
|
|
161
|
+
|
|
162
|
+
#define STORE64L(x, y) \
|
|
163
|
+
do { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } while(0)
|
|
164
|
+
|
|
165
|
+
#define LOAD64L(x, y) \
|
|
166
|
+
do { XMEMCPY(&(x), y, 8); } while(0)
|
|
167
|
+
|
|
168
|
+
#endif /* ENDIAN_64BITWORD */
|
|
169
|
+
|
|
170
|
+
#endif /* ENDIAN_LITTLE */
|
|
171
|
+
|
|
172
|
+
#ifdef ENDIAN_BIG
|
|
173
|
+
#define STORE32L(x, y) \
|
|
174
|
+
do { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
|
|
175
|
+
(y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0)
|
|
176
|
+
|
|
177
|
+
#define LOAD32L(x, y) \
|
|
178
|
+
do { x = ((ulong32)((y)[3] & 255)<<24) | \
|
|
179
|
+
((ulong32)((y)[2] & 255)<<16) | \
|
|
180
|
+
((ulong32)((y)[1] & 255)<<8) | \
|
|
181
|
+
((ulong32)((y)[0] & 255)); } while(0)
|
|
182
|
+
|
|
183
|
+
#define STORE64L(x, y) \
|
|
184
|
+
do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \
|
|
185
|
+
(y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \
|
|
186
|
+
(y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \
|
|
187
|
+
(y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0)
|
|
188
|
+
|
|
189
|
+
#define LOAD64L(x, y) \
|
|
190
|
+
do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \
|
|
191
|
+
(((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32) | \
|
|
192
|
+
(((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \
|
|
193
|
+
(((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0)
|
|
194
|
+
|
|
195
|
+
#ifdef ENDIAN_32BITWORD
|
|
196
|
+
|
|
197
|
+
#define STORE32H(x, y) \
|
|
198
|
+
do { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } while(0)
|
|
199
|
+
|
|
200
|
+
#define LOAD32H(x, y) \
|
|
201
|
+
do { XMEMCPY(&(x), y, 4); } while(0)
|
|
202
|
+
|
|
203
|
+
#define STORE64H(x, y) \
|
|
204
|
+
do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \
|
|
205
|
+
(y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \
|
|
206
|
+
(y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \
|
|
207
|
+
(y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0)
|
|
208
|
+
|
|
209
|
+
#define LOAD64H(x, y) \
|
|
210
|
+
do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \
|
|
211
|
+
(((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32)| \
|
|
212
|
+
(((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16)| \
|
|
213
|
+
(((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); } while(0)
|
|
214
|
+
|
|
215
|
+
#else /* 64-bit words then */
|
|
216
|
+
|
|
217
|
+
#define STORE32H(x, y) \
|
|
218
|
+
do { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } while(0)
|
|
219
|
+
|
|
220
|
+
#define LOAD32H(x, y) \
|
|
221
|
+
do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0)
|
|
222
|
+
|
|
223
|
+
#define STORE64H(x, y) \
|
|
224
|
+
do { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } while(0)
|
|
225
|
+
|
|
226
|
+
#define LOAD64H(x, y) \
|
|
227
|
+
do { XMEMCPY(&(x), y, 8); } while(0)
|
|
228
|
+
|
|
229
|
+
#endif /* ENDIAN_64BITWORD */
|
|
230
|
+
#endif /* ENDIAN_BIG */
|
|
231
|
+
|
|
232
|
+
#define BSWAP(x) ( ((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL) | \
|
|
233
|
+
((x>>8)&0x0000FF00UL) | ((x<<8)&0x00FF0000UL) )
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
/* 32-bit Rotates */
|
|
237
|
+
#if defined(_MSC_VER)
|
|
238
|
+
#define LTC_ROx_ASM
|
|
239
|
+
|
|
240
|
+
/* instrinsic rotate */
|
|
241
|
+
#include <stdlib.h>
|
|
242
|
+
#pragma intrinsic(_lrotr,_lrotl)
|
|
243
|
+
#define ROR(x,n) _lrotr(x,n)
|
|
244
|
+
#define ROL(x,n) _lrotl(x,n)
|
|
245
|
+
#define RORc(x,n) _lrotr(x,n)
|
|
246
|
+
#define ROLc(x,n) _lrotl(x,n)
|
|
247
|
+
|
|
248
|
+
#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(INTEL_CC) && !defined(LTC_NO_ASM)
|
|
249
|
+
#define LTC_ROx_ASM
|
|
250
|
+
|
|
251
|
+
static inline ulong32 ROL(ulong32 word, int i)
|
|
252
|
+
{
|
|
253
|
+
asm ("roll %%cl,%0"
|
|
254
|
+
:"=r" (word)
|
|
255
|
+
:"0" (word),"c" (i));
|
|
256
|
+
return word;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static inline ulong32 ROR(ulong32 word, int i)
|
|
260
|
+
{
|
|
261
|
+
asm ("rorl %%cl,%0"
|
|
262
|
+
:"=r" (word)
|
|
263
|
+
:"0" (word),"c" (i));
|
|
264
|
+
return word;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
#ifndef LTC_NO_ROLC
|
|
268
|
+
|
|
269
|
+
#define ROLc(word,i) ({ \
|
|
270
|
+
ulong32 __ROLc_tmp = word; \
|
|
271
|
+
__asm__ ("roll %2, %0" : \
|
|
272
|
+
"=r" (__ROLc_tmp) : \
|
|
273
|
+
"0" (__ROLc_tmp), \
|
|
274
|
+
"I" (i)); \
|
|
275
|
+
__ROLc_tmp; \
|
|
276
|
+
})
|
|
277
|
+
#define RORc(word,i) ({ \
|
|
278
|
+
ulong32 __RORc_tmp = word; \
|
|
279
|
+
__asm__ ("rorl %2, %0" : \
|
|
280
|
+
"=r" (__RORc_tmp) : \
|
|
281
|
+
"0" (__RORc_tmp), \
|
|
282
|
+
"I" (i)); \
|
|
283
|
+
__RORc_tmp; \
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
#else
|
|
287
|
+
|
|
288
|
+
#define ROLc ROL
|
|
289
|
+
#define RORc ROR
|
|
290
|
+
|
|
291
|
+
#endif
|
|
292
|
+
|
|
293
|
+
#elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32)
|
|
294
|
+
#define LTC_ROx_ASM
|
|
295
|
+
|
|
296
|
+
static inline ulong32 ROL(ulong32 word, int i)
|
|
297
|
+
{
|
|
298
|
+
asm ("rotlw %0,%0,%2"
|
|
299
|
+
:"=r" (word)
|
|
300
|
+
:"0" (word),"r" (i));
|
|
301
|
+
return word;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
static inline ulong32 ROR(ulong32 word, int i)
|
|
305
|
+
{
|
|
306
|
+
asm ("rotlw %0,%0,%2"
|
|
307
|
+
:"=r" (word)
|
|
308
|
+
:"0" (word),"r" (32-i));
|
|
309
|
+
return word;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
#ifndef LTC_NO_ROLC
|
|
313
|
+
|
|
314
|
+
static inline ulong32 ROLc(ulong32 word, const int i)
|
|
315
|
+
{
|
|
316
|
+
asm ("rotlwi %0,%0,%2"
|
|
317
|
+
:"=r" (word)
|
|
318
|
+
:"0" (word),"I" (i));
|
|
319
|
+
return word;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
static inline ulong32 RORc(ulong32 word, const int i)
|
|
323
|
+
{
|
|
324
|
+
asm ("rotrwi %0,%0,%2"
|
|
325
|
+
:"=r" (word)
|
|
326
|
+
:"0" (word),"I" (i));
|
|
327
|
+
return word;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
#else
|
|
331
|
+
|
|
332
|
+
#define ROLc ROL
|
|
333
|
+
#define RORc ROR
|
|
334
|
+
|
|
335
|
+
#endif
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
#else
|
|
339
|
+
|
|
340
|
+
/* rotates the hard way */
|
|
341
|
+
#define ROL(x, y) ( (((ulong32)(x)<<(ulong32)((y)&31)) | (((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)(32-((y)&31)))) & 0xFFFFFFFFUL)
|
|
342
|
+
#define ROR(x, y) ( ((((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((y)&31)) | ((ulong32)(x)<<(ulong32)(32-((y)&31)))) & 0xFFFFFFFFUL)
|
|
343
|
+
#define ROLc(x, y) ( (((ulong32)(x)<<(ulong32)((y)&31)) | (((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)(32-((y)&31)))) & 0xFFFFFFFFUL)
|
|
344
|
+
#define RORc(x, y) ( ((((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((y)&31)) | ((ulong32)(x)<<(ulong32)(32-((y)&31)))) & 0xFFFFFFFFUL)
|
|
345
|
+
|
|
346
|
+
#endif
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
/* 64-bit Rotates */
|
|
350
|
+
#if !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(_WIN64) && !defined(LTC_NO_ASM)
|
|
351
|
+
|
|
352
|
+
static inline ulong64 ROL64(ulong64 word, int i)
|
|
353
|
+
{
|
|
354
|
+
asm("rolq %%cl,%0"
|
|
355
|
+
:"=r" (word)
|
|
356
|
+
:"0" (word),"c" (i));
|
|
357
|
+
return word;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
static inline ulong64 ROR64(ulong64 word, int i)
|
|
361
|
+
{
|
|
362
|
+
asm("rorq %%cl,%0"
|
|
363
|
+
:"=r" (word)
|
|
364
|
+
:"0" (word),"c" (i));
|
|
365
|
+
return word;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
#ifndef LTC_NO_ROLC
|
|
369
|
+
|
|
370
|
+
#define ROL64c(word,i) ({ \
|
|
371
|
+
ulong64 __ROL64c_tmp = word; \
|
|
372
|
+
__asm__ ("rolq %2, %0" : \
|
|
373
|
+
"=r" (__ROL64c_tmp) : \
|
|
374
|
+
"0" (__ROL64c_tmp), \
|
|
375
|
+
"J" (i)); \
|
|
376
|
+
__ROL64c_tmp; \
|
|
377
|
+
})
|
|
378
|
+
#define ROR64c(word,i) ({ \
|
|
379
|
+
ulong64 __ROR64c_tmp = word; \
|
|
380
|
+
__asm__ ("rorq %2, %0" : \
|
|
381
|
+
"=r" (__ROR64c_tmp) : \
|
|
382
|
+
"0" (__ROR64c_tmp), \
|
|
383
|
+
"J" (i)); \
|
|
384
|
+
__ROR64c_tmp; \
|
|
385
|
+
})
|
|
386
|
+
|
|
387
|
+
#else /* LTC_NO_ROLC */
|
|
388
|
+
|
|
389
|
+
#define ROL64c ROL64
|
|
390
|
+
#define ROR64c ROR64
|
|
391
|
+
|
|
392
|
+
#endif
|
|
393
|
+
|
|
394
|
+
#else /* Not x86_64 */
|
|
395
|
+
|
|
396
|
+
#define ROL64(x, y) \
|
|
397
|
+
( (((x)<<((ulong64)(y)&63)) | \
|
|
398
|
+
(((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF))
|
|
399
|
+
|
|
400
|
+
#define ROR64(x, y) \
|
|
401
|
+
( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \
|
|
402
|
+
((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF))
|
|
403
|
+
|
|
404
|
+
#define ROL64c(x, y) \
|
|
405
|
+
( (((x)<<((ulong64)(y)&63)) | \
|
|
406
|
+
(((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF))
|
|
407
|
+
|
|
408
|
+
#define ROR64c(x, y) \
|
|
409
|
+
( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \
|
|
410
|
+
((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF))
|
|
411
|
+
|
|
412
|
+
#endif
|
|
413
|
+
|
|
414
|
+
#ifndef MAX
|
|
415
|
+
#define MAX(x, y) ( ((x)>(y))?(x):(y) )
|
|
416
|
+
#endif
|
|
417
|
+
|
|
418
|
+
#ifndef MIN
|
|
419
|
+
#define MIN(x, y) ( ((x)<(y))?(x):(y) )
|
|
420
|
+
#endif
|
|
421
|
+
|
|
422
|
+
#ifndef LTC_UNUSED_PARAM
|
|
423
|
+
#define LTC_UNUSED_PARAM(x) (void)(x)
|
|
424
|
+
#endif
|
|
425
|
+
|
|
426
|
+
/* extract a byte portably */
|
|
427
|
+
#ifdef _MSC_VER
|
|
428
|
+
#define byte(x, n) ((unsigned char)((x) >> (8 * (n))))
|
|
429
|
+
#else
|
|
430
|
+
#define byte(x, n) (((x) >> (8 * (n))) & 255)
|
|
431
|
+
#endif
|
|
432
|
+
|
|
433
|
+
/* $Source$ */
|
|
434
|
+
/* $Revision$ */
|
|
435
|
+
/* $Date$ */
|