github.com/metacurrency/holochain@v0.1.0-alpha-26.0.20200915073418-5c83169c9b5b/action_sign.go (about) 1 package holochain 2 3 import ( 4 ic "github.com/libp2p/go-libp2p-crypto" 5 ) 6 7 //------------------------------------------------------------ 8 // Sign 9 10 type APIFnSign struct { 11 data []byte 12 } 13 14 func (a *APIFnSign) Name() string { 15 return "sign" 16 } 17 18 func (a *APIFnSign) Args() []Arg { 19 return []Arg{{Name: "data", Type: StringArg}} 20 } 21 22 func (a *APIFnSign) Call(h *Holochain) (response interface{}, err error) { 23 var sig Signature 24 sig, err = h.Sign(a.data) 25 if err != nil { 26 return 27 } 28 response = sig.B58String() 29 return 30 } 31 32 //------------------------------------------------------------ 33 // VerifySignature 34 35 type APIFnVerifySignature struct { 36 b58signature string 37 data string 38 b58pubKey string 39 } 40 41 func (a *APIFnVerifySignature) Name() string { 42 return "verifySignature" 43 } 44 45 func (a *APIFnVerifySignature) Args() []Arg { 46 return []Arg{{Name: "signature", Type: StringArg}, {Name: "data", Type: StringArg}, {Name: "pubKey", Type: StringArg}} 47 } 48 49 func (a *APIFnVerifySignature) Call(h *Holochain) (response interface{}, err error) { 50 var b bool 51 var pubKey ic.PubKey 52 sig := SignatureFromB58String(a.b58signature) 53 54 pubKey, err = DecodePubKey(a.b58pubKey) 55 56 b, err = h.VerifySignature(sig, a.data, pubKey) 57 if err != nil { 58 return 59 } 60 response = b 61 return 62 }