github.com/consensys/gnark-crypto@v0.14.0/ecc/bls12-377/fr/hash_to_field/hash_to_field.go (about)

     1  // Copyright 2020 Consensys Software Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by consensys/gnark-crypto DO NOT EDIT
    16  
    17  package hash_to_field
    18  
    19  import (
    20  	"fmt"
    21  	"hash"
    22  
    23  	"github.com/consensys/gnark-crypto/ecc/bls12-377/fr"
    24  )
    25  
    26  type wrappedHashToField struct {
    27  	domain []byte
    28  	toHash []byte
    29  }
    30  
    31  // New returns a new hasher instance which uses [fr.Hash] to hash all the
    32  // written bytes to a field element, returning the byte representation of the
    33  // field element. The domain separator is passed as-is to hashing method.
    34  func New(domainSeparator []byte) hash.Hash {
    35  	return &wrappedHashToField{
    36  		domain: append([]byte{}, domainSeparator...), // copy in case the argument is modified
    37  	}
    38  }
    39  
    40  func (w *wrappedHashToField) Write(p []byte) (n int, err error) {
    41  	w.toHash = append(w.toHash, p...)
    42  	return len(p), nil
    43  }
    44  
    45  func (w *wrappedHashToField) Sum(b []byte) []byte {
    46  	res, err := fr.Hash(w.toHash, w.domain, 1)
    47  	if err != nil {
    48  		// we want to follow the interface, cannot return error and have to panic
    49  		// but by default the method shouldn't return an error internally
    50  		panic(fmt.Sprintf("native field to hash: %v", err))
    51  	}
    52  	bts := res[0].Bytes()
    53  	return append(b, bts[:]...)
    54  }
    55  
    56  func (w *wrappedHashToField) Reset() {
    57  	w.toHash = nil
    58  }
    59  
    60  func (w *wrappedHashToField) Size() int {
    61  	return fr.Bytes
    62  }
    63  
    64  func (w *wrappedHashToField) BlockSize() int {
    65  	return fr.Bytes
    66  }