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 fips140cacheimport ()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.9-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. |