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  }