Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
3e21adc6
Unverified
Commit
3e21adc6
authored
Aug 09, 2018
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crypto/bn256: fix issues caused by Go 1.11
parent
2cdf6ee7
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
311 additions
and
17 deletions
+311
-17
gfp_amd64.s
crypto/bn256/cloudflare/gfp_amd64.s
+1
-1
gfp_decl.go
crypto/bn256/cloudflare/gfp_decl.go
+7
-0
bn256.go
crypto/bn256/google/bn256.go
+26
-14
curve.go
crypto/bn256/google/curve.go
+9
-1
twist.go
crypto/bn256/google/twist.go
+9
-1
cpu.go
vendor/golang.org/x/sys/cpu/cpu.go
+38
-0
cpu_arm.go
vendor/golang.org/x/sys/cpu/cpu_arm.go
+7
-0
cpu_arm64.go
vendor/golang.org/x/sys/cpu/cpu_arm64.go
+7
-0
cpu_gc_x86.go
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
+16
-0
cpu_gccgo.c
vendor/golang.org/x/sys/cpu/cpu_gccgo.c
+43
-0
cpu_gccgo.go
vendor/golang.org/x/sys/cpu/cpu_gccgo.go
+26
-0
cpu_mips64x.go
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
+9
-0
cpu_mipsx.go
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
+9
-0
cpu_ppc64x.go
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
+9
-0
cpu_s390x.go
vendor/golang.org/x/sys/cpu/cpu_s390x.go
+7
-0
cpu_x86.go
vendor/golang.org/x/sys/cpu/cpu_x86.go
+55
-0
cpu_x86.s
vendor/golang.org/x/sys/cpu/cpu_x86.s
+27
-0
vendor.json
vendor/vendor.json
+6
-0
No files found.
crypto/bn256/cloudflare/gfp_amd64.s
View file @
3e21adc6
...
...
@@ -110,7 +110,7 @@ TEXT ·gfpMul(SB),0,$160-24
MOVQ b+16(FP), SI
// Jump to a slightly different implementation if MULX isn't supported.
CMPB
runtime·support_bmi
2(SB), $0
CMPB
·hasBMI
2(SB), $0
JE nobmi2Mul
mulBMI2(0(DI),8(DI),16(DI),24(DI), 0(SI))
...
...
crypto/bn256/cloudflare/gfp_decl.go
View file @
3e21adc6
...
...
@@ -5,6 +5,13 @@ package bn256
// This file contains forward declarations for the architecture-specific
// assembly implementations of these functions, provided that they exist.
import
(
"golang.org/x/sys/cpu"
)
//nolint:varcheck
var
hasBMI2
=
cpu
.
X86
.
HasBMI2
// go:noescape
func
gfpNeg
(
c
,
a
*
gfP
)
...
...
crypto/bn256/google/bn256.go
View file @
3e21adc6
...
...
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package bn256 implements a particular bilinear group
at the 128-bit security level
.
// Package bn256 implements a particular bilinear group.
//
// Bilinear groups are the basis of many of the new cryptographic protocols
// that have been proposed over the past decade. They consist of a triplet of
...
...
@@ -14,6 +14,10 @@
// Barreto-Naehrig curve as described in
// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible
// with the implementation described in that paper.
//
// (This package previously claimed to operate at a 128-bit security level.
// However, recent improvements in attacks mean that is no longer true. See
// https://moderncrypto.org/mail-archive/curves/2016/000740.html.)
package
bn256
import
(
...
...
@@ -50,8 +54,8 @@ func RandomG1(r io.Reader) (*big.Int, *G1, error) {
return
k
,
new
(
G1
)
.
ScalarBaseMult
(
k
),
nil
}
func
(
g
*
G1
)
String
()
string
{
return
"bn256.G1"
+
g
.
p
.
String
()
func
(
e
*
G1
)
String
()
string
{
return
"bn256.G1"
+
e
.
p
.
String
()
}
// CurvePoints returns p's curve points in big integer
...
...
@@ -98,15 +102,19 @@ func (e *G1) Neg(a *G1) *G1 {
}
// Marshal converts n to a byte slice.
func
(
n
*
G1
)
Marshal
()
[]
byte
{
n
.
p
.
MakeAffine
(
nil
)
xBytes
:=
new
(
big
.
Int
)
.
Mod
(
n
.
p
.
x
,
P
)
.
Bytes
()
yBytes
:=
new
(
big
.
Int
)
.
Mod
(
n
.
p
.
y
,
P
)
.
Bytes
()
func
(
e
*
G1
)
Marshal
()
[]
byte
{
// Each value is a 256-bit number.
const
numBytes
=
256
/
8
if
e
.
p
.
IsInfinity
()
{
return
make
([]
byte
,
numBytes
*
2
)
}
e
.
p
.
MakeAffine
(
nil
)
xBytes
:=
new
(
big
.
Int
)
.
Mod
(
e
.
p
.
x
,
P
)
.
Bytes
()
yBytes
:=
new
(
big
.
Int
)
.
Mod
(
e
.
p
.
y
,
P
)
.
Bytes
()
ret
:=
make
([]
byte
,
numBytes
*
2
)
copy
(
ret
[
1
*
numBytes
-
len
(
xBytes
)
:
],
xBytes
)
copy
(
ret
[
2
*
numBytes
-
len
(
yBytes
)
:
],
yBytes
)
...
...
@@ -175,8 +183,8 @@ func RandomG2(r io.Reader) (*big.Int, *G2, error) {
return
k
,
new
(
G2
)
.
ScalarBaseMult
(
k
),
nil
}
func
(
g
*
G2
)
String
()
string
{
return
"bn256.G2"
+
g
.
p
.
String
()
func
(
e
*
G2
)
String
()
string
{
return
"bn256.G2"
+
e
.
p
.
String
()
}
// CurvePoints returns the curve points of p which includes the real
...
...
@@ -216,6 +224,13 @@ func (e *G2) Add(a, b *G2) *G2 {
// Marshal converts n into a byte slice.
func
(
n
*
G2
)
Marshal
()
[]
byte
{
// Each value is a 256-bit number.
const
numBytes
=
256
/
8
if
n
.
p
.
IsInfinity
()
{
return
make
([]
byte
,
numBytes
*
4
)
}
n
.
p
.
MakeAffine
(
nil
)
xxBytes
:=
new
(
big
.
Int
)
.
Mod
(
n
.
p
.
x
.
x
,
P
)
.
Bytes
()
...
...
@@ -223,9 +238,6 @@ func (n *G2) Marshal() []byte {
yxBytes
:=
new
(
big
.
Int
)
.
Mod
(
n
.
p
.
y
.
x
,
P
)
.
Bytes
()
yyBytes
:=
new
(
big
.
Int
)
.
Mod
(
n
.
p
.
y
.
y
,
P
)
.
Bytes
()
// Each value is a 256-bit number.
const
numBytes
=
256
/
8
ret
:=
make
([]
byte
,
numBytes
*
4
)
copy
(
ret
[
1
*
numBytes
-
len
(
xxBytes
)
:
],
xxBytes
)
copy
(
ret
[
2
*
numBytes
-
len
(
xyBytes
)
:
],
xyBytes
)
...
...
crypto/bn256/google/curve.go
View file @
3e21adc6
...
...
@@ -245,11 +245,19 @@ func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int, pool *bnPool) *curvePoi
return
c
}
// MakeAffine converts c to affine form and returns c. If c is ∞, then it sets
// c to 0 : 1 : 0.
func
(
c
*
curvePoint
)
MakeAffine
(
pool
*
bnPool
)
*
curvePoint
{
if
words
:=
c
.
z
.
Bits
();
len
(
words
)
==
1
&&
words
[
0
]
==
1
{
return
c
}
if
c
.
IsInfinity
()
{
c
.
x
.
SetInt64
(
0
)
c
.
y
.
SetInt64
(
1
)
c
.
z
.
SetInt64
(
0
)
c
.
t
.
SetInt64
(
0
)
return
c
}
zInv
:=
pool
.
Get
()
.
ModInverse
(
c
.
z
,
P
)
t
:=
pool
.
Get
()
.
Mul
(
c
.
y
,
zInv
)
t
.
Mod
(
t
,
P
)
...
...
crypto/bn256/google/twist.go
View file @
3e21adc6
...
...
@@ -225,11 +225,19 @@ func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int, pool *bnPool) *twistPoi
return
c
}
// MakeAffine converts c to affine form and returns c. If c is ∞, then it sets
// c to 0 : 1 : 0.
func
(
c
*
twistPoint
)
MakeAffine
(
pool
*
bnPool
)
*
twistPoint
{
if
c
.
z
.
IsOne
()
{
return
c
}
if
c
.
IsInfinity
()
{
c
.
x
.
SetZero
()
c
.
y
.
SetOne
()
c
.
z
.
SetZero
()
c
.
t
.
SetZero
()
return
c
}
zInv
:=
newGFp2
(
pool
)
.
Invert
(
c
.
z
,
pool
)
t
:=
newGFp2
(
pool
)
.
Mul
(
c
.
y
,
zInv
,
pool
)
zInv2
:=
newGFp2
(
pool
)
.
Square
(
zInv
,
pool
)
...
...
vendor/golang.org/x/sys/cpu/cpu.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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 cpu implements processor feature detection for
// various CPU architectures.
package
cpu
// CacheLinePad is used to pad structs to avoid false sharing.
type
CacheLinePad
struct
{
_
[
cacheLineSize
]
byte
}
// X86 contains the supported CPU features of the
// current X86/AMD64 platform. If the current platform
// is not X86/AMD64 then all feature flags are false.
//
// X86 is padded to avoid false sharing. Further the HasAVX
// and HasAVX2 are only set if the OS supports XMM and YMM
// registers in addition to the CPUID feature bit being set.
var
X86
struct
{
_
CacheLinePad
HasAES
bool
// AES hardware implementation (AES NI)
HasADX
bool
// Multi-precision add-carry instruction extensions
HasAVX
bool
// Advanced vector extension
HasAVX2
bool
// Advanced vector extension 2
HasBMI1
bool
// Bit manipulation instruction set 1
HasBMI2
bool
// Bit manipulation instruction set 2
HasERMS
bool
// Enhanced REP for MOVSB and STOSB
HasFMA
bool
// Fused-multiply-add instructions
HasOSXSAVE
bool
// OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
HasPCLMULQDQ
bool
// PCLMULQDQ instruction - most often used for AES-GCM
HasPOPCNT
bool
// Hamming weight instruction POPCNT.
HasSSE2
bool
// Streaming SIMD extension 2 (always available on amd64)
HasSSE3
bool
// Streaming SIMD extension 3
HasSSSE3
bool
// Supplemental streaming SIMD extension 3
HasSSE41
bool
// Streaming SIMD extension 4 and 4.1
HasSSE42
bool
// Streaming SIMD extension 4 and 4.2
_
CacheLinePad
}
vendor/golang.org/x/sys/cpu/cpu_arm.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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
cpu
const
cacheLineSize
=
32
vendor/golang.org/x/sys/cpu/cpu_arm64.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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
cpu
const
cacheLineSize
=
64
vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build 386 amd64 amd64p32
// +build !gccgo
package
cpu
// cpuid is implemented in cpu_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func
cpuid
(
eaxArg
,
ecxArg
uint32
)
(
eax
,
ebx
,
ecx
,
edx
uint32
)
// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func
xgetbv
()
(
eax
,
edx
uint32
)
vendor/golang.org/x/sys/cpu/cpu_gccgo.c
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build 386 amd64 amd64p32
// +build gccgo
#include <cpuid.h>
#include <stdint.h>
// Need to wrap __get_cpuid_count because it's declared as static.
int
gccgoGetCpuidCount
(
uint32_t
leaf
,
uint32_t
subleaf
,
uint32_t
*
eax
,
uint32_t
*
ebx
,
uint32_t
*
ecx
,
uint32_t
*
edx
)
{
return
__get_cpuid_count
(
leaf
,
subleaf
,
eax
,
ebx
,
ecx
,
edx
);
}
// xgetbv reads the contents of an XCR (Extended Control Register)
// specified in the ECX register into registers EDX:EAX.
// Currently, the only supported value for XCR is 0.
//
// TODO: Replace with a better alternative:
//
// #include <xsaveintrin.h>
//
// #pragma GCC target("xsave")
//
// void gccgoXgetbv(uint32_t *eax, uint32_t *edx) {
// unsigned long long x = _xgetbv(0);
// *eax = x & 0xffffffff;
// *edx = (x >> 32) & 0xffffffff;
// }
//
// Note that _xgetbv is defined starting with GCC 8.
void
gccgoXgetbv
(
uint32_t
*
eax
,
uint32_t
*
edx
)
{
__asm
(
" xorl %%ecx, %%ecx
\n
"
" xgetbv"
:
"=a"
(
*
eax
),
"=d"
(
*
edx
));
}
vendor/golang.org/x/sys/cpu/cpu_gccgo.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build 386 amd64 amd64p32
// +build gccgo
package
cpu
//extern gccgoGetCpuidCount
func
gccgoGetCpuidCount
(
eaxArg
,
ecxArg
uint32
,
eax
,
ebx
,
ecx
,
edx
*
uint32
)
func
cpuid
(
eaxArg
,
ecxArg
uint32
)
(
eax
,
ebx
,
ecx
,
edx
uint32
)
{
var
a
,
b
,
c
,
d
uint32
gccgoGetCpuidCount
(
eaxArg
,
ecxArg
,
&
a
,
&
b
,
&
c
,
&
d
)
return
a
,
b
,
c
,
d
}
//extern gccgoXgetbv
func
gccgoXgetbv
(
eax
,
edx
*
uint32
)
func
xgetbv
()
(
eax
,
edx
uint32
)
{
var
a
,
d
uint32
gccgoXgetbv
(
&
a
,
&
d
)
return
a
,
d
}
vendor/golang.org/x/sys/cpu/cpu_mips64x.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build mips64 mips64le
package
cpu
const
cacheLineSize
=
32
vendor/golang.org/x/sys/cpu/cpu_mipsx.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build mips mipsle
package
cpu
const
cacheLineSize
=
32
vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build ppc64 ppc64le
package
cpu
const
cacheLineSize
=
128
vendor/golang.org/x/sys/cpu/cpu_s390x.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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
cpu
const
cacheLineSize
=
256
vendor/golang.org/x/sys/cpu/cpu_x86.go
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build 386 amd64 amd64p32
package
cpu
const
cacheLineSize
=
64
func
init
()
{
maxID
,
_
,
_
,
_
:=
cpuid
(
0
,
0
)
if
maxID
<
1
{
return
}
_
,
_
,
ecx1
,
edx1
:=
cpuid
(
1
,
0
)
X86
.
HasSSE2
=
isSet
(
26
,
edx1
)
X86
.
HasSSE3
=
isSet
(
0
,
ecx1
)
X86
.
HasPCLMULQDQ
=
isSet
(
1
,
ecx1
)
X86
.
HasSSSE3
=
isSet
(
9
,
ecx1
)
X86
.
HasFMA
=
isSet
(
12
,
ecx1
)
X86
.
HasSSE41
=
isSet
(
19
,
ecx1
)
X86
.
HasSSE42
=
isSet
(
20
,
ecx1
)
X86
.
HasPOPCNT
=
isSet
(
23
,
ecx1
)
X86
.
HasAES
=
isSet
(
25
,
ecx1
)
X86
.
HasOSXSAVE
=
isSet
(
27
,
ecx1
)
osSupportsAVX
:=
false
// For XGETBV, OSXSAVE bit is required and sufficient.
if
X86
.
HasOSXSAVE
{
eax
,
_
:=
xgetbv
()
// Check if XMM and YMM registers have OS support.
osSupportsAVX
=
isSet
(
1
,
eax
)
&&
isSet
(
2
,
eax
)
}
X86
.
HasAVX
=
isSet
(
28
,
ecx1
)
&&
osSupportsAVX
if
maxID
<
7
{
return
}
_
,
ebx7
,
_
,
_
:=
cpuid
(
7
,
0
)
X86
.
HasBMI1
=
isSet
(
3
,
ebx7
)
X86
.
HasAVX2
=
isSet
(
5
,
ebx7
)
&&
osSupportsAVX
X86
.
HasBMI2
=
isSet
(
8
,
ebx7
)
X86
.
HasERMS
=
isSet
(
9
,
ebx7
)
X86
.
HasADX
=
isSet
(
19
,
ebx7
)
}
func
isSet
(
bitpos
uint
,
value
uint32
)
bool
{
return
value
&
(
1
<<
bitpos
)
!=
0
}
vendor/golang.org/x/sys/cpu/cpu_x86.s
0 → 100644
View file @
3e21adc6
// Copyright 2018 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.
// +build 386 amd64 amd64p32
// +build !gccgo
#include "textflag.h"
// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
TEXT ·cpuid(SB), NOSPLIT, $0-24
MOVL eaxArg+0(FP), AX
MOVL ecxArg+4(FP), CX
CPUID
MOVL AX, eax+8(FP)
MOVL BX, ebx+12(FP)
MOVL CX, ecx+16(FP)
MOVL DX, edx+20(FP)
RET
// func xgetbv() (eax, edx uint32)
TEXT ·xgetbv(SB),NOSPLIT,$0-8
MOVL $0, CX
XGETBV
MOVL AX, eax+0(FP)
MOVL DX, edx+4(FP)
RET
vendor/vendor.json
View file @
3e21adc6
...
...
@@ -747,6 +747,12 @@
"revision"
:
"f52d1811a62927559de87708c8913c1650ce4f26"
,
"revisionTime"
:
"2017-05-17T20:25:26Z"
},
{
"checksumSHA1"
:
"REkmyB368pIiip76LiqMLspgCRk="
,
"path"
:
"golang.org/x/sys/cpu"
,
"revision"
:
"904bdc257025c7b3f43c19360ad3ab85783fad78"
,
"revisionTime"
:
"2018-08-08T08:17:46Z"
},
{
"checksumSHA1"
:
"r1jWq0V3AI5DLN0aCnXXMH/is9Q="
,
"path"
:
"golang.org/x/sys/unix"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment