123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- namespace Org.BouncyCastle.Crypto.Utilities
- {
- internal sealed class Pack
- {
- private Pack()
- {
- }
- internal static void UInt16_To_BE(ushort n, byte[] bs)
- {
- bs[0] = (byte)(n >> 8);
- bs[1] = (byte)(n);
- }
- internal static void UInt16_To_BE(ushort n, byte[] bs, int off)
- {
- bs[off] = (byte)(n >> 8);
- bs[off + 1] = (byte)(n);
- }
- internal static ushort BE_To_UInt16(byte[] bs)
- {
- uint n = (uint)bs[0] << 8
- | (uint)bs[1];
- return (ushort)n;
- }
- internal static ushort BE_To_UInt16(byte[] bs, int off)
- {
- uint n = (uint)bs[off] << 8
- | (uint)bs[off + 1];
- return (ushort)n;
- }
- internal static byte[] UInt32_To_BE(uint n)
- {
- byte[] bs = new byte[4];
- UInt32_To_BE(n, bs, 0);
- return bs;
- }
- internal static void UInt32_To_BE(uint n, byte[] bs)
- {
- bs[0] = (byte)(n >> 24);
- bs[1] = (byte)(n >> 16);
- bs[2] = (byte)(n >> 8);
- bs[3] = (byte)(n);
- }
- #if true //!ENABLE_IL2CPP || UNITY_WEBGL
- internal static void UInt32_To_BE(uint n, byte[] bs, int off)
- {
- bs[off] = (byte)(n >> 24);
- bs[off + 1] = (byte)(n >> 16);
- bs[off + 2] = (byte)(n >> 8);
- bs[off + 3] = (byte)(n);
- }
- #else
- internal static unsafe void UInt32_To_BE(uint n, byte[] bs, int off)
- {
- fixed (byte* p = bs)
- {
- p[off + 0] = (byte)(n >> 24);
- p[off + 1] = (byte)(n >> 16);
- p[off + 2] = (byte)(n >> 8);
- p[off + 3] = (byte)(n);
- }
- //bs[off] = (byte)(n >> 24);
- //bs[off + 1] = (byte)(n >> 16);
- //bs[off + 2] = (byte)(n >> 8);
- //bs[off + 3] = (byte)(n);
- }
- #endif
- internal static byte[] UInt32_To_BE(uint[] ns)
- {
- byte[] bs = new byte[4 * ns.Length];
- UInt32_To_BE(ns, bs, 0);
- return bs;
- }
- #if true //!ENABLE_IL2CPP || UNITY_WEBGL
- internal static void UInt32_To_BE(uint[] ns, byte[] bs, int off)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- UInt32_To_BE(ns[i], bs, off);
- off += 4;
- }
- }
- #else
- internal static unsafe void UInt32_To_BE(uint[] ns, byte[] bs, int off)
- {
- //for (int i = 0; i < ns.Length; ++i)
- //{
- // UInt32_To_BE(ns[i], bs, off);
- // off += 4;
- //}
- fixed (byte* pbs = bs)
- fixed (uint* pns = ns)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- uint n = pns[i];
- pbs[off + 0] = (byte)(n >> 24);
- pbs[off + 1] = (byte)(n >> 16);
- pbs[off + 2] = (byte)(n >> 8);
- pbs[off + 3] = (byte)(n);
- off += 4;
- }
- }
- }
- #endif
- internal static uint BE_To_UInt32(byte[] bs)
- {
- return (uint)bs[0] << 24
- | (uint)bs[1] << 16
- | (uint)bs[2] << 8
- | (uint)bs[3];
- }
- internal static uint BE_To_UInt32(byte[] bs, int off)
- {
- return (uint)bs[off] << 24
- | (uint)bs[off + 1] << 16
- | (uint)bs[off + 2] << 8
- | (uint)bs[off + 3];
- }
- internal static void BE_To_UInt32(byte[] bs, int off, uint[] ns)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- ns[i] = BE_To_UInt32(bs, off);
- off += 4;
- }
- }
- internal static byte[] UInt64_To_BE(ulong n)
- {
- byte[] bs = new byte[8];
- UInt64_To_BE(n, bs, 0);
- return bs;
- }
- internal static void UInt64_To_BE(ulong n, byte[] bs)
- {
- UInt32_To_BE((uint)(n >> 32), bs);
- UInt32_To_BE((uint)(n), bs, 4);
- }
- internal static void UInt64_To_BE(ulong n, byte[] bs, int off)
- {
- UInt32_To_BE((uint)(n >> 32), bs, off);
- UInt32_To_BE((uint)(n), bs, off + 4);
- }
- internal static byte[] UInt64_To_BE(ulong[] ns)
- {
- byte[] bs = new byte[8 * ns.Length];
- UInt64_To_BE(ns, bs, 0);
- return bs;
- }
- internal static void UInt64_To_BE(ulong[] ns, byte[] bs, int off)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- UInt64_To_BE(ns[i], bs, off);
- off += 8;
- }
- }
- internal static ulong BE_To_UInt64(byte[] bs)
- {
- uint hi = BE_To_UInt32(bs);
- uint lo = BE_To_UInt32(bs, 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
- internal static ulong BE_To_UInt64(byte[] bs, int off)
- {
- uint hi = BE_To_UInt32(bs, off);
- uint lo = BE_To_UInt32(bs, off + 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
- internal static void BE_To_UInt64(byte[] bs, int off, ulong[] ns)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- ns[i] = BE_To_UInt64(bs, off);
- off += 8;
- }
- }
- internal static void UInt16_To_LE(ushort n, byte[] bs)
- {
- bs[0] = (byte)(n);
- bs[1] = (byte)(n >> 8);
- }
- internal static void UInt16_To_LE(ushort n, byte[] bs, int off)
- {
- bs[off] = (byte)(n);
- bs[off + 1] = (byte)(n >> 8);
- }
- internal static ushort LE_To_UInt16(byte[] bs)
- {
- uint n = (uint)bs[0]
- | (uint)bs[1] << 8;
- return (ushort)n;
- }
- internal static ushort LE_To_UInt16(byte[] bs, int off)
- {
- uint n = (uint)bs[off]
- | (uint)bs[off + 1] << 8;
- return (ushort)n;
- }
- internal static byte[] UInt32_To_LE(uint n)
- {
- byte[] bs = new byte[4];
- UInt32_To_LE(n, bs, 0);
- return bs;
- }
- internal static void UInt32_To_LE(uint n, byte[] bs)
- {
- bs[0] = (byte)(n);
- bs[1] = (byte)(n >> 8);
- bs[2] = (byte)(n >> 16);
- bs[3] = (byte)(n >> 24);
- }
- #if true //!ENABLE_IL2CPP || UNITY_WEBGL
- internal static void UInt32_To_LE(uint n, byte[] bs, int off)
- {
- bs[off] = (byte)(n);
- bs[off + 1] = (byte)(n >> 8);
- bs[off + 2] = (byte)(n >> 16);
- bs[off + 3] = (byte)(n >> 24);
- }
- #else
- internal static unsafe void UInt32_To_LE(uint n, byte[] bs, int off)
- {
- fixed (byte* p = bs)
- {
- p[off + 0] = (byte)(n);
- p[off + 1] = (byte)(n >> 8);
- p[off + 2] = (byte)(n >> 16);
- p[off + 3] = (byte)(n >> 24);
- }
- //bs[off] = (byte)(n);
- //bs[off + 1] = (byte)(n >> 8);
- //bs[off + 2] = (byte)(n >> 16);
- //bs[off + 3] = (byte)(n >> 24);
- }
- #endif
- internal static byte[] UInt32_To_LE(uint[] ns)
- {
- byte[] bs = new byte[4 * ns.Length];
- UInt32_To_LE(ns, bs, 0);
- return bs;
- }
- internal static void UInt32_To_LE(uint[] ns, byte[] bs, int off)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- UInt32_To_LE(ns[i], bs, off);
- off += 4;
- }
- }
- internal static uint LE_To_UInt32(byte[] bs)
- {
- return (uint)bs[0]
- | (uint)bs[1] << 8
- | (uint)bs[2] << 16
- | (uint)bs[3] << 24;
- }
- internal static uint LE_To_UInt32(byte[] bs, int off)
- {
- return (uint)bs[off]
- | (uint)bs[off + 1] << 8
- | (uint)bs[off + 2] << 16
- | (uint)bs[off + 3] << 24;
- }
- internal static void LE_To_UInt32(byte[] bs, int off, uint[] ns)
- {
- for (int i = 0; i < ns.Length; ++i)
- {
- ns[i] = LE_To_UInt32(bs, off);
- off += 4;
- }
- }
- internal static void LE_To_UInt32(byte[] bs, int bOff, uint[] ns, int nOff, int count)
- {
- for (int i = 0; i < count; ++i)
- {
- ns[nOff + i] = LE_To_UInt32(bs, bOff);
- bOff += 4;
- }
- }
- internal static uint[] LE_To_UInt32(byte[] bs, int off, int count)
- {
- uint[] ns = new uint[count];
- for (int i = 0; i < ns.Length; ++i)
- {
- ns[i] = LE_To_UInt32(bs, off);
- off += 4;
- }
- return ns;
- }
- internal static byte[] UInt64_To_LE(ulong n)
- {
- byte[] bs = new byte[8];
- UInt64_To_LE(n, bs, 0);
- return bs;
- }
- internal static void UInt64_To_LE(ulong n, byte[] bs)
- {
- UInt32_To_LE((uint)(n), bs);
- UInt32_To_LE((uint)(n >> 32), bs, 4);
- }
- internal static void UInt64_To_LE(ulong n, byte[] bs, int off)
- {
- UInt32_To_LE((uint)(n), bs, off);
- UInt32_To_LE((uint)(n >> 32), bs, off + 4);
- }
- internal static ulong LE_To_UInt64(byte[] bs)
- {
- uint lo = LE_To_UInt32(bs);
- uint hi = LE_To_UInt32(bs, 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
- internal static ulong LE_To_UInt64(byte[] bs, int off)
- {
- uint lo = LE_To_UInt32(bs, off);
- uint hi = LE_To_UInt32(bs, off + 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
- }
- }
- #endif
|