Fix to include last curve (BP512). Added max calc based on key's curve.

pull/137/head
David Garske 2019-04-10 11:36:05 -07:00
parent 165494cabb
commit 20e7712ae8
2 changed files with 66 additions and 39 deletions

View File

@ -37,36 +37,40 @@ CRYPTO: EXPECTED signature verify OK! 1
Built wolfSSL with: `./configure --enable-ecccustcurves=all && make && sudo make install`
CurveMax = wc_ecc_sig_size(key)
ActMax = wc_ecc_sign_hash()
CalcMax = wc_ecc_sig_size_calc()
```
./eccsiglentest README.md
./eccsiglentest Makefile
Signature Length Test: Loops 1000
File README.md is 452 bytes
ECC Curve SECP192R1, KeySz 24, Sig: ActMax 56, CalcMax 58
ECC Curve PRIME192V2, KeySz 24, Sig: ActMax 56, CalcMax 58
ECC Curve PRIME192V3, KeySz 24, Sig: ActMax 56, CalcMax 58
ECC Curve PRIME239V1, KeySz 30, Sig: ActMax 66, CalcMax 70
ECC Curve PRIME239V2, KeySz 30, Sig: ActMax 66, CalcMax 70
ECC Curve PRIME239V3, KeySz 30, Sig: ActMax 66, CalcMax 70
ECC Curve SECP256R1, KeySz 32, Sig: ActMax 72, CalcMax 74
ECC Curve SECP112R1, KeySz 14, Sig: ActMax 36, CalcMax 38
ECC Curve SECP112R2, KeySz 14, Sig: ActMax 34, CalcMax 38
ECC Curve SECP128R1, KeySz 16, Sig: ActMax 40, CalcMax 42
ECC Curve SECP128R2, KeySz 16, Sig: ActMax 38, CalcMax 42
ECC Curve SECP160R1, KeySz 20, Sig: ActMax 48, CalcMax 50
ECC Curve SECP160R2, KeySz 20, Sig: ActMax 48, CalcMax 50
ECC Curve SECP224R1, KeySz 28, Sig: ActMax 64, CalcMax 66
ECC Curve SECP384R1, KeySz 48, Sig: ActMax 104, CalcMax 106
ECC Curve SECP521R1, KeySz 66, Sig: ActMax 139, CalcMax 142
ECC Curve SECP160K1, KeySz 20, Sig: ActMax 48, CalcMax 50
ECC Curve SECP192K1, KeySz 24, Sig: ActMax 56, CalcMax 58
ECC Curve SECP224K1, KeySz 28, Sig: ActMax 64, CalcMax 66
ECC Curve SECP256K1, KeySz 32, Sig: ActMax 72, CalcMax 74
ECC Curve BRAINPOOLP160R1, KeySz 20, Sig: ActMax 48, CalcMax 50
ECC Curve BRAINPOOLP192R1, KeySz 24, Sig: ActMax 56, CalcMax 58
ECC Curve BRAINPOOLP224R1, KeySz 28, Sig: ActMax 64, CalcMax 66
ECC Curve BRAINPOOLP256R1, KeySz 32, Sig: ActMax 72, CalcMax 74
ECC Curve BRAINPOOLP320R1, KeySz 40, Sig: ActMax 88, CalcMax 90
ECC Curve BRAINPOOLP384R1, KeySz 48, Sig: ActMax 104, CalcMax 106
File Makefile is 658 bytes
ECC Curve SECP192R1, KeySz 24, Sig: CurveMax 56, ActMax 56, CalcMax 56
ECC Curve PRIME192V2, KeySz 24, Sig: CurveMax 56, ActMax 56, CalcMax 56
ECC Curve PRIME192V3, KeySz 24, Sig: CurveMax 56, ActMax 56, CalcMax 56
ECC Curve PRIME239V1, KeySz 30, Sig: CurveMax 66, ActMax 66, CalcMax 68
ECC Curve PRIME239V2, KeySz 30, Sig: CurveMax 66, ActMax 66, CalcMax 68
ECC Curve PRIME239V3, KeySz 30, Sig: CurveMax 66, ActMax 66, CalcMax 68
ECC Curve SECP256R1, KeySz 32, Sig: CurveMax 72, ActMax 72, CalcMax 72
ECC Curve SECP112R1, KeySz 14, Sig: CurveMax 36, ActMax 36, CalcMax 36
ECC Curve SECP112R2, KeySz 14, Sig: CurveMax 34, ActMax 34, CalcMax 36
ECC Curve SECP128R1, KeySz 16, Sig: CurveMax 40, ActMax 40, CalcMax 40
ECC Curve SECP128R2, KeySz 16, Sig: CurveMax 38, ActMax 38, CalcMax 40
ECC Curve SECP160R1, KeySz 20, Sig: CurveMax 46, ActMax 46, CalcMax 48
ECC Curve SECP160R2, KeySz 20, Sig: CurveMax 46, ActMax 46, CalcMax 48
ECC Curve SECP224R1, KeySz 28, Sig: CurveMax 64, ActMax 64, CalcMax 64
ECC Curve SECP384R1, KeySz 48, Sig: CurveMax 104, ActMax 104, CalcMax 104
ECC Curve SECP521R1, KeySz 66, Sig: CurveMax 139, ActMax 139, CalcMax 141
ECC Curve SECP160K1, KeySz 20, Sig: CurveMax 46, ActMax 46, CalcMax 48
ECC Curve SECP192K1, KeySz 24, Sig: CurveMax 56, ActMax 56, CalcMax 56
ECC Curve SECP224K1, KeySz 28, Sig: CurveMax 62, ActMax 62, CalcMax 64
ECC Curve SECP256K1, KeySz 32, Sig: CurveMax 72, ActMax 72, CalcMax 72
ECC Curve BRAINPOOLP160R1, KeySz 20, Sig: CurveMax 48, ActMax 48, CalcMax 48
ECC Curve BRAINPOOLP192R1, KeySz 24, Sig: CurveMax 56, ActMax 56, CalcMax 56
ECC Curve BRAINPOOLP224R1, KeySz 28, Sig: CurveMax 64, ActMax 64, CalcMax 64
ECC Curve BRAINPOOLP256R1, KeySz 32, Sig: CurveMax 72, ActMax 72, CalcMax 72
ECC Curve BRAINPOOLP320R1, KeySz 40, Sig: CurveMax 88, ActMax 88, CalcMax 88
ECC Curve BRAINPOOLP384R1, KeySz 48, Sig: CurveMax 104, ActMax 104, CalcMax 104
```
Note: The extra 2-bytes of padding is to account for the case where the base ECC key has the Most Significant Bit (MSB) set, which would cause a longer signature.
Note: The extra 2-bytes of padding is to account for the case where R or S has the Most Significant Bit (MSB) set.

