Copyright 2009 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 subtle implements functions that are often useful in cryptographic code but require careful thought to use correctly.
package subtle
ConstantTimeCompare returns 1 if the two slices, x and y, have equal contents and 0 otherwise. The time taken is a function of the length of the slices and is independent of the contents.
func (,  []byte) int {
	if len() != len() {
		return 0
	}

	var  byte

	for  := 0;  < len(); ++ {
		 |= [] ^ []
	}

	return ConstantTimeByteEq(, 0)
}
ConstantTimeSelect returns x if v == 1 and y if v == 0. Its behavior is undefined if v takes any other value.
func (, ,  int) int { return ^(-1)& | (-1)& }
ConstantTimeByteEq returns 1 if x == y and 0 otherwise.
func (,  uint8) int {
	return int((uint32(^) - 1) >> 31)
}
ConstantTimeEq returns 1 if x == y and 0 otherwise.
func (,  int32) int {
	return int((uint64(uint32(^)) - 1) >> 63)
}
ConstantTimeCopy copies the contents of y into x (a slice of equal length) if v == 1. If v == 0, x is left unchanged. Its behavior is undefined if v takes any other value.
func ( int, ,  []byte) {
	if len() != len() {
		panic("subtle: slices have different lengths")
	}

	 := byte( - 1)
	 := byte(^( - 1))
	for  := 0;  < len(); ++ {
		[] = []& | []&
	}
}
ConstantTimeLessOrEq returns 1 if x <= y and 0 otherwise. Its behavior is undefined if x or y are negative or > 2**31 - 1.
func (,  int) int {
	 := int32()
	 := int32()
	return int((( -  - 1) >> 31) & 1)