Update `normal.bundle` to account for stricter Lexer validations.

This commit is contained in:
Netscape Navigator 2020-04-03 04:41:03 -05:00
parent 4f33b42f63
commit 0fcc94d7c1
4 changed files with 42 additions and 26 deletions

View File

@ -41,6 +41,7 @@ Eg: `pigeon identity show` becomes `./pigeon-cli show`.
- [X] Put all the [HEADER, string, FOOTER].join("") nonsense into Pigeon::Helpers
- [X] Use raw SHA256 hashes for blob multihashes, not hex.
- [X] Change all the `{40,90}` values in ::Lexer to real length values
- [ ] Is it possible signature verification is failing beecause a CR is being prepended to the front?
- [ ] Rename (RemoteIdentity|LocalIdentity)#public_key to #multihash for consistency with other types.
- [ ] Rename `message find` to `message read`, since other finders return a multihash.
- [ ] Don't allow carriage return in `kind` or `string` keys. Write a test for this.

13
dist/pigeon/lexer.rb vendored
View File

@ -6,10 +6,11 @@ module Pigeon
DEPTH_COUNT = /\d{1,7}/
NULL_VALUE = /NONE/
FEED_VALUE = /@.{44}\.ed25519/
MESG_VALUE = /%.{43}\.sha256/
BLOB_VALUE = /&.{43}\.sha256/
STRG_VALUE = /".{1,64}"/
B64LIKE = /[a-zA-Z0-9_\-=]{1,64}/
MESG_VALUE = /%.{44}\.sha256/
BLOB_VALUE = /&.{44}\.sha256/
STRG_VALUE = /".{1,90}"/
# If you need other characters (but not spaces) submit an issue.
ALPHANUMERICISH = /[a-zA-Z0-9_\-=\.]{1,90}/
ALL_VALUES = [
FEED_VALUE,
MESG_VALUE,
@ -23,8 +24,8 @@ module Pigeon
AUTHOR = /author #{FEED_VALUE}\n/
DEPTH = /depth #{DEPTH_COUNT}\n/
PREV = /prev (#{MESG_VALUE}|#{NULL_VALUE})\n/
KIND = /kind #{B64LIKE}\n/
BODY_ENTRY = /#{B64LIKE}:#{ANY_VALUE}\n/
KIND = /kind #{ALPHANUMERICISH}\n/
BODY_ENTRY = /#{ALPHANUMERICISH}:#{ANY_VALUE}\n/
FOOTER_ENTRY = /signature .*{87,88}\.sig\.ed25519\n?/

View File

@ -1,22 +1,27 @@
author @DYdgK1KUInVtG3lS45hA1HZ-jTuvfLKsxDpXPFCve04=.ed25519
kind scratch_pad
author @jdiXWunmWiex-dHONMlj7b1HMMFNjbpAj1t9oInbugY=.ed25519
kind strings
prev NONE
depth 0
key1:"my_value\n"
key2:"my_value2"
key3:"my_value3"
key4:%jvKh9yoiEJaePzoWCF1nnqpIlPgTk9FHEtqczQbvzGM=.sha256
key5:&29f3933302c49c60841d7620886ce54afc68630242aee6ff683926d2465e6ca3.sha256
key6:@galdahnB3L2DE2cTU0Me54IpIUKVEgKmBwvZVtWJccg=.ed25519
example_1.1:"This is a string."
example=_.:"A second string."
signature DN7yPTE-m433ND3jBL4oM23XGxBKafjq0Dp9ArBQa_TIGU7DmCxTumieuPBN-NKxlx_0N7-c5zjLb5XXVHYPCQ==.sig.ed25519
signature hCPIr8xdWIIjtiJp1Sj64v0AgP_ypeDTtZrs8MRHw7w_bMJ7Hx6rSbDOgVUmdIegqD-gEk2WI2S_dUKQ8jg7CQ==.sig.ed25519
author @DYdgK1KUInVtG3lS45hA1HZ-jTuvfLKsxDpXPFCve04=.ed25519
kind second_test
prev %ZTBmYWZlMGU0Nzg0ZWZlYjA5NjA0MzdlZWVlNTBiMmY4ODEyZWI1NTZkODcwN2FlMDQxYThmMDExNTNhM2E4NQ==.sha256
author @jdiXWunmWiex-dHONMlj7b1HMMFNjbpAj1t9oInbugY=.ed25519
kind d
prev %83td57rcLLFEM7-6HPXDcniwXc4QQo9nyyWn0zhXJGg=.sha256
depth 1
hello:"world"
e:&ZGKl9RdLU3Avwlr-Z6j5op9XJhCmW6_v_2J1MVUvCW8=.sha256
signature AerpDKbKRrcaM9wihwFsPC4YRAfYWie5XFEKAdnxQom7MTvsXd9W39AvHfljJnEePZpsQVdfq2TtBPoQHc-MCw==.sig.ed25519
signature FpfdovnJttEZkl-SMO83Nq8gqsfnB4NvtZ4YRdhxKQDK30l1OKpPw5GeFiOEdTJK8WPncq_m0eBHPP84hJ0BDg==.sig.ed25519
author @jdiXWunmWiex-dHONMlj7b1HMMFNjbpAj1t9oInbugY=.ed25519
kind g
prev %vVMEqvHHjqubE36olIVStUp-vq0T1e2UsvKdv57kmLU=.sha256
depth 2
me_myself_and_i:@jdiXWunmWiex-dHONMlj7b1HMMFNjbpAj1t9oInbugY=.ed25519
signature 4ARYLytFIcU-TAYoybL3za9cyiTX_5Jt04ueKmPjZVYA6jST6KyQXvUo57MMjfjsdAmXeV-2Nw2Jbx8HaeTqBg==.sig.ed25519

View File

@ -59,13 +59,22 @@ RSpec.describe Pigeon::Storage do
end
it "finds all messages" do
a = Pigeon::Helpers.create_message("a", { "b" => "c" })
d = Pigeon::Helpers.create_message("d", { "e" => "f" })
g = Pigeon::Helpers.create_message("g", { "h" => "i" })
msgs = [
Pigeon::Helpers.create_message("strings", {
"example_1.1" => "This is a string.",
"example=_." => "A second string.",
}),
Pigeon::Helpers.create_message("d", {
"e" => Pigeon::Storage.current.set_blob(File.read("./logo.png")),
}),
Pigeon::Helpers.create_message("g", {
"me_myself_and_i" => Pigeon::LocalIdentity.current.public_key,
}),
]
results = Pigeon::Storage.current.find_all
expect(results.length).to eq(3)
expect(a.multihash).to eq(results[0])
expect(d.multihash).to eq(results[1])
expect(g.multihash).to eq(results[2])
expect(msgs[0].multihash).to eq(results[0])
expect(msgs[1].multihash).to eq(results[1])
expect(msgs[2].multihash).to eq(results[2])
end
end