1e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * All rights reserved.
3e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
4e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * This package is an SSL implementation written
5e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * by Eric Young (eay@cryptsoft.com).
6e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * The implementation was written so as to conform with Netscapes SSL.
7e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
8e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * This library is free for commercial and non-commercial use as long as
9e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * the following conditions are aheared to.  The following conditions
10e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * apply to all code found in this distribution, be it the RC4, RSA,
11e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
12e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * included with this distribution is covered by the same copyright terms
13e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
15e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Copyright remains Eric Young's, and as such any Copyright notices in
16e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * the code are not to be removed.
17e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * If this package is used in a product, Eric Young should be given attribution
18e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * as the author of the parts of the library used.
19e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * This can be in the form of a textual message at program startup or
20e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * in documentation (online or textual) provided with the package.
21e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
22e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * Redistribution and use in source and binary forms, with or without
23e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * modification, are permitted provided that the following conditions
24e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * are met:
25e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * 1. Redistributions of source code must retain the copyright
26e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    notice, this list of conditions and the following disclaimer.
27e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * 2. Redistributions in binary form must reproduce the above copyright
28e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    notice, this list of conditions and the following disclaimer in the
29e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    documentation and/or other materials provided with the distribution.
30e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * 3. All advertising materials mentioning features or use of this software
31e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    must display the following acknowledgement:
32e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    "This product includes cryptographic software written by
33e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *     Eric Young (eay@cryptsoft.com)"
34e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    The word 'cryptographic' can be left out if the rouines from the library
35e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    being used are not cryptographic related :-).
36e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * 4. If you include any Windows specific code (or a derivative thereof) from
37e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    the apps directory (application code) you must include an acknowledgement:
38e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
40e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * SUCH DAMAGE.
51e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley *
52e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * The licence and distribution terms for any publically available version or
53e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * derivative of this code cannot be changed.  i.e. this code cannot simply be
54e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * copied and put under another distribution licence
55e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley * [including the GNU Public Licence.] */
56e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
57e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#ifndef OPENSSL_HEADER_DECREPIT_MACROS_H
58e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define OPENSSL_HEADER_DECREPIT_MACROS_H
59e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
60e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
61e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* NOTE - c is not incremented as per n2l */
62e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define n2ln(c, l1, l2, n)                       \
63e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  {                                              \
64e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    c += n;                                      \
65e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    l1 = l2 = 0;                                 \
66e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    switch (n) {                                 \
67e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 8:                                    \
68e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l2 = ((unsigned long)(*(--(c))));        \
69e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 7:                                    \
70e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l2 |= ((unsigned long)(*(--(c)))) << 8;  \
71e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 6:                                    \
72e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l2 |= ((unsigned long)(*(--(c)))) << 16; \
73e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 5:                                    \
74e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l2 |= ((unsigned long)(*(--(c)))) << 24; \
75e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 4:                                    \
76e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l1 = ((unsigned long)(*(--(c))));        \
77e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 3:                                    \
78e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l1 |= ((unsigned long)(*(--(c)))) << 8;  \
79e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 2:                                    \
80e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l1 |= ((unsigned long)(*(--(c)))) << 16; \
81e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 1:                                    \
82e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        l1 |= ((unsigned long)(*(--(c)))) << 24; \
83e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    }                                            \
84e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  }
85e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
86e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley/* NOTE - c is not incremented as per l2n */
87e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define l2nn(l1, l2, c, n)                               \
88e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  {                                                      \
89e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    c += n;                                              \
90e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    switch (n) {                                         \
91e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 8:                                            \
92e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l2)) & 0xff);       \
93e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 7:                                            \
94e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l2) >> 8) & 0xff);  \
95e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 6:                                            \
96e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l2) >> 16) & 0xff); \
97e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 5:                                            \
98e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l2) >> 24) & 0xff); \
99e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 4:                                            \
100e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l1)) & 0xff);       \
101e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 3:                                            \
102e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l1) >> 8) & 0xff);  \
103e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 2:                                            \
104e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l1) >> 16) & 0xff); \
105e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley      case 1:                                            \
106e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley        *(--(c)) = (unsigned char)(((l1) >> 24) & 0xff); \
107e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley    }                                                    \
108e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  }
109e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
110e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define l2n(l, c)                                   \
111e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  (*((c)++) = (unsigned char)(((l) >> 24L) & 0xff), \
112e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   *((c)++) = (unsigned char)(((l) >> 16L) & 0xff), \
113e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   *((c)++) = (unsigned char)(((l) >> 8L) & 0xff),  \
114e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   *((c)++) = (unsigned char)(((l)) & 0xff))
115e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
116e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#define n2l(c, l)                           \
117e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley  (l = ((unsigned long)(*((c)++))) << 24L,  \
118e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   l |= ((unsigned long)(*((c)++))) << 16L, \
119e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   l |= ((unsigned long)(*((c)++))) << 8L,  \
120e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley   l |= ((unsigned long)(*((c)++))))
121e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
122e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley
123e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#endif  /* OPENSSL_HEADER_DECREPIT_MACROS_H */
124