func NewEVInfo()

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
}