This repository has been archived by the owner on Jul 8, 2021. It is now read-only.
/
json.go
115 lines (105 loc) · 2.99 KB
/
json.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package pkix
import (
"encoding/json"
"github.com/zmap/zgrab/ztools/zson"
)
type jsonName struct {
CommonName zson.StringOrArray
SerialNumber zson.StringOrArray
Country zson.StringOrArray
Locality zson.StringOrArray
Province zson.StringOrArray
StreetAddress zson.StringOrArray
Organization zson.StringOrArray
OrganizationalUnit zson.StringOrArray
PostalCode zson.StringOrArray
UnknownAttributes []AttributeTypeAndValue
}
func (jn *jsonName) MarshalJSON() ([]byte, error) {
enc := make(map[string]interface{})
if !jn.CommonName.Empty() {
enc["common_name"] = jn.CommonName
}
if !jn.SerialNumber.Empty() {
enc["serial_number"] = jn.SerialNumber
}
if !jn.Country.Empty() {
enc["country"] = jn.Country
}
if !jn.Locality.Empty() {
enc["locality"] = jn.Locality
}
if !jn.Province.Empty() {
enc["province"] = jn.Province
}
if !jn.StreetAddress.Empty() {
enc["street_address"] = jn.StreetAddress
}
if !jn.Organization.Empty() {
enc["organization"] = jn.Organization
}
if !jn.OrganizationalUnit.Empty() {
enc["organizational_unit"] = jn.OrganizationalUnit
}
if !jn.PostalCode.Empty() {
enc["postal_code"] = jn.PostalCode
}
for _, a := range jn.UnknownAttributes {
enc[a.Type.String()] = a.Value
}
return json.Marshal(enc)
}
type jsonAttributeTypeAndValue struct {
Type string `json:"type"`
Value interface{} `json:"value"`
}
func (a *AttributeTypeAndValue) MarshalJSON() ([]byte, error) {
var enc jsonAttributeTypeAndValue
enc.Type = a.Type.String()
enc.Value = a.Value
return json.Marshal(&enc)
}
type jsonExtension struct {
Id string `json:"id"`
Critical bool `json:"critical"`
Value []byte `json:"value"`
}
func (e *Extension) MarshalJSON() ([]byte, error) {
ext := jsonExtension{
Id: e.Id.String(),
Critical: e.Critical,
Value: e.Value,
}
return json.Marshal(ext)
}
func (n *Name) MarshalJSON() ([]byte, error) {
var enc jsonName
attrs := n.ToRDNSequence()
for _, attrSet := range attrs {
for _, a := range attrSet {
s, _ := a.Value.(string)
if a.Type.Equal(oidCommonName) {
enc.CommonName = append(enc.CommonName, s)
} else if a.Type.Equal(oidSerialNumber) {
enc.SerialNumber = append(enc.SerialNumber, s)
} else if a.Type.Equal(oidCountry) {
enc.Country = append(enc.Country, s)
} else if a.Type.Equal(oidLocality) {
enc.Locality = append(enc.Locality, s)
} else if a.Type.Equal(oidProvince) {
enc.Province = append(enc.Province, s)
} else if a.Type.Equal(oidStreetAddress) {
enc.StreetAddress = append(enc.StreetAddress, s)
} else if a.Type.Equal(oidOrganization) {
enc.Organization = append(enc.Organization, s)
} else if a.Type.Equal(oidOrganizationalUnit) {
enc.OrganizationalUnit = append(enc.OrganizationalUnit, s)
} else if a.Type.Equal(oidPostalCode) {
enc.PostalCode = append(enc.PostalCode, s)
} else {
enc.UnknownAttributes = append(enc.UnknownAttributes, a)
}
}
}
return json.Marshal(&enc)
}