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 impl
import
type implementation struct {
Package string
Name string
Available bool
Toggle *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 []string
for , := 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 = .Available
return
}
}
}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)