TI ARM C/C++ Optimizer                  v5.1.6
Build Number 1OE9R-KDADEMDK-RTARQ-WAR-ZAZE_V_R_W

		======File-level Analysis Summary======


static unsigned BytePrecision() is called from 2 sites in this file.
    It appears to be inlineable (size = 18 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int CheckAlgo() is called from 1 sites in this file.
    It appears to be inlineable (size = 70 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int CheckAlgoV2() is called from 1 sites in this file.
    It appears to be inlineable (size = 22 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int CheckCurve() is called from 2 sites in this file.
    It appears to be inlineable (size = 30 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int ConfirmNameConstraints() is called from 1 sites in this file.
    It appears to be inlineable (size = 208 units)
    It has 9 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	strlen() (4 times)
	MatchBaseName() (4 times)
	memcmp() (2 times)

static int ConfirmSignature() is called from 1 sites in this file.
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	ecc_free() (1 times)
	ecc_verify_hash() (1 times)
	ecc_import_x963() (1 times)
	FreeRsaKey() (1 times)
	memcmp() (1 times)
	EncodeSignature() (1 times)
	RsaSSL_VerifyInline() (1 times)
	memcpy() (1 times)
	RsaPublicKeyDecode() (1 times)
	InitRsaKey() (1 times)
	Md5Hash() (1 times)
	ShaHash() (1 times)
	Sha256Hash() (1 times)
	Sha512Hash() (1 times)

static int DateGreaterThan() is called from 2 sites in this file.
    It appears to be inlineable (size = 123 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int DateLessThan() is called from 1 sites in this file.
    It appears to be inlineable (size = 6 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	DateGreaterThan() (1 times)

static int DecodeAltNames() is called from 1 sites in this file.
    It appears to be inlineable (size = 216 units)
    It has 9 non-trivial scope blocks nested 6 deep.
    It calls these functions:
	memcpy() (2 times)
	CyaSSL_Free() (2 times)
	CyaSSL_Malloc() (4 times)
	GetLength() (3 times)
	GetSequence() (1 times)

static int DecodeAuthInfo() is called from 1 sites in this file.
    It appears to be inlineable (size = 99 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)
	GetObjectId() (1 times)
	GetSequence() (2 times)

static int DecodeAuthKeyId() is called from 1 sites in this file.
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	ShaFinal() (1 times)
	ShaUpdate() (1 times)
	InitSha() (1 times)
	memcpy() (1 times)
	GetLength() (1 times)
	GetSequence() (1 times)

static int DecodeBasicCaConstraint() is called from 1 sites in this file.
    It appears to be inlineable (size = 64 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)
	GetSequence() (1 times)

static int DecodeCertExtensions() is called from 1 sites in this file.
    It appears to be inlineable (size = 301 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	DecodeAuthInfo() (1 times)
	DecodeSubjKeyId() (1 times)
	DecodeKeyUsage() (1 times)
	DecodeAltNames() (1 times)
	DecodeBasicCaConstraint() (1 times)
	DecodeNameConstraints() (1 times)
	DecodeCrlDist() (1 times)
	DecodeAuthKeyId() (1 times)
	DecodeExtKeyUsage() (1 times)
	GetObjectId() (1 times)
	GetSequence() (2 times)
	GetLength() (3 times)

static int DecodeCrlDist() is called from 1 sites in this file.
    It appears to be inlineable (size = 193 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (5 times)
	GetSequence() (2 times)

extern int DecodeECC_DSA_Sig() is called from 0 sites in this file.
    It appears to be inlineable (size = 54 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (2 times)
	GetSequence() (1 times)

static int DecodeExtKeyUsage() is called from 1 sites in this file.
    It appears to be inlineable (size = 76 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetObjectId() (1 times)
	GetSequence() (1 times)

static int DecodeKeyUsage() is called from 1 sites in this file.
    It appears to be inlineable (size = 78 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

static int DecodeNameConstraints() is called from 1 sites in this file.
    It appears to be inlineable (size = 80 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	DecodeSubtree() (1 times)
	GetLength() (1 times)
	GetSequence() (1 times)

static int DecodeSubjKeyId() is called from 1 sites in this file.
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	ShaFinal() (1 times)
	ShaUpdate() (1 times)
	InitSha() (1 times)
	memcpy() (1 times)
	GetLength() (1 times)

static int DecodeSubtree() is called from 1 sites in this file.
    It appears to be inlineable (size = 100 units)
    It has 5 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	memcpy() (1 times)
	CyaSSL_Malloc() (2 times)
	GetLength() (1 times)
	GetSequence() (1 times)

extern int DecodeToKey() is called from 1 sites in this file.
    It appears to be inlineable (size = 61 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetKey() (1 times)
	GetValidity() (1 times)
	GetName() (2 times)
	GetAlgoId() (1 times)
	GetCertHeader() (1 times)

static int DecryptKey() is called from 1 sites in this file.
    It has 7 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	Arc4Process() (1 times)
	Arc4SetKey() (1 times)
	Des_CbcDecrypt() (1 times)
	Des_SetKey() (1 times)
	Des3_CbcDecrypt() (1 times)
	Des3_SetKey() (1 times)
	PBKDF2() (1 times)
	PBKDF1() (1 times)
	PKCS12_PBKDF() (2 times)

extern int DhKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 33 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (2 times)
	GetSequence() (1 times)

extern int DhParamsLoad() is called from 0 sites in this file.
    It appears to be inlineable (size = 130 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (2 times)
	GetLength() (2 times)
	GetSequence() (1 times)

extern int DhSetKey() is called from 0 sites in this file.
    It appears to be inlineable (size = 76 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	mp_clear() (4 times)
	mp_read_unsigned_bin() (2 times)
	mp_init() (2 times)

extern int DsaPrivateKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 65 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (5 times)
	GetMyVersion() (1 times)
	GetSequence() (1 times)

extern int DsaPublicKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 49 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (4 times)
	GetSequence() (1 times)

extern int EccPrivateKeyDecode() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	ecc_import_private_key() (1 times)
	CheckCurve() (1 times)
	memcpy() (2 times)
	GetLength() (5 times)
	GetMyVersion() (1 times)
	GetSequence() (1 times)

extern unsigned EncodeSignature() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (3 times)
	SetSequence() (1 times)
	SetAlgoID() (1 times)
	SetDigest() (1 times)

extern void FreeAltNames() is called from 2 sites in this file.
    It appears to be inlineable (size = 21 units)
    It has 6 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	CyaSSL_Free() (2 times)

extern void FreeDecodedCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 53 units)
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	FreeNameSubtrees() (2 times)
	FreeAltNames() (2 times)
	CyaSSL_Free() (2 times)

extern void FreeNameSubtrees() is called from 4 sites in this file.
    It appears to be inlineable (size = 21 units)
    It has 6 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	CyaSSL_Free() (2 times)

extern void FreeSigner() is called from 1 sites in this file.
    It appears to be inlineable (size = 33 units)
    It has 6 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	FreeNameSubtrees() (2 times)
	CyaSSL_Free() (3 times)

extern void FreeSignerTable() is called from 0 sites in this file.
    It appears to be inlineable (size = 37 units)
    It has 5 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	FreeSigner() (1 times)

extern int GetAlgoId() is called from 7 sites in this file.
    It appears to be inlineable (size = 103 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)
	GetSequence() (1 times)

static int GetCertHeader() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	mp_clear() (1 times)
	memcpy() (1 times)
	mp_to_unsigned_bin() (1 times)
	mp_unsigned_bin_size() (1 times)
	GetInt() (1 times)
	GetExplicitVersion() (1 times)
	GetSequence() (2 times)

static int GetDate() is called from 2 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	ValidateDate() (1 times)
	memcpy() (1 times)
	GetLength() (1 times)

static int GetExplicitVersion() is called from 1 sites in this file.
    It appears to be inlineable (size = 25 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetMyVersion() (1 times)

extern int GetInt() is called from 24 sites in this file.
    It appears to be inlineable (size = 74 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	mp_clear() (1 times)
	mp_read_unsigned_bin() (1 times)
	mp_init() (1 times)
	GetLength() (1 times)

static int GetKey() is called from 1 sites in this file.
    It appears to be inlineable (size = 206 units)
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	memcpy() (1 times)
	CyaSSL_Malloc() (1 times)
	CheckCurve() (1 times)
	StoreRsaKey() (1 times)
	GetLength() (3 times)
	GetAlgoId() (1 times)
	GetSequence() (1 times)

extern int GetLength() is called from 45 sites in this file.
    It appears to be inlineable (size = 72 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>

extern int GetMyVersion() is called from 5 sites in this file.
    It appears to be inlineable (size = 36 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int GetName() is called from 2 sites in this file.
    It has 7 non-trivial scope blocks nested 6 deep.
    It calls these functions:
	CyaSSL_Malloc() (2 times)
	memcpy() (15 times)
	GetSet() (1 times)
	ShaFinal() (2 times)
	ShaUpdate() (1 times)
	InitSha() (1 times)
	GetSequence() (2 times)
	GetLength() (4 times)

extern int GetNameHash() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	ShaFinal() (1 times)
	ShaUpdate() (1 times)
	InitSha() (1 times)
	GetSequence() (1 times)
	GetLength() (1 times)

static int GetObjectId() is called from 3 sites in this file.
    It appears to be inlineable (size = 65 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

extern int GetSequence() is called from 33 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

extern int GetSet() is called from 1 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

static int GetShortInt() is called from 1 sites in this file.
    It appears to be inlineable (size = 52 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int GetSignature() is called from 1 sites in this file.
    It appears to be inlineable (size = 53 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

static void GetTime() is called from 6 sites in this file.
    It appears to be inlineable (size = 30 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	btoi() (2 times)

static int GetValidity() is called from 1 sites in this file.
    It appears to be inlineable (size = 45 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetDate() (2 times)
	GetSequence() (1 times)

extern void InitDecodedCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 105 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memset() (3 times)

extern struct Signer *MakeSigner() is called from 0 sites in this file.
    It appears to be inlineable (size = 23 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	CyaSSL_Malloc() (1 times)

static int MatchBaseName() is called from 4 sites in this file.
    It appears to be inlineable (size = 169 units)
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	tolower() (2 times)

extern int ParseCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 68 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (2 times)
	CyaSSL_Malloc() (2 times)
	ParseCertRelative() (1 times)

extern int ParseCertRelative() is called from 1 sites in this file.
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	ConfirmNameConstraints() (1 times)
	ConfirmSignature() (1 times)
	GetCAByName() (1 times)
	GetCA() (1 times)
	ShaFinal() (1 times)
	ShaUpdate() (1 times)
	InitSha() (1 times)
	GetSignature() (1 times)
	GetAlgoId() (1 times)
	DecodeCertExtensions() (1 times)
	DecodeToKey() (1 times)

extern int RsaPrivateKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 86 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (8 times)
	GetMyVersion() (1 times)
	GetSequence() (1 times)

extern int RsaPublicKeyDecode() is called from 1 sites in this file.
    It appears to be inlineable (size = 35 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetInt() (2 times)
	GetSequence() (1 times)

extern unsigned SetAlgoID() is called from 1 sites in this file.
    It appears to be inlineable (size = 258 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (3 times)
	SetSequence() (1 times)
	SetLength() (1 times)

static unsigned SetDigest() is called from 1 sites in this file.
    It appears to be inlineable (size = 17 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (1 times)

extern unsigned SetExplicit() is called from 0 sites in this file.
    It appears to be inlineable (size = 15 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

extern unsigned SetImplicit() is called from 0 sites in this file.
    It appears to be inlineable (size = 32 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

extern unsigned SetLength() is called from 8 sites in this file.
    It appears to be inlineable (size = 42 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	BytePrecision() (2 times)

extern int SetMyVersion() is called from 0 sites in this file.
    It appears to be inlineable (size = 36 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

extern unsigned SetOctetString() is called from 0 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

extern unsigned SetSequence() is called from 3 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

extern int SetSerialNumber() is called from 0 sites in this file.
    It appears to be inlineable (size = 46 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memcpy() (2 times)

extern unsigned SetSet() is called from 0 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

extern int StoreECC_DSA_Sig() is called from 0 sites in this file.
    It appears to be inlineable (size = 103 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	mp_to_unsigned_bin() (2 times)
	SetLength() (2 times)
	SetSequence() (1 times)
	mp_unsigned_bin_size() (2 times)
	mp_leading_bit() (2 times)

static int StoreRsaKey() is called from 1 sites in this file.
    It appears to be inlineable (size = 46 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)

extern int ToTraditional() is called from 1 sites in this file.
    It appears to be inlineable (size = 96 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	memmove() (1 times)
	GetLength() (2 times)
	GetAlgoId() (1 times)
	GetMyVersion() (1 times)
	GetSequence() (1 times)

extern int ToTraditionalEnc() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	ToTraditional() (1 times)
	memmove() (1 times)
	DecryptKey() (1 times)
	CheckAlgoV2() (1 times)
	GetShortInt() (1 times)
	memcpy() (2 times)
	GetLength() (3 times)
	CheckAlgo() (1 times)
	GetAlgoId() (3 times)
	GetSequence() (3 times)

extern int ValidateDate() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	DateGreaterThan() (1 times)
	DateLessThan() (1 times)
	gmtime() (1 times)
	GetTime() (6 times)
	btoi() (3 times)
	memset() (1 times)
	XTIME() (1 times)

extern int XTIME() is called from 1 sites in this file.
    It appears to be inlineable (size = 9 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	MYTIME_gettime() (1 times)

static unsigned btoi() is called from 5 sites in this file.
    It appears to be inlineable (size = 5 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

extern struct tm *gmtime() is called from 1 sites in this file.
    It appears to be inlineable (size = 173 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int memcmp() is called from 3 sites in this file.
    It appears to be inlineable (size = 31 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>

static unsigned strlen() is called from 4 sites in this file.
    It appears to be inlineable (size = 15 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

static int tolower() is called from 2 sites in this file.
    It appears to be inlineable (size = 14 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>


These functions may be recursive:
	DecodeECC_DSA_Sig()
	DhKeyDecode()
	DhSetKey()
	DsaPrivateKeyDecode()
	DsaPublicKeyDecode()
	EccPrivateKeyDecode()
	FreeDecodedCert()
	FreeAltNames()
	FreeSignerTable()
	FreeSigner()
	FreeNameSubtrees()
	GetNameHash()
	MakeSigner()
	ParseCert()
	ParseCertRelative()
	ConfirmSignature()
	DecodeCertExtensions()
	DecodeSubjKeyId()
	DecodeAltNames()
	DecodeNameConstraints()
	DecodeSubtree()
	DecodeAuthKeyId()
	DecodeToKey()
	GetKey()
	GetValidity()
	GetDate()
	GetName()
	GetCertHeader()
	RsaPrivateKeyDecode()
	RsaPublicKeyDecode()
	GetInt()
	StoreECC_DSA_Sig()
	ToTraditionalEnc()
	DecryptKey()
	ValidateDate()
	XTIME()

Results of interprocedural value propagation:

   static int MatchBaseName() has these parameter attributes:
      int type :          type <= 2;  type >= 1;

Results of interprocedural value propagation:

   static int GetDate() has these parameter attributes:
      int dateType :      dateType <= 1;  dateType >= 0;

Results of interprocedural value propagation:

   static int GetName() has these parameter attributes:
      int nameType :      nameType <= 1;  nameType >= 0;
Inlineable function will be suppressed: DateLessThan()
Inlineable function will be suppressed: btoi()
Inlineable function will be suppressed: tolower()
Inlineable function will be suppressed: strlen()
Inlineable function will be suppressed: GetTime()
Inlineable function will be suppressed: memcmp()

Making this function inlineable: SetDigest()
Inlineable function will be suppressed: SetDigest()

Making this function inlineable: CheckAlgoV2()
Inlineable function will be suppressed: CheckAlgoV2()

Making this function inlineable: BytePrecision()
Inlineable function will be suppressed: BytePrecision()

Making this function inlineable: GetShortInt()
Inlineable function will be suppressed: GetShortInt()

Making this function inlineable: CheckAlgo()
Inlineable function will be suppressed: CheckAlgo()

Making this function inlineable: GetMyVersion()

Making this function inlineable: XTIME()

Making this function inlineable: GetExplicitVersion()
Inlineable function will be suppressed: GetExplicitVersion()

Making this function inlineable: DecodeBasicCaConstraint()
Inlineable function will be suppressed: DecodeBasicCaConstraint()

Making this function inlineable: FreeNameSubtrees()

Making this function inlineable: DecodeExtKeyUsage()
Inlineable function will be suppressed: DecodeExtKeyUsage()

Making this function inlineable: DecodeKeyUsage()
Inlineable function will be suppressed: DecodeKeyUsage()

Making this function inlineable: DecodeNameConstraints()
Inlineable function will be suppressed: DecodeNameConstraints()

Making this function inlineable: DecodeSubtree()
Inlineable function will be suppressed: DecodeSubtree()

Making this function inlineable: DecodeAuthInfo()
Inlineable function will be suppressed: DecodeAuthInfo()

Making this function inlineable: GetValidity()
Inlineable function will be suppressed: GetValidity()

Making this function inlineable: StoreRsaKey()
Inlineable function will be suppressed: StoreRsaKey()

Making this function inlineable: GetSignature()
Inlineable function will be suppressed: GetSignature()

Making this function inlineable: DecodeCrlDist()
Inlineable function will be suppressed: DecodeCrlDist()

Making this function inlineable: ConfirmNameConstraints()
Inlineable function will be suppressed: ConfirmNameConstraints()

Making this function inlineable: GetKey()
Inlineable function will be suppressed: GetKey()

These external functions are called but not defined here:
	memmove()
	memset()
	memcpy()
	MYTIME_gettime()
	mp_leading_bit()
	GetCA()
	GetCAByName()
	mp_unsigned_bin_size()
	mp_to_unsigned_bin()
	ecc_import_private_key()
	mp_init()
	mp_read_unsigned_bin()
	mp_clear()
	PKCS12_PBKDF()
	PBKDF1()
	PBKDF2()
	Des3_SetKey()
	Des3_CbcDecrypt()
	Des_SetKey()
	Des_CbcDecrypt()
	Arc4SetKey()
	Arc4Process()
	InitSha()
	ShaUpdate()
	ShaFinal()
	CyaSSL_Malloc()
	CyaSSL_Free()
	Sha512Hash()
	Sha256Hash()
	ShaHash()
	Md5Hash()
	InitRsaKey()
	RsaSSL_VerifyInline()
	FreeRsaKey()
	ecc_import_x963()
	ecc_verify_hash()
	ecc_free()


The following variables will be grouped together to share a common
base address.  References in the source interlisting will look like
"1$$.shaAlgoID", "K$1->shaAlgoID", "C$1->shaAlgoID", "&1$$+5", and "C$1+5".

     --offset--    --size--	--variable--

          0            5	static const unsigned char desCbcAlgoID$9[5]
          5            7	static const unsigned char shaAlgoID$3[7]
         12            7	static const unsigned char ECC_AlgoID$21[7]
         19            8	static const unsigned char des3CbcAlgoID$10[8]
         27            9	static const unsigned char shawECDSA_AlgoID$16[9]
         36           10	static const unsigned char md5AlgoID$7[10]
         46           10	static const unsigned char md2AlgoID$8[10]
         56           10	static const unsigned char sha256wECDSA_AlgoID$17[10]
         66           10	static const unsigned char sha384wECDSA_AlgoID$18[10]
         76           10	static const unsigned char sha512wECDSA_AlgoID$19[10]
         86           11	static const unsigned char sha256AlgoID$4[11]
         97           11	static const unsigned char sha384AlgoID$5[11]
        108           11	static const unsigned char sha512AlgoID$6[11]
        119           11	static const unsigned char md5wRSA_AlgoID$11[11]
        130           11	static const unsigned char shawRSA_AlgoID$12[11]
        141           11	static const unsigned char sha256wRSA_AlgoID$13[11]
        152           11	static const unsigned char sha384wRSA_AlgoID$14[11]
        163           11	static const unsigned char sha512wRSA_AlgoID$15[11]
        174           11	static const unsigned char RSA_AlgoID$20[11]
        188           96	static const int _ytab$1[2][12]


		======= End file-level Analysis =======


==============================================================================

extern struct tm *gmtime() is called from 1 sites in this file.
    It appears to be inlineable (size = 173 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 12 memory accesses with 76 dependences.


==============================================================================

extern int XTIME() is called from 1 sites in this file.
    It appears to be inlineable (size = 9 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 1 memory accesses with 0 dependences.


==============================================================================

static int DateGreaterThan() is called from 2 sites in this file.
    It appears to be inlineable (size = 123 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 24 memory accesses with 0 dependences.


==============================================================================

extern int ValidateDate() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	XTIME() (1 times)
	btoi() (3 times)
	GetTime() (6 times)
	gmtime() (1 times)
	DateLessThan() (1 times)
	DateGreaterThan() (1 times)

There are 25 memory accesses with 2 dependences.


==============================================================================

extern int GetLength() is called from 45 sites in this file.
    It appears to be inlineable (size = 72 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>
Unrolling 'while' loop on 'bytes' at lines C:/cyassl/ctaocrypt/src/asn.c:434-437 by factor 4.
Estimated speedup: 1.19x, code size increase: 4.00x (4:->16)

There are 8 memory accesses with 13 dependences.


==============================================================================

extern int GetSequence() is called from 33 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

There are 9 memory accesses with 8 dependences.


==============================================================================

extern int GetAlgoId() is called from 7 sites in this file.
    It appears to be inlineable (size = 103 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetLength() (1 times)

ADVICE: In function GetAlgoId() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:629-633
	for the statement V$0 += input[*&i]; at line 631
	and the statement *oid = V$0; at line 631

	Consider declaring 'input' as const unsigned char * const restrict input
	or declaring 'oid' as  unsigned * const restrict oid
	to assert that 'input' in the address of input[*&i];
	and            'oid' in the address of *oid;
	do not access the same object in memory.

There are 27 memory accesses with 86 dependences.


==============================================================================

static int DecryptKey() is called from 1 sites in this file.
    It has 7 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>

The following local variables in DecryptKey() will be grouped together
to share stack space among distinct scoping blocks.  References
in the source interlisting will look like "O$1.s3_1.l3_2" or "&$O$O1+0".

    --offset--    --reference--			 --variable--

          0	  O$1.s3_1.l3_2                  struct Arc4 dec  [C:/cyassl/ctaocrypt/src/asn.c:992]
          0	  O$1.s3_3.l3_4                  struct Des3 dec  [C:/cyassl/ctaocrypt/src/asn.c:967]
          0	  O$1.s3_5.l3_6                  struct Des dec  [C:/cyassl/ctaocrypt/src/asn.c:947]
          0	  O$1.s3_7.l3_8                  unsigned char unicodePasswd[256]  [C:/cyassl/ctaocrypt/src/asn.c:906]

Unrolling 'for' loop on 'i' at lines C:/cyassl/ctaocrypt/src/asn.c:915-918 by factor 2.
Estimated speedup: 1.18x, code size increase: 1.60x (5:->8)

There are 11 memory accesses with 22 dependences.


==============================================================================

extern int GetMyVersion() is called from 5 sites in this file.
    It appears to be inlineable (size = 36 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 7 memory accesses with 11 dependences.


==============================================================================

extern int ToTraditional() is called from 1 sites in this file.
    It appears to be inlineable (size = 96 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetMyVersion() (1 times)
	GetAlgoId() (1 times)
	GetLength() (2 times)

There are 21 memory accesses with 50 dependences.


==============================================================================

extern int ToTraditionalEnc() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (3 times)
	GetAlgoId() (3 times)
	CheckAlgo() (1 times)
	GetLength() (3 times)
	GetShortInt() (1 times)
	CheckAlgoV2() (1 times)
	DecryptKey() (1 times)
	ToTraditional() (1 times)
Unrolling 'while' loop on 'len' at lines C:/cyassl/ctaocrypt/src/asn.c:524-526 completely by factor 4.
Estimated speedup: 1.33x, code size increase: 3.25x (4:->13)

There are 41 memory accesses with 98 dependences.


==============================================================================

extern unsigned SetLength() is called from 8 sites in this file.
    It appears to be inlineable (size = 42 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	BytePrecision() (2 times)
Unrolling 'for' loop on 'i' at lines C:/cyassl/ctaocrypt/src/asn.c:2487-2489 completely by factor 4.
Estimated speedup: 1.21x, code size increase: 2.60x (5:->13)
Unrolling 'for' loop on 'i' at lines C:/cyassl/ctaocrypt/src/asn.c:2487-2489 completely by factor 4.
Estimated speedup: 1.21x, code size increase: 2.60x (5:->13)
Unrolling 'for' loop on 'j' at lines C:/cyassl/ctaocrypt/src/asn.c:2504-2507 by factor 2.
Estimated speedup: 1.13x, code size increase: 1.80x (5:->9)

There are 5 memory accesses with 9 dependences.


==============================================================================

extern unsigned SetSequence() is called from 3 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int StoreECC_DSA_Sig() is called from 0 sites in this file.
    It appears to be inlineable (size = 103 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetSequence() (1 times)
	SetLength() (2 times)

There are 6 memory accesses with 14 dependences.


==============================================================================

extern unsigned SetSet() is called from 0 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int SetSerialNumber() is called from 0 sites in this file.
    It appears to be inlineable (size = 46 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 5 memory accesses with 5 dependences.


==============================================================================

extern unsigned SetOctetString() is called from 0 sites in this file.
    It appears to be inlineable (size = 12 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int SetMyVersion() is called from 0 sites in this file.
    It appears to be inlineable (size = 36 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 5 memory accesses with 9 dependences.


==============================================================================

extern unsigned SetImplicit() is called from 0 sites in this file.
    It appears to be inlineable (size = 32 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern unsigned SetExplicit() is called from 0 sites in this file.
    It appears to be inlineable (size = 15 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern unsigned SetAlgoID() is called from 1 sites in this file.
    It appears to be inlineable (size = 258 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetLength() (1 times)
	SetSequence() (1 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int GetInt() is called from 24 sites in this file.
    It appears to be inlineable (size = 74 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

There are 15 memory accesses with 21 dependences.


==============================================================================

extern int RsaPublicKeyDecode() is called from 1 sites in this file.
    It appears to be inlineable (size = 35 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetInt() (2 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int RsaPrivateKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 86 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetMyVersion() (1 times)
	GetInt() (8 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

static int GetCertHeader() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (2 times)
	GetExplicitVersion() (1 times)
	GetInt() (1 times)

There are 19 memory accesses with 44 dependences.


==============================================================================

extern int GetSet() is called from 1 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

There are 9 memory accesses with 8 dependences.


==============================================================================

static int GetName() is called from 2 sites in this file.
    It has 7 non-trivial scope blocks nested 6 deep.
    It calls these functions:
	GetLength() (4 times)
	GetSequence() (2 times)
	GetSet() (1 times)

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx = T$1+1u; at line 1860
	and the statement b = (*cert).source[T$1]; at line 1860

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$1];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	to assert that lvalues (*emailName).name;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement (*emailName).next = (*cert).altEmailNames; at line 2095

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement (*cert).altEmailNames = emailName; at line 2096

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name = CyaSSL_Malloc((unsigned)*&adv+1u); at line 2085
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement if ( (*emailName).name ) goto g46; else goto g45; at line 2087
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	to assert that lvalues (*emailName).name;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement if ( (*emailName).name ) goto g46; else goto g45; at line 2087
	and the statement (*cert).altEmailNames = emailName; at line 2096

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*emailName).next = (*cert).altEmailNames; at line 2095

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'emailName' as  struct DNS_entry * restrict emailName
	to assert that 'cert' in the address of (*cert).srcIdx;
	and            'emailName' in the address of (*emailName).next;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).source;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*emailName).next = (*cert).altEmailNames; at line 2095

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'emailName' as  struct DNS_entry * restrict emailName
	to assert that 'cert' in the address of (*cert).source;
	and            'emailName' in the address of (*emailName).next;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	to assert that lvalues (*emailName).name;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy((*emailName).name, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2091
	and the statement (*cert).altEmailNames = emailName; at line 2096

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	to assert that lvalues (*emailName).name;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	to assert that lvalues (*emailName).next;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).altEmailNames = emailName; at line 2096
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).source;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114
	and the statement (*emailName).name[*&adv] = 0u; at line 2093

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).source;
	and                    (*emailName).name[*&adv];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement (*emailName).next = (*cert).altEmailNames; at line 2095

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement (*cert).altEmailNames = emailName; at line 2096

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).name[*&adv] = 0u; at line 2093
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).name;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'emailName' as  struct DNS_entry * restrict emailName
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'emailName' in the address of (*emailName).next;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement (*cert).altEmailNames = emailName; at line 2096

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).next;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).next;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2100

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).next;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).next;
	and            'cert' in the address of (*cert).srcIdx;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*emailName).next = (*cert).altEmailNames; at line 2095
	and the statement memcpy(idx+full, (*cert).source+(*cert).srcIdx, (unsigned)*&adv); at line 2114

	Consider declaring 'emailName' as struct DNS_entry * restrict emailName
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailName' in the address of (*emailName).next;
	and            'cert' in the address of (*cert).source;
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx += *&adv; at line 2123
	and the statement id = (*cert).source[T$3]; at line 1876

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$3];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx += *&adv; at line 2123
	and the statement b = (*cert).source[T$2]; at line 1877

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$2];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx += 2u; at line 1875
	and the statement id = (*cert).source[T$3]; at line 1876

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$3];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx += 2u; at line 1875
	and the statement b = (*cert).source[T$2]; at line 1877

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$2];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx = T$3+1u; at line 1876
	and the statement id = (*cert).source[T$3]; at line 1876

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$3];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx = T$3+1u; at line 1876
	and the statement b = (*cert).source[T$2]; at line 1877

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$2];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx = T$2+1u; at line 1877
	and the statement id = (*cert).source[T$3]; at line 1876

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$3];
	do not access the same object in memory.

ADVICE: In function GetName() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:1847-2125
	for the statement (*cert).srcIdx = T$2+1u; at line 1877
	and the statement b = (*cert).source[T$2]; at line 1877

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).srcIdx;
	and                    (*cert).source[T$2];
	do not access the same object in memory.

There are 83 memory accesses with 668 dependences.


==============================================================================

static int GetDate() is called from 2 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)
	ValidateDate() (1 times)

There are 19 memory accesses with 15 dependences.


==============================================================================

static int CheckCurve() is called from 2 sites in this file.
    It appears to be inlineable (size = 30 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 0 memory accesses with 0 dependences.


==============================================================================

extern int DecodeToKey() is called from 1 sites in this file.
    It appears to be inlineable (size = 61 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetCertHeader() (1 times)
	GetAlgoId() (1 times)
	GetName() (2 times)
	GetValidity() (1 times)
	GetKey() (1 times)
Unrolling 'while' loop on 'recvd' at lines C:/cyassl/ctaocrypt/src/asn.c:1615-1616 by factor 2.
Estimated speedup: 1.20x, code size increase: 1.00x (1:->1)

There are 68 memory accesses with 250 dependences.


==============================================================================

static int GetObjectId() is called from 3 sites in this file.
    It appears to be inlineable (size = 65 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)

There are 16 memory accesses with 20 dependences.


==============================================================================

static int DecodeAuthKeyId() is called from 1 sites in this file.
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetLength() (1 times)

There are 11 memory accesses with 12 dependences.


==============================================================================

static int DecodeAltNames() is called from 1 sites in this file.
    It appears to be inlineable (size = 216 units)
    It has 9 non-trivial scope blocks nested 6 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetLength() (3 times)

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement b = input[*&idx]; at line 3283
	and the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343

	Consider declaring 'input' as unsigned char * const restrict input
	or declaring 'emailEntry' as  struct DNS_entry * restrict emailEntry
	to assert that 'input' in the address of input[*&idx];
	and            'emailEntry' in the address of (*emailEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*cert).altEmailNames = emailEntry; at line 3355

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3343
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*cert).altEmailNames = emailEntry; at line 3355

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*emailEntry).name ) goto g18; else goto g15; at line 3345
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*cert).altEmailNames = emailEntry; at line 3355

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*emailEntry).name, *&idx+input, (unsigned)*&strLen); at line 3351
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).next;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altNames;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).next;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altNames = dnsEntry; at line 3319
	and the statement (*emailEntry).name[*&strLen] = 0u; at line 3352

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altNames;
	and                    (*emailEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*cert).altEmailNames = emailEntry; at line 3355

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).name[*&strLen] = 0u; at line 3352
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'emailEntry' as  struct DNS_entry * restrict emailEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'emailEntry' in the address of (*emailEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*cert).altEmailNames = emailEntry; at line 3355

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'cert' in the address of (*cert).altEmailNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	to assert that lvalues (*emailEntry).next;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*emailEntry).next = (*cert).altEmailNames; at line 3354
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'emailEntry' as struct DNS_entry * restrict emailEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'emailEntry' in the address of (*emailEntry).next;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altEmailNames;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).name;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altEmailNames = emailEntry; at line 3355
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altEmailNames;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name = CyaSSL_Malloc((unsigned)*&strLen+1u); at line 3307
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement if ( (*dnsEntry).name ) goto g27; else goto g24; at line 3309
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement memcpy((*dnsEntry).name, *&idx+input, (unsigned)*&strLen); at line 3315
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).name;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altNames;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	to assert that lvalues (*dnsEntry).next;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*cert).altNames = dnsEntry; at line 3319
	and the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	to assert that lvalues (*cert).altNames;
	and                    (*dnsEntry).name[*&strLen];
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316
	and the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).name[*&strLen] = 0u; at line 3316
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).name;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318

	Consider declaring 'cert' as struct DecodedCert * const restrict cert
	or declaring 'dnsEntry' as  struct DNS_entry * restrict dnsEntry
	to assert that 'cert' in the address of (*cert).altNames;
	and            'dnsEntry' in the address of (*dnsEntry).next;
	do not access the same object in memory.

ADVICE: In function DecodeAltNames() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3282-3455
	for the statement (*dnsEntry).next = (*cert).altNames; at line 3318
	and the statement (*cert).altNames = dnsEntry; at line 3319

	Consider declaring 'dnsEntry' as struct DNS_entry * restrict dnsEntry
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'dnsEntry' in the address of (*dnsEntry).next;
	and            'cert' in the address of (*cert).altNames;
	do not access the same object in memory.

There are 47 memory accesses with 404 dependences.


==============================================================================

static int DecodeSubjKeyId() is called from 1 sites in this file.
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	GetLength() (1 times)

There are 8 memory accesses with 5 dependences.


==============================================================================

static int DecodeCertExtensions() is called from 1 sites in this file.
    It appears to be inlineable (size = 301 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	GetLength() (3 times)
	GetSequence() (2 times)
	GetObjectId() (1 times)
	DecodeExtKeyUsage() (1 times)
	DecodeAuthKeyId() (1 times)
	DecodeCrlDist() (1 times)
	DecodeNameConstraints() (1 times)
	DecodeBasicCaConstraint() (1 times)
	DecodeAltNames() (1 times)
	DecodeKeyUsage() (1 times)
	DecodeSubjKeyId() (1 times)
	DecodeAuthInfo() (1 times)

ADVICE: In function DecodeCertExtensions() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:3973-4111
	for the statement if ( input[y$218+4294967295] != 4 ) goto g22; else goto g23; at line 3999
	and the statement (*cert).extExtKeyUsageSet = 1u; at line 4078

	Consider declaring 'input' as unsigned char * restrict input
	or declaring 'cert' as  struct DecodedCert * const restrict cert
	to assert that 'input' in the address of input[y$218+4294967295];
	and            'cert' in the address of (*cert).extExtKeyUsageSet;
	do not access the same object in memory.

There are 185 memory accesses with 2307 dependences.


==============================================================================

extern unsigned EncodeSignature() is called from 1 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	SetDigest() (1 times)
	SetAlgoID() (1 times)
	SetSequence() (1 times)

There are 2 memory accesses with 0 dependences.


==============================================================================

static int ConfirmSignature() is called from 1 sites in this file.
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	RsaPublicKeyDecode() (1 times)
	EncodeSignature() (1 times)
	memcmp() (1 times)

The following local variables in ConfirmSignature() will be grouped together
to share stack space among distinct scoping blocks.  References
in the source interlisting will look like "O$1.s3_1.l3_2" or "&$O$O1+0".

    --offset--    --reference--			 --variable--

          0	  O$1.s3_1.l3_2                  struct $$fake3 pubKey[1]  [C:/cyassl/ctaocrypt/src/asn.c:3058]
          0	  O$1.s3_3.l3_4                  unsigned char encodedSig[512]  [C:/cyassl/ctaocrypt/src/asn.c:2960]
        512	  O$1.s3_3.l3_5                  unsigned char plain[512]  [C:/cyassl/ctaocrypt/src/asn.c:2959]
       1024	  O$1.s3_3.l3_6                  struct RsaKey pubKey[1]  [C:/cyassl/ctaocrypt/src/asn.c:2958]

Unrolling 'while' loop on 'n' at lines c:/ti/ccsv6/tools/compiler/arm_5.1.6/include/string.h:272-272 by factor 2.
Estimated speedup: 1.13x, code size increase: 1.80x (5:->9)

There are 10 memory accesses with 4 dependences.


==============================================================================

static int MatchBaseName() is called from 4 sites in this file.
    It appears to be inlineable (size = 169 units)
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	tolower() (2 times)
Unrolling 'while' loop on 'count' at lines C:/cyassl/ctaocrypt/src/asn.c:3123-3126 by factor 2.
Estimated speedup: 1.20x, code size increase: 1.60x (5:->8)
Unrolling 'while' loop on 'count' at lines C:/cyassl/ctaocrypt/src/asn.c:3138-3141 by factor 4.
Estimated speedup: 1.14x, code size increase: 4.00x (5:->20)

There are 13 memory accesses with 0 dependences.


==============================================================================

extern int ParseCertRelative() is called from 1 sites in this file.
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	DecodeToKey() (1 times)
	DecodeCertExtensions() (1 times)
	GetAlgoId() (1 times)
	GetSignature() (1 times)
	ConfirmSignature() (1 times)
	ConfirmNameConstraints() (1 times)
Unrolling 'while' loop on 'n' at lines c:/ti/ccsv6/tools/compiler/arm_5.1.6/include/string.h:272-272 by factor 2.
Estimated speedup: 1.13x, code size increase: 1.80x (5:->9)
Unrolling 'while' loop on 'n' at lines c:/ti/ccsv6/tools/compiler/arm_5.1.6/include/string.h:272-272 by factor 2.
Estimated speedup: 1.13x, code size increase: 1.80x (5:->9)

		====== Unroll-and-jam Result Summary ======

LOOP#8 in ParseCertRelative() fails to unroll-and-jam: Outer Loop has multiple blocks

		====== End Unroll-and-jam Result ======


		====== Unroll-and-jam Result Summary ======

LOOP#11 in ParseCertRelative() fails to unroll-and-jam: Outer trip count may be NULL

		====== End Unroll-and-jam Result ======


		====== Unroll-and-jam Result Summary ======

LOOP#9 in ParseCertRelative() fails to unroll-and-jam: Outer trip count may be NULL

		====== End Unroll-and-jam Result ======


There are 93 memory accesses with 492 dependences.


==============================================================================

extern int ParseCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 68 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	ParseCertRelative() (1 times)

There are 14 memory accesses with 17 dependences.


==============================================================================

extern struct Signer *MakeSigner() is called from 0 sites in this file.
    It appears to be inlineable (size = 23 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 8 memory accesses with 28 dependences.


==============================================================================

extern void InitDecodedCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 105 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 40 memory accesses with 0 dependences.


==============================================================================

extern int GetNameHash() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetLength() (1 times)
	GetSequence() (1 times)

There are 8 memory accesses with 7 dependences.


==============================================================================

extern void FreeNameSubtrees() is called from 4 sites in this file.
    It appears to be inlineable (size = 21 units)
    It has 6 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	<NONE>

There are 2 memory accesses with 0 dependences.


==============================================================================

extern void FreeSigner() is called from 1 sites in this file.
    It appears to be inlineable (size = 33 units)
    It has 6 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	FreeNameSubtrees() (2 times)

There are 4 memory accesses with 0 dependences.


==============================================================================

extern void FreeSignerTable() is called from 0 sites in this file.
    It appears to be inlineable (size = 37 units)
    It has 5 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	FreeSigner() (1 times)

		====== Unroll-and-jam Result Summary ======

LOOP#1 in FreeSignerTable() fails to unroll-and-jam: Outer Loop has multiple blocks

		====== End Unroll-and-jam Result ======


There are 3 memory accesses with 3 dependences.


==============================================================================

extern void FreeAltNames() is called from 2 sites in this file.
    It appears to be inlineable (size = 21 units)
    It has 6 non-trivial scope blocks nested 5 deep.
    It calls these functions:
	<NONE>

There are 2 memory accesses with 0 dependences.


==============================================================================

extern void FreeDecodedCert() is called from 0 sites in this file.
    It appears to be inlineable (size = 53 units)
    It has 5 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	FreeAltNames() (2 times)
	FreeNameSubtrees() (2 times)

There are 13 memory accesses with 0 dependences.


==============================================================================

extern int EccPrivateKeyDecode() is called from 0 sites in this file.
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetMyVersion() (1 times)
	GetLength() (5 times)
	CheckCurve() (1 times)

ADVICE: In function EccPrivateKeyDecode() in C:/cyassl/ctaocrypt/src/asn.c
	in the 'while' loop at lines C:/cyassl/ctaocrypt/src/asn.c:6495-6498
	for the statement oid += input[V$0]; at line 6496
	and the statement *inOutIdx = V$0; at line 6497

	Consider declaring 'input' as const unsigned char * const restrict input
	or declaring 'inOutIdx' as  unsigned * const restrict inOutIdx
	to assert that 'input' in the address of input[V$0];
	and            'inOutIdx' in the address of *inOutIdx;
	do not access the same object in memory.

There are 37 memory accesses with 237 dependences.


==============================================================================

extern int DsaPublicKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 49 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetInt() (4 times)

There are 1 memory accesses with 0 dependences.


==============================================================================

extern int DsaPrivateKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 65 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetMyVersion() (1 times)
	GetInt() (5 times)

There are 6 memory accesses with 9 dependences.


==============================================================================

extern int DhSetKey() is called from 0 sites in this file.
    It appears to be inlineable (size = 76 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

There are 2 memory accesses with 0 dependences.


==============================================================================

extern int DhParamsLoad() is called from 0 sites in this file.
    It appears to be inlineable (size = 130 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetLength() (2 times)

There are 30 memory accesses with 67 dependences.


==============================================================================

extern int DhKeyDecode() is called from 0 sites in this file.
    It appears to be inlineable (size = 33 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetInt() (2 times)

There are 0 memory accesses with 0 dependences.


==============================================================================

extern int DecodeECC_DSA_Sig() is called from 0 sites in this file.
    It appears to be inlineable (size = 54 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	GetSequence() (1 times)
	GetInt() (2 times)

There are 4 memory accesses with 2 dependences.


== END OF INFO OUTPUT==
