in go/rootprogram/issuers.go [179:217]
func (mi *MozIssuers) SaveIssuersList(filePath string) error {
mi.mutex.Lock()
defer mi.mutex.Unlock()
certCount := 0
issuers := make([]EnrolledIssuer, 0, len(mi.issuerMap))
for _, val := range mi.issuerMap {
for _, cert := range val.certs {
pubKeyHash := sha256.Sum256(cert.cert.RawSubjectPublicKeyInfo)
uniqueID := sha256.Sum256(append(cert.cert.RawSubject, cert.cert.RawSubjectPublicKeyInfo...))
issuers = append(issuers, EnrolledIssuer{
UniqueID: base64.URLEncoding.EncodeToString(uniqueID[:]),
PubKeyHash: base64.URLEncoding.EncodeToString(pubKeyHash[:]),
Subject: cert.subjectDN,
Pem: normalizePem(cert.pemInfo),
})
certCount++
}
}
glog.Infof("Saving %d issuers and %d certs", len(mi.issuerMap), certCount)
fd, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
glog.Errorf("Error opening enrolled issuer %s: %s", filePath, err)
return err
}
enc := json.NewEncoder(fd)
if err := enc.Encode(issuers); err != nil {
glog.Errorf("Error marshaling enrolled issuer %s: %s", filePath, err)
}
if err = fd.Close(); err != nil {
glog.Errorf("Error storing enrolled issuer %s: %s", filePath, err)
}
return err
}