# This file contains the X509 Certificate template
# used for attestation in U2F_REGISTER responses in
# the cr50 & u2fd U2F implementations.
#
# The file is in ASN1_generate_nconf format, and
# can be parsed/converted using openssl asn1parse.
#
# Placeholder values are included for serial,
# public key, and signature.
#
# To parse and output a text ASN1 representation:
# openssl asn1parse -genconf x509_tmpl.txt -i -dump
#
# To convert to DER:
# openssl asn1parse -genconf x509_tmpl.txt -out cert.der
#
# To view the converted certificate:
# openssl x509 -inform der -in cert.der -text
#
# To dump a C/C++ representation of the certificate:
# openssl x509 -inform der -in cert.der -C
#
# The certificate output by the above command is
# included at the bottom of this file.

### CERTIFICATE TEMPLATE START

asn1=SEQUENCE:outer_seq

[outer_seq]
body		= SEQUENCE:cert_body
signature_alg	= SEQUENCE:signature_alg
signature	= FORMAT:HEX, BITSTRING:00  # placeholder value

[cert_body]
x509_v3		= EXPLICIT:0C, INTEGER:2
serial		= INTEGER:1  # placeholder value, not set by u2fd
signature_alg	= SEQUENCE:signature_alg
issuer		= SEQUENCE:issuer
validity	= SEQUENCE:validity
subject		= SEQUENCE:issuer
pub_key		= SEQUENCE:public_key
# FIDO U2F certificate transports extension
u2f_ext		= EXPLICIT:3C, SEQUENCE:u2f_transport

[signature_alg]
alg		= OID:ecdsa-with-SHA256

[issuer]
name_wrapper	= SET:issuer_seq

[issuer_seq]
issuer_name	= SEQUENCE:issuer_name

[issuer_name]
name_oid	= OID:commonName
name		= PRINTABLESTRING:U2F

[validity]
from_date	= GENERALIZEDTIME:20000101000000Z
to_date		= GENERALIZEDTIME:20991231235959Z

[public_key]
params		= SEQUENCE:pubkey_params
pub_key		= FORMAT:HEX, BITSTRING:00  # placeholder value

[pubkey_params]
type		= OID:id-ecPublicKey
curve		= OID:prime256v1

[u2f_transport]
param		= SEQUENCE:u2f_transport_param

[u2f_transport_param]
# OID defined in "FIDO U2F Authenticator Transports Extension", Section 3.1
fido_oid	=	OID:1.3.6.1.4.1.45724.2.1.1
transport	=	FORMAT:HEX,OCT:03020308  # USB-internal

### CERTIFICATE TEMPLATE END

# Partial output from 'openssl x509 -inform der -in cert.der -C'
#
# unsigned char the_certificate[164] = {
#     0x30, 0x81, 0xA1, 0x30, 0x81, 0x8E, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
#     0x01, 0x00, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04,
#     0x03, 0x02, 0x30, 0x0F, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04,
#     0x03, 0x13, 0x04, 0x63, 0x72, 0x35, 0x30, 0x30, 0x22, 0x18, 0x0F, 0x32,
#     0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30,
#     0x30, 0x5A, 0x18, 0x0F, 0x32, 0x30, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31,
#     0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x0F, 0x31, 0x0D, 0x30,
#     0x0B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x04, 0x63, 0x72, 0x35, 0x30,
#     0x30, 0x19, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
#     0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03,
#     0x02, 0x00, 0x00, 0xA3, 0x17, 0x30, 0x15, 0x30, 0x13, 0x06, 0x0B, 0x2B,
#     0x06, 0x01, 0x04, 0x01, 0x82, 0xE5, 0x1C, 0x02, 0x01, 0x01, 0x04, 0x04,
#     0x03, 0x02, 0x03, 0x08, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
#     0x3D, 0x04, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00,
# };
