mirror of https://github.com/ipxe/ipxe.git
[crypto] Parse X.509 certificate serial number
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/6/head
parent
d56499ab18
commit
c285378388
|
@ -391,6 +391,31 @@ static int x509_parse_version ( struct x509_certificate *cert,
|
||||||
return 0;
|
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
|
* Parse X.509 certificate issuer
|
||||||
*
|
*
|
||||||
|
@ -818,8 +843,10 @@ static int x509_parse_tbscertificate ( struct x509_certificate *cert,
|
||||||
asn1_skip_any ( &cursor );
|
asn1_skip_any ( &cursor );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip serialNumber */
|
/* Parse serialNumber */
|
||||||
asn1_skip ( &cursor, ASN1_INTEGER );
|
if ( ( rc = x509_parse_serial ( cert, &cursor ) ) != 0 )
|
||||||
|
return rc;
|
||||||
|
asn1_skip_any ( &cursor );
|
||||||
|
|
||||||
/* Parse signature */
|
/* Parse signature */
|
||||||
if ( ( rc = x509_parse_signature_algorithm ( cert, algorithm,
|
if ( ( rc = x509_parse_signature_algorithm ( cert, algorithm,
|
||||||
|
|
|
@ -24,6 +24,12 @@ struct x509_bit_string {
|
||||||
unsigned int unused;
|
unsigned int unused;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** An X.509 serial number */
|
||||||
|
struct x509_serial {
|
||||||
|
/** Raw serial number */
|
||||||
|
struct asn1_cursor raw;
|
||||||
|
};
|
||||||
|
|
||||||
/** An X.509 issuer */
|
/** An X.509 issuer */
|
||||||
struct x509_issuer {
|
struct x509_issuer {
|
||||||
/** Raw issuer */
|
/** Raw issuer */
|
||||||
|
@ -121,6 +127,8 @@ struct x509_certificate {
|
||||||
struct asn1_cursor raw;
|
struct asn1_cursor raw;
|
||||||
/** Version */
|
/** Version */
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
|
/** Serial number */
|
||||||
|
struct x509_serial serial;
|
||||||
/** Raw tbsCertificate */
|
/** Raw tbsCertificate */
|
||||||
struct asn1_cursor tbs;
|
struct asn1_cursor tbs;
|
||||||
/** Signature algorithm */
|
/** Signature algorithm */
|
||||||
|
|
Loading…
Reference in New Issue