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  }