PrincipalName.go 1014 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package types
  2. import "strings"
  3. // Reference: https://www.ietf.org/rfc/rfc4120.txt
  4. // Section: 5.2.2
  5. // PrincipalName implements RFC 4120 type: https://tools.ietf.org/html/rfc4120#section-5.2.2
  6. type PrincipalName struct {
  7. NameType int `asn1:"explicit,tag:0"`
  8. NameString []string `asn1:"generalstring,explicit,tag:1"`
  9. }
  10. // GetSalt returns a salt derived from the PrincipalName.
  11. func (pn *PrincipalName) GetSalt(realm string) string {
  12. var sb []byte
  13. sb = append(sb, realm...)
  14. for _, n := range pn.NameString {
  15. sb = append(sb, n...)
  16. }
  17. return string(sb)
  18. }
  19. // Equal tests if the PrincipalName is equal to the one provided.
  20. func (pn *PrincipalName) Equal(n PrincipalName) bool {
  21. if n.NameType != pn.NameType {
  22. return false
  23. }
  24. for i, s := range pn.NameString {
  25. if n.NameString[i] != s {
  26. return false
  27. }
  28. }
  29. return true
  30. }
  31. // GetPrincipalNameString returns the PrincipalName in string form.
  32. func (pn *PrincipalName) GetPrincipalNameString() string {
  33. return strings.Join(pn.NameString, "/")
  34. }