add trailing zero enum and correct call for export key size

This commit is contained in:
Jacob Barthelmeh
2016-04-04 17:47:11 -06:00
parent 4f8fffbc37
commit 665fb3076c
2 changed files with 19 additions and 12 deletions

View File

@@ -5883,7 +5883,7 @@ static int SetSerial(const byte* serial, byte* output)
/* Write a public ECC key to output */
static int SetEccPublicKey(byte* output, ecc_key* key, int with_header)
{
byte len[MAX_LENGTH_SZ + 1]; /* trailing 0 */
byte len[MAX_LENGTH_SZ + TRAILING_ZERO];
int algoSz;
int curveSz;
int lenSz;
@@ -5941,7 +5941,7 @@ static int SetEccPublicKey(byte* output, ecc_key* key, int with_header)
#endif
algoSz = SetAlgoID(ECDSAk, algo, oidKeyType, curveSz);
lenSz = SetLength(pubSz + 1, len);
lenSz = SetLength(pubSz + TRAILING_ZERO, len);
len[lenSz++] = 0; /* trailing 0 */
/* write, 1 is for ASN_BIT_STRING */
@@ -5985,24 +5985,30 @@ int wc_EccPublicKeyToDer(ecc_key* key, byte* output, word32 inLen,
int with_AlgCurve)
{
word32 infoSz = 0;
word32 keySz = 0;
int ret;
if (output == NULL || key == NULL) {
return BAD_FUNC_ARG;
}
if (with_AlgCurve) {
int maxSetLength = 4; /* max buffer space needed for SetLength */
int asnBit = 1; /* buffer space needed for asn bit string macro */
/* buffer space for algorithm/curve */
infoSz += MAX_SEQ_SZ;
infoSz += 2 * MAX_ALGO_SZ;
infoSz += asnBit;
infoSz += maxSetLength + asnBit; /* SetSequence buffer needed */
infoSz += 2 * MAX_ALGO_SZ; /* buffer space for algorithm/curve */
infoSz += asnBit;
infoSz += maxSetLength;
/* buffer space for public key sequence */
infoSz += MAX_SEQ_SZ;
infoSz += TRAILING_ZERO;
}
if (inLen < wc_ecc_size(key) + infoSz) {
return BAD_FUNC_ARG;
if ((ret = wc_ecc_export_x963(key, NULL, &keySz)) != LENGTH_ONLY_E) {
WOLFSSL_MSG("Error in getting ECC public key size");
return ret;
}
if (inLen < keySz + infoSz) {
return BUFFER_E;
}
return SetEccPublicKey(output, key, with_AlgCurve);

View File

@@ -195,7 +195,8 @@ enum Misc_ASN {
EIGHTK_BUF = 8192, /* Tmp buffer size */
MAX_PUBLIC_KEY_SZ = MAX_NTRU_ENC_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2,
/* use bigger NTRU size */
HEADER_ENCRYPTED_KEY_SIZE = 88 /* Extra header size for encrypted key */
HEADER_ENCRYPTED_KEY_SIZE = 88,/* Extra header size for encrypted key */
TRAILING_ZERO = 1 /* Used for size of zero pad */
};