github.com/gopherjs/gopherjs@v1.19.0-beta1.0.20240506212314-27071a8796e4/compiler/natives/src/crypto/internal/nistec/wrapper.go (about) 1 //go:build js 2 // +build js 3 4 package nistec 5 6 type WrappedPoint interface { 7 Bytes() []byte 8 SetBytes(b []byte) (WrappedPoint, error) 9 Add(w1, w2 WrappedPoint) WrappedPoint 10 Double(w1 WrappedPoint) WrappedPoint 11 ScalarMult(w1 WrappedPoint, scalar []byte) (WrappedPoint, error) 12 ScalarBaseMult(scalar []byte) (WrappedPoint, error) 13 } 14 15 type p224Wrapper struct { 16 point *P224Point 17 } 18 19 func wrapP224(point *P224Point) WrappedPoint { 20 return p224Wrapper{point: point} 21 } 22 23 func NewP224WrappedPoint() WrappedPoint { 24 return wrapP224(NewP224Point()) 25 } 26 27 func NewP224WrappedGenerator() WrappedPoint { 28 return wrapP224(NewP224Generator()) 29 } 30 31 func (w p224Wrapper) Bytes() []byte { 32 return w.point.Bytes() 33 } 34 35 func (w p224Wrapper) SetBytes(b []byte) (WrappedPoint, error) { 36 p, err := w.point.SetBytes(b) 37 return wrapP224(p), err 38 } 39 40 func (w p224Wrapper) Add(w1, w2 WrappedPoint) WrappedPoint { 41 return wrapP224(w.point.Add(w1.(p224Wrapper).point, w2.(p224Wrapper).point)) 42 } 43 44 func (w p224Wrapper) Double(w1 WrappedPoint) WrappedPoint { 45 return wrapP224(w.point.Double(w1.(p224Wrapper).point)) 46 } 47 48 func (w p224Wrapper) ScalarMult(w1 WrappedPoint, scalar []byte) (WrappedPoint, error) { 49 p, err := w.point.ScalarMult(w1.(p224Wrapper).point, scalar) 50 return wrapP224(p), err 51 } 52 53 func (w p224Wrapper) ScalarBaseMult(scalar []byte) (WrappedPoint, error) { 54 p, err := w.point.ScalarBaseMult(scalar) 55 return wrapP224(p), err 56 } 57 58 type p256Wrapper struct { 59 point *P256Point 60 } 61 62 func wrapP256(point *P256Point) WrappedPoint { 63 return p256Wrapper{point: point} 64 } 65 66 func NewP256WrappedPoint() WrappedPoint { 67 return wrapP256(NewP256Point()) 68 } 69 70 func NewP256WrappedGenerator() WrappedPoint { 71 return wrapP256(NewP256Generator()) 72 } 73 74 func (w p256Wrapper) Bytes() []byte { 75 return w.point.Bytes() 76 } 77 78 func (w p256Wrapper) SetBytes(b []byte) (WrappedPoint, error) { 79 p, err := w.point.SetBytes(b) 80 return wrapP256(p), err 81 } 82 83 func (w p256Wrapper) Add(w1, w2 WrappedPoint) WrappedPoint { 84 return wrapP256(w.point.Add(w1.(p256Wrapper).point, w2.(p256Wrapper).point)) 85 } 86 87 func (w p256Wrapper) Double(w1 WrappedPoint) WrappedPoint { 88 return wrapP256(w.point.Double(w1.(p256Wrapper).point)) 89 } 90 91 func (w p256Wrapper) ScalarMult(w1 WrappedPoint, scalar []byte) (WrappedPoint, error) { 92 p, err := w.point.ScalarMult(w1.(p256Wrapper).point, scalar) 93 return wrapP256(p), err 94 } 95 96 func (w p256Wrapper) ScalarBaseMult(scalar []byte) (WrappedPoint, error) { 97 p, err := w.point.ScalarBaseMult(scalar) 98 return wrapP256(p), err 99 } 100 101 type p521Wrapper struct { 102 point *P521Point 103 } 104 105 func wrapP521(point *P521Point) WrappedPoint { 106 return p521Wrapper{point: point} 107 } 108 109 func NewP521WrappedPoint() WrappedPoint { 110 return wrapP521(NewP521Point()) 111 } 112 113 func NewP521WrappedGenerator() WrappedPoint { 114 return wrapP521(NewP521Generator()) 115 } 116 117 func (w p521Wrapper) Bytes() []byte { 118 return w.point.Bytes() 119 } 120 121 func (w p521Wrapper) SetBytes(b []byte) (WrappedPoint, error) { 122 p, err := w.point.SetBytes(b) 123 return wrapP521(p), err 124 } 125 126 func (w p521Wrapper) Add(w1, w2 WrappedPoint) WrappedPoint { 127 return wrapP521(w.point.Add(w1.(p521Wrapper).point, w2.(p521Wrapper).point)) 128 } 129 130 func (w p521Wrapper) Double(w1 WrappedPoint) WrappedPoint { 131 return wrapP521(w.point.Double(w1.(p521Wrapper).point)) 132 } 133 134 func (w p521Wrapper) ScalarMult(w1 WrappedPoint, scalar []byte) (WrappedPoint, error) { 135 p, err := w.point.ScalarMult(w1.(p521Wrapper).point, scalar) 136 return wrapP521(p), err 137 } 138 139 func (w p521Wrapper) ScalarBaseMult(scalar []byte) (WrappedPoint, error) { 140 p, err := w.point.ScalarBaseMult(scalar) 141 return wrapP521(p), err 142 } 143 144 type p384Wrapper struct { 145 point *P384Point 146 } 147 148 func wrapP384(point *P384Point) WrappedPoint { 149 return p384Wrapper{point: point} 150 } 151 152 func NewP384WrappedPoint() WrappedPoint { 153 return wrapP384(NewP384Point()) 154 } 155 156 func NewP384WrappedGenerator() WrappedPoint { 157 return wrapP384(NewP384Generator()) 158 } 159 160 func (w p384Wrapper) Bytes() []byte { 161 return w.point.Bytes() 162 } 163 164 func (w p384Wrapper) SetBytes(b []byte) (WrappedPoint, error) { 165 p, err := w.point.SetBytes(b) 166 return wrapP384(p), err 167 } 168 169 func (w p384Wrapper) Add(w1, w2 WrappedPoint) WrappedPoint { 170 return wrapP384(w.point.Add(w1.(p384Wrapper).point, w2.(p384Wrapper).point)) 171 } 172 173 func (w p384Wrapper) Double(w1 WrappedPoint) WrappedPoint { 174 return wrapP384(w.point.Double(w1.(p384Wrapper).point)) 175 } 176 177 func (w p384Wrapper) ScalarMult(w1 WrappedPoint, scalar []byte) (WrappedPoint, error) { 178 p, err := w.point.ScalarMult(w1.(p384Wrapper).point, scalar) 179 return wrapP384(p), err 180 } 181 182 func (w p384Wrapper) ScalarBaseMult(scalar []byte) (WrappedPoint, error) { 183 p, err := w.point.ScalarBaseMult(scalar) 184 return wrapP384(p), err 185 }