unit-tests: perform signing/validation with keys ECDSA keys generated or loaded
This commit is contained in:
@@ -15,6 +15,47 @@
|
|||||||
|
|
||||||
#include "test_suite.h"
|
#include "test_suite.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signature schemes to test
|
||||||
|
*/
|
||||||
|
static struct {
|
||||||
|
/* key size for scheme, 0 for any */
|
||||||
|
int key_size;
|
||||||
|
signature_scheme_t scheme;
|
||||||
|
} schemes[] = {
|
||||||
|
{ 0, SIGN_ECDSA_WITH_SHA1_DER },
|
||||||
|
{ 0, SIGN_ECDSA_WITH_SHA256_DER },
|
||||||
|
{ 0, SIGN_ECDSA_WITH_SHA384_DER },
|
||||||
|
{ 0, SIGN_ECDSA_WITH_SHA512_DER },
|
||||||
|
{ 0, SIGN_ECDSA_WITH_NULL },
|
||||||
|
{ 256, SIGN_ECDSA_256 },
|
||||||
|
{ 384, SIGN_ECDSA_384 },
|
||||||
|
{ 521, SIGN_ECDSA_521 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a signature verification "good" test having a keypair
|
||||||
|
*/
|
||||||
|
static void test_good_sig(private_key_t *privkey, public_key_t *pubkey)
|
||||||
|
{
|
||||||
|
chunk_t sig, data = chunk_from_chars(0x01,0x02,0x03,0xFD,0xFE,0xFF);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < countof(schemes); i++)
|
||||||
|
{
|
||||||
|
if (schemes[i].key_size != 0 &&
|
||||||
|
schemes[i].scheme != privkey->get_keysize(privkey))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fail_unless(privkey->sign(privkey, schemes[i].scheme, data, &sig),
|
||||||
|
"sign %N", signature_scheme_names, schemes[i].scheme);
|
||||||
|
fail_unless(pubkey->verify(pubkey, schemes[i].scheme, data, sig),
|
||||||
|
"verify %N", signature_scheme_names, schemes[i].scheme);
|
||||||
|
free(sig.ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ECDSA key sizes to test
|
* ECDSA key sizes to test
|
||||||
*/
|
*/
|
||||||
@@ -32,6 +73,9 @@ START_TEST(test_gen)
|
|||||||
ck_assert(privkey != NULL);
|
ck_assert(privkey != NULL);
|
||||||
pubkey = privkey->get_public_key(privkey);
|
pubkey = privkey->get_public_key(privkey);
|
||||||
ck_assert(pubkey != NULL);
|
ck_assert(pubkey != NULL);
|
||||||
|
|
||||||
|
test_good_sig(privkey, pubkey);
|
||||||
|
|
||||||
pubkey->destroy(pubkey);
|
pubkey->destroy(pubkey);
|
||||||
privkey->destroy(privkey);
|
privkey->destroy(privkey);
|
||||||
}
|
}
|
||||||
@@ -89,6 +133,9 @@ START_TEST(test_load)
|
|||||||
ck_assert(privkey != NULL);
|
ck_assert(privkey != NULL);
|
||||||
pubkey = privkey->get_public_key(privkey);
|
pubkey = privkey->get_public_key(privkey);
|
||||||
ck_assert(pubkey != NULL);
|
ck_assert(pubkey != NULL);
|
||||||
|
|
||||||
|
test_good_sig(privkey, pubkey);
|
||||||
|
|
||||||
pubkey->destroy(pubkey);
|
pubkey->destroy(pubkey);
|
||||||
privkey->destroy(privkey);
|
privkey->destroy(privkey);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user