mirror of
https://github.com/urbit/shrub.git
synced 2024-12-24 11:24:21 +03:00
152 lines
3.5 KiB
Plaintext
152 lines
3.5 KiB
Plaintext
/+ *test, ring
|
|
::
|
|
=/ eny=@uvJ `@`0xdead.beef
|
|
::
|
|
=/ hello-world (shaz (jam "Hello World"))
|
|
=/ not-hello-world (shaz (jam "Goodbye World"))
|
|
::
|
|
=/ empty-scope=(unit @) ~
|
|
=/ test-scope=(unit @) `(shaz (jam [%scope 5]))
|
|
=/ test-scope-2=(unit @) `(shaz (jam [%scope 6]))
|
|
::
|
|
=/ our-privkey=@udscalar 3
|
|
=/ our-pubkey=@udpoint (scalarmult-base:ed:crypto our-privkey)
|
|
::
|
|
=/ two-privkey=@udscalar 2
|
|
=/ two-pubkey=@udpoint (scalarmult-base:ed:crypto two-privkey)
|
|
::
|
|
=/ public-key-set (sy (turn (gulf 1 5) scalarmult-base:ed:crypto))
|
|
|%
|
|
++ test-basic-unlinked
|
|
=/ unlinked
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
empty-scope
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world empty-scope public-key-set unlinked)
|
|
::
|
|
++ test-linked-different-message-same-key-same-scope
|
|
=/ linked-hello-world
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
test-scope
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
=/ linked-not-hello-world
|
|
%- sign:raw:ring :*
|
|
not-hello-world
|
|
test-scope
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
;: weld
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world test-scope public-key-set linked-hello-world)
|
|
::
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring not-hello-world test-scope public-key-set linked-not-hello-world)
|
|
::
|
|
(expect-eq !>(%.y) !>(?=(^ y.linked-hello-world)))
|
|
(expect-eq !>(%.y) !>(?=(^ y.linked-not-hello-world)))
|
|
::
|
|
%+ expect-eq
|
|
!> y.linked-hello-world
|
|
!> y.linked-not-hello-world
|
|
==
|
|
:: if we use the same key to sign the same message in two different scopes, we
|
|
:: must have different resulting linkage tags.
|
|
::
|
|
++ test-linked-same-message-same-key-different-scope
|
|
=/ scope-one-hello-world
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
test-scope
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
=/ scope-two-hello-world
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
test-scope-2
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
;: weld
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world test-scope public-key-set scope-one-hello-world)
|
|
::
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world test-scope-2 public-key-set scope-two-hello-world)
|
|
::
|
|
(expect-eq !>(%.y) !>(?=(^ y.scope-one-hello-world)))
|
|
(expect-eq !>(%.y) !>(?=(^ y.scope-two-hello-world)))
|
|
::
|
|
%+ expect-eq
|
|
!> %.n
|
|
!> =(y.scope-one-hello-world y.scope-two-hello-world)
|
|
==
|
|
:: the same message signed by two different keys should have different linkage
|
|
::
|
|
++ test-linked-same-message-different-key
|
|
=/ our-hello-world
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
test-scope
|
|
public-key-set
|
|
our-pubkey
|
|
our-privkey
|
|
eny
|
|
==
|
|
::
|
|
=/ two-hello-world
|
|
%- sign:raw:ring :*
|
|
hello-world
|
|
test-scope
|
|
public-key-set
|
|
two-pubkey
|
|
two-privkey
|
|
eny
|
|
==
|
|
::
|
|
;: weld
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world test-scope public-key-set our-hello-world)
|
|
::
|
|
%+ expect-eq
|
|
!> %.y
|
|
!> (verify:raw:ring hello-world test-scope public-key-set two-hello-world)
|
|
::
|
|
(expect-eq !>(%.y) !>(?=(^ y.our-hello-world)))
|
|
(expect-eq !>(%.y) !>(?=(^ y.two-hello-world)))
|
|
::
|
|
%+ expect-eq
|
|
!> %.n
|
|
!> =(y.our-hello-world y.two-hello-world)
|
|
==
|
|
--
|