diff options
author | Martin Willi <martin@strongswan.org> | 2008-05-06 12:56:36 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-05-06 12:56:36 +0000 |
commit | c963c4bc15c951f62a1c76dfb3dc2c841ecfd09c (patch) | |
tree | 4630110ec8eb467fb32ec06d8ceb4f38efa721d4 /src | |
parent | ff6836716c1bacbca74bce6965a11523d35fab66 (diff) | |
download | strongswan-c963c4bc15c951f62a1c76dfb3dc2c841ecfd09c.tar.bz2 strongswan-c963c4bc15c951f62a1c76dfb3dc2c841ecfd09c.tar.xz |
fixed parsing of openssl format public keys
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/plugins/gmp/gmp_public_key.c | 12 | ||||
-rw-r--r-- | src/libstrongswan/plugins/x509/x509_cert.c | 29 |
2 files changed, 18 insertions, 23 deletions
diff --git a/src/libstrongswan/plugins/gmp/gmp_public_key.c b/src/libstrongswan/plugins/gmp/gmp_public_key.c index 37a079ae3..4105f58be 100644 --- a/src/libstrongswan/plugins/gmp/gmp_public_key.c +++ b/src/libstrongswan/plugins/gmp/gmp_public_key.c @@ -29,7 +29,7 @@ static const asn1Object_t pkinfoObjects[] = { { 0, "subjectPublicKeyInfo",ASN1_SEQUENCE, ASN1_NONE }, /* 0 */ { 1, "algorithm", ASN1_EOC, ASN1_RAW }, /* 1 */ - { 1, "subjectPublicKey", ASN1_BIT_STRING, ASN1_OBJ }, /* 2 */ + { 1, "subjectPublicKey", ASN1_BIT_STRING, ASN1_BODY }, /* 2 */ { 0, "exit", ASN1_EOC, ASN1_EXIT } }; #define PKINFO_SUBJECT_PUBLIC_KEY_ALGORITHM 1 @@ -73,13 +73,11 @@ static public_key_t *load(chunk_t blob) if (object.len > 0 && *object.ptr == 0x00) { /* skip initial bit string octet defining 0 unused bits */ - object.ptr++; - object.len--; - key = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, type, - BUILD_BLOB_ASN1_DER, - chunk_clone(object), - BUILD_END); + object = chunk_skip(object, 1); } + key = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, type, + BUILD_BLOB_ASN1_DER, chunk_clone(object), + BUILD_END); break; } } diff --git a/src/libstrongswan/plugins/x509/x509_cert.c b/src/libstrongswan/plugins/x509/x509_cert.c index 79c1678b3..ff176b710 100644 --- a/src/libstrongswan/plugins/x509/x509_cert.c +++ b/src/libstrongswan/plugins/x509/x509_cert.c @@ -731,22 +731,19 @@ static bool parse_certificate(private_x509_cert_t *this) if (object.len > 0 && *object.ptr == 0x00) { /* skip initial bit string octet defining 0 unused bits */ - object.ptr++; - object.len--; - - switch (key_alg) - { - case OID_RSA_ENCRYPTION: - this->public_key = lib->creds->create(lib->creds, - CRED_PUBLIC_KEY, KEY_RSA, - BUILD_BLOB_ASN1_DER, - chunk_clone(object), - BUILD_END); - break; - default: - DBG1("parsing key type %d failed", key_alg); - goto end; - } + object = chunk_skip(object, 1); + } + switch (key_alg) + { + case OID_RSA_ENCRYPTION: + this->public_key = lib->creds->create(lib->creds, + CRED_PUBLIC_KEY, KEY_RSA, + BUILD_BLOB_ASN1_DER, chunk_clone(object), + BUILD_END); + break; + default: + DBG1("parsing key type %d failed", key_alg); + goto end; } break; case X509_OBJ_EXTN_ID: |