mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Switch to keybase go-crypto (for some elliptic curve key) + test (#1925)
* Switch to keybase go-crypto (for some elliptic curve key) + test
* Use assert.NoError 
and add a little more context to failing test description
* Use assert.(No)Error everywhere 🌈
and assert.Error in place of .Nil/.NotNil
			
			
This commit is contained in:
		
				
					committed by
					
						 Lunny Xiao
						Lunny Xiao
					
				
			
			
				
	
			
			
			
						parent
						
							5e92b82ac6
						
					
				
				
					commit
					274149dd14
				
			
							
								
								
									
										83
									
								
								vendor/github.com/keybase/go-crypto/brainpool/rcurve.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								vendor/github.com/keybase/go-crypto/brainpool/rcurve.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| package brainpool | ||||
|  | ||||
| import ( | ||||
| 	"crypto/elliptic" | ||||
| 	"math/big" | ||||
| ) | ||||
|  | ||||
| var _ elliptic.Curve = (*rcurve)(nil) | ||||
|  | ||||
| type rcurve struct { | ||||
| 	twisted elliptic.Curve | ||||
| 	params  *elliptic.CurveParams | ||||
| 	z       *big.Int | ||||
| 	zinv    *big.Int | ||||
| 	z2      *big.Int | ||||
| 	z3      *big.Int | ||||
| 	zinv2   *big.Int | ||||
| 	zinv3   *big.Int | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	two   = big.NewInt(2) | ||||
| 	three = big.NewInt(3) | ||||
| ) | ||||
|  | ||||
| func newrcurve(twisted elliptic.Curve, params *elliptic.CurveParams, z *big.Int) *rcurve { | ||||
| 	zinv := new(big.Int).ModInverse(z, params.P) | ||||
| 	return &rcurve{ | ||||
| 		twisted: twisted, | ||||
| 		params:  params, | ||||
| 		z:       z, | ||||
| 		zinv:    zinv, | ||||
| 		z2:      new(big.Int).Exp(z, two, params.P), | ||||
| 		z3:      new(big.Int).Exp(z, three, params.P), | ||||
| 		zinv2:   new(big.Int).Exp(zinv, two, params.P), | ||||
| 		zinv3:   new(big.Int).Exp(zinv, three, params.P), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) toTwisted(x, y *big.Int) (*big.Int, *big.Int) { | ||||
| 	var tx, ty big.Int | ||||
| 	tx.Mul(x, curve.z2) | ||||
| 	tx.Mod(&tx, curve.params.P) | ||||
| 	ty.Mul(y, curve.z3) | ||||
| 	ty.Mod(&ty, curve.params.P) | ||||
| 	return &tx, &ty | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) fromTwisted(tx, ty *big.Int) (*big.Int, *big.Int) { | ||||
| 	var x, y big.Int | ||||
| 	x.Mul(tx, curve.zinv2) | ||||
| 	x.Mod(&x, curve.params.P) | ||||
| 	y.Mul(ty, curve.zinv3) | ||||
| 	y.Mod(&y, curve.params.P) | ||||
| 	return &x, &y | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) Params() *elliptic.CurveParams { | ||||
| 	return curve.params | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) IsOnCurve(x, y *big.Int) bool { | ||||
| 	return curve.twisted.IsOnCurve(curve.toTwisted(x, y)) | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) { | ||||
| 	tx1, ty1 := curve.toTwisted(x1, y1) | ||||
| 	tx2, ty2 := curve.toTwisted(x2, y2) | ||||
| 	return curve.fromTwisted(curve.twisted.Add(tx1, ty1, tx2, ty2)) | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) Double(x1, y1 *big.Int) (x, y *big.Int) { | ||||
| 	return curve.fromTwisted(curve.twisted.Double(curve.toTwisted(x1, y1))) | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) ScalarMult(x1, y1 *big.Int, scalar []byte) (x, y *big.Int) { | ||||
| 	tx1, ty1 := curve.toTwisted(x1, y1) | ||||
| 	return curve.fromTwisted(curve.twisted.ScalarMult(tx1, ty1, scalar)) | ||||
| } | ||||
|  | ||||
| func (curve *rcurve) ScalarBaseMult(scalar []byte) (x, y *big.Int) { | ||||
| 	return curve.fromTwisted(curve.twisted.ScalarBaseMult(scalar)) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user