Пакет subtle
Обзор
Пакет subtle реализует функции, которые часто полезны в криптографическом коде, но требуют тщательного обдумывания для правильного использования.
Указатель
Файлы пакета
constant_time.go dit.go xor.go
func ConstantTimeByteEq
func ConstantTimeByteEq(x, y uint8) int
ConstantTimeByteEq возвращает 1, если x == y, и 0 в противном случае.
func ConstantTimeCompare
func ConstantTimeCompare(x, y []byte) int
ConstantTimeCompare возвращает 1, если содержимое двух срезов, x и y, совпадает, и 0 в противном случае. Затрачиваемое время зависит от длины срезов и не зависит от их содержимого. Если длины x и y не совпадают, функция немедленно возвращает 0.
func ConstantTimeCopy
func ConstantTimeCopy(v int, x, y []byte)
ConstantTimeCopy копирует содержимое y в x (срез той же длины), если v == 1. Если v == 0, x остаётся без изменений. Поведение не определено, если v принимает любое другое значение.
func ConstantTimeEq
func ConstantTimeEq(x, y int32) int
ConstantTimeEq возвращает 1, если x == y, и 0 в противном случае.
func ConstantTimeLessOrEq 1.2
func ConstantTimeLessOrEq(x, y int) int
ConstantTimeLessOrEq возвращает 1, если x <= y, и 0 в противном случае. Поведение не определено, если x или y отрицательны либо > 2**31 - 1.
func ConstantTimeSelect
func ConstantTimeSelect(v, x, y int) int
ConstantTimeSelect возвращает x, если v == 1, и y, если v == 0. Поведение не определено, если v принимает любое другое значение.
func WithDataIndependentTiming 1.24
func WithDataIndependentTiming(f func())
WithDataIndependentTiming включает специфичные для архитектуры функции, которые гарантируют независимость времени выполнения определённых инструкций от их входных данных, а затем выполняет f. После возврата из f эти функции отключаются.
Для любой горутины, созданной функцией f, на протяжении всего её времени жизни также будет включён режим независимого от данных времени выполнения, как и для всех её дочерних горутин.
Для любого кода C, вызываемого через cgo из f или из созданной f горутины, режим независимого от данных времени выполнения также будет включён на время вызова. Если код C отключит этот режим, он будет включён повторно при возврате в Go.
Если код C, вызываемый через cgo из f или из другого места, включает или отключает режим независимого от данных времени выполнения, то при вызове Go это состояние сохраняется на время вызова.
WithDataIndependentTiming следует использовать только тогда, когда f написана с расчётом на применение операций с постоянным временем выполнения. WithDataIndependentTiming не превращает код с переменным временем выполнения в код с постоянным временем выполнения.
Вызовы WithDataIndependentTiming могут быть вложенными.
На процессорах Arm64 с FEAT_DIT функция WithDataIndependentTiming включает PSTATE.DIT. См. https://developer.arm.com/documentation/ka005181/1-0/?lang=en.
В настоящее время на всех остальных архитектурах WithDataIndependentTiming немедленно выполняет f без каких-либо побочных эффектов.
func XORBytes 1.20
func XORBytes(dst, x, y []byte) int
XORBytes задаёт dst[i] = x[i] ^ y[i] для всех i < n = min(len(x), len(y)) и возвращает n — количество байтов, записанных в dst.
Если длина dst меньше n, XORBytes вызывает панику, не записывая ничего в dst.
dst и x или y могут полностью перекрываться либо не перекрываться вовсе; в противном случае XORBytes может вызвать панику.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/subtle/