Пакет 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 эти особенности отключаются.
WithDataIndependentTiming следует использовать только тогда, когда f написана для использования постоянных операций. WithDataIndependentTiming не делает переменное время кода постоянным.
WithDataIndependentTiming может заблокировать текущий сопроцесс в потоке ОС на время выполнения f. Вызовы 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/