| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529 |
- // Copyright 2012 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package poly1305
- // Based on original, public domain implementation from NaCl by D. J.
- // Bernstein.
- import "math"
- const (
- alpham80 = 0.00000000558793544769287109375
- alpham48 = 24.0
- alpham16 = 103079215104.0
- alpha0 = 6755399441055744.0
- alpha18 = 1770887431076116955136.0
- alpha32 = 29014219670751100192948224.0
- alpha50 = 7605903601369376408980219232256.0
- alpha64 = 124615124604835863084731911901282304.0
- alpha82 = 32667107224410092492483962313449748299776.0
- alpha96 = 535217884764734955396857238543560676143529984.0
- alpha112 = 35076039295941670036888435985190792471742381031424.0
- alpha130 = 9194973245195333150150082162901855101712434733101613056.0
- scale = 0.0000000000000000000000000000000000000036734198463196484624023016788195177431833298649127735047148490821200539357960224151611328125
- offset0 = 6755408030990331.0
- offset1 = 29014256564239239022116864.0
- offset2 = 124615283061160854719918951570079744.0
- offset3 = 535219245894202480694386063513315216128475136.0
- )
- // Sum generates an authenticator for m using a one-time key and puts the
- // 16-byte result into out. Authenticating two different messages with the same
- // key allows an attacker to forge messages at will.
- func Sum(out *[16]byte, m []byte, key *[32]byte) {
- r := key
- s := key[16:]
- var (
- y7 float64
- y6 float64
- y1 float64
- y0 float64
- y5 float64
- y4 float64
- x7 float64
- x6 float64
- x1 float64
- x0 float64
- y3 float64
- y2 float64
- x5 float64
- r3lowx0 float64
- x4 float64
- r0lowx6 float64
- x3 float64
- r3highx0 float64
- x2 float64
- r0highx6 float64
- r0lowx0 float64
- sr1lowx6 float64
- r0highx0 float64
- sr1highx6 float64
- sr3low float64
- r1lowx0 float64
- sr2lowx6 float64
- r1highx0 float64
- sr2highx6 float64
- r2lowx0 float64
- sr3lowx6 float64
- r2highx0 float64
- sr3highx6 float64
- r1highx4 float64
- r1lowx4 float64
- r0highx4 float64
- r0lowx4 float64
- sr3highx4 float64
- sr3lowx4 float64
- sr2highx4 float64
- sr2lowx4 float64
- r0lowx2 float64
- r0highx2 float64
- r1lowx2 float64
- r1highx2 float64
- r2lowx2 float64
- r2highx2 float64
- sr3lowx2 float64
- sr3highx2 float64
- z0 float64
- z1 float64
- z2 float64
- z3 float64
- m0 int64
- m1 int64
- m2 int64
- m3 int64
- m00 uint32
- m01 uint32
- m02 uint32
- m03 uint32
- m10 uint32
- m11 uint32
- m12 uint32
- m13 uint32
- m20 uint32
- m21 uint32
- m22 uint32
- m23 uint32
- m30 uint32
- m31 uint32
- m32 uint32
- m33 uint64
- lbelow2 int32
- lbelow3 int32
- lbelow4 int32
- lbelow5 int32
- lbelow6 int32
- lbelow7 int32
- lbelow8 int32
- lbelow9 int32
- lbelow10 int32
- lbelow11 int32
- lbelow12 int32
- lbelow13 int32
- lbelow14 int32
- lbelow15 int32
- s00 uint32
- s01 uint32
- s02 uint32
- s03 uint32
- s10 uint32
- s11 uint32
- s12 uint32
- s13 uint32
- s20 uint32
- s21 uint32
- s22 uint32
- s23 uint32
- s30 uint32
- s31 uint32
- s32 uint32
- s33 uint32
- bits32 uint64
- f uint64
- f0 uint64
- f1 uint64
- f2 uint64
- f3 uint64
- f4 uint64
- g uint64
- g0 uint64
- g1 uint64
- g2 uint64
- g3 uint64
- g4 uint64
- )
- var p int32
- l := int32(len(m))
- r00 := uint32(r[0])
- r01 := uint32(r[1])
- r02 := uint32(r[2])
- r0 := int64(2151)
- r03 := uint32(r[3])
- r03 &= 15
- r0 <<= 51
- r10 := uint32(r[4])
- r10 &= 252
- r01 <<= 8
- r0 += int64(r00)
- r11 := uint32(r[5])
- r02 <<= 16
- r0 += int64(r01)
- r12 := uint32(r[6])
- r03 <<= 24
- r0 += int64(r02)
- r13 := uint32(r[7])
- r13 &= 15
- r1 := int64(2215)
- r0 += int64(r03)
- d0 := r0
- r1 <<= 51
- r2 := int64(2279)
- r20 := uint32(r[8])
- r20 &= 252
- r11 <<= 8
- r1 += int64(r10)
- r21 := uint32(r[9])
- r12 <<= 16
- r1 += int64(r11)
- r22 := uint32(r[10])
- r13 <<= 24
- r1 += int64(r12)
- r23 := uint32(r[11])
- r23 &= 15
- r2 <<= 51
- r1 += int64(r13)
- d1 := r1
- r21 <<= 8
- r2 += int64(r20)
- r30 := uint32(r[12])
- r30 &= 252
- r22 <<= 16
- r2 += int64(r21)
- r31 := uint32(r[13])
- r23 <<= 24
- r2 += int64(r22)
- r32 := uint32(r[14])
- r2 += int64(r23)
- r3 := int64(2343)
- d2 := r2
- r3 <<= 51
- r33 := uint32(r[15])
- r33 &= 15
- r31 <<= 8
- r3 += int64(r30)
- r32 <<= 16
- r3 += int64(r31)
- r33 <<= 24
- r3 += int64(r32)
- r3 += int64(r33)
- h0 := alpha32 - alpha32
- d3 := r3
- h1 := alpha32 - alpha32
- h2 := alpha32 - alpha32
- h3 := alpha32 - alpha32
- h4 := alpha32 - alpha32
- r0low := math.Float64frombits(uint64(d0))
- h5 := alpha32 - alpha32
- r1low := math.Float64frombits(uint64(d1))
- h6 := alpha32 - alpha32
- r2low := math.Float64frombits(uint64(d2))
- h7 := alpha32 - alpha32
- r0low -= alpha0
- r1low -= alpha32
- r2low -= alpha64
- r0high := r0low + alpha18
- r3low := math.Float64frombits(uint64(d3))
- r1high := r1low + alpha50
- sr1low := scale * r1low
- r2high := r2low + alpha82
- sr2low := scale * r2low
- r0high -= alpha18
- r0high_stack := r0high
- r3low -= alpha96
- r1high -= alpha50
- r1high_stack := r1high
- sr1high := sr1low + alpham80
- r0low -= r0high
- r2high -= alpha82
- sr3low = scale * r3low
- sr2high := sr2low + alpham48
- r1low -= r1high
- r1low_stack := r1low
- sr1high -= alpham80
- sr1high_stack := sr1high
- r2low -= r2high
- r2low_stack := r2low
- sr2high -= alpham48
- sr2high_stack := sr2high
- r3high := r3low + alpha112
- r0low_stack := r0low
- sr1low -= sr1high
- sr1low_stack := sr1low
- sr3high := sr3low + alpham16
- r2high_stack := r2high
- sr2low -= sr2high
- sr2low_stack := sr2low
- r3high -= alpha112
- r3high_stack := r3high
- sr3high -= alpham16
- sr3high_stack := sr3high
- r3low -= r3high
- r3low_stack := r3low
- sr3low -= sr3high
- sr3low_stack := sr3low
- if l < 16 {
- goto addatmost15bytes
- }
- m00 = uint32(m[p+0])
- m0 = 2151
- m0 <<= 51
- m1 = 2215
- m01 = uint32(m[p+1])
- m1 <<= 51
- m2 = 2279
- m02 = uint32(m[p+2])
- m2 <<= 51
- m3 = 2343
- m03 = uint32(m[p+3])
- m10 = uint32(m[p+4])
- m01 <<= 8
- m0 += int64(m00)
- m11 = uint32(m[p+5])
- m02 <<= 16
- m0 += int64(m01)
- m12 = uint32(m[p+6])
- m03 <<= 24
- m0 += int64(m02)
- m13 = uint32(m[p+7])
- m3 <<= 51
- m0 += int64(m03)
- m20 = uint32(m[p+8])
- m11 <<= 8
- m1 += int64(m10)
- m21 = uint32(m[p+9])
- m12 <<= 16
- m1 += int64(m11)
- m22 = uint32(m[p+10])
- m13 <<= 24
- m1 += int64(m12)
- m23 = uint32(m[p+11])
- m1 += int64(m13)
- m30 = uint32(m[p+12])
- m21 <<= 8
- m2 += int64(m20)
- m31 = uint32(m[p+13])
- m22 <<= 16
- m2 += int64(m21)
- m32 = uint32(m[p+14])
- m23 <<= 24
- m2 += int64(m22)
- m33 = uint64(m[p+15])
- m2 += int64(m23)
- d0 = m0
- m31 <<= 8
- m3 += int64(m30)
- d1 = m1
- m32 <<= 16
- m3 += int64(m31)
- d2 = m2
- m33 += 256
- m33 <<= 24
- m3 += int64(m32)
- m3 += int64(m33)
- d3 = m3
- p += 16
- l -= 16
- z0 = math.Float64frombits(uint64(d0))
- z1 = math.Float64frombits(uint64(d1))
- z2 = math.Float64frombits(uint64(d2))
- z3 = math.Float64frombits(uint64(d3))
- z0 -= alpha0
- z1 -= alpha32
- z2 -= alpha64
- z3 -= alpha96
- h0 += z0
- h1 += z1
- h3 += z2
- h5 += z3
- if l < 16 {
- goto multiplyaddatmost15bytes
- }
- multiplyaddatleast16bytes:
- m2 = 2279
- m20 = uint32(m[p+8])
- y7 = h7 + alpha130
- m2 <<= 51
- m3 = 2343
- m21 = uint32(m[p+9])
- y6 = h6 + alpha130
- m3 <<= 51
- m0 = 2151
- m22 = uint32(m[p+10])
- y1 = h1 + alpha32
- m0 <<= 51
- m1 = 2215
- m23 = uint32(m[p+11])
- y0 = h0 + alpha32
- m1 <<= 51
- m30 = uint32(m[p+12])
- y7 -= alpha130
- m21 <<= 8
- m2 += int64(m20)
- m31 = uint32(m[p+13])
- y6 -= alpha130
- m22 <<= 16
- m2 += int64(m21)
- m32 = uint32(m[p+14])
- y1 -= alpha32
- m23 <<= 24
- m2 += int64(m22)
- m33 = uint64(m[p+15])
- y0 -= alpha32
- m2 += int64(m23)
- m00 = uint32(m[p+0])
- y5 = h5 + alpha96
- m31 <<= 8
- m3 += int64(m30)
- m01 = uint32(m[p+1])
- y4 = h4 + alpha96
- m32 <<= 16
- m02 = uint32(m[p+2])
- x7 = h7 - y7
- y7 *= scale
- m33 += 256
- m03 = uint32(m[p+3])
- x6 = h6 - y6
- y6 *= scale
- m33 <<= 24
- m3 += int64(m31)
- m10 = uint32(m[p+4])
- x1 = h1 - y1
- m01 <<= 8
- m3 += int64(m32)
- m11 = uint32(m[p+5])
- x0 = h0 - y0
- m3 += int64(m33)
- m0 += int64(m00)
- m12 = uint32(m[p+6])
- y5 -= alpha96
- m02 <<= 16
- m0 += int64(m01)
- m13 = uint32(m[p+7])
- y4 -= alpha96
- m03 <<= 24
- m0 += int64(m02)
- d2 = m2
- x1 += y7
- m0 += int64(m03)
- d3 = m3
- x0 += y6
- m11 <<= 8
- m1 += int64(m10)
- d0 = m0
- x7 += y5
- m12 <<= 16
- m1 += int64(m11)
- x6 += y4
- m13 <<= 24
- m1 += int64(m12)
- y3 = h3 + alpha64
- m1 += int64(m13)
- d1 = m1
- y2 = h2 + alpha64
- x0 += x1
- x6 += x7
- y3 -= alpha64
- r3low = r3low_stack
- y2 -= alpha64
- r0low = r0low_stack
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
- x4 += x5
- r2lowx0 = r2low * x0
- z2 = math.Float64frombits(uint64(d2))
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
- x2 += x3
- r2highx0 = r2high * x0
- z3 = math.Float64frombits(uint64(d3))
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
- r1highx4 = r1high * x4
- z2 -= alpha64
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
- r0highx4 = r0high * x4
- z3 -= alpha96
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
- h7 += r1highx4
- sr3highx4 = sr3high * x4
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
- h5 += r0highx4
- sr2highx4 = sr2high * x4
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
- h3 += sr3highx4
- r0lowx2 = r0low * x2
- h2 += sr3lowx4
- r0highx2 = r0high * x2
- h1 += sr2highx4
- r1lowx2 = r1low * x2
- h0 += sr2lowx4
- r1highx2 = r1high * x2
- h2 += r0lowx2
- r2lowx2 = r2low * x2
- h3 += r0highx2
- r2highx2 = r2high * x2
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
- h5 += r1highx2
- sr3highx2 = sr3high * x2
- p += 16
- l -= 16
- h6 += r2lowx2
- h7 += r2highx2
- z1 = math.Float64frombits(uint64(d1))
- h0 += sr3lowx2
- z0 = math.Float64frombits(uint64(d0))
- h1 += sr3highx2
- z1 -= alpha32
- z0 -= alpha0
- h5 += z3
- h3 += z2
- h1 += z1
- h0 += z0
- if l >= 16 {
- goto multiplyaddatleast16bytes
- }
- multiplyaddatmost15bytes:
- y7 = h7 + alpha130
- y6 = h6 + alpha130
- y1 = h1 + alpha32
- y0 = h0 + alpha32
- y7 -= alpha130
- y6 -= alpha130
- y1 -= alpha32
- y0 -= alpha32
- y5 = h5 + alpha96
- y4 = h4 + alpha96
- x7 = h7 - y7
- y7 *= scale
- x6 = h6 - y6
- y6 *= scale
- x1 = h1 - y1
- x0 = h0 - y0
- y5 -= alpha96
- y4 -= alpha96
- x1 += y7
- x0 += y6
- x7 += y5
- x6 += y4
- y3 = h3 + alpha64
- y2 = h2 + alpha64
- x0 += x1
- x6 += x7
- y3 -= alpha64
- r3low = r3low_stack
- y2 -= alpha64
- r0low = r0low_stack
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
- x4 += x5
- r2lowx0 = r2low * x0
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
- x2 += x3
- r2highx0 = r2high * x0
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
- r1highx4 = r1high * x4
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
- r0highx4 = r0high * x4
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
- h7 += r1highx4
- sr3highx4 = sr3high * x4
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
- h5 += r0highx4
- sr2highx4 = sr2high * x4
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
- h3 += sr3highx4
- r0lowx2 = r0low * x2
- h2 += sr3lowx4
- r0highx2 = r0high * x2
- h1 += sr2highx4
- r1lowx2 = r1low * x2
- h0 += sr2lowx4
- r1highx2 = r1high * x2
- h2 += r0lowx2
- r2lowx2 = r2low * x2
- h3 += r0highx2
- r2highx2 = r2high * x2
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
- h5 += r1highx2
- sr3highx2 = sr3high * x2
- h6 += r2lowx2
- h7 += r2highx2
- h0 += sr3lowx2
- h1 += sr3highx2
- addatmost15bytes:
- if l == 0 {
- goto nomorebytes
- }
- lbelow2 = l - 2
- lbelow3 = l - 3
- lbelow2 >>= 31
- lbelow4 = l - 4
- m00 = uint32(m[p+0])
- lbelow3 >>= 31
- p += lbelow2
- m01 = uint32(m[p+1])
- lbelow4 >>= 31
- p += lbelow3
- m02 = uint32(m[p+2])
- p += lbelow4
- m0 = 2151
- m03 = uint32(m[p+3])
- m0 <<= 51
- m1 = 2215
- m0 += int64(m00)
- m01 &^= uint32(lbelow2)
- m02 &^= uint32(lbelow3)
- m01 -= uint32(lbelow2)
- m01 <<= 8
- m03 &^= uint32(lbelow4)
- m0 += int64(m01)
- lbelow2 -= lbelow3
- m02 += uint32(lbelow2)
- lbelow3 -= lbelow4
- m02 <<= 16
- m03 += uint32(lbelow3)
- m03 <<= 24
- m0 += int64(m02)
- m0 += int64(m03)
- lbelow5 = l - 5
- lbelow6 = l - 6
- lbelow7 = l - 7
- lbelow5 >>= 31
- lbelow8 = l - 8
- lbelow6 >>= 31
- p += lbelow5
- m10 = uint32(m[p+4])
- lbelow7 >>= 31
- p += lbelow6
- m11 = uint32(m[p+5])
- lbelow8 >>= 31
- p += lbelow7
- m12 = uint32(m[p+6])
- m1 <<= 51
- p += lbelow8
- m13 = uint32(m[p+7])
- m10 &^= uint32(lbelow5)
- lbelow4 -= lbelow5
- m10 += uint32(lbelow4)
- lbelow5 -= lbelow6
- m11 &^= uint32(lbelow6)
- m11 += uint32(lbelow5)
- m11 <<= 8
- m1 += int64(m10)
- m1 += int64(m11)
- m12 &^= uint32(lbelow7)
- lbelow6 -= lbelow7
- m13 &^= uint32(lbelow8)
- m12 += uint32(lbelow6)
- lbelow7 -= lbelow8
- m12 <<= 16
- m13 += uint32(lbelow7)
- m13 <<= 24
- m1 += int64(m12)
- m1 += int64(m13)
- m2 = 2279
- lbelow9 = l - 9
- m3 = 2343
- lbelow10 = l - 10
- lbelow11 = l - 11
- lbelow9 >>= 31
- lbelow12 = l - 12
- lbelow10 >>= 31
- p += lbelow9
- m20 = uint32(m[p+8])
- lbelow11 >>= 31
- p += lbelow10
- m21 = uint32(m[p+9])
- lbelow12 >>= 31
- p += lbelow11
- m22 = uint32(m[p+10])
- m2 <<= 51
- p += lbelow12
- m23 = uint32(m[p+11])
- m20 &^= uint32(lbelow9)
- lbelow8 -= lbelow9
- m20 += uint32(lbelow8)
- lbelow9 -= lbelow10
- m21 &^= uint32(lbelow10)
- m21 += uint32(lbelow9)
- m21 <<= 8
- m2 += int64(m20)
- m2 += int64(m21)
- m22 &^= uint32(lbelow11)
- lbelow10 -= lbelow11
- m23 &^= uint32(lbelow12)
- m22 += uint32(lbelow10)
- lbelow11 -= lbelow12
- m22 <<= 16
- m23 += uint32(lbelow11)
- m23 <<= 24
- m2 += int64(m22)
- m3 <<= 51
- lbelow13 = l - 13
- lbelow13 >>= 31
- lbelow14 = l - 14
- lbelow14 >>= 31
- p += lbelow13
- lbelow15 = l - 15
- m30 = uint32(m[p+12])
- lbelow15 >>= 31
- p += lbelow14
- m31 = uint32(m[p+13])
- p += lbelow15
- m2 += int64(m23)
- m32 = uint32(m[p+14])
- m30 &^= uint32(lbelow13)
- lbelow12 -= lbelow13
- m30 += uint32(lbelow12)
- lbelow13 -= lbelow14
- m3 += int64(m30)
- m31 &^= uint32(lbelow14)
- m31 += uint32(lbelow13)
- m32 &^= uint32(lbelow15)
- m31 <<= 8
- lbelow14 -= lbelow15
- m3 += int64(m31)
- m32 += uint32(lbelow14)
- d0 = m0
- m32 <<= 16
- m33 = uint64(lbelow15 + 1)
- d1 = m1
- m33 <<= 24
- m3 += int64(m32)
- d2 = m2
- m3 += int64(m33)
- d3 = m3
- z3 = math.Float64frombits(uint64(d3))
- z2 = math.Float64frombits(uint64(d2))
- z1 = math.Float64frombits(uint64(d1))
- z0 = math.Float64frombits(uint64(d0))
- z3 -= alpha96
- z2 -= alpha64
- z1 -= alpha32
- z0 -= alpha0
- h5 += z3
- h3 += z2
- h1 += z1
- h0 += z0
- y7 = h7 + alpha130
- y6 = h6 + alpha130
- y1 = h1 + alpha32
- y0 = h0 + alpha32
- y7 -= alpha130
- y6 -= alpha130
- y1 -= alpha32
- y0 -= alpha32
- y5 = h5 + alpha96
- y4 = h4 + alpha96
- x7 = h7 - y7
- y7 *= scale
- x6 = h6 - y6
- y6 *= scale
- x1 = h1 - y1
- x0 = h0 - y0
- y5 -= alpha96
- y4 -= alpha96
- x1 += y7
- x0 += y6
- x7 += y5
- x6 += y4
- y3 = h3 + alpha64
- y2 = h2 + alpha64
- x0 += x1
- x6 += x7
- y3 -= alpha64
- r3low = r3low_stack
- y2 -= alpha64
- r0low = r0low_stack
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
- x4 += x5
- r2lowx0 = r2low * x0
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
- x2 += x3
- r2highx0 = r2high * x0
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
- r1highx4 = r1high * x4
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
- r0highx4 = r0high * x4
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
- h7 += r1highx4
- sr3highx4 = sr3high * x4
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
- h5 += r0highx4
- sr2highx4 = sr2high * x4
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
- h3 += sr3highx4
- r0lowx2 = r0low * x2
- h2 += sr3lowx4
- r0highx2 = r0high * x2
- h1 += sr2highx4
- r1lowx2 = r1low * x2
- h0 += sr2lowx4
- r1highx2 = r1high * x2
- h2 += r0lowx2
- r2lowx2 = r2low * x2
- h3 += r0highx2
- r2highx2 = r2high * x2
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
- h5 += r1highx2
- sr3highx2 = sr3high * x2
- h6 += r2lowx2
- h7 += r2highx2
- h0 += sr3lowx2
- h1 += sr3highx2
- nomorebytes:
- y7 = h7 + alpha130
- y0 = h0 + alpha32
- y1 = h1 + alpha32
- y2 = h2 + alpha64
- y7 -= alpha130
- y3 = h3 + alpha64
- y4 = h4 + alpha96
- y5 = h5 + alpha96
- x7 = h7 - y7
- y7 *= scale
- y0 -= alpha32
- y1 -= alpha32
- y2 -= alpha64
- h6 += x7
- y3 -= alpha64
- y4 -= alpha96
- y5 -= alpha96
- y6 = h6 + alpha130
- x0 = h0 - y0
- x1 = h1 - y1
- x2 = h2 - y2
- y6 -= alpha130
- x0 += y7
- x3 = h3 - y3
- x4 = h4 - y4
- x5 = h5 - y5
- x6 = h6 - y6
- y6 *= scale
- x2 += y0
- x3 += y1
- x4 += y2
- x0 += y6
- x5 += y3
- x6 += y4
- x2 += x3
- x0 += x1
- x4 += x5
- x6 += y5
- x2 += offset1
- d1 = int64(math.Float64bits(x2))
- x0 += offset0
- d0 = int64(math.Float64bits(x0))
- x4 += offset2
- d2 = int64(math.Float64bits(x4))
- x6 += offset3
- d3 = int64(math.Float64bits(x6))
- f0 = uint64(d0)
- f1 = uint64(d1)
- bits32 = math.MaxUint64
- f2 = uint64(d2)
- bits32 >>= 32
- f3 = uint64(d3)
- f = f0 >> 32
- f0 &= bits32
- f &= 255
- f1 += f
- g0 = f0 + 5
- g = g0 >> 32
- g0 &= bits32
- f = f1 >> 32
- f1 &= bits32
- f &= 255
- g1 = f1 + g
- g = g1 >> 32
- f2 += f
- f = f2 >> 32
- g1 &= bits32
- f2 &= bits32
- f &= 255
- f3 += f
- g2 = f2 + g
- g = g2 >> 32
- g2 &= bits32
- f4 = f3 >> 32
- f3 &= bits32
- f4 &= 255
- g3 = f3 + g
- g = g3 >> 32
- g3 &= bits32
- g4 = f4 + g
- g4 = g4 - 4
- s00 = uint32(s[0])
- f = uint64(int64(g4) >> 63)
- s01 = uint32(s[1])
- f0 &= f
- g0 &^= f
- s02 = uint32(s[2])
- f1 &= f
- f0 |= g0
- s03 = uint32(s[3])
- g1 &^= f
- f2 &= f
- s10 = uint32(s[4])
- f3 &= f
- g2 &^= f
- s11 = uint32(s[5])
- g3 &^= f
- f1 |= g1
- s12 = uint32(s[6])
- f2 |= g2
- f3 |= g3
- s13 = uint32(s[7])
- s01 <<= 8
- f0 += uint64(s00)
- s20 = uint32(s[8])
- s02 <<= 16
- f0 += uint64(s01)
- s21 = uint32(s[9])
- s03 <<= 24
- f0 += uint64(s02)
- s22 = uint32(s[10])
- s11 <<= 8
- f1 += uint64(s10)
- s23 = uint32(s[11])
- s12 <<= 16
- f1 += uint64(s11)
- s30 = uint32(s[12])
- s13 <<= 24
- f1 += uint64(s12)
- s31 = uint32(s[13])
- f0 += uint64(s03)
- f1 += uint64(s13)
- s32 = uint32(s[14])
- s21 <<= 8
- f2 += uint64(s20)
- s33 = uint32(s[15])
- s22 <<= 16
- f2 += uint64(s21)
- s23 <<= 24
- f2 += uint64(s22)
- s31 <<= 8
- f3 += uint64(s30)
- s32 <<= 16
- f3 += uint64(s31)
- s33 <<= 24
- f3 += uint64(s32)
- f2 += uint64(s23)
- f3 += uint64(s33)
- out[0] = byte(f0)
- f0 >>= 8
- out[1] = byte(f0)
- f0 >>= 8
- out[2] = byte(f0)
- f0 >>= 8
- out[3] = byte(f0)
- f0 >>= 8
- f1 += f0
- out[4] = byte(f1)
- f1 >>= 8
- out[5] = byte(f1)
- f1 >>= 8
- out[6] = byte(f1)
- f1 >>= 8
- out[7] = byte(f1)
- f1 >>= 8
- f2 += f1
- out[8] = byte(f2)
- f2 >>= 8
- out[9] = byte(f2)
- f2 >>= 8
- out[10] = byte(f2)
- f2 >>= 8
- out[11] = byte(f2)
- f2 >>= 8
- f3 += f2
- out[12] = byte(f3)
- f3 >>= 8
- out[13] = byte(f3)
- f3 >>= 8
- out[14] = byte(f3)
- f3 >>= 8
- out[15] = byte(f3)
- }
|