schastsp/internal/xor/xor.go

68 lines
1.2 KiB
Go
Raw Normal View History

2018-04-25 06:17:20 +00:00
package xor
import "math"
/* (1) bitwise XOR between bytes
*
* @_left<byte> Left operand
* @_right<byte> Right operand
*
* @return out<byte> Bitwise XOR result between _left and _right
*
---------------------------------------------------------*/
func Byte(_left byte, _right byte) byte {
return _left ^ _right;
}
/* (2) bitwise XOR between Byte arrays
*
* @_left<byte[]> Left operand
* @_right<byte[]> Right operand
*
* @return out<byte[]> Bitwise XOR result between _left and _right
*
* @@ NOTE @@
* If an argument is smaller, it will be right-padded with null bytes (0x00)
*
---------------------------------------------------------*/
func ByteArray(_left []byte, _right []byte) []byte {
/* (1) Process
---------------------------------------------------------*/
/* (1) Extract lengths */
ll := len(_left)
lr := len(_right)
/* (2) Get max length */
l := int(math.Max(float64(ll), float64(lr)))
/* (3) Initialise 'out' */
out := make([]byte, l, l)
/* (2) Process bitwise XOR */
for i := 0 ; i < l ; i++ {
// 1. Out of range for _left
if i >= ll {
out[i] = _right[i];
} else if i >= lr {
out[i] = _left[i];
} else {
out[i] = Byte(_left[i], _right[i])
}
}
return out
}