Migrated gmp plugin to INIT/METHOD macros

This commit is contained in:
Martin Willi
2010-08-10 18:46:30 +02:00
parent 6432669fa2
commit 876b61e132
6 changed files with 103 additions and 173 deletions
@@ -85,10 +85,8 @@ struct private_gmp_diffie_hellman_t {
bool computed; bool computed;
}; };
/** METHOD(diffie_hellman_t, set_other_public_value, void,
* Implementation of gmp_diffie_hellman_t.set_other_public_value. private_gmp_diffie_hellman_t *this, chunk_t value)
*/
static void set_other_public_value(private_gmp_diffie_hellman_t *this, chunk_t value)
{ {
mpz_t p_min_1; mpz_t p_min_1;
@@ -146,10 +144,8 @@ static void set_other_public_value(private_gmp_diffie_hellman_t *this, chunk_t v
mpz_clear(p_min_1); mpz_clear(p_min_1);
} }
/** METHOD(diffie_hellman_t, get_my_public_value, void,
* Implementation of gmp_diffie_hellman_t.get_my_public_value. private_gmp_diffie_hellman_t *this,chunk_t *value)
*/
static void get_my_public_value(private_gmp_diffie_hellman_t *this,chunk_t *value)
{ {
value->len = this->p_len; value->len = this->p_len;
value->ptr = mpz_export(NULL, NULL, 1, value->len, 1, 0, this->ya); value->ptr = mpz_export(NULL, NULL, 1, value->len, 1, 0, this->ya);
@@ -159,10 +155,8 @@ static void get_my_public_value(private_gmp_diffie_hellman_t *this,chunk_t *valu
} }
} }
/** METHOD(diffie_hellman_t, get_shared_secret, status_t,
* Implementation of gmp_diffie_hellman_t.get_shared_secret. private_gmp_diffie_hellman_t *this, chunk_t *secret)
*/
static status_t get_shared_secret(private_gmp_diffie_hellman_t *this, chunk_t *secret)
{ {
if (!this->computed) if (!this->computed)
{ {
@@ -177,18 +171,14 @@ static status_t get_shared_secret(private_gmp_diffie_hellman_t *this, chunk_t *s
return SUCCESS; return SUCCESS;
} }
/** METHOD(diffie_hellman_t, get_dh_group, diffie_hellman_group_t,
* Implementation of gmp_diffie_hellman_t.get_dh_group. private_gmp_diffie_hellman_t *this)
*/
static diffie_hellman_group_t get_dh_group(private_gmp_diffie_hellman_t *this)
{ {
return this->group; return this->group;
} }
/** METHOD(diffie_hellman_t, destroy, void,
* Implementation of gmp_diffie_hellman_t.destroy. private_gmp_diffie_hellman_t *this)
*/
static void destroy(private_gmp_diffie_hellman_t *this)
{ {
mpz_clear(this->p); mpz_clear(this->p);
mpz_clear(this->xa); mpz_clear(this->xa);
@@ -215,17 +205,18 @@ gmp_diffie_hellman_t *gmp_diffie_hellman_create(diffie_hellman_group_t group)
return NULL; return NULL;
} }
this = malloc_thing(private_gmp_diffie_hellman_t); INIT(this,
.public.dh = {
.get_shared_secret = _get_shared_secret,
.set_other_public_value = _set_other_public_value,
.get_my_public_value = _get_my_public_value,
.get_dh_group = _get_dh_group,
.destroy = _destroy,
},
.group = group,
.p_len = params->prime.len,
);
/* public functions */
this->public.dh.get_shared_secret = (status_t (*)(diffie_hellman_t *, chunk_t *)) get_shared_secret;
this->public.dh.set_other_public_value = (void (*)(diffie_hellman_t *, chunk_t )) set_other_public_value;
this->public.dh.get_my_public_value = (void (*)(diffie_hellman_t *, chunk_t *)) get_my_public_value;
this->public.dh.get_dh_group = (diffie_hellman_group_t (*)(diffie_hellman_t *)) get_dh_group;
this->public.dh.destroy = (void (*)(diffie_hellman_t *)) destroy;
/* private variables */
this->group = group;
mpz_init(this->p); mpz_init(this->p);
mpz_init(this->yb); mpz_init(this->yb);
mpz_init(this->ya); mpz_init(this->ya);
@@ -233,8 +224,6 @@ gmp_diffie_hellman_t *gmp_diffie_hellman_create(diffie_hellman_group_t group)
mpz_init(this->zz); mpz_init(this->zz);
mpz_init(this->g); mpz_init(this->g);
this->computed = FALSE;
this->p_len = params->prime.len;
mpz_import(this->p, params->prime.len, 1, 1, 1, 0, params->prime.ptr); mpz_import(this->p, params->prime.len, 1, 1, 1, 0, params->prime.ptr);
mpz_import(this->g, params->generator.len, 1, 1, 1, 0, params->generator.ptr); mpz_import(this->g, params->generator.len, 1, 1, 1, 0, params->generator.ptr);
+6 -6
View File
@@ -33,10 +33,8 @@ struct private_gmp_plugin_t {
gmp_plugin_t public; gmp_plugin_t public;
}; };
/** METHOD(plugin_t, destroy, void,
* Implementation of gmp_plugin_t.gmptroy private_gmp_plugin_t *this)
*/
static void destroy(private_gmp_plugin_t *this)
{ {
lib->crypto->remove_dh(lib->crypto, lib->crypto->remove_dh(lib->crypto,
(dh_constructor_t)gmp_diffie_hellman_create); (dh_constructor_t)gmp_diffie_hellman_create);
@@ -54,9 +52,11 @@ static void destroy(private_gmp_plugin_t *this)
*/ */
plugin_t *gmp_plugin_create() plugin_t *gmp_plugin_create()
{ {
private_gmp_plugin_t *this = malloc_thing(private_gmp_plugin_t); private_gmp_plugin_t *this;
this->public.plugin.destroy = (void(*)(plugin_t*))destroy; INIT(this,
.public.plugin.destroy = _destroy,
);
lib->crypto->add_dh(lib->crypto, MODP_2048_BIT, lib->crypto->add_dh(lib->crypto, MODP_2048_BIT,
(dh_constructor_t)gmp_diffie_hellman_create); (dh_constructor_t)gmp_diffie_hellman_create);
@@ -209,7 +209,7 @@ static chunk_t rsasp1(private_gmp_rsa_private_key_t *this, chunk_t data)
} }
/** /**
* Implementation of gmp_rsa_private_key_t.build_emsa_pkcs1_signature. * Build a signature using the PKCS#1 EMSA scheme
*/ */
static bool build_emsa_pkcs1_signature(private_gmp_rsa_private_key_t *this, static bool build_emsa_pkcs1_signature(private_gmp_rsa_private_key_t *this,
hash_algorithm_t hash_algorithm, hash_algorithm_t hash_algorithm,
@@ -280,19 +280,15 @@ static bool build_emsa_pkcs1_signature(private_gmp_rsa_private_key_t *this,
return TRUE; return TRUE;
} }
/** METHOD(private_key_t, get_type, key_type_t,
* Implementation of gmp_rsa_private_key.get_type. private_gmp_rsa_private_key_t *this)
*/
static key_type_t get_type(private_gmp_rsa_private_key_t *this)
{ {
return KEY_RSA; return KEY_RSA;
} }
/** METHOD(private_key_t, sign, bool,
* Implementation of gmp_rsa_private_key.sign. private_gmp_rsa_private_key_t *this, signature_scheme_t scheme,
*/ chunk_t data, chunk_t *signature)
static bool sign(private_gmp_rsa_private_key_t *this, signature_scheme_t scheme,
chunk_t data, chunk_t *signature)
{ {
switch (scheme) switch (scheme)
{ {
@@ -317,11 +313,8 @@ static bool sign(private_gmp_rsa_private_key_t *this, signature_scheme_t scheme,
} }
} }
/** METHOD(private_key_t, decrypt, bool,
* Implementation of gmp_rsa_private_key.decrypt. private_gmp_rsa_private_key_t *this, chunk_t crypto, chunk_t *plain)
*/
static bool decrypt(private_gmp_rsa_private_key_t *this, chunk_t crypto,
chunk_t *plain)
{ {
chunk_t em, stripped; chunk_t em, stripped;
bool success = FALSE; bool success = FALSE;
@@ -356,18 +349,14 @@ end:
return success; return success;
} }
/** METHOD(private_key_t, get_keysize, size_t,
* Implementation of gmp_rsa_private_key.get_keysize. private_gmp_rsa_private_key_t *this)
*/
static size_t get_keysize(private_gmp_rsa_private_key_t *this)
{ {
return this->k; return this->k;
} }
/** METHOD(private_key_t, get_public_key, public_key_t*,
* Implementation of gmp_rsa_private_key.get_public_key. private_gmp_rsa_private_key_t *this)
*/
static public_key_t* get_public_key(private_gmp_rsa_private_key_t *this)
{ {
chunk_t n, e; chunk_t n, e;
public_key_t *public; public_key_t *public;
@@ -383,27 +372,9 @@ static public_key_t* get_public_key(private_gmp_rsa_private_key_t *this)
return public; return public;
} }
/** METHOD(private_key_t, get_encoding, bool,
* Implementation of gmp_rsa_private_key.equals. private_gmp_rsa_private_key_t *this, cred_encoding_type_t type,
*/ chunk_t *encoding)
static bool equals(private_gmp_rsa_private_key_t *this, private_key_t *other)
{
return private_key_equals(&this->public.interface, other);
}
/**
* Implementation of gmp_rsa_private_key.belongs_to.
*/
static bool belongs_to(private_gmp_rsa_private_key_t *this, public_key_t *public)
{
return private_key_belongs_to(&this->public.interface, public);
}
/**
* Implementation of private_key_t.get_encoding
*/
static bool get_encoding(private_gmp_rsa_private_key_t *this,
cred_encoding_type_t type, chunk_t *encoding)
{ {
chunk_t n, e, d, p, q, exp1, exp2, coeff; chunk_t n, e, d, p, q, exp1, exp2, coeff;
bool success; bool success;
@@ -435,11 +406,8 @@ static bool get_encoding(private_gmp_rsa_private_key_t *this,
return success; return success;
} }
/** METHOD(private_key_t, get_fingerprint, bool,
* Implementation of private_key_t.get_fingerprint private_gmp_rsa_private_key_t *this, cred_encoding_type_t type, chunk_t *fp)
*/
static bool get_fingerprint(private_gmp_rsa_private_key_t *this,
cred_encoding_type_t type, chunk_t *fp)
{ {
chunk_t n, e; chunk_t n, e;
bool success; bool success;
@@ -459,19 +427,15 @@ static bool get_fingerprint(private_gmp_rsa_private_key_t *this,
return success; return success;
} }
/** METHOD(private_key_t, get_ref, private_key_t*,
* Implementation of gmp_rsa_private_key.get_ref. private_gmp_rsa_private_key_t *this)
*/
static private_gmp_rsa_private_key_t* get_ref(private_gmp_rsa_private_key_t *this)
{ {
ref_get(&this->ref); ref_get(&this->ref);
return this; return &this->public.key;
} }
/** METHOD(private_key_t, destroy, void,
* Implementation of gmp_rsa_private_key.destroy. private_gmp_rsa_private_key_t *this)
*/
static void destroy(private_gmp_rsa_private_key_t *this)
{ {
if (ref_put(&this->ref)) if (ref_put(&this->ref))
{ {
@@ -592,23 +556,25 @@ static status_t check(private_gmp_rsa_private_key_t *this)
*/ */
static private_gmp_rsa_private_key_t *gmp_rsa_private_key_create_empty(void) static private_gmp_rsa_private_key_t *gmp_rsa_private_key_create_empty(void)
{ {
private_gmp_rsa_private_key_t *this = malloc_thing(private_gmp_rsa_private_key_t); private_gmp_rsa_private_key_t *this;
this->public.interface.get_type = (key_type_t (*) (private_key_t*))get_type;
this->public.interface.sign = (bool (*) (private_key_t*, signature_scheme_t, chunk_t, chunk_t*))sign;
this->public.interface.decrypt = (bool (*) (private_key_t*, chunk_t, chunk_t*))decrypt;
this->public.interface.get_keysize = (size_t (*) (private_key_t*))get_keysize;
this->public.interface.get_public_key = (public_key_t* (*) (private_key_t*))get_public_key;
this->public.interface.equals = (bool (*) (private_key_t*, private_key_t*))equals;
this->public.interface.belongs_to = (bool (*) (private_key_t*, public_key_t*))belongs_to;
this->public.interface.get_fingerprint = (bool(*)(private_key_t*, cred_encoding_type_t type, chunk_t *fp))get_fingerprint;
this->public.interface.has_fingerprint = (bool(*)(private_key_t*, chunk_t fp))private_key_has_fingerprint;
this->public.interface.get_encoding = (bool(*)(private_key_t*, cred_encoding_type_t type, chunk_t *encoding))get_encoding;
this->public.interface.get_ref = (private_key_t* (*) (private_key_t*))get_ref;
this->public.interface.destroy = (void (*) (private_key_t*))destroy;
this->ref = 1;
INIT(this,
.public.key = {
.get_type = _get_type,
.sign = _sign,
.decrypt = _decrypt,
.get_keysize = _get_keysize,
.get_public_key = _get_public_key,
.equals = private_key_equals,
.belongs_to = private_key_belongs_to,
.get_fingerprint = _get_fingerprint,
.has_fingerprint = private_key_has_fingerprint,
.get_encoding = _get_encoding,
.get_ref = _get_ref,
.destroy = _destroy,
},
.ref = 1,
);
return this; return this;
} }
@@ -34,7 +34,7 @@ struct gmp_rsa_private_key_t {
/** /**
* Implements private_key_t interface * Implements private_key_t interface
*/ */
private_key_t interface; private_key_t key;
}; };
/** /**
@@ -273,19 +273,15 @@ end:
return success; return success;
} }
/** METHOD(public_key_t, get_type, key_type_t,
* Implementation of public_key_t.get_type. private_gmp_rsa_public_key_t *this)
*/
static key_type_t get_type(private_gmp_rsa_public_key_t *this)
{ {
return KEY_RSA; return KEY_RSA;
} }
/** METHOD(public_key_t, verify, bool,
* Implementation of public_key_t.verify. private_gmp_rsa_public_key_t *this, signature_scheme_t scheme,
*/ chunk_t data, chunk_t signature)
static bool verify(private_gmp_rsa_public_key_t *this, signature_scheme_t scheme,
chunk_t data, chunk_t signature)
{ {
switch (scheme) switch (scheme)
{ {
@@ -312,11 +308,8 @@ static bool verify(private_gmp_rsa_public_key_t *this, signature_scheme_t scheme
#define MIN_PS_PADDING 8 #define MIN_PS_PADDING 8
/** METHOD(public_key_t, encrypt_, bool,
* Implementation of public_key_t.encrypt. private_gmp_rsa_public_key_t *this, chunk_t plain, chunk_t *crypto)
*/
static bool encrypt_(private_gmp_rsa_public_key_t *this, chunk_t plain,
chunk_t *crypto)
{ {
chunk_t em; chunk_t em;
u_char *pos; u_char *pos;
@@ -376,27 +369,15 @@ static bool encrypt_(private_gmp_rsa_public_key_t *this, chunk_t plain,
return TRUE; return TRUE;
} }
/** METHOD(public_key_t, get_keysize, size_t,
* Implementation of gmp_rsa_public_key.equals. private_gmp_rsa_public_key_t *this)
*/
static bool equals(private_gmp_rsa_public_key_t *this, public_key_t *other)
{
return public_key_equals(&this->public.interface, other);
}
/**
* Implementation of public_key_t.get_keysize.
*/
static size_t get_keysize(private_gmp_rsa_public_key_t *this)
{ {
return this->k; return this->k;
} }
/** METHOD(public_key_t, get_encoding, bool,
* Implementation of public_key_t.get_encoding private_gmp_rsa_public_key_t *this, cred_encoding_type_t type,
*/ chunk_t *encoding)
static bool get_encoding(private_gmp_rsa_public_key_t *this,
cred_encoding_type_t type, chunk_t *encoding)
{ {
chunk_t n, e; chunk_t n, e;
bool success; bool success;
@@ -412,11 +393,8 @@ static bool get_encoding(private_gmp_rsa_public_key_t *this,
return success; return success;
} }
/** METHOD(public_key_t, get_fingerprint, bool,
* Implementation of public_key_t.get_fingerprint private_gmp_rsa_public_key_t *this, cred_encoding_type_t type, chunk_t *fp)
*/
static bool get_fingerprint(private_gmp_rsa_public_key_t *this,
cred_encoding_type_t type, chunk_t *fp)
{ {
chunk_t n, e; chunk_t n, e;
bool success; bool success;
@@ -436,19 +414,15 @@ static bool get_fingerprint(private_gmp_rsa_public_key_t *this,
return success; return success;
} }
/** METHOD(public_key_t, get_ref, public_key_t*,
* Implementation of public_key_t.get_ref. private_gmp_rsa_public_key_t *this)
*/
static private_gmp_rsa_public_key_t* get_ref(private_gmp_rsa_public_key_t *this)
{ {
ref_get(&this->ref); ref_get(&this->ref);
return this; return &this->public.key;
} }
/** METHOD(public_key_t, destroy, void,
* Implementation of gmp_rsa_public_key.destroy. private_gmp_rsa_public_key_t *this)
*/
static void destroy(private_gmp_rsa_public_key_t *this)
{ {
if (ref_put(&this->ref)) if (ref_put(&this->ref))
{ {
@@ -490,20 +464,21 @@ gmp_rsa_public_key_t *gmp_rsa_public_key_load(key_type_t type, va_list args)
return NULL; return NULL;
} }
this = malloc_thing(private_gmp_rsa_public_key_t); INIT(this,
.public.key = {
this->public.interface.get_type = (key_type_t (*) (public_key_t*))get_type; .get_type = _get_type,
this->public.interface.verify = (bool (*) (public_key_t*, signature_scheme_t, chunk_t, chunk_t))verify; .verify = _verify,
this->public.interface.encrypt = (bool (*) (public_key_t*, chunk_t, chunk_t*))encrypt_; .encrypt = _encrypt_,
this->public.interface.equals = (bool (*) (public_key_t*, public_key_t*))equals; .equals = public_key_equals,
this->public.interface.get_keysize = (size_t (*) (public_key_t*))get_keysize; .get_keysize = _get_keysize,
this->public.interface.get_fingerprint = (bool(*)(public_key_t*, cred_encoding_type_t type, chunk_t *fp))get_fingerprint; .get_fingerprint = _get_fingerprint,
this->public.interface.has_fingerprint = (bool(*)(public_key_t*, chunk_t fp))public_key_has_fingerprint; .has_fingerprint = public_key_has_fingerprint,
this->public.interface.get_encoding = (bool(*)(public_key_t*, cred_encoding_type_t type, chunk_t *encoding))get_encoding; .get_encoding = _get_encoding,
this->public.interface.get_ref = (public_key_t* (*) (public_key_t *this))get_ref; .get_ref = _get_ref,
this->public.interface.destroy = (void (*) (public_key_t *this))destroy; .destroy = _destroy,
},
this->ref = 1; .ref = 1,
);
mpz_init(this->n); mpz_init(this->n);
mpz_init(this->e); mpz_init(this->e);
@@ -35,7 +35,7 @@ struct gmp_rsa_public_key_t {
/** /**
* Implements the public_key_t interface * Implements the public_key_t interface
*/ */
public_key_t interface; public_key_t key;
}; };
/** /**