github.com/consensys/gnark@v0.11.0/internal/generator/backend/template/zkpschemes/plonk/plonk.marshal.go.tmpl (about) 1 import ( 2 {{ template "import_curve" . }} 3 {{ template "import_kzg" . }} 4 "io" 5 ) 6 7 // WriteRawTo writes binary encoding of Proof to w without point compression 8 func (proof *Proof) WriteRawTo(w io.Writer) (int64, error) { 9 return proof.writeTo(w, curve.RawEncoding()) 10 } 11 12 // WriteTo writes binary encoding of Proof to w with point compression 13 func (proof *Proof) WriteTo(w io.Writer) (int64, error) { 14 return proof.writeTo(w) 15 } 16 17 func (proof *Proof) writeTo(w io.Writer, options ...func(*curve.Encoder)) (int64, error) { 18 enc := curve.NewEncoder(w, options...) 19 20 toEncode := []interface{}{ 21 &proof.LRO[0], 22 &proof.LRO[1], 23 &proof.LRO[2], 24 &proof.Z, 25 &proof.H[0], 26 &proof.H[1], 27 &proof.H[2], 28 &proof.BatchedProof.H, 29 proof.BatchedProof.ClaimedValues, 30 &proof.ZShiftedOpening.H, 31 &proof.ZShiftedOpening.ClaimedValue, 32 proof.Bsb22Commitments, 33 } 34 35 for _, v := range toEncode { 36 if err := enc.Encode(v); err != nil { 37 return enc.BytesWritten(), err 38 } 39 } 40 41 return enc.BytesWritten(), nil 42 } 43 44 // ReadFrom reads binary representation of Proof from r 45 func (proof *Proof) ReadFrom(r io.Reader) (int64, error) { 46 dec := curve.NewDecoder(r) 47 toDecode := []interface{}{ 48 &proof.LRO[0], 49 &proof.LRO[1], 50 &proof.LRO[2], 51 &proof.Z, 52 &proof.H[0], 53 &proof.H[1], 54 &proof.H[2], 55 &proof.BatchedProof.H, 56 &proof.BatchedProof.ClaimedValues, 57 &proof.ZShiftedOpening.H, 58 &proof.ZShiftedOpening.ClaimedValue, 59 &proof.Bsb22Commitments, 60 } 61 62 for _, v := range toDecode { 63 if err := dec.Decode(v); err != nil { 64 return dec.BytesRead(), err 65 } 66 } 67 68 if proof.Bsb22Commitments == nil { 69 proof.Bsb22Commitments = []kzg.Digest{} 70 } 71 72 return dec.BytesRead(), nil 73 } 74 75 // WriteTo writes binary encoding of ProvingKey to w 76 func (pk *ProvingKey) WriteTo(w io.Writer) (n int64, err error) { 77 return pk.writeTo(w, true) 78 } 79 80 // WriteRawTo writes binary encoding of ProvingKey to w without point compression 81 func (pk *ProvingKey) WriteRawTo(w io.Writer) (n int64, err error) { 82 return pk.writeTo(w, false) 83 } 84 85 func (pk *ProvingKey) writeTo(w io.Writer, withCompression bool) (n int64, err error) { 86 // encode the verifying key 87 if withCompression { 88 n, err = pk.Vk.WriteTo(w) 89 } else { 90 n, err = pk.Vk.WriteRawTo(w) 91 } 92 if err != nil { 93 return 94 } 95 96 var n2 int64 97 // KZG key 98 if withCompression { 99 n2, err = pk.Kzg.WriteTo(w) 100 } else { 101 n2, err = pk.Kzg.WriteRawTo(w) 102 } 103 if err != nil { 104 return 105 } 106 n += n2 107 if withCompression { 108 n2, err = pk.KzgLagrange.WriteTo(w) 109 } else { 110 n2, err = pk.KzgLagrange.WriteRawTo(w) 111 } 112 if err != nil { 113 return 114 } 115 n += n2 116 117 118 return n, nil 119 } 120 121 // ReadFrom reads from binary representation in r into ProvingKey 122 func (pk *ProvingKey) ReadFrom(r io.Reader) (int64, error) { 123 return pk.readFrom(r, true) 124 } 125 126 // UnsafeReadFrom reads from binary representation in r into ProvingKey without subgroup checks 127 func (pk *ProvingKey) UnsafeReadFrom(r io.Reader) (int64, error) { 128 return pk.readFrom(r, false) 129 } 130 131 func (pk *ProvingKey) readFrom(r io.Reader, withSubgroupChecks bool) (int64, error) { 132 pk.Vk = &VerifyingKey{} 133 n, err := pk.Vk.ReadFrom(r) 134 if err != nil { 135 return n, err 136 } 137 138 var n2 int64 139 if withSubgroupChecks { 140 n2, err = pk.Kzg.ReadFrom(r) 141 } else { 142 n2, err = pk.Kzg.UnsafeReadFrom(r) 143 } 144 n += n2 145 if err != nil { 146 return n, err 147 } 148 if withSubgroupChecks { 149 n2, err = pk.KzgLagrange.ReadFrom(r) 150 } else { 151 n2, err = pk.KzgLagrange.UnsafeReadFrom(r) 152 } 153 n += n2 154 return n, err 155 } 156 157 // WriteTo writes binary encoding of VerifyingKey to w 158 func (vk *VerifyingKey) WriteTo(w io.Writer) (n int64, err error) { 159 return vk.writeTo(w) 160 } 161 162 // WriteRawTo writes binary encoding of VerifyingKey to w without point compression 163 func (vk *VerifyingKey) WriteRawTo(w io.Writer) (int64, error) { 164 return vk.writeTo(w, curve.RawEncoding()) 165 } 166 167 func (vk *VerifyingKey) writeTo(w io.Writer, options ...func(*curve.Encoder)) (n int64, err error) { 168 enc := curve.NewEncoder(w) 169 170 toEncode := []interface{}{ 171 vk.Size, 172 &vk.SizeInv, 173 &vk.Generator, 174 vk.NbPublicVariables, 175 &vk.CosetShift, 176 &vk.S[0], 177 &vk.S[1], 178 &vk.S[2], 179 &vk.Ql, 180 &vk.Qr, 181 &vk.Qm, 182 &vk.Qo, 183 &vk.Qk, 184 vk.Qcp, 185 &vk.Kzg.G1, 186 &vk.Kzg.G2[0], 187 &vk.Kzg.G2[1], 188 &vk.Kzg.Lines, 189 vk.CommitmentConstraintIndexes, 190 } 191 192 for _, v := range toEncode { 193 if err := enc.Encode(v); err != nil { 194 return enc.BytesWritten(), err 195 } 196 } 197 198 return enc.BytesWritten(), nil 199 } 200 201 // UnsafeReadFrom reads from binary representation in r into VerifyingKey. 202 // Current implementation is a passthrough to ReadFrom 203 func (vk *VerifyingKey) UnsafeReadFrom(r io.Reader) (int64, error) { 204 return vk.ReadFrom(r) 205 } 206 207 // ReadFrom reads from binary representation in r into VerifyingKey 208 func (vk *VerifyingKey) ReadFrom(r io.Reader) (int64, error) { 209 dec := curve.NewDecoder(r) 210 toDecode := []interface{}{ 211 &vk.Size, 212 &vk.SizeInv, 213 &vk.Generator, 214 &vk.NbPublicVariables, 215 &vk.CosetShift, 216 &vk.S[0], 217 &vk.S[1], 218 &vk.S[2], 219 &vk.Ql, 220 &vk.Qr, 221 &vk.Qm, 222 &vk.Qo, 223 &vk.Qk, 224 &vk.Qcp, 225 &vk.Kzg.G1, 226 &vk.Kzg.G2[0], 227 &vk.Kzg.G2[1], 228 &vk.Kzg.Lines, 229 &vk.CommitmentConstraintIndexes, 230 } 231 232 for _, v := range toDecode { 233 if err := dec.Decode(v); err != nil { 234 return dec.BytesRead(), err 235 } 236 } 237 238 if vk.Qcp == nil { 239 vk.Qcp = []kzg.Digest{} 240 } 241 242 return dec.BytesRead(), nil 243 }