mirror of
https://github.com/openssl/openssl.git
synced 2024-12-03 05:41:46 +08:00
This is the least unacceptable way I've found for declaring the bignum data
and structures as constant without having to cast away const at any point. There is still plenty of other code that makes gcc's "-Wcast-qual" unhappy, but crypto/bn/ is now ok. Purists are welcome to suggest alternatives.
This commit is contained in:
parent
933398f110
commit
c465e7941e
@ -252,6 +252,27 @@ typedef struct bignum_st
|
||||
int flags;
|
||||
} BIGNUM;
|
||||
|
||||
/* Declaring static BIGNUMs as constant is tricky in C; the 'd' data can't be
|
||||
* pre-declared const without having to cast away the const when declaring the
|
||||
* BIGNUM. We use this alternative type for declaring const BIGNUMs. See
|
||||
* bn_nist.c for examples. */
|
||||
typedef struct bignum_c_st
|
||||
{
|
||||
const BN_ULONG *d;
|
||||
int top;
|
||||
int dmax;
|
||||
int neg;
|
||||
int flags;
|
||||
} BIGNUM_C;
|
||||
#ifdef BN_DEBUG
|
||||
/* Use a function to do this so that we can type-check the pointer we're
|
||||
* casting */
|
||||
const BIGNUM *BIGNUM_CONST(const BIGNUM_C *bn);
|
||||
#else
|
||||
/* Use a macro instead */
|
||||
#define BIGNUM_CONST(bn) ((const BIGNUM *)bn)
|
||||
#endif
|
||||
|
||||
/* Used for temp variables (declaration hidden in bn_lcl.h) */
|
||||
typedef struct bignum_ctx BN_CTX;
|
||||
|
||||
|
@ -874,3 +874,11 @@ int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b,
|
||||
}
|
||||
return bn_cmp_words(a,b,cl);
|
||||
}
|
||||
|
||||
/* See the comments surrounding BIGNUM_C in bn.h */
|
||||
#ifdef BN_DEBUG
|
||||
const BIGNUM *BIGNUM_CONST(const BIGNUM_C *bn)
|
||||
{
|
||||
return (const BIGNUM *)bn;
|
||||
}
|
||||
#endif
|
||||
|
@ -127,39 +127,40 @@ const static BN_ULONG _nist_p_521[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0x01};
|
||||
#endif
|
||||
|
||||
static const BIGNUM_C bn_nist_p_192 =
|
||||
{ _nist_p_192, BN_NIST_192_TOP, BN_NIST_192_TOP, 0, BN_FLG_STATIC_DATA };
|
||||
static const BIGNUM_C bn_nist_p_224 =
|
||||
{ _nist_p_224, BN_NIST_224_TOP, BN_NIST_224_TOP, 0, BN_FLG_STATIC_DATA };
|
||||
static const BIGNUM_C bn_nist_p_256 =
|
||||
{ _nist_p_256, BN_NIST_256_TOP, BN_NIST_256_TOP, 0, BN_FLG_STATIC_DATA };
|
||||
static const BIGNUM_C bn_nist_p_384 =
|
||||
{ _nist_p_384, BN_NIST_384_TOP, BN_NIST_384_TOP, 0, BN_FLG_STATIC_DATA };
|
||||
static const BIGNUM_C bn_nist_p_521 =
|
||||
{ _nist_p_521, BN_NIST_521_TOP, BN_NIST_521_TOP, 0, BN_FLG_STATIC_DATA };
|
||||
|
||||
const BIGNUM *BN_get0_nist_prime_192(void)
|
||||
{
|
||||
static BIGNUM const_nist_192={(BN_ULONG *)_nist_p_192,BN_NIST_192_TOP,
|
||||
BN_NIST_192_TOP, 0, BN_FLG_STATIC_DATA};
|
||||
return &const_nist_192;
|
||||
return BIGNUM_CONST(&bn_nist_p_192);
|
||||
}
|
||||
|
||||
const BIGNUM *BN_get0_nist_prime_224(void)
|
||||
{
|
||||
static BIGNUM const_nist_224={(BN_ULONG *)_nist_p_224,BN_NIST_224_TOP,
|
||||
BN_NIST_224_TOP, 0, BN_FLG_STATIC_DATA};
|
||||
return &const_nist_224;
|
||||
return BIGNUM_CONST(&bn_nist_p_224);
|
||||
}
|
||||
|
||||
const BIGNUM *BN_get0_nist_prime_256(void)
|
||||
{
|
||||
static BIGNUM const_nist_256={(BN_ULONG *)_nist_p_256,BN_NIST_256_TOP,
|
||||
BN_NIST_256_TOP, 0, BN_FLG_STATIC_DATA};
|
||||
return &const_nist_256;
|
||||
return BIGNUM_CONST(&bn_nist_p_256);
|
||||
}
|
||||
|
||||
const BIGNUM *BN_get0_nist_prime_384(void)
|
||||
{
|
||||
static BIGNUM const_nist_384={(BN_ULONG *)_nist_p_384,BN_NIST_384_TOP,
|
||||
BN_NIST_384_TOP, 0, BN_FLG_STATIC_DATA};
|
||||
return &const_nist_384;
|
||||
return BIGNUM_CONST(&bn_nist_p_384);
|
||||
}
|
||||
|
||||
const BIGNUM *BN_get0_nist_prime_521(void)
|
||||
{
|
||||
static BIGNUM const_nist_521={(BN_ULONG *)_nist_p_521,BN_NIST_521_TOP,
|
||||
BN_NIST_521_TOP, 0, BN_FLG_STATIC_DATA};
|
||||
return &const_nist_521;
|
||||
return BIGNUM_CONST(&bn_nist_p_521);
|
||||
}
|
||||
|
||||
/* some misc internal functions */
|
||||
|
Loading…
Reference in New Issue
Block a user