Source File
cache.go
Belonging Package
crypto/internal/fips140cache
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package fips140cache provides a weak map that associates the lifetime of
// values with the lifetime of keys.
//
// It can be used to associate a precomputed value (such as an internal/fips140
// PrivateKey value, which in FIPS 140-3 mode may have required an expensive
// pairwise consistency test) with a type that doesn't have private fields (such
// as an ed25519.PrivateKey), or that can't be safely modified because it may be
// concurrently copied (such as an ecdsa.PrivateKey).
package fips140cache
import (
)
type Cache[, any] struct {
m sync.Map
}
// Get returns the result of new, for an associated key k.
//
// If Get was called with k before and didn't return an error, Get may return
// the same value it returned from the previous call if check returns true on
// it. If check returns false, Get will call new again and return the result.
//
// The cache is evicted some time after k becomes unreachable.
func ( *Cache[, ]) ( *, func() (*, error), func(*) bool) (*, error) {
:= weak.Make()
if , := .m.Load(); {
:= .(*)
if () {
return , nil
}
}
, := ()
if != nil {
return nil,
}
if , := .m.Swap(, ); ! {
runtime.AddCleanup(, .evict, )
}
return , nil
}
func ( *Cache[, ]) ( weak.Pointer[]) {
.m.Delete()
}
![]() |
The pages are generated with Golds v0.7.7-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |