/****************************************************************************
 * crypto/podd.h
 * $OpenBSD: podd.h,v 1.1 2000/02/28 23:13:05 deraadt Exp $
 * lib/des/podd.h
 * Copyright (C) 1995 Eric Young (eay@mincom.oz.au)
 * All rights reserved.
 *
 * This file is part of an SSL implementation written
 * by Eric Young (eay@mincom.oz.au).
 * The implementation was written so as to conform with Netscapes SSL
 * specification.  This library and applications are
 * FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
 * as long as the following conditions are aheared to.
 *
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.  If this code is used in a product,
 * Eric Young should be given attribution as the author of the parts used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. 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.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    This product includes software developed
 *    by Eric Young (eay@mincom.oz.au)
 *
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
 *
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.
 * i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 ****************************************************************************/

static const unsigned char odd_parity[256] =
{
  1, 1, 2,  2, 4, 4, 7, 7, 8, 8, 11, 11, 13,
  13, 14, 14, 16, 16, 19, 19, 21, 21, 22, 22,
  25, 25, 26, 26, 28, 28, 31, 31, 32, 32, 35,
  35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44,
  47, 47, 49, 49, 50, 50, 52, 52, 55, 55, 56,
  56, 59, 59, 61, 61, 62, 62, 64, 64, 67, 67,
  69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79,
  79, 81, 81, 82, 82, 84, 84, 87, 87, 88, 88,
  91, 91, 93, 93, 94, 94, 97, 97, 98, 98, 100,
  100, 103, 103, 104, 104, 107, 107, 109, 109,
  110, 110, 112, 112, 115, 115, 117, 117, 118,
  118, 121, 121, 122, 122, 124, 124, 127, 127,
  128, 128, 131, 131, 133, 133, 134, 134, 137,
  137, 138, 138, 140, 140, 143, 143, 145, 145,
  146, 146, 148, 148, 151, 151, 152, 152, 155,
  155, 157, 157, 158, 158, 161, 161, 162, 162,
  164, 164, 167, 167, 168, 168, 171, 171, 173,
  173, 174, 174, 176, 176, 179, 179, 181, 181,
  182, 182, 185, 185, 186, 186, 188, 188, 191,
  191, 193, 193, 194, 194, 196, 196, 199, 199,
  200, 200, 203, 203, 205, 205, 206, 206, 208,
  208, 211, 211, 213, 213, 214, 214, 217, 217,
  218, 218, 220, 220, 223, 223, 224, 224, 227,
  227, 229, 229, 230, 230, 233, 233, 234, 234,
  236, 236, 239, 239, 241, 241, 242, 242, 244,
  244, 247, 247, 248, 248, 251, 251, 253, 253,
  254, 254
};
