summary refs log tree commit diff
path: root/crypto/src/math/raw/Interleave.cs
diff options
context:
space:
mode:
authorOren Novotny <oren@novotny.org>2016-01-05 08:38:03 -0500
committerOren Novotny <oren@novotny.org>2016-01-05 08:38:03 -0500
commitd74e0ee364cfde298eb077d9cd58d452c0aa0329 (patch)
tree53f1061193bd3c2e58e2ee91de33ea3b2c4221ec /crypto/src/math/raw/Interleave.cs
parentUpdate description (diff)
parentUpdate versions and release notes for release 1.8.1 (diff)
downloadBouncyCastle.NET-ed25519-d74e0ee364cfde298eb077d9cd58d452c0aa0329.tar.xz
Merge branch 'master' into pcl
Diffstat (limited to 'crypto/src/math/raw/Interleave.cs')
-rw-r--r--crypto/src/math/raw/Interleave.cs12
1 files changed, 12 insertions, 0 deletions
diff --git a/crypto/src/math/raw/Interleave.cs b/crypto/src/math/raw/Interleave.cs

index a45ee1e08..d21840644 100644 --- a/crypto/src/math/raw/Interleave.cs +++ b/crypto/src/math/raw/Interleave.cs
@@ -91,5 +91,17 @@ namespace Org.BouncyCastle.Math.Raw z[zOff ] = (x ) & M64; z[zOff + 1] = (x >> 1) & M64; } + + internal static ulong Unshuffle(ulong x) + { + // "unshuffle" even bits to low half and odd bits to high half + ulong t; + t = (x ^ (x >> 1)) & 0x2222222222222222UL; x ^= (t ^ (t << 1)); + t = (x ^ (x >> 2)) & 0x0C0C0C0C0C0C0C0CUL; x ^= (t ^ (t << 2)); + t = (x ^ (x >> 4)) & 0x00F000F000F000F0UL; x ^= (t ^ (t << 4)); + t = (x ^ (x >> 8)) & 0x0000FF000000FF00UL; x ^= (t ^ (t << 8)); + t = (x ^ (x >> 16)) & 0x00000000FFFF0000UL; x ^= (t ^ (t << 16)); + return x; + } } }