From eabf799e516d276a73cee4eef5315a2632b8a411 Mon Sep 17 00:00:00 2001 From: Didactic Drunk <1479616+didactic-drunk@users.noreply.github.com> Date: Sat, 12 Jun 2021 16:04:49 -0700 Subject: [PATCH] Initial code --- shard.yml | 2 +- spec/crypto_secret_spec.cr | 7 +++++++ spec/not_spec.cr | 10 ++++++++++ spec/spec_helper.cr | 2 ++ src/crypto_secret.cr | 30 ++++++++++++++++++++++++++++++ src/crypto_secret/not.cr | 16 ++++++++++++++++ 6 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 spec/crypto_secret_spec.cr create mode 100644 spec/not_spec.cr create mode 100644 spec/spec_helper.cr create mode 100644 src/crypto_secret.cr create mode 100644 src/crypto_secret/not.cr diff --git a/shard.yml b/shard.yml index 194a27b..0331a40 100644 --- a/shard.yml +++ b/shard.yml @@ -4,6 +4,6 @@ version: 0.1.0 authors: - Didactic Drunk <1479616+didactic-drunk@users.noreply.github.com> -crystal: 1.0.0 +crystal: ">= 0.37" license: MIT diff --git a/spec/crypto_secret_spec.cr b/spec/crypto_secret_spec.cr new file mode 100644 index 0000000..72f5072 --- /dev/null +++ b/spec/crypto_secret_spec.cr @@ -0,0 +1,7 @@ +require "./spec_helper" + +describe Crypto::Secret do + pending "works" do + false.should eq(true) + end +end diff --git a/spec/not_spec.cr b/spec/not_spec.cr new file mode 100644 index 0000000..0a7e485 --- /dev/null +++ b/spec/not_spec.cr @@ -0,0 +1,10 @@ +require "./spec_helper" +require "../src/crypto_secret/not" + +describe Crypto::Secret::Not do + it "works" do + ksize = 32 + secret = Crypto::Secret::Not.new ksize + secret.to_slice.should eq Bytes.new ksize + end +end diff --git a/spec/spec_helper.cr b/spec/spec_helper.cr new file mode 100644 index 0000000..02d03ce --- /dev/null +++ b/spec/spec_helper.cr @@ -0,0 +1,2 @@ +require "spec" +require "../src/crypto_secret" diff --git a/src/crypto_secret.cr b/src/crypto_secret.cr new file mode 100644 index 0000000..970a2d5 --- /dev/null +++ b/src/crypto_secret.cr @@ -0,0 +1,30 @@ +# Interface to hold sensitive information (often cryptographic keys) +# +# +@[Experimental] +module Crypto::Secret + abstract def to_slice : Bytes + + def readwrite + end + + def readonly + end + + def noaccess + end + + def wipe + # Todo: implement wiping + end + + def wipe + yield + ensure + wipe + end + + def finalize + wipe + end +end diff --git a/src/crypto_secret/not.cr b/src/crypto_secret/not.cr new file mode 100644 index 0000000..5c2a342 --- /dev/null +++ b/src/crypto_secret/not.cr @@ -0,0 +1,16 @@ +# A not very secret secret +# +# Not locked in memory +# Not access protected +# No guard pages +struct Crypto::Secret::Not + include Crypto::Secret + + def initialize(size) + @bytes = Bytes.new size + end + + def to_slice : Bytes + @bytes + end +end