You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.8 KiB

  1. package nano
  2. import (
  3. "encoding/hex"
  4. "os"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestLedgerKeys(t *testing.T) {
  10. assert, require := assert.New(t), require.New(t)
  11. cases := []struct {
  12. msg, pubkey, sig string
  13. valid bool
  14. }{
  15. 0: {
  16. msg: "F00D",
  17. pubkey: "8E8754F012C2FDB492183D41437FD837CB81D8BBE731924E2E0DAF43FD3F2C93",
  18. sig: "787DC03E9E4EE05983E30BAE0DEFB8DB0671DBC2F5874AC93F8D8CA4018F7A42D6F9A9BCEADB422AC8E27CEE9CA205A0B88D22CD686F0A43EB806E8190A3C400",
  19. valid: true,
  20. },
  21. 1: {
  22. msg: "DEADBEEF",
  23. pubkey: "0C45ADC887A5463F668533443C829ED13EA8E2E890C778957DC28DB9D2AD5A6C",
  24. sig: "00ED74EED8FDAC7988A14BF6BC222120CBAC249D569AF4C2ADABFC86B792F97DF73C4919BE4B6B0ACB53547273BF29FBF0A9E0992FFAB6CB6C9B09311FC86A00",
  25. valid: true,
  26. },
  27. 2: {
  28. msg: "1234567890AA",
  29. pubkey: "598FC1F0C76363D14D7480736DEEF390D85863360F075792A6975EFA149FD7EA",
  30. sig: "59AAB7D7BDC4F936B6415DE672A8B77FA6B8B3451CD95B3A631F31F9A05DAEEE5E7E4F89B64DDEBB5F63DC042CA13B8FCB8185F82AD7FD5636FFDA6B0DC9570B",
  31. valid: true,
  32. },
  33. 3: {
  34. msg: "1234432112344321",
  35. pubkey: "359E0636E780457294CCA5D2D84DB190C3EDBD6879729C10D3963DEA1D5D8120",
  36. sig: "616B44EC7A65E7C719C170D669A47DE80C6AC0BB13FBCC89230976F9CC14D4CF9ECF26D4AFBB9FFF625599F1FF6F78EDA15E9F6B6BDCE07CFE9D8C407AC45208",
  37. valid: true,
  38. },
  39. 4: {
  40. msg: "12344321123443",
  41. pubkey: "359E0636E780457294CCA5D2D84DB190C3EDBD6879729C10D3963DEA1D5D8120",
  42. sig: "616B44EC7A65E7C719C170D669A47DE80C6AC0BB13FBCC89230976F9CC14D4CF9ECF26D4AFBB9FFF625599F1FF6F78EDA15E9F6B6BDCE07CFE9D8C407AC45208",
  43. valid: false,
  44. },
  45. 5: {
  46. msg: "1234432112344321",
  47. pubkey: "459E0636E780457294CCA5D2D84DB190C3EDBD6879729C10D3963DEA1D5D8120",
  48. sig: "616B44EC7A65E7C719C170D669A47DE80C6AC0BB13FBCC89230976F9CC14D4CF9ECF26D4AFBB9FFF625599F1FF6F78EDA15E9F6B6BDCE07CFE9D8C407AC45208",
  49. valid: false,
  50. },
  51. 6: {
  52. msg: "1234432112344321",
  53. pubkey: "359E0636E780457294CCA5D2D84DB190C3EDBD6879729C10D3963DEA1D5D8120",
  54. sig: "716B44EC7A65E7C719C170D669A47DE80C6AC0BB13FBCC89230976F9CC14D4CF9ECF26D4AFBB9FFF625599F1FF6F78EDA15E9F6B6BDCE07CFE9D8C407AC45208",
  55. valid: false,
  56. },
  57. }
  58. for i, tc := range cases {
  59. bmsg, err := hex.DecodeString(tc.msg)
  60. require.NoError(err, "%d", i)
  61. priv := NewMockKey(tc.msg, tc.pubkey, tc.sig)
  62. pub := priv.PubKey()
  63. sig := priv.Sign(bmsg)
  64. valid := pub.VerifyBytes(bmsg, sig)
  65. assert.Equal(tc.valid, valid, "%d", i)
  66. }
  67. }
  68. func TestRealLedger(t *testing.T) {
  69. if os.Getenv("WITH_LEDGER") == "" {
  70. t.Skip("Set WITH_LEDGER to run code on real ledger")
  71. }
  72. priv := NewPrivKeyLedger()
  73. msg := []byte("kuhehfeohg")
  74. sig := priv.Sign(msg)
  75. pub := priv.PubKey()
  76. valid := pub.VerifyBytes(msg, sig)
  77. assert.True(t, valid)
  78. }