Source File
impl.go
Belonging Package
crypto/internal/impl
// Copyright 2024 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 impl is a registry of alternative implementations of cryptographic// primitives, to allow selecting them for testing.package implimporttype implementation struct {Package stringName stringAvailable boolToggle *bool}var allImplementations []implementation// Register records an alternative implementation of a cryptographic primitive.// The implementation might be available or not based on CPU support. If// available is false, the implementation is unavailable and can't be tested on// this machine. If available is true, it can be set to false to disable the// implementation. If all alternative implementations but one are disabled, the// remaining one must be used (i.e. disabling one implementation must not// implicitly disable any other). Each package has an implicit base// implementation that is selected when all alternatives are unavailable or// disabled. pkg must be the package name, not path (e.g. "aes" not "crypto/aes").func (, string, *bool) {if strings.Contains(, "/") {panic("impl: package name must not contain slashes")}allImplementations = append(allImplementations, implementation{Package: ,Name: ,Available: *,Toggle: ,})}// List returns the names of all alternative implementations registered for the// given package, whether available or not. The implicit base implementation is// not included.func ( string) []string {var []stringfor , := range allImplementations {if .Package == {= append(, .Name)}}return}func (, string) bool {for , := range allImplementations {if .Package == && .Name == {return .Available}}panic("unknown implementation")}// Select disables all implementations for the given package except the one// with the given name. If name is empty, the base implementation is selected.// It returns whether the selected implementation is available.func (, string) bool {if == "" {for , := range allImplementations {if .Package == {*.Toggle = false}}return true}if !available(, ) {return false}for , := range allImplementations {if .Package == {*.Toggle = .Name ==}}return true}func ( string) {for , := range allImplementations {if .Package == {*.Toggle = .Availablereturn}}}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)