// Parse constructs a new KP from the provided string, which should be either // an address, or a seed. If the provided input is a seed, the resulting KP // will have signing capabilities. func Parse(addressOrSeed string) (KP, error) { _, err := strkey.Decode(strkey.VersionByteAccountID, addressOrSeed) if err == nil { return &FromAddress{addressOrSeed}, nil } if err != strkey.ErrInvalidVersionByte { return nil, err } _, err = strkey.Decode(strkey.VersionByteSeed, addressOrSeed) if err == nil { return &Full{addressOrSeed}, nil } return nil, err }
func (pl *PaymentListener) getMAC(key string, raw []byte) ([]byte, error) { rawkey, err := strkey.Decode(strkey.VersionByteSeed, pl.config.MACKey) if err != nil { return nil, errors.Wrap(err, "invalid MAC key") } macer := hmac.New(sha256.New, rawkey) macer.Write(raw) return macer.Sum(nil), nil }
func isStellarSeed(i interface{}, context interface{}) bool { enc, ok := i.(string) if !ok { return false } _, err := strkey.Decode(strkey.VersionByteSeed, enc) if err == nil { return true } return false }
func TestPostForm_MACKey(t *testing.T) { validKey := "SABLR5HOI2IUOYB27TR4TO7HWDJIGSRJTT4UUTXXZOFVVPGQKJ5ME43J" rawkey, err := strkey.Decode(strkey.VersionByteSeed, validKey) require.NoError(t, err) handler := http.NewServeMux() handler.HandleFunc("/no_mac", func(w http.ResponseWriter, req *http.Request) { assert.Empty(t, req.Header.Get("X_PAYLOAD_MAC"), "unexpected MAC present") }) handler.HandleFunc("/mac", func(w http.ResponseWriter, req *http.Request) { body, err := ioutil.ReadAll(req.Body) require.NoError(t, err) macer := hmac.New(sha256.New, rawkey) macer.Write(body) rawExpected := macer.Sum(nil) encExpected := base64.StdEncoding.EncodeToString(rawExpected) assert.Equal(t, encExpected, req.Header.Get("X_PAYLOAD_MAC"), "MAC is wrong") }) srv := httptest.NewServer(handler) defer srv.Close() cfg := &config.Config{} pl, err := NewPaymentListener(cfg, nil, nil, nil, nil) require.NoError(t, err) // no mac if the key is not set _, err = pl.postForm(srv.URL+"/no_mac", url.Values{"foo": []string{"base"}}) require.NoError(t, err) // generates a valid mac if a key is set. cfg.MACKey = validKey _, err = pl.postForm(srv.URL+"/mac", url.Values{"foo": []string{"base"}}) require.NoError(t, err) // errors is the key is invalid cfg.MACKey = "broken" _, err = pl.postForm(srv.URL+"/mac", url.Values{"foo": []string{"base"}}) if assert.Error(t, err) { assert.Contains(t, err.Error(), "invalid MAC key") } }
// SetAddress modifies the receiver, setting it's value to the AccountId form // of the provided address. func (aid *AccountId) SetAddress(address string) error { if aid == nil { return nil } raw, err := strkey.Decode(strkey.VersionByteAccountID, address) if err != nil { return err } if len(raw) != 32 { return errors.New("invalid address") } var ui Uint256 copy(ui[:], raw) *aid, err = NewAccountId(CryptoKeyTypeKeyTypeEd25519, ui) return err }