From 4a32468d7d9836f6026d91702cbb2ae14cefec78 Mon Sep 17 00:00:00 2001 From: Didactic Drunk <1479616+didactic-drunk@users.noreply.github.com> Date: Mon, 14 Jun 2021 16:50:32 -0700 Subject: [PATCH] Add ClassMethods --- spec/not_spec.cr | 6 ++++++ src/crypto-secret/class_methods.cr | 10 ++++++++++ src/crypto-secret/secret.cr | 1 + src/crypto-secret/stateful.cr | 4 ++++ src/crypto-secret/stateless.cr | 4 ++++ 5 files changed, 25 insertions(+) create mode 100644 src/crypto-secret/class_methods.cr diff --git a/spec/not_spec.cr b/spec/not_spec.cr index 92faeed..9144077 100644 --- a/spec/not_spec.cr +++ b/spec/not_spec.cr @@ -27,4 +27,10 @@ describe Crypto::Secret::Not do secret.to_s.should_not match /Bytes|Slice/ secret.inspect.should_not match /Bytes|Slice/ end + + it "returns a random secret" do + secret1 = Crypto::Secret::Not.new 8 + secret2 = Crypto::Secret::Not.random 8 + secret1.should_not eq secret2 + end end diff --git a/src/crypto-secret/class_methods.cr b/src/crypto-secret/class_methods.cr new file mode 100644 index 0000000..6ba45b6 --- /dev/null +++ b/src/crypto-secret/class_methods.cr @@ -0,0 +1,10 @@ +module Crypto::Secret::ClassMethods + # Returns a **readonly** random Secret + def random(size) + buf = new(size) + buf.readwrite do |slice| + Random::Secure.random_bytes slice + end + buf.readonly + end +end diff --git a/src/crypto-secret/secret.cr b/src/crypto-secret/secret.cr index bea8bb6..d2b122b 100644 --- a/src/crypto-secret/secret.cr +++ b/src/crypto-secret/secret.cr @@ -1,4 +1,5 @@ require "./lib" +require "./class_methods" # Interface to hold sensitive information (often cryptographic keys) # diff --git a/src/crypto-secret/stateful.cr b/src/crypto-secret/stateful.cr index 5bffb71..036a724 100644 --- a/src/crypto-secret/stateful.cr +++ b/src/crypto-secret/stateful.cr @@ -12,6 +12,10 @@ module Crypto::Secret module Stateful include Crypto::Secret + macro included + extend ClassMethods + end + @state = State::Readwrite # Temporarily make buffer readwrite within the block returning to the prior state on exit. diff --git a/src/crypto-secret/stateless.cr b/src/crypto-secret/stateless.cr index 9061830..fdbae57 100644 --- a/src/crypto-secret/stateless.cr +++ b/src/crypto-secret/stateless.cr @@ -6,6 +6,10 @@ require "./secret" module Crypto::Secret::Stateless include Crypto::Secret + macro included + extend ClassMethods + end + # Not thread safe def readwrite end