diff --git a/Anoma/Data/Byte.juvix b/Anoma/Data/Byte.juvix new file mode 100644 index 0000000..be2e2db --- /dev/null +++ b/Anoma/Data/Byte.juvix @@ -0,0 +1,8 @@ +module Anoma.Data.Byte; + +import Stdlib.Prelude open; +import Stdlib.Data.Byte open; + +{-# specialize: true, inline: case #-} +instance +ordByteI : Ord Byte := mkOrd (Ord.cmp on Byte.toNat); diff --git a/Anoma/Data/ByteArray.juvix b/Anoma/Data/ByteArray.juvix new file mode 100644 index 0000000..cc82556 --- /dev/null +++ b/Anoma/Data/ByteArray.juvix @@ -0,0 +1,12 @@ +module Anoma.Data.ByteArray; + +import Stdlib.Prelude open; + +builtin bytearray +axiom ByteArray : Type; + +builtin bytearray-from-list-byte +axiom mk : List Byte -> ByteArray; + +builtin bytearray-length +axiom length : ByteArray -> Nat; diff --git a/Anoma/System.juvix b/Anoma/System.juvix index 68cfc73..542a1d7 100644 --- a/Anoma/System.juvix +++ b/Anoma/System.juvix @@ -18,7 +18,8 @@ anomaSign -> PrivateKey -- | The resulting signed message. -> SignedMessage - | message (PrivateKey.mk privKey) := Builtin.anomaSign message privKey |> SignedMessage.mk; + | message (PrivateKey.mk privKey) := + Builtin.anomaSign message (ByteArray.mk privKey) |> SignedMessage.mk; --- Signs a message with a private key and returns the signature. {-# inline: true #-} @@ -30,7 +31,8 @@ anomaSignDetached -> PrivateKey -- The resulting signature -> Signature - | message (PrivateKey.mk privKey) := Builtin.anomaSignDetached message privKey |> Signature.mk; + | message (PrivateKey.mk privKey) := + Builtin.anomaSignDetached message (ByteArray.mk privKey) |> Signature.mk; --- Verifies a signed message against a public key. --- @@ -57,7 +59,7 @@ anomaVerifyDetached -- | The verification result. -> Bool | (Signature.mk signature) message (PublicKey.mk pubKey) := - Builtin.anomaVerifyDetached signature message pubKey; + Builtin.anomaVerifyDetached signature message (ByteArray.mk pubKey); --- Verifies a signature against a message and public key and return the message on success. {-# inline: true #-} @@ -70,4 +72,4 @@ anomaVerifyWithMessage -- | The original message. -> Maybe Message | (SignedMessage.mk signedMessage) (PublicKey.mk pubKey) := - Builtin.anomaVerifyWithMessage signedMessage pubKey; + Builtin.anomaVerifyWithMessage signedMessage (ByteArray.mk pubKey); diff --git a/Anoma/System/Builtin.juvix b/Anoma/System/Builtin.juvix index 9e8bf09..15699ad 100644 --- a/Anoma/System/Builtin.juvix +++ b/Anoma/System/Builtin.juvix @@ -1,13 +1,14 @@ module Anoma.System.Builtin; +import Anoma.Data.ByteArray open; import Anoma.Data.Maybe open; import Stdlib.Prelude open; -syntax alias PublicKey := Nat; -syntax alias PrivateKey := Nat; +syntax alias PublicKey := ByteArray; +syntax alias PrivateKey := ByteArray; -syntax alias Signature := Nat; -syntax alias SignedMessage := Nat; +syntax alias Signature := ByteArray; +syntax alias SignedMessage := ByteArray; --- Retrieves a value by key from Anoma's key-value store. builtin anoma-get diff --git a/Anoma/Types.juvix b/Anoma/Types.juvix index e39973a..a686355 100644 --- a/Anoma/Types.juvix +++ b/Anoma/Types.juvix @@ -2,6 +2,9 @@ module Anoma.Types; import Stdlib.Prelude open; +import Anoma.Data.ByteArray open using {ByteArray} public; +import Anoma.Data.ByteArray as ByteArray public; +import Anoma.Data.Byte; import Stdlib.Trait.Ord.Eq open using {fromOrdToEq}; @@ -34,7 +37,7 @@ open Kind using {Kind} public; module PublicKey; - type PublicKey := mk {unPublicKey : Nat}; + type PublicKey := mk {unPublicKey : List Byte}; open PublicKey public; end; @@ -43,7 +46,7 @@ open PublicKey using {PublicKey} public; module PrivateKey; - type PrivateKey := mk {unPrivateKey : Nat}; + type PrivateKey := mk {unPrivateKey : List Byte}; open PrivateKey public; end; @@ -52,7 +55,7 @@ open PrivateKey using {PrivateKey} public; module Signature; - type Signature := mk {unSignature : Nat}; + type Signature := mk {unSignature : ByteArray}; open Signature public; end; @@ -61,7 +64,7 @@ open Signature using {Signature} public; module SignedMessage; - type SignedMessage := mk {unSignedMessage : Nat}; + type SignedMessage := mk {unSignedMessage : ByteArray}; open SignedMessage public; end; @@ -133,26 +136,6 @@ PrivateKeyOrd : Ord PrivateKey := instance PrivateKeyEq : Eq PrivateKey := fromOrdToEq; -instance -SignatureOrd : Ord Signature := - mkOrd@{ - cmp : Signature -> Signature -> Ordering - | (Signature.mk x1) (Signature.mk x2) := Ord.cmp x1 x2 - }; - -instance -SignatureEq : Eq Signature := fromOrdToEq; - -instance -SignedMessageOrd : Ord SignedMessage := - mkOrd@{ - cmp : SignedMessage -> SignedMessage -> Ordering - | (SignedMessage.mk x1) (SignedMessage.mk x2) := Ord.cmp x1 x2 - }; - -instance -SignedMessageEq : Eq SignedMessage := fromOrdToEq; - instance KeyPairOrd : Ord KeyPair := let diff --git a/Package.juvix b/Package.juvix index 0468d23..5203578 100644 --- a/Package.juvix +++ b/Package.juvix @@ -5,6 +5,6 @@ import PackageDescription.V2 open; package : Package := defaultPackage@?{ name := "anoma"; - version := mkVersion 0 4 0; - dependencies := [github "anoma" "juvix-stdlib" "v0.5.0"] + version := mkVersion 0 5 0; + dependencies := [github "anoma" "juvix-stdlib" "v0.6.0"] }; diff --git a/juvix.lock.yaml b/juvix.lock.yaml index 011de0b..fff301c 100644 --- a/juvix.lock.yaml +++ b/juvix.lock.yaml @@ -1,11 +1,11 @@ -# This file was autogenerated by Juvix version 0.6.4. +# This file was autogenerated by Juvix version 0.6.5. # Do not edit this file manually. version: 2 -checksum: 991d05a3078cab0b630ff2de9b268a8fb2f164680d806dfb92454865e481b3c4 +checksum: fbd6203d95670277a5355e725ae45b752f3a3e251dfa8cbff8b8b7d70b4bb6cf dependencies: - git: name: anoma_juvix-stdlib - ref: 16211500dc59a944f851fbaeeef703fdd09163fa + ref: 17a82dd466010b51924677b16a3f09a6c4c86a80 url: https://github.com/anoma/juvix-stdlib dependencies: [] diff --git a/test/AlwaysValid/Keys.juvix b/test/AlwaysValid/Keys.juvix new file mode 100644 index 0000000..f67cc43 --- /dev/null +++ b/test/AlwaysValid/Keys.juvix @@ -0,0 +1,107 @@ +module AlwaysValid.Keys; + +import Anoma open; + +privKey : PrivateKey := + PrivateKey.mk + [ 0x0 + ; 0x60 + ; 0xa3 + ; 0x6b + ; 0xb1 + ; 0x3e + ; 0x45 + ; 0x45 + ; 0xc6 + ; 0x41 + ; 0x8f + ; 0x46 + ; 0xc9 + ; 0x72 + ; 0xa8 + ; 0x4e + ; 0x24 + ; 0x29 + ; 0xcb + ; 0x7b + ; 0x1b + ; 0x76 + ; 0xc3 + ; 0xa1 + ; 0xf6 + ; 0xf2 + ; 0x28 + ; 0xcc + ; 0xc4 + ; 0x39 + ; 0x1d + ; 0x1c + ; 0x91 + ; 0x7 + ; 0xfd + ; 0xe6 + ; 0xc6 + ; 0x54 + ; 0x6b + ; 0x5f + ; 0xc4 + ; 0x57 + ; 0xf6 + ; 0xc8 + ; 0xf8 + ; 0x80 + ; 0x94 + ; 0xe8 + ; 0x2f + ; 0xa6 + ; 0x30 + ; 0x13 + ; 0xdc + ; 0x7e + ; 0x50 + ; 0x78 + ; 0x8f + ; 0x2f + ; 0xb2 + ; 0xaf + ; 0xcb + ; 0xd0 + ; 0xa + ; 0x52 + ]; + +pubKey : PublicKey := + PublicKey.mk + [ 0x91 + ; 0x7 + ; 0xfd + ; 0xe6 + ; 0xc6 + ; 0x54 + ; 0x6b + ; 0x5f + ; 0xc4 + ; 0x57 + ; 0xf6 + ; 0xc8 + ; 0xf8 + ; 0x80 + ; 0x94 + ; 0xe8 + ; 0x2f + ; 0xa6 + ; 0x30 + ; 0x13 + ; 0xdc + ; 0x7e + ; 0x50 + ; 0x78 + ; 0x8f + ; 0x2f + ; 0xb2 + ; 0xaf + ; 0xcb + ; 0xd0 + ; 0xa + ; 0x52 + ]; diff --git a/test/AlwaysValid/Transaction.juvix b/test/AlwaysValid/Transaction.juvix index d6d9ac9..dfaa3d8 100644 --- a/test/AlwaysValid/Transaction.juvix +++ b/test/AlwaysValid/Transaction.juvix @@ -7,12 +7,7 @@ import Anoma open; open Transaction; open DeltaComponent; -privKey : PrivateKey := - PrivateKey.mk - 0xddd315c76991f8e058760cacdd19c21bf6a12c72bc229a60ad6aaa314fa07ac11662fc6e7829efcb0f4500827d49bb699af7b5475cef5220fd600ebbf9709a58; - -pubKey : PublicKey := - PublicKey.mk 0xddd315c76991f8e058760cacdd19c21bf6a12c72bc229a60ad6aaa314fa07ac1; +import AlwaysValid.Keys open; alwaysTrueLogic (r : Resource) (tx : Transaction) : Bool := true; diff --git a/test/Package.juvix b/test/Package.juvix index a9cbc9b..9d1f4a0 100644 --- a/test/Package.juvix +++ b/test/Package.juvix @@ -6,5 +6,5 @@ package : Package := defaultPackage@?{ name := "juvix-anoma-stdlib-test"; dependencies := - [github "anoma" "juvix-stdlib" "v0.5.0"; path "../"; github "anoma" "juvix-test" "v0.12.0"] + [github "anoma" "juvix-stdlib" "v0.6.0"; path "../"; github "anoma" "juvix-test" "v0.13.0"] }; diff --git a/test/Resource/Tests.juvix b/test/Resource/Tests.juvix index 17a21b4..e8030af 100644 --- a/test/Resource/Tests.juvix +++ b/test/Resource/Tests.juvix @@ -12,7 +12,7 @@ testResource : Resource := data := 0; eph := true; nonce := 0; - npk := PublicKey.mk 0; + npk := PublicKey.mk (replicate 32 0x0); rseed := 0 }; diff --git a/test/juvix.lock.yaml b/test/juvix.lock.yaml index 0864c01..29c1edb 100644 --- a/test/juvix.lock.yaml +++ b/test/juvix.lock.yaml @@ -1,28 +1,28 @@ -# This file was autogenerated by Juvix version 0.6.4. +# This file was autogenerated by Juvix version 0.6.5. # Do not edit this file manually. version: 2 -checksum: 5cddee95c6408d8f699c799178f5e3c7368e9c543c7734d3b1b69ac6285831a0 +checksum: 2bd62b79f2d679d8a211b1e1687bf7c6bb68ef74a675cc59a8a7b57683c9e9e4 dependencies: - git: name: anoma_juvix-stdlib - ref: 16211500dc59a944f851fbaeeef703fdd09163fa + ref: 17a82dd466010b51924677b16a3f09a6c4c86a80 url: https://github.com/anoma/juvix-stdlib dependencies: [] - path: ../ dependencies: - git: name: anoma_juvix-stdlib - ref: 16211500dc59a944f851fbaeeef703fdd09163fa + ref: 17a82dd466010b51924677b16a3f09a6c4c86a80 url: https://github.com/anoma/juvix-stdlib dependencies: [] - git: name: anoma_juvix-test - ref: f7e822969fa82c510f38d6569a9b5ac7f1180221 + ref: 12b72c6f91126f08e19ef183cc377bb86e629de9 url: https://github.com/anoma/juvix-test dependencies: - git: name: anoma_juvix-stdlib - ref: 16211500dc59a944f851fbaeeef703fdd09163fa + ref: 17a82dd466010b51924677b16a3f09a6c4c86a80 url: https://github.com/anoma/juvix-stdlib dependencies: []