const struct asn1_cursor *raw ) {
struct x509_public_key *public_key = &cert->subject.public_key;
struct asn1_algorithm **algorithm = &public_key->algorithm;
+ struct x509_bit_string *raw_bits = &public_key->raw_bits;
struct asn1_cursor cursor;
int rc;
memcpy ( &cursor, raw, sizeof ( cursor ) );
asn1_shrink_any ( &cursor );
memcpy ( &public_key->raw, &cursor, sizeof ( public_key->raw ) );
+ DBGC2 ( cert, "X509 %p public key is:\n", cert );
+ DBGC2_HDA ( cert, 0, public_key->raw.data, public_key->raw.len );
/* Enter subjectPublicKeyInfo */
asn1_enter ( &cursor, ASN1_SEQUENCE );
return rc;
DBGC2 ( cert, "X509 %p public key algorithm is %s\n",
cert, (*algorithm)->name );
- DBGC2 ( cert, "X509 %p public key is:\n", cert );
- DBGC2_HDA ( cert, 0, public_key->raw.data, public_key->raw.len );
+ asn1_skip_any ( &cursor );
+
+ /* Parse bit string */
+ if ( ( rc = x509_parse_bit_string ( cert, raw_bits, &cursor ) ) != 0 )
+ return rc;
return 0;
}
/** An X.509 certificate public key */
struct x509_public_key {
- /** Raw public key */
+ /** Raw public key information */
struct asn1_cursor raw;
/** Public key algorithm */
struct asn1_algorithm *algorithm;
+ /** Raw public key bit string */
+ struct x509_bit_string raw_bits;
};
/** An X.509 certificate subject */