//ReadAttributeHeader read the header of the attributes. func ReadAttributeHeader(tcert *x509.Certificate, headerKey []byte) (map[string]int, bool, error) { var err error var headerRaw []byte encrypted := false if headerRaw, err = utils.GetCriticalExtension(tcert, TCertAttributesHeaders); err != nil { return nil, encrypted, err } headerStr := string(headerRaw) var header map[string]int header, err = ParseAttributesHeader(headerStr) if err != nil { if headerKey == nil { return nil, false, errors.New("Is not possible read an attribute encrypted without the headerKey") } headerRaw, err = DecryptAttributeValue(headerKey, headerRaw) if err != nil { return nil, encrypted, errors.New("error decrypting header value '" + err.Error() + "''") } headerStr = string(headerRaw) header, err = ParseAttributesHeader(headerStr) if err != nil { return nil, encrypted, err } encrypted = true } return header, encrypted, nil }
//ReadTCertAttributeByPosition read the attribute stored in the position "position" of the tcert. func ReadTCertAttributeByPosition(tcert *x509.Certificate, position int) ([]byte, error) { if position <= 0 { return nil, fmt.Errorf("Invalid attribute position. Received [%v]", position) } oid := asn1.ObjectIdentifier{1, 2, 3, 4, 5, 6, 9 + position} value, err := utils.GetCriticalExtension(tcert, oid) if err != nil { return nil, err } return value, nil }