github.com/gopherjs/gopherjs@v1.19.0-beta1.0.20240506212314-27071a8796e4/compiler/natives/src/crypto/internal/boring/bbig/big.go (about) 1 //go:build js 2 // +build js 3 4 package bbig 5 6 import ( 7 "crypto/internal/boring" 8 "math/big" 9 ) 10 11 func Enc(b *big.Int) boring.BigInt { 12 if b == nil { 13 return nil 14 } 15 x := b.Bits() 16 if len(x) == 0 { 17 return boring.BigInt{} 18 } 19 // Replacing original which uses unsafe: 20 // return unsafe.Slice((*uint)(&x[0]), len(x)) 21 b2 := make(boring.BigInt, len(x)) 22 for i, w := range x { 23 b2[i] = uint(w) 24 } 25 return b2 26 } 27 28 func Dec(b boring.BigInt) *big.Int { 29 if b == nil { 30 return nil 31 } 32 if len(b) == 0 { 33 return new(big.Int) 34 } 35 // Replacing original which uses unsafe: 36 // x := unsafe.Slice((*big.Word)(&b[0]), len(b)) 37 x := make([]big.Word, len(b)) 38 for i, w := range b { 39 x[i] = big.Word(w) 40 } 41 return new(big.Int).SetBits(x) 42 }