MCPcopy Index your code
hub / github.com/XTLS/REALITY / newCert

Method newCert

cache.go:19–42  ·  view source on GitHub ↗
(der []byte)

Source from the content-addressed store, hash-verified

17type weakCertCache struct{ sync.Map }
18
19func (wcc *weakCertCache) newCert(der []byte) (*x509.Certificate, error) {
20 if entry, ok := wcc.Load(string(der)); ok {
21 if v := entry.(weak.Pointer[x509.Certificate]).Value(); v != nil {
22 return v, nil
23 }
24 }
25
26 cert, err := x509.ParseCertificate(der)
27 if err != nil {
28 return nil, err
29 }
30
31 wp := weak.Make(cert)
32 if entry, loaded := wcc.LoadOrStore(string(der), wp); !loaded {
33 runtime.AddCleanup(cert, func(_ any) { wcc.CompareAndDelete(string(der), entry) }, any(string(der)))
34 } else if v := entry.(weak.Pointer[x509.Certificate]).Value(); v != nil {
35 return v, nil
36 } else {
37 if wcc.CompareAndSwap(string(der), entry, wp) {
38 runtime.AddCleanup(cert, func(_ any) { wcc.CompareAndDelete(string(der), wp) }, any(string(der)))
39 }
40 }
41 return cert, nil
42}
43
44var globalCertCache = new(weakCertCache)

Callers 2

ParseSessionStateFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected