| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package bbig |
| |
| import ( |
| "crypto/internal/boring" |
| "math/big" |
| "unsafe" |
| ) |
| |
| func Enc(b *big.Int) boring.BigInt { |
| if b == nil { |
| return nil |
| } |
| x := b.Bits() |
| if len(x) == 0 { |
| return boring.BigInt{} |
| } |
| return unsafe.Slice((*uint)(&x[0]), len(x)) |
| } |
| |
| func Dec(b boring.BigInt) *big.Int { |
| if b == nil { |
| return nil |
| } |
| if len(b) == 0 { |
| return new(big.Int) |
| } |
| x := unsafe.Slice((*big.Word)(&b[0]), len(b)) |
| return new(big.Int).SetBits(x) |
| } |