github.com/Ptt-official-app/go-bbs@v0.12.0/crypt/utils.go (about) 1 package crypt 2 3 func c2l(c []uint8) uint32 { 4 return uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 5 } 6 7 func l2c(l uint32, c []uint8) { 8 c[0] = uint8(l & 0xff) 9 c[1] = uint8((l >> 8) & 0xff) 10 c[2] = uint8((l >> 16) & 0xff) 11 c[3] = uint8((l >> 24) & 0xff) 12 //log.Infof("l2c: l: %v c: (%x, %x, %x, %x)", l, c[0], c[1], c[2], c[3]) 13 } 14 15 func permOp(a uint32, b uint32, n int, m uint32) (retA uint32, retB uint32) { 16 17 t := ((a >> n) ^ b) & m 18 b ^= t 19 a ^= t << n 20 21 return a, b 22 } 23 24 func hPermOp(a uint32, n int, m uint32) (retA uint32) { 25 t := ((a << (16 - n)) ^ a) & m 26 a = a ^ t ^ (t >> (16 - n)) 27 return a 28 }