Print this page
6799218 RSA using Solaris Kernel Crypto framework lagging behind OpenSSL
5016936 bignumimpl:big_mul: potential memory leak
6810280 panic from bignum module: vmem_xalloc(): size == 0

Split Close
Expand all
Collapse all
          --- old/usr/src/common/bignum/bignum.h
          +++ new/usr/src/common/bignum/bignum.h
↓ open down ↓ 11 lines elided ↑ open up ↑
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22      - * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
       22 + * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  
  26   26  #ifndef _BIGNUM_H
  27   27  #define _BIGNUM_H
  28   28  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31   29  #ifdef  __cplusplus
  32   30  extern "C" {
  33   31  #endif
  34   32  
  35   33  #include <sys/types.h>
  36   34  
  37      -#ifndef __sparcv9
  38      -#define BIGNUM_CHUNK_32
  39      -#else
       35 +#if defined(__sparcv9) || defined(__amd64) /* 64-bit chunk size */
  40   36  #ifndef UMUL64
  41      -#define UMUL64
       37 +#define UMUL64  /* 64-bit multiplication results are supported */
  42   38  #endif
       39 +#else
       40 +#define BIGNUM_CHUNK_32
  43   41  #endif
  44   42  
  45   43  
  46   44  #define BITSINBYTE      8
  47   45  
       46 +/* Bignum "digits" (aka "chunks" or "words") are either 32- or 64-bits */
  48   47  #ifdef BIGNUM_CHUNK_32
  49   48  #define BIG_CHUNK_SIZE          32
  50   49  #define BIG_CHUNK_TYPE          uint32_t
  51   50  #define BIG_CHUNK_TYPE_SIGNED   int32_t
  52   51  #define BIG_CHUNK_HIGHBIT       0x80000000
  53   52  #define BIG_CHUNK_ALLBITS       0xffffffff
  54   53  #define BIG_CHUNK_LOWHALFBITS   0xffff
  55   54  #define BIG_CHUNK_HALF_HIGHBIT  0x8000
       55 +
  56   56  #else
  57   57  #define BIG_CHUNK_SIZE          64
  58   58  #define BIG_CHUNK_TYPE          uint64_t
  59   59  #define BIG_CHUNK_TYPE_SIGNED   int64_t
  60   60  #define BIG_CHUNK_HIGHBIT       0x8000000000000000ULL
  61   61  #define BIG_CHUNK_ALLBITS       0xffffffffffffffffULL
  62   62  #define BIG_CHUNK_LOWHALFBITS   0xffffffffULL
  63   63  #define BIG_CHUNK_HALF_HIGHBIT  0x80000000ULL
  64   64  #endif
  65   65  
  66   66  #define BITLEN2BIGNUMLEN(x)     (((x) + BIG_CHUNK_SIZE - 1) / BIG_CHUNK_SIZE)
  67   67  #define CHARLEN2BIGNUMLEN(x)    (((x) + sizeof (BIG_CHUNK_TYPE) - 1) / \
  68      -                                sizeof (BIG_CHUNK_TYPE))
       68 +                                    sizeof (BIG_CHUNK_TYPE))
  69   69  
  70   70  #define BIGNUM_WORDSIZE (BIG_CHUNK_SIZE / BITSINBYTE)  /* word size in bytes */
  71   71  #define BIG_CHUNKS_FOR_160BITS  ((160 + BIG_CHUNK_SIZE - 1) / BIG_CHUNK_SIZE)
  72   72  
  73   73  
  74   74  /*
  75   75   * leading 0's are permitted
  76   76   * 0 should be represented by size>=1, size>=len>=1, sign=1,
  77   77   * value[i]=0 for 0<i<len
  78   78   */
  79   79  typedef struct {
  80   80          /* size and len in units of BIG_CHUNK_TYPE words  */
  81      -        int size; /* size of memory allocated for value   */
  82      -        int len;  /* number of words that hold valid data in value */
  83      -        int sign; /* 1 for nonnegative, -1 for negative   */
  84      -        int malloced; /* 1 if value was malloced 0 if not */
       81 +        uint32_t        size;   /* size of memory allocated for value  */
       82 +        uint32_t        len;    /* number of valid data words in value */
       83 +        int             sign;   /* 1 for nonnegative, -1 for negative  */
       84 +        int             malloced; /* 1 if value was malloced, 0 if not */
  85   85          BIG_CHUNK_TYPE *value;
  86   86  } BIGNUM;
  87   87  
  88   88  #define BIGTMPSIZE 65
  89   89  
  90   90  #define BIG_TRUE 1
  91   91  #define BIG_FALSE 0
  92   92  
  93   93  typedef int BIG_ERR_CODE;
  94   94  
↓ open down ↓ 128 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX