MCPcopy Create free account
hub / github.com/DOSNetwork/core / feMul

Function feMul

group/edwards25519/fe.go:307–538  ·  view source on GitHub ↗

feMul calculates h = f * g Can overlap h with f or g. Preconditions: |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. Postconditions: |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. Notes on implementation strategy: Using sch

(h, f, g *fieldElement)

Source from the content-addressed store, hash-verified

305//
306// With tighter constraints on inputs can squeeze carries into int32.
307func feMul(h, f, g *fieldElement) {
308 f0 := f[0]
309 f1 := f[1]
310 f2 := f[2]
311 f3 := f[3]
312 f4 := f[4]
313 f5 := f[5]
314 f6 := f[6]
315 f7 := f[7]
316 f8 := f[8]
317 f9 := f[9]
318 g0 := g[0]
319 g1 := g[1]
320 g2 := g[2]
321 g3 := g[3]
322 g4 := g[4]
323 g5 := g[5]
324 g6 := g[6]
325 g7 := g[7]
326 g8 := g[8]
327 g9 := g[9]
328 g1_19 := 19 * g1 /* 1.4*2^29 */
329 g2_19 := 19 * g2 /* 1.4*2^30; still ok */
330 g3_19 := 19 * g3
331 g4_19 := 19 * g4
332 g5_19 := 19 * g5
333 g6_19 := 19 * g6
334 g7_19 := 19 * g7
335 g8_19 := 19 * g8
336 g9_19 := 19 * g9
337 f1_2 := 2 * f1
338 f3_2 := 2 * f3
339 f5_2 := 2 * f5
340 f7_2 := 2 * f7
341 f9_2 := 2 * f9
342 f0g0 := int64(f0) * int64(g0)
343 f0g1 := int64(f0) * int64(g1)
344 f0g2 := int64(f0) * int64(g2)
345 f0g3 := int64(f0) * int64(g3)
346 f0g4 := int64(f0) * int64(g4)
347 f0g5 := int64(f0) * int64(g5)
348 f0g6 := int64(f0) * int64(g6)
349 f0g7 := int64(f0) * int64(g7)
350 f0g8 := int64(f0) * int64(g8)
351 f0g9 := int64(f0) * int64(g9)
352 f1g0 := int64(f1) * int64(g0)
353 f1g1_2 := int64(f1_2) * int64(g1)
354 f1g2 := int64(f1) * int64(g2)
355 f1g3_2 := int64(f1_2) * int64(g3)
356 f1g4 := int64(f1) * int64(g4)
357 f1g5_2 := int64(f1_2) * int64(g5)
358 f1g6 := int64(f1) * int64(g6)
359 f1g7_2 := int64(f1_2) * int64(g7)
360 f1g8 := int64(f1) * int64(g8)
361 f1g9_38 := int64(f1_2) * int64(g9_19)
362 f2g0 := int64(f2) * int64(g0)
363 f2g1 := int64(f2) * int64(g1)
364 f2g2 := int64(f2) * int64(g2)

Callers 15

feInvertFunction · 0.85
fePow22523Function · 0.85
ToBytesMethod · 0.85
ToCachedMethod · 0.85
ToBytesMethod · 0.85
FromBytesMethod · 0.85
ToProjectiveMethod · 0.85
ToExtendedMethod · 0.85
AddMethod · 0.85
SubMethod · 0.85
MixedAddMethod · 0.85
MixedSubMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected