Thanks you for your replies.
> So I think there is no solution for you. Can you tell us what you want to
> archive?
Yes, I've made a little XOR encrypter/decrypter for strings, seqs and arrays.
It works perfectly but I was wondering if it was possible to do it using only
one function instead of four.
#
----------------------------------------------------------------------------------------------------------------------
proc encrypterRaw*[T](data: var openarray[T], key: string) =
let dataCount = data.len() * sizeof(T)
let keyLen = key.len()
let dataPtr = getPtr(data)
if keyLen == 0:
return
var xorState: uint32 = 1
for i in 0 ..< dataCount:
xorState = xorState xor (xorState shl 13)
xorState = xorState xor (xorState shr 17)
xorState = xorState xor (xorState shl 5)
writePtr(dataPtr, readPtr(dataPtr, uint8, i) xor uint8(key[i mod
keyLen]) xor uint8(xorState), uint8, i)
#
----------------------------------------------------------------------------------------------------------------------
proc encrypter*(str, key: string): string =
result = str
encrypterRaw(result, key)
#
----------------------------------------------------------------------------------------------------------------------
proc encrypter*[T](data: seq[T], key: string): seq[T] =
result = data
encrypterRaw(result, key)
#
----------------------------------------------------------------------------------------------------------------------
proc encrypter*[I, T](data: array[I, T], key: string): array[I, T] =
result = data
encrypterRaw(result, key)
Run
Anyway, it does not matter, I'll leave it as it is.
Thank you ; )