github.com/incognitochain/go-incognito-sdk@v1.0.1/privacy/zkp/utils/utils.go (about) 1 package utils 2 3 import ( 4 "github.com/incognitochain/go-incognito-sdk/common" 5 "github.com/incognitochain/go-incognito-sdk/privacy" 6 "github.com/incognitochain/go-incognito-sdk/privacy/zkp/aggregaterange" 7 ) 8 9 // GenerateChallengeFromByte get hash of n points in G append with input values 10 // return blake_2b(G[0]||G[1]||...||G[CM_CAPACITY-1]||<values>) 11 // G[i] is list of all generator point of Curve 12 func GenerateChallenge(values [][]byte) *privacy.Scalar { 13 bytes := []byte{} 14 for i := 0; i < len(privacy.PedCom.G); i++ { 15 bytes = append(bytes, privacy.PedCom.G[i].ToBytesS()...) 16 } 17 18 for i := 0; i < len(values); i++ { 19 bytes = append(bytes, values[i]...) 20 } 21 22 hash := privacy.HashToScalar(bytes) 23 //res := new(big.Int).SetBytes(hash) 24 //res.Mod(res, privacy.Curve.Params().N) 25 return hash 26 } 27 28 // EstimateProofSize returns the estimated size of the proof in bytes 29 func EstimateProofSize(nInput int, nOutput int, hasPrivacy bool) uint64 { 30 if !hasPrivacy { 31 FlagSize := 14 + 2*nInput + nOutput 32 sizeSNNoPrivacyProof := nInput * SnNoPrivacyProofSize 33 sizeInputCoins := nInput * inputCoinsNoPrivacySize 34 sizeOutputCoins := nOutput * OutputCoinsNoPrivacySize 35 36 sizeProof := uint64(FlagSize + sizeSNNoPrivacyProof + sizeInputCoins + sizeOutputCoins) 37 return uint64(sizeProof) 38 } 39 40 FlagSize := 14 + 7*nInput + 4*nOutput 41 42 sizeOneOfManyProof := nInput * OneOfManyProofSize 43 sizeSNPrivacyProof := nInput * SnPrivacyProofSize 44 sizeComOutputMultiRangeProof := int(aggregaterange.EstimateMultiRangeProofSize(nOutput)) 45 46 sizeInputCoins := nInput * inputCoinsPrivacySize 47 sizeOutputCoins := nOutput * outputCoinsPrivacySize 48 49 sizeComOutputValue := nOutput * privacy.Ed25519KeySize 50 sizeComOutputSND := nOutput * privacy.Ed25519KeySize 51 sizeComOutputShardID := nOutput * privacy.Ed25519KeySize 52 53 sizeComInputSK := privacy.Ed25519KeySize 54 sizeComInputValue := nInput * privacy.Ed25519KeySize 55 sizeComInputSND := nInput * privacy.Ed25519KeySize 56 sizeComInputShardID := privacy.Ed25519KeySize 57 58 sizeCommitmentIndices := nInput * privacy.CommitmentRingSize * common.Uint64Size 59 60 sizeProof := sizeOneOfManyProof + sizeSNPrivacyProof + 61 sizeComOutputMultiRangeProof + sizeInputCoins + sizeOutputCoins + 62 sizeComOutputValue + sizeComOutputSND + sizeComOutputShardID + 63 sizeComInputSK + sizeComInputValue + sizeComInputSND + sizeComInputShardID + 64 sizeCommitmentIndices + FlagSize 65 66 return uint64(sizeProof) 67 }