diff --git a/crates/compiler/builtins/bitcode/src/crypt.zig b/crates/compiler/builtins/bitcode/src/crypt.zig index fd89e4b35e9..49cceef0b9b 100644 --- a/crates/compiler/builtins/bitcode/src/crypt.zig +++ b/crates/compiler/builtins/bitcode/src/crypt.zig @@ -5,19 +5,19 @@ const list = @import("list.zig"); const utils = @import("utils.zig"); const Sha256 = extern struct{ - location:usize, + location:[*]u8, fn pointer(self : Sha256) *sha2.Sha256{ - return @ptrFromInt(self.location); + return @alignCast(@ptrCast(self.location)); } }; const EmptyStruct = extern struct{}; pub fn emptySha256(_: EmptyStruct) callconv(.C) Sha256{ - const allocation = utils.allocateWithRefcount(@sizeOf(sha2.Sha256), @alignOf(sha2.Sha256)); + const allocation = utils.allocateWithRefcount(@sizeOf(sha2.Sha256), @alignOf(sha2.Sha256), false); const ptr:*sha2.Sha256 = @alignCast(@ptrCast(allocation)); ptr.* = sha2.Sha256.init(.{}); - return Sha256{.location = @intFromPtr(ptr),}; + return Sha256{.location = @alignCast(@ptrCast(ptr)),}; } pub fn addBytes(sha: Sha256, data: list.RocList) callconv(.C) Sha256{ diff --git a/crates/compiler/builtins/roc/Crypt.roc b/crates/compiler/builtins/roc/Crypt.roc index e69de29bb2d..89117ae8bdd 100644 --- a/crates/compiler/builtins/roc/Crypt.roc +++ b/crates/compiler/builtins/roc/Crypt.roc @@ -0,0 +1,16 @@ +module[ + emptySha256, + addBytes, + digest, + hashSha256, +] +import List +emptySha256 : {} -> Sha256 + +addBytes : Sha256, List.List u8 -> Sha256 + +digest : Sha256 -> Digest256 + +hashSha256 : List u8 -> Digest256 +hashSha256 = \bytes -> + digest ( addBytes (emptySha256 {}) bytes) diff --git a/crates/compiler/builtins/roc/main.roc b/crates/compiler/builtins/roc/main.roc index 36edf4ed49b..13ef4eb07c8 100644 --- a/crates/compiler/builtins/roc/main.roc +++ b/crates/compiler/builtins/roc/main.roc @@ -12,4 +12,5 @@ package [ Box, Inspect, Task, + Crypt, ] {}