func (sig *JSONSignature) UnmarshalJSON(data []byte) error {
	sig.Signature = nil
	if s, err := jose.ParseSigned(string(data)); nil != err {
		return err
	} else {
		sig.Signature = s
		return nil
	}
}
func (skey SigningKey) Verify(signature string, payload *[]byte, nonce *string) error {
	if sig, err := jose.ParseSigned(signature); nil != err {
		return err
	} else if sigPayload, sigHeader, err := sig.Verify(skey.GetPublicKey()); nil != err {
		return err
	} else {
		if nil != nonce {
			*nonce = sigHeader.Nonce
		}
		if nil != payload {
			*payload = sigPayload
		}
		return nil
	}
}