[gcr/ecc: 4/12] egg: Refactor out USG parsing into egg_asn1x_data_to_usg()
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcr/ecc: 4/12] egg: Refactor out USG parsing into egg_asn1x_data_to_usg()
- Date: Thu, 17 Apr 2014 18:25:34 +0000 (UTC)
commit d319cd0a57d7669e4fb65e85f92f51d195bf561a
Author: Stef Walter <stefw redhat com>
Date: Thu Apr 17 07:09:34 2014 +0200
egg: Refactor out USG parsing into egg_asn1x_data_to_usg()
This is because EC keys have integers encoded as bit strings
rather than numbers
egg/egg-asn1x.c | 34 ++++++++++++++++++++++------------
egg/egg-asn1x.h | 3 +++
2 files changed, 25 insertions(+), 12 deletions(-)
---
diff --git a/egg/egg-asn1x.c b/egg/egg-asn1x.c
index 0daf2ef..55135be 100644
--- a/egg/egg-asn1x.c
+++ b/egg/egg-asn1x.c
@@ -2910,23 +2910,18 @@ egg_asn1x_get_integer_as_raw (GNode *node)
}
GBytes *
-egg_asn1x_get_integer_as_usg (GNode *node)
+egg_asn1x_data_to_usg (GBytes *data,
+ gboolean already_unsigned)
{
- const guchar *p;
- Anode *an;
+ const guint8 *p;
gboolean sign;
gsize len;
- g_return_val_if_fail (node != NULL, FALSE);
- g_return_val_if_fail (anode_def_type (node) == EGG_ASN1X_INTEGER, FALSE);
-
- an = node->data;
- if (an->value == NULL)
- return NULL;
+ g_return_val_if_fail (data != NULL, NULL);
- p = g_bytes_get_data (an->value, &len);
+ p = g_bytes_get_data (data, &len);
- if (!an->guarantee_unsigned) {
+ if (!already_unsigned) {
sign = !!(p[0] & 0x80);
if (sign) {
g_warning ("invalid two's complement integer"); /* UNREACHABLE: */
@@ -2945,7 +2940,22 @@ egg_asn1x_get_integer_as_usg (GNode *node)
return g_bytes_new_with_free_func (p, len,
(GDestroyNotify)g_bytes_unref,
- g_bytes_ref (an->value));
+ g_bytes_ref (data));
+}
+
+GBytes *
+egg_asn1x_get_integer_as_usg (GNode *node)
+{
+ Anode *an;
+
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (anode_def_type (node) == EGG_ASN1X_INTEGER, NULL);
+
+ an = node->data;
+ if (an->value == NULL)
+ return NULL;
+
+ return egg_asn1x_data_to_usg (an->value, an->guarantee_unsigned);
}
void
diff --git a/egg/egg-asn1x.h b/egg/egg-asn1x.h
index 0cda783..04e5fea 100644
--- a/egg/egg-asn1x.h
+++ b/egg/egg-asn1x.h
@@ -265,6 +265,9 @@ gconstpointer egg_asn1x_element_content (const guchar *data,
gsize n_data,
gsize *n_content);
+GBytes * egg_asn1x_data_to_usg (GBytes *data,
+ gboolean already_unsigned);
+
#define egg_asn1x_assert(expr, node) \
do { if G_LIKELY(expr) ; else \
g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]