big.mx raw

   1  // Copyright 2022 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package bbig
   6  
   7  import (
   8  	"crypto/internal/boring"
   9  	"math/big"
  10  	"unsafe"
  11  )
  12  
  13  func Enc(b *big.Int) boring.BigInt {
  14  	if b == nil {
  15  		return nil
  16  	}
  17  	x := b.Bits()
  18  	if len(x) == 0 {
  19  		return boring.BigInt{}
  20  	}
  21  	return unsafe.Slice((*uint)(&x[0]), len(x))
  22  }
  23  
  24  func Dec(b boring.BigInt) *big.Int {
  25  	if b == nil {
  26  		return nil
  27  	}
  28  	if len(b) == 0 {
  29  		return &big.Int{}
  30  	}
  31  	x := unsafe.Slice((*big.Word)(&b[0]), len(b))
  32  	return (&big.Int{}).SetBits(x)
  33  }
  34