github.com/braveheart12/insolar-09-08-19@v0.8.7/platformpolicy/internal/sign/wrapper.go (about) 1 /* 2 * Copyright 2019 Insolar Technologies 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package sign 18 19 import ( 20 "crypto/ecdsa" 21 "crypto/rand" 22 23 "github.com/insolar/insolar/core" 24 "github.com/insolar/insolar/log" 25 "github.com/pkg/errors" 26 ) 27 28 type ecdsaSignerWrapper struct { 29 privateKey *ecdsa.PrivateKey 30 hasher core.Hasher 31 } 32 33 func (sw *ecdsaSignerWrapper) Sign(data []byte) (*core.Signature, error) { 34 hash := sw.hasher.Hash(data) 35 36 r, s, err := ecdsa.Sign(rand.Reader, sw.privateKey, hash) 37 if err != nil { 38 return nil, errors.Wrap(err, "[ Sign ] could't sign data") 39 } 40 41 ecdsaSignature := SerializeTwoBigInt(r, s) 42 if err != nil { 43 return nil, errors.Wrap(err, "[ Sign ] could't sign data") 44 } 45 46 signature := core.SignatureFromBytes(ecdsaSignature) 47 return &signature, nil 48 } 49 50 type ecdsaVerifyWrapper struct { 51 publicKey *ecdsa.PublicKey 52 hasher core.Hasher 53 } 54 55 func (sw *ecdsaVerifyWrapper) Verify(signature core.Signature, data []byte) bool { 56 if signature.Bytes() == nil { 57 return false 58 } 59 r, s, err := DeserializeTwoBigInt(signature.Bytes()) 60 if err != nil { 61 log.Error(err) 62 return false 63 } 64 65 hash := sw.hasher.Hash(data) 66 return ecdsa.Verify(sw.publicKey, hash, r, s) 67 }