Re: openssl version constants - question and request

2010-12-15 Thread Victor Duchovni
On Tue, Dec 14, 2010 at 09:52:58AM -0500, Kenneth Goldman wrote:

> Question:
> 
> OPENSSL_VERSION_TEXT is undocumented.  Can I count on it being there and 
> up to date, or is it for internal use only?
> 
> Request:
> 
> OPENSSL_VERSION_NUMBER varies between a long and an int constant,  Could 
> it please be standardized?

It is standardized, but the standard has changed as OpenSSL evolved, it
is quite stable now. Postfix parses the number explained as follows:

/*
 * OPENSSL_VERSION_NUMBER(3):
 *
 * OPENSSL_VERSION_NUMBER is a numeric release version identifier:
 *
 * MMNNFFPPS: major minor fix patch status
 *
 * The status nibble has one of the values 0 for development, 1 to e for
 * betas 1 to 14, and f for release. Parsed OpenSSL version number. for
 * example
 *
 * 0x000906000 == 0.9.6 dev 0x000906023 == 0.9.6b beta 3 0x00090605f ==
 * 0.9.6e release
 *
 * Versions prior to 0.9.3 have identifiers < 0x0930.  Versions between
 * 0.9.3 and 0.9.5 had a version identifier with this interpretation:
 *
 * MMNNFFRBB major minor fix final beta/patch
 *
 * for example
 *
 * 0x000904100 == 0.9.4 release 0x000905000 == 0.9.5 dev
 *
 * Version 0.9.5a had an interim interpretation that is like the current
 * one, except the patch level got the highest bit set, to keep continu-
 * ity.  The number was therefore 0x0090581f.
 */

The parser is:

long version = OPENSSL_VERSION_NUMBER; /* SSLeay() for run-time version */

if (version < 0x0930) {
info->status = 0;
info->patch = version & 0x0f;
version >>= 4;
info->micro = version & 0x0f;
version >>= 4;
info->minor = version & 0x0f;
version >>= 4;
info->major = version & 0x0f;
} else if (version < 0x00905800L) {
info->patch = version & 0xff;
version >>= 8;
info->status = version & 0xf;
version >>= 4;
info->micro = version & 0xff;
version >>= 8;
info->minor = version & 0xff;
version >>= 8;
info->major = version & 0xff;
} else {
info->status = version & 0xf;
version >>= 4;
info->patch = version & 0xff;
version >>= 8;
info->micro = version & 0xff;
version >>= 8;
info->minor = version & 0xff;
version >>= 8;
info->major = version & 0xff;
if (version < 0x00906000L)
info->patch &= ~0x80;
}

-- 
Viktor.
__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


openssl version constants - question and request

2010-12-15 Thread Kenneth Goldman
Question:

OPENSSL_VERSION_TEXT is undocumented.  Can I count on it being there and 
up to date, or is it for internal use only?

Request:

OPENSSL_VERSION_NUMBER varies between a long and an int constant,  Could 
it please be standardized?