in EVChecker/main.go [113:167]
func NewEVInfo(r io.RuneReader) (*EVInfo, error) {
dottedOid, err := extractStringField(r)
if err != nil {
return nil, err
}
oidName, err := extractStringField(r)
if err != nil {
return nil, err
}
fp, err := extractFingerprint(r)
if err != nil {
return nil, err
}
issuer, err := extractStringField(r)
if err != nil {
return nil, err
}
issuer, err = decodeIssuer(issuer)
if err != nil {
return nil, err
}
serial, err := extractStringField(r)
if err != nil {
return nil, err
}
s, err := base64.StdEncoding.DecodeString(serial)
if err != nil {
return nil, err
}
// hex Serial number left padded with 0
serial = fmt.Sprintf("%032X", s)
brace, err := consumeWhiteSpace(r)
if err != nil {
return nil, err
}
if brace != '}' {
return nil, errors.New(fmt.Sprintf("expected a closing brace for an EVInfo boundary, but got %s", string(brace)))
}
comma, err := consumeWhiteSpace(r)
if err != nil {
return nil, errors.Wrap(err, "failed to consume the delimiting comma between EVInfos")
}
// consume up to the , that delimits struct literal fields.
// This does not in any way honor the final field omitting this comma.
if comma != ',' {
return nil, errors.New(fmt.Sprintf(`expected the character "," while decoding the delimiter for an EVInfo array, got "%s"`, string(comma)))
}
return &EVInfo{
DottedOID: dottedOid,
OIDName: oidName,
SHA256Fingerprint: fp,
Issuer: issuer,
Serial: serial,
}, nil
}