github.com/deroproject/derosuite@v2.1.6-1.0.20200307070847-0f2e589c7a2b+incompatible/crypto/ringct/basic.go (about) 1 // Copyright 2017-2018 DERO Project. All rights reserved. 2 // Use of this source code in any form is governed by RESEARCH license. 3 // license can be found in the LICENSE file. 4 // GPG: 0F39 E425 8C65 3947 702A 8234 08B2 0360 A03A 9DE8 5 // 6 // 7 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 8 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 9 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 10 // THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 11 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 12 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 13 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 14 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 15 // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 17 package ringct 18 19 import "encoding/hex" 20 import "github.com/deroproject/derosuite/crypto" 21 22 // convert a hex string to a key 23 // a copy of these functions exists in the crypto package also 24 func HexToKey(h string) (result crypto.Key) { 25 byteSlice, _ := hex.DecodeString(h) 26 if len(byteSlice) != 32 { 27 panic("Incorrect key size") 28 } 29 copy(result[:], byteSlice) 30 return 31 } 32 33 func HexToHash(h string) (result crypto.Hash) { 34 byteSlice, _ := hex.DecodeString(h) 35 if len(byteSlice) != 32 { 36 panic("Incorrect key size") 37 } 38 copy(result[:], byteSlice) 39 return 40 } 41 42 // zero fill the key 43 func Sc_0(k *crypto.Key) { 44 for i := 0; i < 32; i++ { 45 k[i] = 0 46 } 47 } 48 49 // RandomPubKey takes a random scalar, interprets it as a point on the curve 50 // and then multiplies by 8 to make it a point in the Group 51 // remember the low order bug and do more auditing of the entire thing 52 func RandomPubKey() (result *crypto.Key) { 53 result = new(crypto.Key) 54 p3 := new(crypto.ExtendedGroupElement) 55 var p1 crypto.ProjectiveGroupElement 56 var p2 crypto.CompletedGroupElement 57 h := crypto.RandomScalar() 58 p1.FromBytes(h) 59 crypto.GeMul8(&p2, &p1) 60 p2.ToExtended(p3) 61 p3.ToBytes(result) 62 return 63 }