1// Copyright 2020 The go-ethereum Authors
2// This file is part of the go-ethereum library.
3//
4// The go-ethereum library is free software: you can redistribute it and/or modify
5// it under the terms of the GNU Lesser General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// The go-ethereum library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU Lesser General Public License for more details.
13//
14// You should have received a copy of the GNU Lesser General Public License
15// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
16
17package bls12381
18
19import (
20	"errors"
21	"math/big"
22
23	"github.com/ethereum/go-ethereum/common"
24)
25
26func bigFromHex(hex string) *big.Int {
27	return new(big.Int).SetBytes(common.FromHex(hex))
28}
29
30// decodeFieldElement expects 64 byte input with zero top 16 bytes,
31// returns lower 48 bytes.
32func decodeFieldElement(in []byte) ([]byte, error) {
33	if len(in) != 64 {
34		return nil, errors.New("invalid field element length")
35	}
36	// check top bytes
37	for i := 0; i < 16; i++ {
38		if in[i] != byte(0x00) {
39			return nil, errors.New("invalid field element top bytes")
40		}
41	}
42	out := make([]byte, 48)
43	copy(out[:], in[16:])
44	return out, nil
45}
46