View File

@ -39,7 +39,7 @@
//#define DEBUG_SIG_TEST
#ifdef DEBUG_SIG_TEST
void hexdump(const void *buffer, word32 len, byte cols)
static void hexdump(const void *buffer, word32 len, byte cols)
{
word32 i;
@ -60,7 +60,8 @@ void hexdump(const void *buffer, word32 len, byte cols)
#ifdef HAVE_ECC
int ecc_sign_verify_test(enum wc_HashType hash_type,
enum wc_SignatureType sig_type, const byte* fileBuf, int fileLen,
byte* verifyFileBuf, int* verifyFileLen, int curveId, int keySz)
byte* verifyFileBuf, int* verifyFileLen, int* pmaxSigSz, int* pmaxCurveSigSz,
int curveId, int keySz)
{
int ret;
ecc_key eccKey;
@ -69,6 +70,7 @@ int ecc_sign_verify_test(enum wc_HashType hash_type,
word32 sigLen;
byte eccPubKeyBuf[ECC_BUFSIZE], eccPrivKeyBuf[ECC_BUFSIZE];
word32 eccPubKeyLen, eccPrivKeyLen;
word32 maxCurveSigSz;
#ifdef DEBUG_SIG_TEST
printf("ECC Signature: Curve %s, Size %d\n", wc_ecc_get_name(curveId), keySz);
@ -86,6 +88,13 @@ int ecc_sign_verify_test(enum wc_HashType hash_type,
goto exit;
}
ret = wc_ecc_sig_size(&eccKey);
if (ret < 0) {
printf("ECC Sig SizeFailed! %d\n", ret);
goto exit;
}
maxCurveSigSz = ret;
/* Display public key data */
eccPubKeyLen = ECC_BUFSIZE;
ret = wc_ecc_export_x963(&eccKey, eccPubKeyBuf, &eccPubKeyLen);
@ -186,6 +195,18 @@ int ecc_sign_verify_test(enum wc_HashType hash_type,
ret = EXIT_FAILURE;
}
if (pmaxSigSz && *pmaxSigSz < sigLen) {
#ifdef DEBUG_SIG_TEST
printf("Curve: Max %d->%d\n", *pmaxSigSz, sigLen);
hexdump(sigBuf, sigLen, 16);
#endif
*pmaxSigSz = sigLen;
}
if (pmaxCurveSigSz && *pmaxCurveSigSz < maxCurveSigSz) {
*pmaxCurveSigSz = maxCurveSigSz;
}
exit:
/* Free */
if(sigBuf) {
@ -297,23 +318,25 @@ int main(int argc, char** argv)
{
int curveId;
int sigSz = verifyFileLen;
for (curveId=ECC_SECP192R1; curveId<ECC_BRAINPOOLP512R1; curveId++) {
#if 1
for (curveId=ECC_SECP192R1; curveId<=ECC_BRAINPOOLP512R1; curveId++)
#else
curveId = ECC_SECP521R1;
#endif
{
int keySz = wc_ecc_get_curve_size_from_id(curveId);
if (keySz > 0) {
int maxSigSz = 0;
int maxCurveSigSz = 0;
int tries = ECC_LOOP_COUNT;
while (--tries > 0) {
ret = ecc_sign_verify_test(hash_type, sig_type, fileBuf, fileLen,
verifyFileBuf, &sigSz, curveId, keySz);
if (ret == 0) {
if (maxSigSz < sigSz)
maxSigSz = sigSz;
}
verifyFileBuf, &sigSz, &maxSigSz, &maxCurveSigSz, curveId, keySz);
}
/* print max */
printf("ECC Curve %s, KeySz %d, Sig: ActMax %d, CalcMax %d\n",
wc_ecc_get_name(curveId), keySz, maxSigSz,
printf("ECC Curve %s, KeySz %d, Sig: CurveMax %d, ActMax %d, CalcMax %d\n",
wc_ecc_get_name(curveId), keySz, maxCurveSigSz, maxSigSz,
wc_ecc_sig_size_calc(keySz));
}
}