Fix to include last curve (BP512). Added max calc based on key's curve.
parent
165494cabb
commit
20e7712ae8
|
@ -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.
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue