func (self *X509Name) Print() ([]byte, error) { bio := C.BIO_new(C.BIO_s_mem()) defer C.BIO_free(bio) //TODO check for error here C.X509_NAME_print_ex(bio, self.Name, 0, C.XN_FLAG_MULTILINE) var temp *C.char buf_len := C.BIO_ctrl(bio, C.BIO_CTRL_INFO, 0, unsafe.Pointer(&temp)) return C.GoBytes(unsafe.Pointer(temp), C.int(buf_len)), nil }
func (c *Certificate) X509NamePrintEx() (out []byte, err error) { bio := C.BIO_new(C.BIO_s_mem()) if bio == nil { return nil, errors.New("failed to allocate memory BIO") } defer C.BIO_free(bio) name := C.X509_get_subject_name(c.x) // TODO, pass in flags instead of using this hardcoded one if int(C.X509_NAME_print_ex(bio, name, 0, C.XN_FLAG_RFC2253)) < 0 { return nil, errors.New("failed formatting subject") } return ioutil.ReadAll(asAnyBio(bio)) }