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  }