Skip to content

Commit

Permalink
[crypto] Parse X.509 certificate serial number
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Mar 22, 2012
1 parent d56499a commit c285378
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
31 changes: 29 additions & 2 deletions src/crypto/x509.c
Expand Up @@ -391,6 +391,31 @@ static int x509_parse_version ( struct x509_certificate *cert,
return 0;
}

/**
* Parse X.509 certificate serial number
*
* @v cert X.509 certificate
* @v raw ASN.1 cursor
* @ret rc Return status code
*/
static int x509_parse_serial ( struct x509_certificate *cert,
const struct asn1_cursor *raw ) {
struct x509_serial *serial = &cert->serial;
int rc;

/* Record raw serial number */
memcpy ( &serial->raw, raw, sizeof ( serial->raw ) );
if ( ( rc = asn1_shrink ( &serial->raw, ASN1_INTEGER ) ) != 0 ) {
DBGC ( cert, "X509 %p cannot shrink serialNumber: %s\n",
cert, strerror ( rc ) );
return rc;
}
DBGC ( cert, "X509 %p issuer is:\n", cert );
DBGC_HDA ( cert, 0, serial->raw.data, serial->raw.len );

return 0;
}

/**
* Parse X.509 certificate issuer
*
Expand Down Expand Up @@ -818,8 +843,10 @@ static int x509_parse_tbscertificate ( struct x509_certificate *cert,
asn1_skip_any ( &cursor );
}

/* Skip serialNumber */
asn1_skip ( &cursor, ASN1_INTEGER );
/* Parse serialNumber */
if ( ( rc = x509_parse_serial ( cert, &cursor ) ) != 0 )
return rc;
asn1_skip_any ( &cursor );

/* Parse signature */
if ( ( rc = x509_parse_signature_algorithm ( cert, algorithm,
Expand Down
8 changes: 8 additions & 0 deletions src/include/ipxe/x509.h
Expand Up @@ -24,6 +24,12 @@ struct x509_bit_string {
unsigned int unused;
};

/** An X.509 serial number */
struct x509_serial {
/** Raw serial number */
struct asn1_cursor raw;
};

/** An X.509 issuer */
struct x509_issuer {
/** Raw issuer */
Expand Down Expand Up @@ -121,6 +127,8 @@ struct x509_certificate {
struct asn1_cursor raw;
/** Version */
unsigned int version;
/** Serial number */
struct x509_serial serial;
/** Raw tbsCertificate */
struct asn1_cursor tbs;
/** Signature algorithm */
Expand Down

0 comments on commit c285378

Please sign in to comment.