Spec-Zone.ru › Go

Пакет subtle

  • import "crypto/subtle"
  • Обзор
  • Указатель

Обзор

Пакет subtle реализует функции, которые часто полезны в криптографическом коде, но требуют тщательного обдумывания для правильного использования.

Указатель

  • func ConstantTimeByteEq(x, y uint8) int
  • func ConstantTimeCompare(x, y []byte) int
  • func ConstantTimeCopy(v int, x, y []byte)
  • func ConstantTimeEq(x, y int32) int
  • func ConstantTimeLessOrEq(x, y int) int
  • func ConstantTimeSelect(v, x, y int) int
  • func WithDataIndependentTiming(f func())
  • func XORBytes(dst, x, y []byte) int

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API