aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/plugins
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-11-27 17:10:23 +0100
committerMartin Willi <martin@revosec.ch>2012-12-19 10:32:08 +0100
commitd3d706f4fc7119c40bbc1a7941264c80f6b6e3b9 (patch)
treecc421795256259d5b3d67a2f9da74419a8c22bdf /src/libstrongswan/plugins
parent5a50bec9d2c07d28450ecb29cb330854ef8d3e85 (diff)
downloadstrongswan-d3d706f4fc7119c40bbc1a7941264c80f6b6e3b9.tar.bz2
strongswan-d3d706f4fc7119c40bbc1a7941264c80f6b6e3b9.tar.xz
Add a getter for signed PKCS#7 attributes
Diffstat (limited to 'src/libstrongswan/plugins')
-rw-r--r--src/libstrongswan/plugins/pkcs7/pkcs7_data.c1
-rw-r--r--src/libstrongswan/plugins/pkcs7/pkcs7_enveloped_data.c1
-rw-r--r--src/libstrongswan/plugins/pkcs7/pkcs7_signed_data.c24
3 files changed, 26 insertions, 0 deletions
diff --git a/src/libstrongswan/plugins/pkcs7/pkcs7_data.c b/src/libstrongswan/plugins/pkcs7/pkcs7_data.c
index 5f0ab10f4..d0e7e1c75 100644
--- a/src/libstrongswan/plugins/pkcs7/pkcs7_data.c
+++ b/src/libstrongswan/plugins/pkcs7/pkcs7_data.c
@@ -98,6 +98,7 @@ static private_pkcs7_data_t* create_empty()
.get_encoding = _get_encoding,
.destroy = _destroy,
},
+ .get_attribute = (void*)return_false,
},
);
diff --git a/src/libstrongswan/plugins/pkcs7/pkcs7_enveloped_data.c b/src/libstrongswan/plugins/pkcs7/pkcs7_enveloped_data.c
index 652769a8f..d9bff41e5 100644
--- a/src/libstrongswan/plugins/pkcs7/pkcs7_enveloped_data.c
+++ b/src/libstrongswan/plugins/pkcs7/pkcs7_enveloped_data.c
@@ -380,6 +380,7 @@ static private_pkcs7_enveloped_data_t* create_empty()
.get_encoding = _get_encoding,
.destroy = _destroy,
},
+ .get_attribute = (void*)return_false,
},
);
diff --git a/src/libstrongswan/plugins/pkcs7/pkcs7_signed_data.c b/src/libstrongswan/plugins/pkcs7/pkcs7_signed_data.c
index dd9561133..5ec5684f4 100644
--- a/src/libstrongswan/plugins/pkcs7/pkcs7_signed_data.c
+++ b/src/libstrongswan/plugins/pkcs7/pkcs7_signed_data.c
@@ -172,6 +172,8 @@ typedef struct {
enumerator_t *inner;
/** currently enumerated auth_cfg */
auth_cfg_t *auth;
+ /** currently enumerating signerinfo */
+ signerinfo_t *info;
/** reference to container */
private_pkcs7_signed_data_t *this;
} signature_enumerator_t;
@@ -275,8 +277,10 @@ METHOD(enumerator_t, enumerate, bool,
continue;
}
*out = this->auth;
+ this->info = info;
return TRUE;
}
+ this->info = NULL;
return FALSE;
}
@@ -307,6 +311,25 @@ METHOD(container_t, create_signature_enumerator, enumerator_t*,
return &enumerator->public;
}
+METHOD(pkcs7_t, get_attribute, bool,
+ private_pkcs7_signed_data_t *this, int oid, enumerator_t *enumerator, chunk_t *value)
+{
+ signature_enumerator_t *e;
+ chunk_t chunk;
+
+ e = (signature_enumerator_t*)enumerator;
+ if (e->info)
+ {
+ chunk = e->info->attributes->get_attribute(e->info->attributes, oid);
+ if (chunk.len)
+ {
+ *value = chunk;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
METHOD(container_t, get_data, bool,
private_pkcs7_signed_data_t *this, chunk_t *data)
{
@@ -351,6 +374,7 @@ static private_pkcs7_signed_data_t* create_empty()
.get_encoding = _get_encoding,
.destroy = _destroy,
},
+ .get_attribute = _get_attribute,
},
.creds = mem_cred_create(),
.signerinfos = linked_list_create(),