diff options
Diffstat (limited to 'ext/digest')
49 files changed, 2415 insertions, 681 deletions
diff --git a/ext/digest/.document b/ext/digest/.document new file mode 100644 index 0000000000..beab275b5a --- /dev/null +++ b/ext/digest/.document @@ -0,0 +1,3 @@ +digest.c +bubblebabble/bubblebabble.c +*/*init.c diff --git a/ext/digest/bubblebabble/bubblebabble.c b/ext/digest/bubblebabble/bubblebabble.c index 4bccd221b8..dac603c0d7 100644 --- a/ext/digest/bubblebabble/bubblebabble.c +++ b/ext/digest/bubblebabble/bubblebabble.c @@ -11,8 +11,8 @@ ************************************************/ -#include "ruby.h" -#include "digest.h" +#include <ruby/ruby.h> +#include "../digest.h" static ID id_digest; @@ -37,7 +37,7 @@ bubblebabble_str_new(VALUE str_digest) digest_len = RSTRING_LEN(str_digest); if ((LONG_MAX - 2) / 3 < (digest_len | 1)) { - rb_raise(rb_eRuntimeError, "digest string too long"); + rb_raise(rb_eRuntimeError, "digest string too long"); } str = rb_str_new(0, (digest_len | 1) * 3 + 2); @@ -101,7 +101,7 @@ rb_digest_s_bubblebabble(VALUE klass, VALUE str) static VALUE rb_digest_class_s_bubblebabble(int argc, VALUE *argv, VALUE klass) { - return bubblebabble_str_new(rb_funcall2(klass, id_digest, argc, argv)); + return bubblebabble_str_new(rb_funcallv(klass, id_digest, argc, argv)); } /* Document-method: Digest::Instance#bubblebabble @@ -124,19 +124,19 @@ rb_digest_instance_bubblebabble(VALUE self) void Init_bubblebabble(void) { +#undef rb_intern VALUE rb_mDigest, rb_mDigest_Instance, rb_cDigest_Class; rb_require("digest"); - rb_mDigest = rb_path2class("Digest"); - rb_mDigest_Instance = rb_path2class("Digest::Instance"); - rb_cDigest_Class = rb_path2class("Digest::Class"); - #if 0 rb_mDigest = rb_define_module("Digest"); rb_mDigest_Instance = rb_define_module_under(rb_mDigest, "Instance"); rb_cDigest_Class = rb_define_class_under(rb_mDigest, "Class", rb_cObject); #endif + rb_mDigest = rb_digest_namespace(); + rb_mDigest_Instance = rb_const_get(rb_mDigest, rb_intern_const("Instance")); + rb_cDigest_Class = rb_const_get(rb_mDigest, rb_intern_const("Class")); rb_define_module_function(rb_mDigest, "bubblebabble", rb_digest_s_bubblebabble, 1); rb_define_singleton_method(rb_cDigest_Class, "bubblebabble", rb_digest_class_s_bubblebabble, -1); diff --git a/ext/digest/bubblebabble/depend b/ext/digest/bubblebabble/depend index d13a156ce1..02d88e960c 100644 --- a/ext/digest/bubblebabble/depend +++ b/ext/digest/bubblebabble/depend @@ -1 +1,164 @@ -bubblebabble.o: bubblebabble.c $(srcdir)/../digest.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) +# AUTOGENERATED DEPENDENCIES START +bubblebabble.o: $(RUBY_EXTCONF_H) +bubblebabble.o: $(arch_hdrdir)/ruby/config.h +bubblebabble.o: $(hdrdir)/ruby.h +bubblebabble.o: $(hdrdir)/ruby/assert.h +bubblebabble.o: $(hdrdir)/ruby/backward.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/assume.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/attributes.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/bool.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/inttypes.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/limits.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/long_long.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/stdalign.h +bubblebabble.o: $(hdrdir)/ruby/backward/2/stdarg.h +bubblebabble.o: $(hdrdir)/ruby/defines.h +bubblebabble.o: $(hdrdir)/ruby/intern.h +bubblebabble.o: $(hdrdir)/ruby/internal/abi.h +bubblebabble.o: $(hdrdir)/ruby/internal/anyargs.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/char.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/double.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/int.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/long.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/short.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +bubblebabble.o: $(hdrdir)/ruby/internal/assume.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/artificial.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/cold.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/const.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/constexpr.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/deprecated.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/forceinline.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/format.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noalias.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noexcept.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noinline.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/nonnull.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/noreturn.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/pure.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/restrict.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/warning.h +bubblebabble.o: $(hdrdir)/ruby/internal/attr/weakref.h +bubblebabble.o: $(hdrdir)/ruby/internal/cast.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +bubblebabble.o: $(hdrdir)/ruby/internal/compiler_since.h +bubblebabble.o: $(hdrdir)/ruby/internal/config.h +bubblebabble.o: $(hdrdir)/ruby/internal/constant_p.h +bubblebabble.o: $(hdrdir)/ruby/internal/core.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rarray.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rbasic.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rbignum.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rclass.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rdata.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rfile.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rhash.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/robject.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rregexp.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rstring.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rstruct.h +bubblebabble.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +bubblebabble.o: $(hdrdir)/ruby/internal/ctype.h +bubblebabble.o: $(hdrdir)/ruby/internal/dllexport.h +bubblebabble.o: $(hdrdir)/ruby/internal/dosish.h +bubblebabble.o: $(hdrdir)/ruby/internal/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/eval.h +bubblebabble.o: $(hdrdir)/ruby/internal/event.h +bubblebabble.o: $(hdrdir)/ruby/internal/fl_type.h +bubblebabble.o: $(hdrdir)/ruby/internal/gc.h +bubblebabble.o: $(hdrdir)/ruby/internal/glob.h +bubblebabble.o: $(hdrdir)/ruby/internal/globals.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/builtin.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/c_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/extension.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/feature.h +bubblebabble.o: $(hdrdir)/ruby/internal/has/warning.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/array.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/bignum.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/class.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/compar.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/complex.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/cont.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/dir.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/enum.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/enumerator.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/error.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/eval.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/file.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/hash.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/io.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/load.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/marshal.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/numeric.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/object.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/parse.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/proc.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/process.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/random.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/range.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/rational.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/re.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/ruby.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/select.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/set.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/signal.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/sprintf.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/string.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/struct.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/thread.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/time.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/variable.h +bubblebabble.o: $(hdrdir)/ruby/internal/intern/vm.h +bubblebabble.o: $(hdrdir)/ruby/internal/interpreter.h +bubblebabble.o: $(hdrdir)/ruby/internal/iterator.h +bubblebabble.o: $(hdrdir)/ruby/internal/memory.h +bubblebabble.o: $(hdrdir)/ruby/internal/method.h +bubblebabble.o: $(hdrdir)/ruby/internal/module.h +bubblebabble.o: $(hdrdir)/ruby/internal/newobj.h +bubblebabble.o: $(hdrdir)/ruby/internal/scan_args.h +bubblebabble.o: $(hdrdir)/ruby/internal/special_consts.h +bubblebabble.o: $(hdrdir)/ruby/internal/static_assert.h +bubblebabble.o: $(hdrdir)/ruby/internal/stdalign.h +bubblebabble.o: $(hdrdir)/ruby/internal/stdbool.h +bubblebabble.o: $(hdrdir)/ruby/internal/stdckdint.h +bubblebabble.o: $(hdrdir)/ruby/internal/symbol.h +bubblebabble.o: $(hdrdir)/ruby/internal/value.h +bubblebabble.o: $(hdrdir)/ruby/internal/value_type.h +bubblebabble.o: $(hdrdir)/ruby/internal/variable.h +bubblebabble.o: $(hdrdir)/ruby/internal/warning_push.h +bubblebabble.o: $(hdrdir)/ruby/internal/xmalloc.h +bubblebabble.o: $(hdrdir)/ruby/missing.h +bubblebabble.o: $(hdrdir)/ruby/ruby.h +bubblebabble.o: $(hdrdir)/ruby/st.h +bubblebabble.o: $(hdrdir)/ruby/subst.h +bubblebabble.o: $(srcdir)/../digest.h +bubblebabble.o: bubblebabble.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/bubblebabble/extconf.rb b/ext/digest/bubblebabble/extconf.rb index 53cb83934a..8fb001c61d 100644 --- a/ext/digest/bubblebabble/extconf.rb +++ b/ext/digest/bubblebabble/extconf.rb @@ -1,6 +1,4 @@ +# frozen_string_literal: false require 'mkmf' -$defs << "-DHAVE_CONFIG_H" -$INCFLAGS << " -I$(srcdir)/.." - create_makefile('digest/bubblebabble') diff --git a/ext/digest/defs.h b/ext/digest/defs.h index 77a134f364..9b11f4eca9 100644 --- a/ext/digest/defs.h +++ b/ext/digest/defs.h @@ -16,4 +16,26 @@ # define __END_DECLS #endif +#define RB_DIGEST_DIAGNOSTIC(compiler, op, flag) _Pragma(STRINGIZE(compiler diagnostic op flag)) +#ifdef RBIMPL_WARNING_IGNORED +# define RB_DIGEST_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag) +# define RB_DIGEST_WARNING_PUSH() RBIMPL_WARNING_PUSH() +# define RB_DIGEST_WARNING_POP() RBIMPL_WARNING_POP() +#elif defined(__clang__) +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(clang, ignored, #flag) +# define RB_DIGEST_WARNING_PUSH() _Pragma("clang diagnostic push") +# define RB_DIGEST_WARNING_POP() _Pragma("clang diagnostic pop") +#else /* __GNUC__ */ +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(GCC, ignored, #flag) +# define RB_DIGEST_WARNING_PUSH() _Pragma("GCC diagnostic push") +# define RB_DIGEST_WARNING_POP() _Pragma("GCC diagnostic pop") +#endif +#ifdef RBIMPL_HAS_WARNING +# define RB_DIGEST_HAS_WARNING(_) RBIMPL_HAS_WARNING(_) +#elif defined(__has_warning) +# define RB_DIGEST_HAS_WARNING(_) __has_warning(_) +#else +# define RB_DIGEST_HAS_WARNING(_) 0 +#endif + #endif /* DEFS_H */ diff --git a/ext/digest/depend b/ext/digest/depend index 2fbc6d9adf..3eabb1d1d6 100644 --- a/ext/digest/depend +++ b/ext/digest/depend @@ -1 +1,164 @@ -digest.o: digest.c digest.h $(HDRS) $(ruby_headers) +# AUTOGENERATED DEPENDENCIES START +digest.o: $(RUBY_EXTCONF_H) +digest.o: $(arch_hdrdir)/ruby/config.h +digest.o: $(hdrdir)/ruby.h +digest.o: $(hdrdir)/ruby/assert.h +digest.o: $(hdrdir)/ruby/backward.h +digest.o: $(hdrdir)/ruby/backward/2/assume.h +digest.o: $(hdrdir)/ruby/backward/2/attributes.h +digest.o: $(hdrdir)/ruby/backward/2/bool.h +digest.o: $(hdrdir)/ruby/backward/2/inttypes.h +digest.o: $(hdrdir)/ruby/backward/2/limits.h +digest.o: $(hdrdir)/ruby/backward/2/long_long.h +digest.o: $(hdrdir)/ruby/backward/2/stdalign.h +digest.o: $(hdrdir)/ruby/backward/2/stdarg.h +digest.o: $(hdrdir)/ruby/defines.h +digest.o: $(hdrdir)/ruby/intern.h +digest.o: $(hdrdir)/ruby/internal/abi.h +digest.o: $(hdrdir)/ruby/internal/anyargs.h +digest.o: $(hdrdir)/ruby/internal/arithmetic.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/char.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/double.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/int.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/long.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/short.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +digest.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +digest.o: $(hdrdir)/ruby/internal/assume.h +digest.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +digest.o: $(hdrdir)/ruby/internal/attr/artificial.h +digest.o: $(hdrdir)/ruby/internal/attr/cold.h +digest.o: $(hdrdir)/ruby/internal/attr/const.h +digest.o: $(hdrdir)/ruby/internal/attr/constexpr.h +digest.o: $(hdrdir)/ruby/internal/attr/deprecated.h +digest.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +digest.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +digest.o: $(hdrdir)/ruby/internal/attr/error.h +digest.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +digest.o: $(hdrdir)/ruby/internal/attr/forceinline.h +digest.o: $(hdrdir)/ruby/internal/attr/format.h +digest.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +digest.o: $(hdrdir)/ruby/internal/attr/noalias.h +digest.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +digest.o: $(hdrdir)/ruby/internal/attr/noexcept.h +digest.o: $(hdrdir)/ruby/internal/attr/noinline.h +digest.o: $(hdrdir)/ruby/internal/attr/nonnull.h +digest.o: $(hdrdir)/ruby/internal/attr/noreturn.h +digest.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +digest.o: $(hdrdir)/ruby/internal/attr/pure.h +digest.o: $(hdrdir)/ruby/internal/attr/restrict.h +digest.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +digest.o: $(hdrdir)/ruby/internal/attr/warning.h +digest.o: $(hdrdir)/ruby/internal/attr/weakref.h +digest.o: $(hdrdir)/ruby/internal/cast.h +digest.o: $(hdrdir)/ruby/internal/compiler_is.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +digest.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +digest.o: $(hdrdir)/ruby/internal/compiler_since.h +digest.o: $(hdrdir)/ruby/internal/config.h +digest.o: $(hdrdir)/ruby/internal/constant_p.h +digest.o: $(hdrdir)/ruby/internal/core.h +digest.o: $(hdrdir)/ruby/internal/core/rarray.h +digest.o: $(hdrdir)/ruby/internal/core/rbasic.h +digest.o: $(hdrdir)/ruby/internal/core/rbignum.h +digest.o: $(hdrdir)/ruby/internal/core/rclass.h +digest.o: $(hdrdir)/ruby/internal/core/rdata.h +digest.o: $(hdrdir)/ruby/internal/core/rfile.h +digest.o: $(hdrdir)/ruby/internal/core/rhash.h +digest.o: $(hdrdir)/ruby/internal/core/robject.h +digest.o: $(hdrdir)/ruby/internal/core/rregexp.h +digest.o: $(hdrdir)/ruby/internal/core/rstring.h +digest.o: $(hdrdir)/ruby/internal/core/rstruct.h +digest.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +digest.o: $(hdrdir)/ruby/internal/ctype.h +digest.o: $(hdrdir)/ruby/internal/dllexport.h +digest.o: $(hdrdir)/ruby/internal/dosish.h +digest.o: $(hdrdir)/ruby/internal/error.h +digest.o: $(hdrdir)/ruby/internal/eval.h +digest.o: $(hdrdir)/ruby/internal/event.h +digest.o: $(hdrdir)/ruby/internal/fl_type.h +digest.o: $(hdrdir)/ruby/internal/gc.h +digest.o: $(hdrdir)/ruby/internal/glob.h +digest.o: $(hdrdir)/ruby/internal/globals.h +digest.o: $(hdrdir)/ruby/internal/has/attribute.h +digest.o: $(hdrdir)/ruby/internal/has/builtin.h +digest.o: $(hdrdir)/ruby/internal/has/c_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +digest.o: $(hdrdir)/ruby/internal/has/extension.h +digest.o: $(hdrdir)/ruby/internal/has/feature.h +digest.o: $(hdrdir)/ruby/internal/has/warning.h +digest.o: $(hdrdir)/ruby/internal/intern/array.h +digest.o: $(hdrdir)/ruby/internal/intern/bignum.h +digest.o: $(hdrdir)/ruby/internal/intern/class.h +digest.o: $(hdrdir)/ruby/internal/intern/compar.h +digest.o: $(hdrdir)/ruby/internal/intern/complex.h +digest.o: $(hdrdir)/ruby/internal/intern/cont.h +digest.o: $(hdrdir)/ruby/internal/intern/dir.h +digest.o: $(hdrdir)/ruby/internal/intern/enum.h +digest.o: $(hdrdir)/ruby/internal/intern/enumerator.h +digest.o: $(hdrdir)/ruby/internal/intern/error.h +digest.o: $(hdrdir)/ruby/internal/intern/eval.h +digest.o: $(hdrdir)/ruby/internal/intern/file.h +digest.o: $(hdrdir)/ruby/internal/intern/hash.h +digest.o: $(hdrdir)/ruby/internal/intern/io.h +digest.o: $(hdrdir)/ruby/internal/intern/load.h +digest.o: $(hdrdir)/ruby/internal/intern/marshal.h +digest.o: $(hdrdir)/ruby/internal/intern/numeric.h +digest.o: $(hdrdir)/ruby/internal/intern/object.h +digest.o: $(hdrdir)/ruby/internal/intern/parse.h +digest.o: $(hdrdir)/ruby/internal/intern/proc.h +digest.o: $(hdrdir)/ruby/internal/intern/process.h +digest.o: $(hdrdir)/ruby/internal/intern/random.h +digest.o: $(hdrdir)/ruby/internal/intern/range.h +digest.o: $(hdrdir)/ruby/internal/intern/rational.h +digest.o: $(hdrdir)/ruby/internal/intern/re.h +digest.o: $(hdrdir)/ruby/internal/intern/ruby.h +digest.o: $(hdrdir)/ruby/internal/intern/select.h +digest.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +digest.o: $(hdrdir)/ruby/internal/intern/set.h +digest.o: $(hdrdir)/ruby/internal/intern/signal.h +digest.o: $(hdrdir)/ruby/internal/intern/sprintf.h +digest.o: $(hdrdir)/ruby/internal/intern/string.h +digest.o: $(hdrdir)/ruby/internal/intern/struct.h +digest.o: $(hdrdir)/ruby/internal/intern/thread.h +digest.o: $(hdrdir)/ruby/internal/intern/time.h +digest.o: $(hdrdir)/ruby/internal/intern/variable.h +digest.o: $(hdrdir)/ruby/internal/intern/vm.h +digest.o: $(hdrdir)/ruby/internal/interpreter.h +digest.o: $(hdrdir)/ruby/internal/iterator.h +digest.o: $(hdrdir)/ruby/internal/memory.h +digest.o: $(hdrdir)/ruby/internal/method.h +digest.o: $(hdrdir)/ruby/internal/module.h +digest.o: $(hdrdir)/ruby/internal/newobj.h +digest.o: $(hdrdir)/ruby/internal/scan_args.h +digest.o: $(hdrdir)/ruby/internal/special_consts.h +digest.o: $(hdrdir)/ruby/internal/static_assert.h +digest.o: $(hdrdir)/ruby/internal/stdalign.h +digest.o: $(hdrdir)/ruby/internal/stdbool.h +digest.o: $(hdrdir)/ruby/internal/stdckdint.h +digest.o: $(hdrdir)/ruby/internal/symbol.h +digest.o: $(hdrdir)/ruby/internal/value.h +digest.o: $(hdrdir)/ruby/internal/value_type.h +digest.o: $(hdrdir)/ruby/internal/variable.h +digest.o: $(hdrdir)/ruby/internal/warning_push.h +digest.o: $(hdrdir)/ruby/internal/xmalloc.h +digest.o: $(hdrdir)/ruby/missing.h +digest.o: $(hdrdir)/ruby/ruby.h +digest.o: $(hdrdir)/ruby/st.h +digest.o: $(hdrdir)/ruby/subst.h +digest.o: digest.c +digest.o: digest.h +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/digest.c b/ext/digest/digest.c index f1592f4725..28f6022754 100644 --- a/ext/digest/digest.c +++ b/ext/digest/digest.c @@ -77,8 +77,8 @@ RUBY_EXTERN void Init_digest_base(void); * * Different digest algorithms (or hash functions) are available: * - * HMAC:: - * See FIPS PUB 198 The Keyed-Hash Message Authentication Code (HMAC). + * MD5:: + * See RFC 1321 The MD5 Message-Digest Algorithm * RIPEMD-160:: * As Digest::RMD160. * See http://homes.esat.kuleuven.be/~bosselae/ripemd160.html. @@ -124,6 +124,8 @@ hexencode_str_new(VALUE str_digest) p[i + i + 1] = hex[byte & 0x0f]; } + RB_GC_GUARD(str_digest); + return str; } @@ -152,7 +154,7 @@ static void rb_digest_instance_method_unimpl(VALUE self, const char *method) { rb_raise(rb_eRuntimeError, "%s does not implement %s()", - rb_obj_classname(self), method); + rb_obj_classname(self), method); } /* @@ -381,8 +383,8 @@ rb_digest_instance_equal(VALUE self, VALUE other) StringValue(str2); if (RSTRING_LEN(str1) == RSTRING_LEN(str2) && - rb_str_cmp(str1, str2) == 0) { - return Qtrue; + rb_str_cmp(str1, str2) == 0) { + return Qtrue; } return Qfalse; } @@ -404,7 +406,7 @@ rb_digest_instance_digest_length(VALUE self) /* never blindly assume that #digest() returns a string */ StringValue(digest); - return INT2NUM(RSTRING_LEN(digest)); + return LONG2NUM(RSTRING_LEN(digest)); } /* @@ -484,7 +486,7 @@ rb_digest_class_s_digest(int argc, VALUE *argv, VALUE klass) static VALUE rb_digest_class_s_hexdigest(int argc, VALUE *argv, VALUE klass) { - return hexencode_str_new(rb_funcall2(klass, id_digest, argc, argv)); + return hexencode_str_new(rb_funcallv(klass, id_digest, argc, argv)); } /* :nodoc: */ @@ -499,13 +501,77 @@ rb_digest_class_init(VALUE self) * * This abstract class provides a common interface to message digest * implementation classes written in C. + * + * ==Write a Digest subclass in C + * Digest::Base provides a common interface to message digest + * classes written in C. These classes must provide a struct + * of type rb_digest_metadata_t: + * typedef int (*rb_digest_hash_init_func_t)(void *); + * typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); + * typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *); + * + * typedef struct { + * int api_version; + * size_t digest_len; + * size_t block_len; + * size_t ctx_size; + * rb_digest_hash_init_func_t init_func; + * rb_digest_hash_update_func_t update_func; + * rb_digest_hash_finish_func_t finish_func; + * } rb_digest_metadata_t; + * + * This structure must be set as an instance variable named +metadata+ + * (without the +@+ in front of the name). By example: + * static const rb_digest_metadata_t sha1 = { + * RUBY_DIGEST_API_VERSION, + * SHA1_DIGEST_LENGTH, + * SHA1_BLOCK_LENGTH, + * sizeof(SHA1_CTX), + * (rb_digest_hash_init_func_t)SHA1_Init, + * (rb_digest_hash_update_func_t)SHA1_Update, + * (rb_digest_hash_finish_func_t)SHA1_Finish, + * }; + * + * + * rb_ivar_set(cDigest_SHA1, rb_intern("metadata"), + * rb_digest_make_metadata(&sha1)); */ +#ifdef DIGEST_USE_RB_EXT_RESOLVE_SYMBOL +static const rb_data_type_t metadata_type = { + "digest/metadata", + {0}, +}; + +RUBY_FUNC_EXPORTED VALUE +rb_digest_wrap_metadata(const rb_digest_metadata_t *meta) +{ + return rb_obj_freeze(TypedData_Wrap_Struct(0, &metadata_type, (void *)meta)); +} +#endif + +static rb_digest_metadata_t * +get_metadata_ptr(VALUE obj) +{ + rb_digest_metadata_t *algo; + +#ifdef DIGEST_USE_RB_EXT_RESOLVE_SYMBOL + if (!rb_typeddata_is_kind_of(obj, &metadata_type)) return 0; + algo = RTYPEDDATA_DATA(obj); +#else +# undef RUBY_UNTYPED_DATA_WARNING +# define RUBY_UNTYPED_DATA_WARNING 0 + Data_Get_Struct(obj, rb_digest_metadata_t, algo); +#endif + + return algo; +} + static rb_digest_metadata_t * get_digest_base_metadata(VALUE klass) { VALUE p; - VALUE obj; + VALUE obj = Qnil; rb_digest_metadata_t *algo; for (p = klass; !NIL_P(p); p = rb_class_superclass(p)) { @@ -518,10 +584,18 @@ get_digest_base_metadata(VALUE klass) if (NIL_P(p)) rb_raise(rb_eRuntimeError, "Digest::Base cannot be directly inherited in Ruby"); - Data_Get_Struct(obj, rb_digest_metadata_t, algo); + algo = get_metadata_ptr(obj); + if (!algo) { + if (p == klass) + rb_raise(rb_eTypeError, "%"PRIsVALUE"::metadata is not initialized properly", + klass); + else + rb_raise(rb_eTypeError, "%"PRIsVALUE"(%"PRIsVALUE")::metadata is not initialized properly", + klass, p); + } switch (algo->api_version) { - case 2: + case 3: break; /* @@ -535,6 +609,27 @@ get_digest_base_metadata(VALUE klass) return algo; } +static rb_digest_metadata_t * +get_digest_obj_metadata(VALUE obj) +{ + return get_digest_base_metadata(rb_obj_class(obj)); +} + +static const rb_data_type_t digest_type = { + "digest", + {0, RUBY_TYPED_DEFAULT_FREE, 0,}, + 0, 0, + (RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED), +}; + +static inline void +algo_init(const rb_digest_metadata_t *algo, void *pctx) +{ + if (algo->init_func(pctx) != 1) { + rb_raise(rb_eRuntimeError, "Digest initialization failed."); + } +} + static VALUE rb_digest_base_alloc(VALUE klass) { @@ -543,15 +638,14 @@ rb_digest_base_alloc(VALUE klass) void *pctx; if (klass == rb_cDigest_Base) { - rb_raise(rb_eNotImpError, "Digest::Base is an abstract class"); + rb_raise(rb_eNotImpError, "Digest::Base is an abstract class"); } algo = get_digest_base_metadata(klass); - pctx = xmalloc(algo->ctx_size); - algo->init_func(pctx); - - obj = Data_Wrap_Struct(klass, 0, xfree, pctx); + obj = rb_data_typed_object_zalloc(klass, algo->ctx_size, &digest_type); + pctx = RTYPEDDATA_DATA(obj); + algo_init(algo, pctx); return obj; } @@ -567,44 +661,57 @@ rb_digest_base_copy(VALUE copy, VALUE obj) rb_check_frozen(copy); - algo = get_digest_base_metadata(rb_obj_class(copy)); + algo = get_digest_obj_metadata(copy); + if (algo != get_digest_obj_metadata(obj)) + rb_raise(rb_eTypeError, "different algorithms"); - Data_Get_Struct(obj, void, pctx1); - Data_Get_Struct(copy, void, pctx2); + TypedData_Get_Struct(obj, void, &digest_type, pctx1); + TypedData_Get_Struct(copy, void, &digest_type, pctx2); memcpy(pctx2, pctx1, algo->ctx_size); return copy; } -/* :nodoc: */ +/* + * call-seq: digest_base.reset -> digest_base + * + * Reset the digest to its initial state and return +self+. + */ static VALUE rb_digest_base_reset(VALUE self) { rb_digest_metadata_t *algo; void *pctx; - algo = get_digest_base_metadata(rb_obj_class(self)); + algo = get_digest_obj_metadata(self); - Data_Get_Struct(self, void, pctx); + TypedData_Get_Struct(self, void, &digest_type, pctx); - algo->init_func(pctx); + algo_init(algo, pctx); return self; } -/* :nodoc: */ +/* + * call-seq: + * digest_base.update(string) -> digest_base + * digest_base << string -> digest_base + * + * Update the digest using given _string_ and return +self+. + */ static VALUE rb_digest_base_update(VALUE self, VALUE str) { rb_digest_metadata_t *algo; void *pctx; - algo = get_digest_base_metadata(rb_obj_class(self)); + algo = get_digest_obj_metadata(self); - Data_Get_Struct(self, void, pctx); + TypedData_Get_Struct(self, void, &digest_type, pctx); StringValue(str); algo->update_func(pctx, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str)); + RB_GC_GUARD(str); return self; } @@ -617,56 +724,75 @@ rb_digest_base_finish(VALUE self) void *pctx; VALUE str; - algo = get_digest_base_metadata(rb_obj_class(self)); + algo = get_digest_obj_metadata(self); - Data_Get_Struct(self, void, pctx); + TypedData_Get_Struct(self, void, &digest_type, pctx); str = rb_str_new(0, algo->digest_len); algo->finish_func(pctx, (unsigned char *)RSTRING_PTR(str)); /* avoid potential coredump caused by use of a finished context */ - algo->init_func(pctx); + algo_init(algo, pctx); return str; } -/* :nodoc: */ +/* + * call-seq: digest_base.digest_length -> Integer + * + * Return the length of the hash value in bytes. + */ static VALUE rb_digest_base_digest_length(VALUE self) { rb_digest_metadata_t *algo; - algo = get_digest_base_metadata(rb_obj_class(self)); + algo = get_digest_obj_metadata(self); - return INT2NUM(algo->digest_len); + return SIZET2NUM(algo->digest_len); } -/* :nodoc: */ +/* + * call-seq: digest_base.block_length -> Integer + * + * Return the block length of the digest in bytes. + */ static VALUE rb_digest_base_block_length(VALUE self) { rb_digest_metadata_t *algo; - algo = get_digest_base_metadata(rb_obj_class(self)); + algo = get_digest_obj_metadata(self); - return INT2NUM(algo->block_len); + return SIZET2NUM(algo->block_len); } void Init_digest(void) { +#undef rb_intern id_reset = rb_intern("reset"); id_update = rb_intern("update"); id_finish = rb_intern("finish"); id_digest = rb_intern("digest"); id_hexdigest = rb_intern("hexdigest"); id_digest_length = rb_intern("digest_length"); + id_metadata = rb_id_metadata(); + InitVM(digest); +} +void +InitVM_digest(void) +{ /* * module Digest */ rb_mDigest = rb_define_module("Digest"); +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + /* module functions */ rb_define_module_function(rb_mDigest, "hexencode", rb_digest_s_hexencode, 1); @@ -708,8 +834,6 @@ Init_digest(void) rb_define_singleton_method(rb_cDigest_Class, "digest", rb_digest_class_s_digest, -1); rb_define_singleton_method(rb_cDigest_Class, "hexdigest", rb_digest_class_s_hexdigest, -1); - id_metadata = rb_intern("metadata"); - /* class Digest::Base < Digest::Class */ rb_cDigest_Base = rb_define_class_under(rb_mDigest, "Base", rb_cDigest_Class); diff --git a/ext/digest/digest.gemspec b/ext/digest/digest.gemspec new file mode 100644 index 0000000000..4a01c5fde1 --- /dev/null +++ b/ext/digest/digest.gemspec @@ -0,0 +1,44 @@ +# coding: utf-8 +# frozen_string_literal: true + +Gem::Specification.new do |spec| + version_module = Module.new do + version_rb = File.join(__dir__, "lib/digest/version.rb") + module_eval(File.read(version_rb), version_rb) + end + + spec.name = "digest" + spec.version = version_module::Digest::VERSION + spec.authors = ["Akinori MUSHA"] + spec.email = ["knu@idaemons.org"] + + spec.summary = %q{Provides a framework for message digest libraries.} + spec.description = %q{Provides a framework for message digest libraries.} + spec.homepage = "https://github.com/ruby/digest" + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.files = [ + "LICENSE.txt", + "README.md", + *Dir["lib/digest{.rb,/**/*.rb}"], + ] + + spec.required_ruby_version = ">= 2.5.0" + + spec.bindir = "exe" + spec.executables = [] + + if Gem::Platform === spec.platform and spec.platform =~ 'java' or RUBY_ENGINE == 'jruby' + spec.platform = 'java' + + spec.files += Dir["ext/java/**/*.{rb,java}", "lib/digest.jar"] + spec.require_paths = %w[lib ext/java/org/jruby/ext/digest/lib] + else + spec.extensions = Dir["ext/digest/**/extconf.rb"] + + spec.files += Dir["ext/digest/**/{*.{rb,c,h,sh},depend}"] + spec.require_paths = %w[lib] + end + + spec.metadata["msys2_mingw_dependencies"] = "openssl" +end diff --git a/ext/digest/digest.h b/ext/digest/digest.h index 6e4906c859..c5c37583a6 100644 --- a/ext/digest/digest.h +++ b/ext/digest/digest.h @@ -15,11 +15,11 @@ #include "ruby.h" -#define RUBY_DIGEST_API_VERSION 2 +#define RUBY_DIGEST_API_VERSION 3 -typedef void (*rb_digest_hash_init_func_t)(void *); +typedef int (*rb_digest_hash_init_func_t)(void *); typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); -typedef void (*rb_digest_hash_finish_func_t)(void *, unsigned char *); +typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *); typedef struct { int api_version; @@ -30,3 +30,77 @@ typedef struct { rb_digest_hash_update_func_t update_func; rb_digest_hash_finish_func_t finish_func; } rb_digest_metadata_t; + +#define DEFINE_UPDATE_FUNC_FOR_UINT(name) \ +void \ +rb_digest_##name##_update(void *ctx, unsigned char *ptr, size_t size) \ +{ \ + const unsigned int stride = 16384; \ + \ + for (; size > stride; size -= stride, ptr += stride) { \ + name##_Update(ctx, ptr, stride); \ + } \ + /* Since size <= stride, size should fit into an unsigned int */ \ + if (size > 0) name##_Update(ctx, ptr, (unsigned int)size); \ +} + +#define DEFINE_FINISH_FUNC_FROM_FINAL(name) \ +int \ +rb_digest_##name##_finish(void *ctx, unsigned char *ptr) \ +{ \ + return name##_Final(ptr, ctx); \ +} + +static inline VALUE +rb_digest_namespace(void) +{ + rb_require("digest"); + return rb_path2class("Digest"); +} + +static inline ID +rb_id_metadata(void) +{ + return rb_intern_const("metadata"); +} + +#if !defined(HAVE_RB_EXT_RESOLVE_SYMBOL) +#elif !defined(RUBY_UNTYPED_DATA_WARNING) +# error RUBY_UNTYPED_DATA_WARNING is not defined +#elif RUBY_UNTYPED_DATA_WARNING +/* rb_ext_resolve_symbol() has been defined since Ruby 3.3, but digest + * bundled with 3.3 didn't use it. */ +# define DIGEST_USE_RB_EXT_RESOLVE_SYMBOL 1 +#endif + +static inline VALUE +rb_digest_make_metadata(const rb_digest_metadata_t *meta) +{ +#if defined(EXTSTATIC) && EXTSTATIC + /* The extension is built as a static library, so safe to refer to + * rb_digest_wrap_metadata directly. */ + extern VALUE rb_digest_wrap_metadata(const rb_digest_metadata_t *meta); + return rb_digest_wrap_metadata(meta); +#else + /* The extension is built as a shared library, so we can't refer + * to rb_digest_wrap_metadata directly. */ +# ifdef DIGEST_USE_RB_EXT_RESOLVE_SYMBOL + /* If rb_ext_resolve_symbol() is available, use it to get the address of + * rb_digest_wrap_metadata. */ + typedef VALUE (*wrapper_func_type)(const rb_digest_metadata_t *meta); + static wrapper_func_type wrapper; + if (!wrapper) { + wrapper = (wrapper_func_type)(uintptr_t) + rb_ext_resolve_symbol("digest.so", "rb_digest_wrap_metadata"); + if (!wrapper) rb_raise(rb_eLoadError, "rb_digest_wrap_metadata not found"); + } + return wrapper(meta); +# else + /* If rb_ext_resolve_symbol() is not available, keep using untyped + * data. */ +# undef RUBY_UNTYPED_DATA_WARNING +# define RUBY_UNTYPED_DATA_WARNING 0 + return rb_obj_freeze(Data_Wrap_Struct(0, 0, 0, (void *)meta)); +# endif +#endif +} diff --git a/ext/digest/digest_conf.rb b/ext/digest/digest_conf.rb new file mode 100644 index 0000000000..099d20fcbe --- /dev/null +++ b/ext/digest/digest_conf.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: false + +def digest_conf(name) + unless with_config("bundled-#{name}") + case cc = with_config("common-digest", true) + when true, false + else + cc = cc.split(/[\s,]++/).any? {|pat| File.fnmatch?(pat, name)} + end + if cc and File.exist?("#$srcdir/#{name}cc.h") and + have_header("CommonCrypto/CommonDigest.h") + $defs << "-D#{name.upcase}_USE_COMMONDIGEST" + $headers << "#{name}cc.h" + return :commondigest + end + end + $objs << "#{name}.#{$OBJEXT}" + return +end diff --git a/ext/digest/extconf.rb b/ext/digest/extconf.rb index a20ca8d68f..0e5f08d794 100644 --- a/ext/digest/extconf.rb +++ b/ext/digest/extconf.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false # $RoughId: extconf.rb,v 1.6 2001/07/13 15:38:27 knu Exp $ # $Id$ @@ -5,6 +6,6 @@ require "mkmf" $INSTALLFILES = { "digest.h" => "$(HDRDIR)" -} +} if $extmk create_makefile("digest") diff --git a/ext/digest/lib/digest.rb b/ext/digest/lib/digest.rb index 5f7ebc2237..e995adb450 100644 --- a/ext/digest/lib/digest.rb +++ b/ext/digest/lib/digest.rb @@ -1,10 +1,28 @@ -require 'digest.so' +# frozen_string_literal: false + +if defined?(Digest) && + /\A(?:2\.|3\.0\.[0-2]\z)/.match?(RUBY_VERSION) && + caller_locations.any? { |l| + %r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path) + } + # Before Ruby 3.0.3/3.1.0, the gem and bundle commands used to load + # the digest library before loading additionally installed gems, so + # you will get constant redefinition warnings and unexpected + # implementation overwriting if we proceed here. Avoid that. + return +end + +require 'digest/version' +require 'digest/loader' module Digest + # A mutex for Digest(). + REQUIRE_MUTEX = Thread::Mutex.new + def self.const_missing(name) # :nodoc: case name when :SHA256, :SHA384, :SHA512 - lib = 'digest/sha2.so' + lib = 'digest/sha2' else lib = File.join('digest', name.to_s.downcase) end @@ -76,15 +94,30 @@ end # call-seq: # Digest(name) -> digest_subclass # -# Returns a Digest subclass by +name+. +# Returns a Digest subclass by +name+ in a thread-safe manner even +# when on-demand loading is involved. # # require 'digest' # # Digest("MD5") # # => Digest::MD5 # -# Digest("Foo") +# Digest(:SHA256) +# # => Digest::SHA256 +# +# Digest(:Foo) # # => LoadError: library not found for class Digest::Foo -- digest/foo def Digest(name) - Digest.const_get(name) + const = name.to_sym + Digest::REQUIRE_MUTEX.synchronize { + # Ignore autoload's because it is void when we have #const_missing + Digest.const_missing(const) + } +rescue LoadError + # Constants do not necessarily rely on digest/*. + if Digest.const_defined?(const) + Digest.const_get(const) + else + raise + end end diff --git a/ext/digest/lib/digest/hmac.rb b/ext/digest/lib/digest/hmac.rb deleted file mode 100644 index 3883badc45..0000000000 --- a/ext/digest/lib/digest/hmac.rb +++ /dev/null @@ -1,302 +0,0 @@ -# == License -# -# Copyright (c) 2006 Akinori MUSHA <knu@iDaemons.org> -# -# Documentation by Akinori MUSHA -# -# All rights reserved. You can redistribute and/or modify it under -# the same terms as Ruby. -# -# $Id$ -# - -warn "use of the experimetal library 'digest/hmac' is discouraged; require 'openssl' and use OpenSSL::HMAC instead." if $VERBOSE - -require 'digest' - -module Digest - # = digest/hmac.rb - # - # An experimental implementation of HMAC keyed-hashing algorithm - # - # == Overview - # - # CAUTION: Use of this library is discouraged, because this - # implementation was meant to be experimental but somehow got into the - # 1.9 series without being noticed. Please use OpenSSL::HMAC in the - # "openssl" library instead. - # - # == Examples - # - # require 'digest/hmac' - # - # # one-liner example - # puts Digest::HMAC.hexdigest("data", "hash key", Digest::SHA1) - # - # # rather longer one - # hmac = Digest::HMAC.new("foo", Digest::RMD160) - # - # buf = "" - # while stream.read(16384, buf) - # hmac.update(buf) - # end - # - # puts hmac.hexdigest - # - class HMAC < Digest::Class - - # Creates a Digest::HMAC instance. - - def initialize(key, digester) - @md = digester.new - - block_len = @md.block_length - - if key.bytesize > block_len - key = @md.digest(key) - end - - ipad = Array.new(block_len, 0x36) - opad = Array.new(block_len, 0x5c) - - key.bytes.each_with_index { |c, i| - ipad[i] ^= c - opad[i] ^= c - } - - @key = key.freeze - @ipad = ipad.pack('C*').freeze - @opad = opad.pack('C*').freeze - @md.update(@ipad) - end - - def initialize_copy(other) # :nodoc: - @md = other.instance_eval { @md.clone } - end - - # call-seq: - # hmac.update(string) -> hmac - # hmac << string -> hmac - # - # Updates the hmac using a given +string+ and returns self. - def update(text) - @md.update(text) - self - end - alias << update - - # call-seq: - # hmac.reset -> hmac - # - # Resets the hmac to the initial state and returns self. - def reset - @md.reset - @md.update(@ipad) - self - end - - def finish # :nodoc: - d = @md.digest! - @md.update(@opad) - @md.update(d) - @md.digest! - end - private :finish - - # call-seq: - # hmac.digest_length -> Integer - # - # Returns the length in bytes of the hash value of the digest. - def digest_length - @md.digest_length - end - - # call-seq: - # hmac.block_length -> Integer - # - # Returns the block length in bytes of the hmac. - def block_length - @md.block_length - end - - # call-seq: - # hmac.inspect -> string - # - # Creates a printable version of the hmac object. - def inspect - sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 }); - end - end -end - -if $0 == __FILE__ - eval DATA.gets(nil), nil, $0, DATA.lineno -end - -__END__ - -require 'test/unit' - -module TM_HMAC - def test_s_hexdigest - cases.each { |h| - digesters.each { |d| - assert_equal(h[:hexdigest], Digest::HMAC.hexdigest(h[:data], h[:key], d)) - } - } - end - - def test_hexdigest - cases.each { |h| - digesters.each { |d| - hmac = Digest::HMAC.new(h[:key], d) - - hmac.update(h[:data]) - - assert_equal(h[:hexdigest], hmac.hexdigest) - } - } - end - - def test_reset - cases.each { |h| - digesters.each { |d| - hmac = Digest::HMAC.new(h[:key], d) - hmac.update("test") - hmac.reset - hmac.update(h[:data]) - - assert_equal(h[:hexdigest], hmac.hexdigest) - } - } - end -end - -class TC_HMAC_MD5 < Test::Unit::TestCase - include TM_HMAC - - def digesters - [Digest::MD5, Digest::MD5.new] - end - - # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 - def cases - [ - { - :key => "\x0b" * 16, - :data => "Hi There", - :hexdigest => "9294727a3638bb1c13f48ef8158bfc9d", - }, { - :key => "Jefe", - :data => "what do ya want for nothing?", - :hexdigest => "750c783e6ab0b503eaa86e310a5db738", - }, { - :key => "\xaa" * 16, - :data => "\xdd" * 50, - :hexdigest => "56be34521d144c88dbb8c733f0e8b3f6", - }, { - :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", - :data => "\xcd" * 50, - :hexdigest => "697eaf0aca3a3aea3a75164746ffaa79", - }, { - :key => "\x0c" * 16, - :data => "Test With Truncation", - :hexdigest => "56461ef2342edc00f9bab995690efd4c", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key - Hash Key First", - :hexdigest => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", - :hexdigest => "6f630fad67cda0ee1fb1f562db3aa53e", - } - ] - end -end - -class TC_HMAC_SHA1 < Test::Unit::TestCase - include TM_HMAC - - def digesters - [Digest::SHA1, Digest::SHA1.new] - end - - # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 - def cases - [ - { - :key => "\x0b" * 20, - :data => "Hi There", - :hexdigest => "b617318655057264e28bc0b6fb378c8ef146be00", - }, { - :key => "Jefe", - :data => "what do ya want for nothing?", - :hexdigest => "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", - }, { - :key => "\xaa" * 20, - :data => "\xdd" * 50, - :hexdigest => "125d7342b9ac11cd91a39af48aa17b4f63f175d3", - }, { - :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", - :data => "\xcd" * 50, - :hexdigest => "4c9007f4026250c6bc8414f9bf50c86c2d7235da", - }, { - :key => "\x0c" * 20, - :data => "Test With Truncation", - :hexdigest => "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key - Hash Key First", - :hexdigest => "aa4ae5e15272d00e95705637ce8a3b55ed402112", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", - :hexdigest => "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", - } - ] - end -end - -class TC_HMAC_RMD160 < Test::Unit::TestCase - include TM_HMAC - - def digesters - [Digest::RMD160, Digest::RMD160.new] - end - - # Taken from RFC 2286: Test Cases for HMAC-RIPEMD160 and HMAC-RIPEMD128 - def cases - [ - { - :key => "\x0b" * 20, - :data => "Hi There", - :hexdigest => "24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668", - }, { - :key => "Jefe", - :data => "what do ya want for nothing?", - :hexdigest => "dda6c0213a485a9e24f4742064a7f033b43c4069", - }, { - :key => "\xaa" * 20, - :data => "\xdd" * 50, - :hexdigest => "b0b105360de759960ab4f35298e116e295d8e7c1", - }, { - :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", - :data => "\xcd" * 50, - :hexdigest => "d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4", - }, { - :key => "\x0c" * 20, - :data => "Test With Truncation", - :hexdigest => "7619693978f91d90539ae786500ff3d8e0518e39", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key - Hash Key First", - :hexdigest => "6466ca07ac5eac29e1bd523e5ada7605b791fd8b", - }, { - :key => "\xaa" * 80, - :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", - :hexdigest => "69ea60798d71616cce5fd0871e23754cd75d5a0a", - } - ] - end -end diff --git a/ext/digest/lib/digest/loader.rb b/ext/digest/lib/digest/loader.rb new file mode 100644 index 0000000000..6b989e07be --- /dev/null +++ b/ext/digest/lib/digest/loader.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require 'digest.so' diff --git a/ext/digest/lib/digest/version.rb b/ext/digest/lib/digest/version.rb new file mode 100644 index 0000000000..a56e80c54e --- /dev/null +++ b/ext/digest/lib/digest/version.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module Digest + # The version string + VERSION = "3.2.1" +end diff --git a/ext/digest/md5/depend b/ext/digest/md5/depend index ca30d310e9..d1c25c28c8 100644 --- a/ext/digest/md5/depend +++ b/ext/digest/md5/depend @@ -1,3 +1,333 @@ md5.o: md5.c md5.h $(srcdir)/../defs.h -md5init.o: md5init.c md5.h $(srcdir)/../digest.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -md5ossl.o: md5ossl.h +md5init.o: $(LOCAL_HDRS) + +# AUTOGENERATED DEPENDENCIES START +md5.o: $(RUBY_EXTCONF_H) +md5.o: $(arch_hdrdir)/ruby/config.h +md5.o: $(hdrdir)/ruby.h +md5.o: $(hdrdir)/ruby/assert.h +md5.o: $(hdrdir)/ruby/backward.h +md5.o: $(hdrdir)/ruby/backward/2/assume.h +md5.o: $(hdrdir)/ruby/backward/2/attributes.h +md5.o: $(hdrdir)/ruby/backward/2/bool.h +md5.o: $(hdrdir)/ruby/backward/2/inttypes.h +md5.o: $(hdrdir)/ruby/backward/2/limits.h +md5.o: $(hdrdir)/ruby/backward/2/long_long.h +md5.o: $(hdrdir)/ruby/backward/2/stdalign.h +md5.o: $(hdrdir)/ruby/backward/2/stdarg.h +md5.o: $(hdrdir)/ruby/defines.h +md5.o: $(hdrdir)/ruby/intern.h +md5.o: $(hdrdir)/ruby/internal/abi.h +md5.o: $(hdrdir)/ruby/internal/anyargs.h +md5.o: $(hdrdir)/ruby/internal/arithmetic.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/char.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/double.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/int.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/long.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/short.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +md5.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +md5.o: $(hdrdir)/ruby/internal/assume.h +md5.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +md5.o: $(hdrdir)/ruby/internal/attr/artificial.h +md5.o: $(hdrdir)/ruby/internal/attr/cold.h +md5.o: $(hdrdir)/ruby/internal/attr/const.h +md5.o: $(hdrdir)/ruby/internal/attr/constexpr.h +md5.o: $(hdrdir)/ruby/internal/attr/deprecated.h +md5.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +md5.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +md5.o: $(hdrdir)/ruby/internal/attr/error.h +md5.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +md5.o: $(hdrdir)/ruby/internal/attr/forceinline.h +md5.o: $(hdrdir)/ruby/internal/attr/format.h +md5.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +md5.o: $(hdrdir)/ruby/internal/attr/noalias.h +md5.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +md5.o: $(hdrdir)/ruby/internal/attr/noexcept.h +md5.o: $(hdrdir)/ruby/internal/attr/noinline.h +md5.o: $(hdrdir)/ruby/internal/attr/nonnull.h +md5.o: $(hdrdir)/ruby/internal/attr/noreturn.h +md5.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +md5.o: $(hdrdir)/ruby/internal/attr/pure.h +md5.o: $(hdrdir)/ruby/internal/attr/restrict.h +md5.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +md5.o: $(hdrdir)/ruby/internal/attr/warning.h +md5.o: $(hdrdir)/ruby/internal/attr/weakref.h +md5.o: $(hdrdir)/ruby/internal/cast.h +md5.o: $(hdrdir)/ruby/internal/compiler_is.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +md5.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +md5.o: $(hdrdir)/ruby/internal/compiler_since.h +md5.o: $(hdrdir)/ruby/internal/config.h +md5.o: $(hdrdir)/ruby/internal/constant_p.h +md5.o: $(hdrdir)/ruby/internal/core.h +md5.o: $(hdrdir)/ruby/internal/core/rarray.h +md5.o: $(hdrdir)/ruby/internal/core/rbasic.h +md5.o: $(hdrdir)/ruby/internal/core/rbignum.h +md5.o: $(hdrdir)/ruby/internal/core/rclass.h +md5.o: $(hdrdir)/ruby/internal/core/rdata.h +md5.o: $(hdrdir)/ruby/internal/core/rfile.h +md5.o: $(hdrdir)/ruby/internal/core/rhash.h +md5.o: $(hdrdir)/ruby/internal/core/robject.h +md5.o: $(hdrdir)/ruby/internal/core/rregexp.h +md5.o: $(hdrdir)/ruby/internal/core/rstring.h +md5.o: $(hdrdir)/ruby/internal/core/rstruct.h +md5.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +md5.o: $(hdrdir)/ruby/internal/ctype.h +md5.o: $(hdrdir)/ruby/internal/dllexport.h +md5.o: $(hdrdir)/ruby/internal/dosish.h +md5.o: $(hdrdir)/ruby/internal/error.h +md5.o: $(hdrdir)/ruby/internal/eval.h +md5.o: $(hdrdir)/ruby/internal/event.h +md5.o: $(hdrdir)/ruby/internal/fl_type.h +md5.o: $(hdrdir)/ruby/internal/gc.h +md5.o: $(hdrdir)/ruby/internal/glob.h +md5.o: $(hdrdir)/ruby/internal/globals.h +md5.o: $(hdrdir)/ruby/internal/has/attribute.h +md5.o: $(hdrdir)/ruby/internal/has/builtin.h +md5.o: $(hdrdir)/ruby/internal/has/c_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +md5.o: $(hdrdir)/ruby/internal/has/extension.h +md5.o: $(hdrdir)/ruby/internal/has/feature.h +md5.o: $(hdrdir)/ruby/internal/has/warning.h +md5.o: $(hdrdir)/ruby/internal/intern/array.h +md5.o: $(hdrdir)/ruby/internal/intern/bignum.h +md5.o: $(hdrdir)/ruby/internal/intern/class.h +md5.o: $(hdrdir)/ruby/internal/intern/compar.h +md5.o: $(hdrdir)/ruby/internal/intern/complex.h +md5.o: $(hdrdir)/ruby/internal/intern/cont.h +md5.o: $(hdrdir)/ruby/internal/intern/dir.h +md5.o: $(hdrdir)/ruby/internal/intern/enum.h +md5.o: $(hdrdir)/ruby/internal/intern/enumerator.h +md5.o: $(hdrdir)/ruby/internal/intern/error.h +md5.o: $(hdrdir)/ruby/internal/intern/eval.h +md5.o: $(hdrdir)/ruby/internal/intern/file.h +md5.o: $(hdrdir)/ruby/internal/intern/hash.h +md5.o: $(hdrdir)/ruby/internal/intern/io.h +md5.o: $(hdrdir)/ruby/internal/intern/load.h +md5.o: $(hdrdir)/ruby/internal/intern/marshal.h +md5.o: $(hdrdir)/ruby/internal/intern/numeric.h +md5.o: $(hdrdir)/ruby/internal/intern/object.h +md5.o: $(hdrdir)/ruby/internal/intern/parse.h +md5.o: $(hdrdir)/ruby/internal/intern/proc.h +md5.o: $(hdrdir)/ruby/internal/intern/process.h +md5.o: $(hdrdir)/ruby/internal/intern/random.h +md5.o: $(hdrdir)/ruby/internal/intern/range.h +md5.o: $(hdrdir)/ruby/internal/intern/rational.h +md5.o: $(hdrdir)/ruby/internal/intern/re.h +md5.o: $(hdrdir)/ruby/internal/intern/ruby.h +md5.o: $(hdrdir)/ruby/internal/intern/select.h +md5.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +md5.o: $(hdrdir)/ruby/internal/intern/set.h +md5.o: $(hdrdir)/ruby/internal/intern/signal.h +md5.o: $(hdrdir)/ruby/internal/intern/sprintf.h +md5.o: $(hdrdir)/ruby/internal/intern/string.h +md5.o: $(hdrdir)/ruby/internal/intern/struct.h +md5.o: $(hdrdir)/ruby/internal/intern/thread.h +md5.o: $(hdrdir)/ruby/internal/intern/time.h +md5.o: $(hdrdir)/ruby/internal/intern/variable.h +md5.o: $(hdrdir)/ruby/internal/intern/vm.h +md5.o: $(hdrdir)/ruby/internal/interpreter.h +md5.o: $(hdrdir)/ruby/internal/iterator.h +md5.o: $(hdrdir)/ruby/internal/memory.h +md5.o: $(hdrdir)/ruby/internal/method.h +md5.o: $(hdrdir)/ruby/internal/module.h +md5.o: $(hdrdir)/ruby/internal/newobj.h +md5.o: $(hdrdir)/ruby/internal/scan_args.h +md5.o: $(hdrdir)/ruby/internal/special_consts.h +md5.o: $(hdrdir)/ruby/internal/static_assert.h +md5.o: $(hdrdir)/ruby/internal/stdalign.h +md5.o: $(hdrdir)/ruby/internal/stdbool.h +md5.o: $(hdrdir)/ruby/internal/stdckdint.h +md5.o: $(hdrdir)/ruby/internal/symbol.h +md5.o: $(hdrdir)/ruby/internal/value.h +md5.o: $(hdrdir)/ruby/internal/value_type.h +md5.o: $(hdrdir)/ruby/internal/variable.h +md5.o: $(hdrdir)/ruby/internal/warning_push.h +md5.o: $(hdrdir)/ruby/internal/xmalloc.h +md5.o: $(hdrdir)/ruby/missing.h +md5.o: $(hdrdir)/ruby/ruby.h +md5.o: $(hdrdir)/ruby/st.h +md5.o: $(hdrdir)/ruby/subst.h +md5.o: $(srcdir)/../defs.h +md5.o: md5.c +md5.o: md5.h +md5init.o: $(RUBY_EXTCONF_H) +md5init.o: $(arch_hdrdir)/ruby/config.h +md5init.o: $(hdrdir)/ruby.h +md5init.o: $(hdrdir)/ruby/assert.h +md5init.o: $(hdrdir)/ruby/backward.h +md5init.o: $(hdrdir)/ruby/backward/2/assume.h +md5init.o: $(hdrdir)/ruby/backward/2/attributes.h +md5init.o: $(hdrdir)/ruby/backward/2/bool.h +md5init.o: $(hdrdir)/ruby/backward/2/inttypes.h +md5init.o: $(hdrdir)/ruby/backward/2/limits.h +md5init.o: $(hdrdir)/ruby/backward/2/long_long.h +md5init.o: $(hdrdir)/ruby/backward/2/stdalign.h +md5init.o: $(hdrdir)/ruby/backward/2/stdarg.h +md5init.o: $(hdrdir)/ruby/defines.h +md5init.o: $(hdrdir)/ruby/intern.h +md5init.o: $(hdrdir)/ruby/internal/abi.h +md5init.o: $(hdrdir)/ruby/internal/anyargs.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +md5init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +md5init.o: $(hdrdir)/ruby/internal/assume.h +md5init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +md5init.o: $(hdrdir)/ruby/internal/attr/artificial.h +md5init.o: $(hdrdir)/ruby/internal/attr/cold.h +md5init.o: $(hdrdir)/ruby/internal/attr/const.h +md5init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +md5init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +md5init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +md5init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +md5init.o: $(hdrdir)/ruby/internal/attr/error.h +md5init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +md5init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +md5init.o: $(hdrdir)/ruby/internal/attr/format.h +md5init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +md5init.o: $(hdrdir)/ruby/internal/attr/noalias.h +md5init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +md5init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +md5init.o: $(hdrdir)/ruby/internal/attr/noinline.h +md5init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +md5init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +md5init.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +md5init.o: $(hdrdir)/ruby/internal/attr/pure.h +md5init.o: $(hdrdir)/ruby/internal/attr/restrict.h +md5init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +md5init.o: $(hdrdir)/ruby/internal/attr/warning.h +md5init.o: $(hdrdir)/ruby/internal/attr/weakref.h +md5init.o: $(hdrdir)/ruby/internal/cast.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +md5init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +md5init.o: $(hdrdir)/ruby/internal/compiler_since.h +md5init.o: $(hdrdir)/ruby/internal/config.h +md5init.o: $(hdrdir)/ruby/internal/constant_p.h +md5init.o: $(hdrdir)/ruby/internal/core.h +md5init.o: $(hdrdir)/ruby/internal/core/rarray.h +md5init.o: $(hdrdir)/ruby/internal/core/rbasic.h +md5init.o: $(hdrdir)/ruby/internal/core/rbignum.h +md5init.o: $(hdrdir)/ruby/internal/core/rclass.h +md5init.o: $(hdrdir)/ruby/internal/core/rdata.h +md5init.o: $(hdrdir)/ruby/internal/core/rfile.h +md5init.o: $(hdrdir)/ruby/internal/core/rhash.h +md5init.o: $(hdrdir)/ruby/internal/core/robject.h +md5init.o: $(hdrdir)/ruby/internal/core/rregexp.h +md5init.o: $(hdrdir)/ruby/internal/core/rstring.h +md5init.o: $(hdrdir)/ruby/internal/core/rstruct.h +md5init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +md5init.o: $(hdrdir)/ruby/internal/ctype.h +md5init.o: $(hdrdir)/ruby/internal/dllexport.h +md5init.o: $(hdrdir)/ruby/internal/dosish.h +md5init.o: $(hdrdir)/ruby/internal/error.h +md5init.o: $(hdrdir)/ruby/internal/eval.h +md5init.o: $(hdrdir)/ruby/internal/event.h +md5init.o: $(hdrdir)/ruby/internal/fl_type.h +md5init.o: $(hdrdir)/ruby/internal/gc.h +md5init.o: $(hdrdir)/ruby/internal/glob.h +md5init.o: $(hdrdir)/ruby/internal/globals.h +md5init.o: $(hdrdir)/ruby/internal/has/attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/builtin.h +md5init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +md5init.o: $(hdrdir)/ruby/internal/has/extension.h +md5init.o: $(hdrdir)/ruby/internal/has/feature.h +md5init.o: $(hdrdir)/ruby/internal/has/warning.h +md5init.o: $(hdrdir)/ruby/internal/intern/array.h +md5init.o: $(hdrdir)/ruby/internal/intern/bignum.h +md5init.o: $(hdrdir)/ruby/internal/intern/class.h +md5init.o: $(hdrdir)/ruby/internal/intern/compar.h +md5init.o: $(hdrdir)/ruby/internal/intern/complex.h +md5init.o: $(hdrdir)/ruby/internal/intern/cont.h +md5init.o: $(hdrdir)/ruby/internal/intern/dir.h +md5init.o: $(hdrdir)/ruby/internal/intern/enum.h +md5init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +md5init.o: $(hdrdir)/ruby/internal/intern/error.h +md5init.o: $(hdrdir)/ruby/internal/intern/eval.h +md5init.o: $(hdrdir)/ruby/internal/intern/file.h +md5init.o: $(hdrdir)/ruby/internal/intern/hash.h +md5init.o: $(hdrdir)/ruby/internal/intern/io.h +md5init.o: $(hdrdir)/ruby/internal/intern/load.h +md5init.o: $(hdrdir)/ruby/internal/intern/marshal.h +md5init.o: $(hdrdir)/ruby/internal/intern/numeric.h +md5init.o: $(hdrdir)/ruby/internal/intern/object.h +md5init.o: $(hdrdir)/ruby/internal/intern/parse.h +md5init.o: $(hdrdir)/ruby/internal/intern/proc.h +md5init.o: $(hdrdir)/ruby/internal/intern/process.h +md5init.o: $(hdrdir)/ruby/internal/intern/random.h +md5init.o: $(hdrdir)/ruby/internal/intern/range.h +md5init.o: $(hdrdir)/ruby/internal/intern/rational.h +md5init.o: $(hdrdir)/ruby/internal/intern/re.h +md5init.o: $(hdrdir)/ruby/internal/intern/ruby.h +md5init.o: $(hdrdir)/ruby/internal/intern/select.h +md5init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +md5init.o: $(hdrdir)/ruby/internal/intern/set.h +md5init.o: $(hdrdir)/ruby/internal/intern/signal.h +md5init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +md5init.o: $(hdrdir)/ruby/internal/intern/string.h +md5init.o: $(hdrdir)/ruby/internal/intern/struct.h +md5init.o: $(hdrdir)/ruby/internal/intern/thread.h +md5init.o: $(hdrdir)/ruby/internal/intern/time.h +md5init.o: $(hdrdir)/ruby/internal/intern/variable.h +md5init.o: $(hdrdir)/ruby/internal/intern/vm.h +md5init.o: $(hdrdir)/ruby/internal/interpreter.h +md5init.o: $(hdrdir)/ruby/internal/iterator.h +md5init.o: $(hdrdir)/ruby/internal/memory.h +md5init.o: $(hdrdir)/ruby/internal/method.h +md5init.o: $(hdrdir)/ruby/internal/module.h +md5init.o: $(hdrdir)/ruby/internal/newobj.h +md5init.o: $(hdrdir)/ruby/internal/scan_args.h +md5init.o: $(hdrdir)/ruby/internal/special_consts.h +md5init.o: $(hdrdir)/ruby/internal/static_assert.h +md5init.o: $(hdrdir)/ruby/internal/stdalign.h +md5init.o: $(hdrdir)/ruby/internal/stdbool.h +md5init.o: $(hdrdir)/ruby/internal/stdckdint.h +md5init.o: $(hdrdir)/ruby/internal/symbol.h +md5init.o: $(hdrdir)/ruby/internal/value.h +md5init.o: $(hdrdir)/ruby/internal/value_type.h +md5init.o: $(hdrdir)/ruby/internal/variable.h +md5init.o: $(hdrdir)/ruby/internal/warning_push.h +md5init.o: $(hdrdir)/ruby/internal/xmalloc.h +md5init.o: $(hdrdir)/ruby/missing.h +md5init.o: $(hdrdir)/ruby/ruby.h +md5init.o: $(hdrdir)/ruby/st.h +md5init.o: $(hdrdir)/ruby/subst.h +md5init.o: $(srcdir)/../defs.h +md5init.o: $(srcdir)/../digest.h +md5init.o: md5.h +md5init.o: md5cc.h +md5init.o: md5init.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/md5/extconf.rb b/ext/digest/md5/extconf.rb index 5a57fd3eea..01658e1b60 100644 --- a/ext/digest/md5/extconf.rb +++ b/ext/digest/md5/extconf.rb @@ -1,25 +1,14 @@ # -*- coding: us-ascii -*- +# frozen_string_literal: false # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $ # $Id$ require "mkmf" - -$defs << "-DHAVE_CONFIG_H" -$INCFLAGS << " -I$(srcdir)/.." +require File.expand_path("../../digest_conf", __FILE__) $objs = [ "md5init.#{$OBJEXT}" ] -dir_config("openssl") -pkg_config("openssl") -require File.expand_path('../../../openssl/deprecation', __FILE__) - -if !with_config("bundled-md5") && - have_library("crypto") && OpenSSL.check_func("MD5_Transform", "openssl/md5.h") - $objs << "md5ossl.#{$OBJEXT}" - -else - $objs << "md5.#{$OBJEXT}" -end +digest_conf("md5") have_header("sys/cdefs.h") diff --git a/ext/digest/md5/md5.c b/ext/digest/md5/md5.c index 8d7d33c5a6..3a7fe2cdad 100644 --- a/ext/digest/md5/md5.c +++ b/ext/digest/md5/md5.c @@ -61,7 +61,7 @@ */ #include <string.h> int -main() +main(void) { static const char *const test[7*2] = { "", "d41d8cd98f00b204e9800998ecf8427e", @@ -102,7 +102,7 @@ main() #ifdef COMPUTE_T_VALUES #include <math.h> int -main() +main(void) { int i; for (i = 1; i <= 64; ++i) { @@ -225,7 +225,7 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/) uint32_t xbuf[16]; const uint32_t *X; - if (!((data - (const uint8_t *)0) & 3)) { + if (!(((uintptr_t)data) & 3)) { /* data are properly aligned */ X = (const uint32_t *)data; } else { @@ -350,7 +350,7 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/) pms->state[3] += d; } -void +int MD5_Init(MD5_CTX *pms) { pms->count[0] = pms->count[1] = 0; @@ -358,6 +358,7 @@ MD5_Init(MD5_CTX *pms) pms->state[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; pms->state[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; pms->state[3] = 0x10325476; + return 1; } void @@ -398,7 +399,7 @@ MD5_Update(MD5_CTX *pms, const uint8_t *data, size_t nbytes) memcpy(pms->buffer, p, left); } -void +int MD5_Finish(MD5_CTX *pms, uint8_t *digest) { static const uint8_t pad[64] = { @@ -419,4 +420,5 @@ MD5_Finish(MD5_CTX *pms, uint8_t *digest) MD5_Update(pms, data, 8); for (i = 0; i < 16; ++i) digest[i] = (uint8_t)(pms->state[i >> 2] >> ((i & 3) << 3)); + return 1; } diff --git a/ext/digest/md5/md5.h b/ext/digest/md5/md5.h index f4580ef5e7..1b3383c5ee 100644 --- a/ext/digest/md5/md5.h +++ b/ext/digest/md5/md5.h @@ -46,7 +46,7 @@ #ifndef MD5_INCLUDED # define MD5_INCLUDED -#include "defs.h" +#include "../defs.h" /* * This code has some adaptations for the Ghostscript environment, but it @@ -69,9 +69,9 @@ typedef struct md5_state_s { #define MD5_Finish rb_Digest_MD5_Finish #endif -void MD5_Init _((MD5_CTX *pms)); +int MD5_Init _((MD5_CTX *pms)); void MD5_Update _((MD5_CTX *pms, const uint8_t *data, size_t nbytes)); -void MD5_Finish _((MD5_CTX *pms, uint8_t *digest)); +int MD5_Finish _((MD5_CTX *pms, uint8_t *digest)); #define MD5_BLOCK_LENGTH 64 #define MD5_DIGEST_LENGTH 16 diff --git a/ext/digest/md5/md5cc.h b/ext/digest/md5/md5cc.h new file mode 100644 index 0000000000..a002c17604 --- /dev/null +++ b/ext/digest/md5/md5cc.h @@ -0,0 +1,27 @@ +#define COMMON_DIGEST_FOR_OPENSSL 1 +#include <CommonCrypto/CommonDigest.h> + +#ifdef __GNUC__ +RB_DIGEST_WARNING_IGNORED(-Wdeprecated-declarations) +/* Suppress deprecation warnings of MD5 from Xcode 11.1 */ +/* Although we know MD5 is deprecated too, provide just for backward + * compatibility, as well as Apple does. */ +#endif + +#define MD5_BLOCK_LENGTH CC_MD5_BLOCK_BYTES + +static DEFINE_UPDATE_FUNC_FOR_UINT(MD5) +static DEFINE_FINISH_FUNC_FROM_FINAL(MD5) + +#undef MD5_Update +#undef MD5_Finish +#define MD5_Update rb_digest_MD5_update +#define MD5_Finish rb_digest_MD5_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine MD5_Init as well. + * This is a NOP on 10.6+. + */ +#undef MD5_Init +#define MD5_Init CC_MD5_Init diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c index 3591782f6e..c919060587 100644 --- a/ext/digest/md5/md5init.c +++ b/ext/digest/md5/md5init.c @@ -1,9 +1,11 @@ /* $RoughId: md5init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */ /* $Id$ */ -#include "digest.h" -#if defined(HAVE_OPENSSL_MD5_H) -#include "md5ossl.h" +#include <ruby/ruby.h> +#include "../digest.h" +#include "../defs.h" +#if defined(MD5_USE_COMMONDIGEST) +#include "md5cc.h" #else #include "md5.h" #endif @@ -19,25 +21,41 @@ static const rb_digest_metadata_t md5 = { }; /* + * Document-class: Digest::MD5 < Digest::Base * A class for calculating message digests using the MD5 * Message-Digest Algorithm by RSA Data Security, Inc., described in * RFC1321. + * + * MD5 calculates a digest of 128 bits (16 bytes). + * + * == Examples + * require 'digest' + * + * # Compute a complete digest + * Digest::MD5.hexdigest 'abc' #=> "90015098..." + * + * # Compute digest by chunks + * md5 = Digest::MD5.new # =>#<Digest::MD5> + * md5.update "ab" + * md5 << "c" # alias for #update + * md5.hexdigest # => "90015098..." + * + * # Use the same object to compute another digest + * md5.reset + * md5 << "message" + * md5.hexdigest # => "78e73102..." */ void -Init_md5() +Init_md5(void) { VALUE mDigest, cDigest_Base, cDigest_MD5; - rb_require("digest"); - #if 0 mDigest = rb_define_module("Digest"); /* let rdoc know */ #endif - mDigest = rb_path2class("Digest"); - cDigest_Base = rb_path2class("Digest::Base"); + mDigest = rb_digest_namespace(); + cDigest_Base = rb_const_get(mDigest, rb_intern_const("Base")); cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base); - - rb_ivar_set(cDigest_MD5, rb_intern("metadata"), - Data_Wrap_Struct(rb_cObject, 0, 0, (void *)&md5)); + rb_iv_set(cDigest_MD5, "metadata", rb_digest_make_metadata(&md5)); } diff --git a/ext/digest/md5/md5ossl.c b/ext/digest/md5/md5ossl.c deleted file mode 100644 index d94ae2cd2f..0000000000 --- a/ext/digest/md5/md5ossl.c +++ /dev/null @@ -1,9 +0,0 @@ -/* $Id$ */ - -#include "md5ossl.h" - -void -MD5_Finish(MD5_CTX *pctx, unsigned char *digest) -{ - MD5_Final(digest, pctx); -} diff --git a/ext/digest/md5/md5ossl.h b/ext/digest/md5/md5ossl.h deleted file mode 100644 index 1680c4f5c9..0000000000 --- a/ext/digest/md5/md5ossl.h +++ /dev/null @@ -1,13 +0,0 @@ -/* $Id$ */ - -#ifndef MD5OSSL_H_INCLUDED -#define MD5OSSL_H_INCLUDED - -#include <stddef.h> -#include <openssl/md5.h> - -#define MD5_BLOCK_LENGTH MD5_CBLOCK - -void MD5_Finish(MD5_CTX *pctx, unsigned char *digest); - -#endif diff --git a/ext/digest/rmd160/depend b/ext/digest/rmd160/depend index c5524be459..aec484f7b3 100644 --- a/ext/digest/rmd160/depend +++ b/ext/digest/rmd160/depend @@ -1,3 +1,332 @@ -rmd160.o: rmd160.c rmd160.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -rmd160init.o: rmd160init.c rmd160.h $(srcdir)/../digest.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -rmd160ossl.o: rmd160ossl.h $(srcdir)/../defs.h +rmd160.o: rmd160.c rmd160.h $(srcdir)/../defs.h +rmd160init.o: $(LOCAL_HDRS) + +# AUTOGENERATED DEPENDENCIES START +rmd160.o: $(RUBY_EXTCONF_H) +rmd160.o: $(arch_hdrdir)/ruby/config.h +rmd160.o: $(hdrdir)/ruby.h +rmd160.o: $(hdrdir)/ruby/assert.h +rmd160.o: $(hdrdir)/ruby/backward.h +rmd160.o: $(hdrdir)/ruby/backward/2/assume.h +rmd160.o: $(hdrdir)/ruby/backward/2/attributes.h +rmd160.o: $(hdrdir)/ruby/backward/2/bool.h +rmd160.o: $(hdrdir)/ruby/backward/2/inttypes.h +rmd160.o: $(hdrdir)/ruby/backward/2/limits.h +rmd160.o: $(hdrdir)/ruby/backward/2/long_long.h +rmd160.o: $(hdrdir)/ruby/backward/2/stdalign.h +rmd160.o: $(hdrdir)/ruby/backward/2/stdarg.h +rmd160.o: $(hdrdir)/ruby/defines.h +rmd160.o: $(hdrdir)/ruby/intern.h +rmd160.o: $(hdrdir)/ruby/internal/abi.h +rmd160.o: $(hdrdir)/ruby/internal/anyargs.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rmd160.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rmd160.o: $(hdrdir)/ruby/internal/assume.h +rmd160.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rmd160.o: $(hdrdir)/ruby/internal/attr/artificial.h +rmd160.o: $(hdrdir)/ruby/internal/attr/cold.h +rmd160.o: $(hdrdir)/ruby/internal/attr/const.h +rmd160.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rmd160.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rmd160.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rmd160.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rmd160.o: $(hdrdir)/ruby/internal/attr/error.h +rmd160.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rmd160.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rmd160.o: $(hdrdir)/ruby/internal/attr/format.h +rmd160.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noalias.h +rmd160.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noinline.h +rmd160.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rmd160.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rmd160.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +rmd160.o: $(hdrdir)/ruby/internal/attr/pure.h +rmd160.o: $(hdrdir)/ruby/internal/attr/restrict.h +rmd160.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rmd160.o: $(hdrdir)/ruby/internal/attr/warning.h +rmd160.o: $(hdrdir)/ruby/internal/attr/weakref.h +rmd160.o: $(hdrdir)/ruby/internal/cast.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rmd160.o: $(hdrdir)/ruby/internal/compiler_since.h +rmd160.o: $(hdrdir)/ruby/internal/config.h +rmd160.o: $(hdrdir)/ruby/internal/constant_p.h +rmd160.o: $(hdrdir)/ruby/internal/core.h +rmd160.o: $(hdrdir)/ruby/internal/core/rarray.h +rmd160.o: $(hdrdir)/ruby/internal/core/rbasic.h +rmd160.o: $(hdrdir)/ruby/internal/core/rbignum.h +rmd160.o: $(hdrdir)/ruby/internal/core/rclass.h +rmd160.o: $(hdrdir)/ruby/internal/core/rdata.h +rmd160.o: $(hdrdir)/ruby/internal/core/rfile.h +rmd160.o: $(hdrdir)/ruby/internal/core/rhash.h +rmd160.o: $(hdrdir)/ruby/internal/core/robject.h +rmd160.o: $(hdrdir)/ruby/internal/core/rregexp.h +rmd160.o: $(hdrdir)/ruby/internal/core/rstring.h +rmd160.o: $(hdrdir)/ruby/internal/core/rstruct.h +rmd160.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rmd160.o: $(hdrdir)/ruby/internal/ctype.h +rmd160.o: $(hdrdir)/ruby/internal/dllexport.h +rmd160.o: $(hdrdir)/ruby/internal/dosish.h +rmd160.o: $(hdrdir)/ruby/internal/error.h +rmd160.o: $(hdrdir)/ruby/internal/eval.h +rmd160.o: $(hdrdir)/ruby/internal/event.h +rmd160.o: $(hdrdir)/ruby/internal/fl_type.h +rmd160.o: $(hdrdir)/ruby/internal/gc.h +rmd160.o: $(hdrdir)/ruby/internal/glob.h +rmd160.o: $(hdrdir)/ruby/internal/globals.h +rmd160.o: $(hdrdir)/ruby/internal/has/attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/builtin.h +rmd160.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rmd160.o: $(hdrdir)/ruby/internal/has/extension.h +rmd160.o: $(hdrdir)/ruby/internal/has/feature.h +rmd160.o: $(hdrdir)/ruby/internal/has/warning.h +rmd160.o: $(hdrdir)/ruby/internal/intern/array.h +rmd160.o: $(hdrdir)/ruby/internal/intern/bignum.h +rmd160.o: $(hdrdir)/ruby/internal/intern/class.h +rmd160.o: $(hdrdir)/ruby/internal/intern/compar.h +rmd160.o: $(hdrdir)/ruby/internal/intern/complex.h +rmd160.o: $(hdrdir)/ruby/internal/intern/cont.h +rmd160.o: $(hdrdir)/ruby/internal/intern/dir.h +rmd160.o: $(hdrdir)/ruby/internal/intern/enum.h +rmd160.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rmd160.o: $(hdrdir)/ruby/internal/intern/error.h +rmd160.o: $(hdrdir)/ruby/internal/intern/eval.h +rmd160.o: $(hdrdir)/ruby/internal/intern/file.h +rmd160.o: $(hdrdir)/ruby/internal/intern/hash.h +rmd160.o: $(hdrdir)/ruby/internal/intern/io.h +rmd160.o: $(hdrdir)/ruby/internal/intern/load.h +rmd160.o: $(hdrdir)/ruby/internal/intern/marshal.h +rmd160.o: $(hdrdir)/ruby/internal/intern/numeric.h +rmd160.o: $(hdrdir)/ruby/internal/intern/object.h +rmd160.o: $(hdrdir)/ruby/internal/intern/parse.h +rmd160.o: $(hdrdir)/ruby/internal/intern/proc.h +rmd160.o: $(hdrdir)/ruby/internal/intern/process.h +rmd160.o: $(hdrdir)/ruby/internal/intern/random.h +rmd160.o: $(hdrdir)/ruby/internal/intern/range.h +rmd160.o: $(hdrdir)/ruby/internal/intern/rational.h +rmd160.o: $(hdrdir)/ruby/internal/intern/re.h +rmd160.o: $(hdrdir)/ruby/internal/intern/ruby.h +rmd160.o: $(hdrdir)/ruby/internal/intern/select.h +rmd160.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rmd160.o: $(hdrdir)/ruby/internal/intern/set.h +rmd160.o: $(hdrdir)/ruby/internal/intern/signal.h +rmd160.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rmd160.o: $(hdrdir)/ruby/internal/intern/string.h +rmd160.o: $(hdrdir)/ruby/internal/intern/struct.h +rmd160.o: $(hdrdir)/ruby/internal/intern/thread.h +rmd160.o: $(hdrdir)/ruby/internal/intern/time.h +rmd160.o: $(hdrdir)/ruby/internal/intern/variable.h +rmd160.o: $(hdrdir)/ruby/internal/intern/vm.h +rmd160.o: $(hdrdir)/ruby/internal/interpreter.h +rmd160.o: $(hdrdir)/ruby/internal/iterator.h +rmd160.o: $(hdrdir)/ruby/internal/memory.h +rmd160.o: $(hdrdir)/ruby/internal/method.h +rmd160.o: $(hdrdir)/ruby/internal/module.h +rmd160.o: $(hdrdir)/ruby/internal/newobj.h +rmd160.o: $(hdrdir)/ruby/internal/scan_args.h +rmd160.o: $(hdrdir)/ruby/internal/special_consts.h +rmd160.o: $(hdrdir)/ruby/internal/static_assert.h +rmd160.o: $(hdrdir)/ruby/internal/stdalign.h +rmd160.o: $(hdrdir)/ruby/internal/stdbool.h +rmd160.o: $(hdrdir)/ruby/internal/stdckdint.h +rmd160.o: $(hdrdir)/ruby/internal/symbol.h +rmd160.o: $(hdrdir)/ruby/internal/value.h +rmd160.o: $(hdrdir)/ruby/internal/value_type.h +rmd160.o: $(hdrdir)/ruby/internal/variable.h +rmd160.o: $(hdrdir)/ruby/internal/warning_push.h +rmd160.o: $(hdrdir)/ruby/internal/xmalloc.h +rmd160.o: $(hdrdir)/ruby/missing.h +rmd160.o: $(hdrdir)/ruby/ruby.h +rmd160.o: $(hdrdir)/ruby/st.h +rmd160.o: $(hdrdir)/ruby/subst.h +rmd160.o: $(srcdir)/../defs.h +rmd160.o: rmd160.c +rmd160.o: rmd160.h +rmd160init.o: $(RUBY_EXTCONF_H) +rmd160init.o: $(arch_hdrdir)/ruby/config.h +rmd160init.o: $(hdrdir)/ruby.h +rmd160init.o: $(hdrdir)/ruby/assert.h +rmd160init.o: $(hdrdir)/ruby/backward.h +rmd160init.o: $(hdrdir)/ruby/backward/2/assume.h +rmd160init.o: $(hdrdir)/ruby/backward/2/attributes.h +rmd160init.o: $(hdrdir)/ruby/backward/2/bool.h +rmd160init.o: $(hdrdir)/ruby/backward/2/inttypes.h +rmd160init.o: $(hdrdir)/ruby/backward/2/limits.h +rmd160init.o: $(hdrdir)/ruby/backward/2/long_long.h +rmd160init.o: $(hdrdir)/ruby/backward/2/stdalign.h +rmd160init.o: $(hdrdir)/ruby/backward/2/stdarg.h +rmd160init.o: $(hdrdir)/ruby/defines.h +rmd160init.o: $(hdrdir)/ruby/intern.h +rmd160init.o: $(hdrdir)/ruby/internal/abi.h +rmd160init.o: $(hdrdir)/ruby/internal/anyargs.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +rmd160init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +rmd160init.o: $(hdrdir)/ruby/internal/assume.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/artificial.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/cold.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/const.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/error.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/format.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noalias.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noinline.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/pure.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/restrict.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/warning.h +rmd160init.o: $(hdrdir)/ruby/internal/attr/weakref.h +rmd160init.o: $(hdrdir)/ruby/internal/cast.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +rmd160init.o: $(hdrdir)/ruby/internal/compiler_since.h +rmd160init.o: $(hdrdir)/ruby/internal/config.h +rmd160init.o: $(hdrdir)/ruby/internal/constant_p.h +rmd160init.o: $(hdrdir)/ruby/internal/core.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rarray.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rbasic.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rbignum.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rclass.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rdata.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rfile.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rhash.h +rmd160init.o: $(hdrdir)/ruby/internal/core/robject.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rregexp.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rstring.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rstruct.h +rmd160init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +rmd160init.o: $(hdrdir)/ruby/internal/ctype.h +rmd160init.o: $(hdrdir)/ruby/internal/dllexport.h +rmd160init.o: $(hdrdir)/ruby/internal/dosish.h +rmd160init.o: $(hdrdir)/ruby/internal/error.h +rmd160init.o: $(hdrdir)/ruby/internal/eval.h +rmd160init.o: $(hdrdir)/ruby/internal/event.h +rmd160init.o: $(hdrdir)/ruby/internal/fl_type.h +rmd160init.o: $(hdrdir)/ruby/internal/gc.h +rmd160init.o: $(hdrdir)/ruby/internal/glob.h +rmd160init.o: $(hdrdir)/ruby/internal/globals.h +rmd160init.o: $(hdrdir)/ruby/internal/has/attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/builtin.h +rmd160init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +rmd160init.o: $(hdrdir)/ruby/internal/has/extension.h +rmd160init.o: $(hdrdir)/ruby/internal/has/feature.h +rmd160init.o: $(hdrdir)/ruby/internal/has/warning.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/array.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/bignum.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/class.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/compar.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/complex.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/cont.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/dir.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/enum.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/error.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/eval.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/file.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/hash.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/io.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/load.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/marshal.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/numeric.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/object.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/parse.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/proc.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/process.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/random.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/range.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/rational.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/re.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/ruby.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/select.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/set.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/signal.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/string.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/struct.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/thread.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/time.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/variable.h +rmd160init.o: $(hdrdir)/ruby/internal/intern/vm.h +rmd160init.o: $(hdrdir)/ruby/internal/interpreter.h +rmd160init.o: $(hdrdir)/ruby/internal/iterator.h +rmd160init.o: $(hdrdir)/ruby/internal/memory.h +rmd160init.o: $(hdrdir)/ruby/internal/method.h +rmd160init.o: $(hdrdir)/ruby/internal/module.h +rmd160init.o: $(hdrdir)/ruby/internal/newobj.h +rmd160init.o: $(hdrdir)/ruby/internal/scan_args.h +rmd160init.o: $(hdrdir)/ruby/internal/special_consts.h +rmd160init.o: $(hdrdir)/ruby/internal/static_assert.h +rmd160init.o: $(hdrdir)/ruby/internal/stdalign.h +rmd160init.o: $(hdrdir)/ruby/internal/stdbool.h +rmd160init.o: $(hdrdir)/ruby/internal/stdckdint.h +rmd160init.o: $(hdrdir)/ruby/internal/symbol.h +rmd160init.o: $(hdrdir)/ruby/internal/value.h +rmd160init.o: $(hdrdir)/ruby/internal/value_type.h +rmd160init.o: $(hdrdir)/ruby/internal/variable.h +rmd160init.o: $(hdrdir)/ruby/internal/warning_push.h +rmd160init.o: $(hdrdir)/ruby/internal/xmalloc.h +rmd160init.o: $(hdrdir)/ruby/missing.h +rmd160init.o: $(hdrdir)/ruby/ruby.h +rmd160init.o: $(hdrdir)/ruby/st.h +rmd160init.o: $(hdrdir)/ruby/subst.h +rmd160init.o: $(srcdir)/../defs.h +rmd160init.o: $(srcdir)/../digest.h +rmd160init.o: rmd160.h +rmd160init.o: rmd160init.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/rmd160/extconf.rb b/ext/digest/rmd160/extconf.rb index d487d6da80..8b894da0c8 100644 --- a/ext/digest/rmd160/extconf.rb +++ b/ext/digest/rmd160/extconf.rb @@ -1,24 +1,18 @@ # -*- coding: us-ascii -*- +# frozen_string_literal: false # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $ # $Id$ require "mkmf" +require File.expand_path("../../digest_conf", __FILE__) -$defs << "-DNDEBUG" << "-DHAVE_CONFIG_H" -$INCFLAGS << " -I$(srcdir)/.." +if try_static_assert("RUBY_API_VERSION_MAJOR < 3", "ruby/version.h") + $defs << "-DNDEBUG" +end $objs = [ "rmd160init.#{$OBJEXT}" ] -dir_config("openssl") -pkg_config("openssl") -require File.expand_path('../../../openssl/deprecation', __FILE__) - -if !with_config("bundled-rmd160") && - have_library("crypto") && OpenSSL.check_func("RMD160_Transform", "openssl/ripemd.h") - $objs << "rmd160ossl.#{$OBJEXT}" -else - $objs << "rmd160.#{$OBJEXT}" -end +digest_conf("rmd160") have_header("sys/cdefs.h") diff --git a/ext/digest/rmd160/rmd160.c b/ext/digest/rmd160/rmd160.c index bac77833b1..058d004f3a 100644 --- a/ext/digest/rmd160/rmd160.c +++ b/ext/digest/rmd160/rmd160.c @@ -124,7 +124,7 @@ /********************************************************************/ -void +int RMD160_Init(RMD160_CTX *context) { @@ -138,6 +138,7 @@ RMD160_Init(RMD160_CTX *context) context->state[4] = 0xc3d2e1f0U; context->length[0] = context->length[1] = 0; context->buflen = 0; + return 1; } /********************************************************************/ @@ -412,7 +413,7 @@ RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes) /********************************************************************/ -void +int RMD160_Finish(RMD160_CTX *context, uint8_t digest[20]) { uint32_t i; @@ -456,6 +457,7 @@ RMD160_Finish(RMD160_CTX *context, uint8_t digest[20]) digest[i + 3] = (context->state[i>>2] >> 24); } } + return 1; } /************************ end of file rmd160.c **********************/ diff --git a/ext/digest/rmd160/rmd160.h b/ext/digest/rmd160/rmd160.h index 2c98f11cd0..6324709d96 100644 --- a/ext/digest/rmd160/rmd160.h +++ b/ext/digest/rmd160/rmd160.h @@ -26,7 +26,7 @@ #ifndef _RMD160_H_ #define _RMD160_H_ -#include "defs.h" +#include "../defs.h" typedef struct { uint32_t state[5]; /* state (ABCDE) */ @@ -43,10 +43,10 @@ typedef struct { #endif __BEGIN_DECLS -void RMD160_Init _((RMD160_CTX *)); +int RMD160_Init _((RMD160_CTX *)); void RMD160_Transform _((uint32_t[5], const uint32_t[16])); void RMD160_Update _((RMD160_CTX *, const uint8_t *, size_t)); -void RMD160_Finish _((RMD160_CTX *, uint8_t[20])); +int RMD160_Finish _((RMD160_CTX *, uint8_t[20])); __END_DECLS #define RMD160_BLOCK_LENGTH 64 diff --git a/ext/digest/rmd160/rmd160init.c b/ext/digest/rmd160/rmd160init.c index c214ca9f33..e4b707ed9e 100644 --- a/ext/digest/rmd160/rmd160init.c +++ b/ext/digest/rmd160/rmd160init.c @@ -1,12 +1,9 @@ /* $RoughId: rmd160init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */ /* $Id$ */ -#include "digest.h" -#if defined(HAVE_OPENSSL_RIPEMD_H) -#include "rmd160ossl.h" -#else +#include <ruby/ruby.h> +#include "../digest.h" #include "rmd160.h" -#endif static const rb_digest_metadata_t rmd160 = { RUBY_DIGEST_API_VERSION, @@ -19,25 +16,41 @@ static const rb_digest_metadata_t rmd160 = { }; /* + * Document-class: Digest::RMD160 < Digest::Base * A class for calculating message digests using RIPEMD-160 * cryptographic hash function, designed by Hans Dobbertin, Antoon * Bosselaers, and Bart Preneel. + * + * RMD160 calculates a digest of 160 bits (20 bytes). + * + * == Examples + * require 'digest' + * + * # Compute a complete digest + * Digest::RMD160.hexdigest 'abc' #=> "8eb208f7..." + * + * # Compute digest by chunks + * rmd160 = Digest::RMD160.new # =>#<Digest::RMD160> + * rmd160.update "ab" + * rmd160 << "c" # alias for #update + * rmd160.hexdigest # => "8eb208f7..." + * + * # Use the same object to compute another digest + * rmd160.reset + * rmd160 << "message" + * rmd160.hexdigest # => "1dddbe1b..." */ void -Init_rmd160() +Init_rmd160(void) { VALUE mDigest, cDigest_Base, cDigest_RMD160; - rb_require("digest"); - #if 0 mDigest = rb_define_module("Digest"); /* let rdoc know */ #endif - mDigest = rb_path2class("Digest"); - cDigest_Base = rb_path2class("Digest::Base"); + mDigest = rb_digest_namespace(); + cDigest_Base = rb_const_get(mDigest, rb_intern_const("Base")); cDigest_RMD160 = rb_define_class_under(mDigest, "RMD160", cDigest_Base); - - rb_ivar_set(cDigest_RMD160, rb_intern("metadata"), - Data_Wrap_Struct(rb_cObject, 0, 0, (void *)&rmd160)); + rb_iv_set(cDigest_RMD160, "metadata", rb_digest_make_metadata(&rmd160)); } diff --git a/ext/digest/rmd160/rmd160ossl.c b/ext/digest/rmd160/rmd160ossl.c deleted file mode 100644 index f24e63e3d8..0000000000 --- a/ext/digest/rmd160/rmd160ossl.c +++ /dev/null @@ -1,8 +0,0 @@ -/* $Id$ */ - -#include "defs.h" -#include "rmd160ossl.h" - -void RMD160_Finish(RMD160_CTX *ctx, char *buf) { - RIPEMD160_Final((unsigned char *)buf, ctx); -} diff --git a/ext/digest/rmd160/rmd160ossl.h b/ext/digest/rmd160/rmd160ossl.h deleted file mode 100644 index 3df38a01c0..0000000000 --- a/ext/digest/rmd160/rmd160ossl.h +++ /dev/null @@ -1,19 +0,0 @@ -/* $Id$ */ - -#ifndef RMD160OSSL_H_INCLUDED -#define RMD160OSSL_H_INCLUDED - -#include <stddef.h> -#include <openssl/ripemd.h> - -#define RMD160_CTX RIPEMD160_CTX - -#define RMD160_Init RIPEMD160_Init -#define RMD160_Update RIPEMD160_Update - -#define RMD160_BLOCK_LENGTH RIPEMD160_CBLOCK -#define RMD160_DIGEST_LENGTH RIPEMD160_DIGEST_LENGTH - -void RMD160_Finish(RMD160_CTX *ctx, char *buf); - -#endif diff --git a/ext/digest/sha1/depend b/ext/digest/sha1/depend index 6b6ee6a0bf..e6bd9d8f73 100644 --- a/ext/digest/sha1/depend +++ b/ext/digest/sha1/depend @@ -1,3 +1,333 @@ sha1.o: sha1.c sha1.h $(srcdir)/../defs.h -sha1init.o: sha1init.c sha1.h $(srcdir)/../digest.h sha1.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -sha1ossl.o: sha1ossl.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) +sha1init.o: $(LOCAL_HDRS) + +# AUTOGENERATED DEPENDENCIES START +sha1.o: $(RUBY_EXTCONF_H) +sha1.o: $(arch_hdrdir)/ruby/config.h +sha1.o: $(hdrdir)/ruby.h +sha1.o: $(hdrdir)/ruby/assert.h +sha1.o: $(hdrdir)/ruby/backward.h +sha1.o: $(hdrdir)/ruby/backward/2/assume.h +sha1.o: $(hdrdir)/ruby/backward/2/attributes.h +sha1.o: $(hdrdir)/ruby/backward/2/bool.h +sha1.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha1.o: $(hdrdir)/ruby/backward/2/limits.h +sha1.o: $(hdrdir)/ruby/backward/2/long_long.h +sha1.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha1.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha1.o: $(hdrdir)/ruby/defines.h +sha1.o: $(hdrdir)/ruby/intern.h +sha1.o: $(hdrdir)/ruby/internal/abi.h +sha1.o: $(hdrdir)/ruby/internal/anyargs.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha1.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha1.o: $(hdrdir)/ruby/internal/assume.h +sha1.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha1.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha1.o: $(hdrdir)/ruby/internal/attr/cold.h +sha1.o: $(hdrdir)/ruby/internal/attr/const.h +sha1.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha1.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha1.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha1.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha1.o: $(hdrdir)/ruby/internal/attr/error.h +sha1.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha1.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha1.o: $(hdrdir)/ruby/internal/attr/format.h +sha1.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha1.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha1.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha1.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha1.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha1.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha1.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha1.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +sha1.o: $(hdrdir)/ruby/internal/attr/pure.h +sha1.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha1.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha1.o: $(hdrdir)/ruby/internal/attr/warning.h +sha1.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha1.o: $(hdrdir)/ruby/internal/cast.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha1.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha1.o: $(hdrdir)/ruby/internal/compiler_since.h +sha1.o: $(hdrdir)/ruby/internal/config.h +sha1.o: $(hdrdir)/ruby/internal/constant_p.h +sha1.o: $(hdrdir)/ruby/internal/core.h +sha1.o: $(hdrdir)/ruby/internal/core/rarray.h +sha1.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha1.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha1.o: $(hdrdir)/ruby/internal/core/rclass.h +sha1.o: $(hdrdir)/ruby/internal/core/rdata.h +sha1.o: $(hdrdir)/ruby/internal/core/rfile.h +sha1.o: $(hdrdir)/ruby/internal/core/rhash.h +sha1.o: $(hdrdir)/ruby/internal/core/robject.h +sha1.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha1.o: $(hdrdir)/ruby/internal/core/rstring.h +sha1.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha1.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha1.o: $(hdrdir)/ruby/internal/ctype.h +sha1.o: $(hdrdir)/ruby/internal/dllexport.h +sha1.o: $(hdrdir)/ruby/internal/dosish.h +sha1.o: $(hdrdir)/ruby/internal/error.h +sha1.o: $(hdrdir)/ruby/internal/eval.h +sha1.o: $(hdrdir)/ruby/internal/event.h +sha1.o: $(hdrdir)/ruby/internal/fl_type.h +sha1.o: $(hdrdir)/ruby/internal/gc.h +sha1.o: $(hdrdir)/ruby/internal/glob.h +sha1.o: $(hdrdir)/ruby/internal/globals.h +sha1.o: $(hdrdir)/ruby/internal/has/attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/builtin.h +sha1.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha1.o: $(hdrdir)/ruby/internal/has/extension.h +sha1.o: $(hdrdir)/ruby/internal/has/feature.h +sha1.o: $(hdrdir)/ruby/internal/has/warning.h +sha1.o: $(hdrdir)/ruby/internal/intern/array.h +sha1.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha1.o: $(hdrdir)/ruby/internal/intern/class.h +sha1.o: $(hdrdir)/ruby/internal/intern/compar.h +sha1.o: $(hdrdir)/ruby/internal/intern/complex.h +sha1.o: $(hdrdir)/ruby/internal/intern/cont.h +sha1.o: $(hdrdir)/ruby/internal/intern/dir.h +sha1.o: $(hdrdir)/ruby/internal/intern/enum.h +sha1.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha1.o: $(hdrdir)/ruby/internal/intern/error.h +sha1.o: $(hdrdir)/ruby/internal/intern/eval.h +sha1.o: $(hdrdir)/ruby/internal/intern/file.h +sha1.o: $(hdrdir)/ruby/internal/intern/hash.h +sha1.o: $(hdrdir)/ruby/internal/intern/io.h +sha1.o: $(hdrdir)/ruby/internal/intern/load.h +sha1.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha1.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha1.o: $(hdrdir)/ruby/internal/intern/object.h +sha1.o: $(hdrdir)/ruby/internal/intern/parse.h +sha1.o: $(hdrdir)/ruby/internal/intern/proc.h +sha1.o: $(hdrdir)/ruby/internal/intern/process.h +sha1.o: $(hdrdir)/ruby/internal/intern/random.h +sha1.o: $(hdrdir)/ruby/internal/intern/range.h +sha1.o: $(hdrdir)/ruby/internal/intern/rational.h +sha1.o: $(hdrdir)/ruby/internal/intern/re.h +sha1.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha1.o: $(hdrdir)/ruby/internal/intern/select.h +sha1.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha1.o: $(hdrdir)/ruby/internal/intern/set.h +sha1.o: $(hdrdir)/ruby/internal/intern/signal.h +sha1.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha1.o: $(hdrdir)/ruby/internal/intern/string.h +sha1.o: $(hdrdir)/ruby/internal/intern/struct.h +sha1.o: $(hdrdir)/ruby/internal/intern/thread.h +sha1.o: $(hdrdir)/ruby/internal/intern/time.h +sha1.o: $(hdrdir)/ruby/internal/intern/variable.h +sha1.o: $(hdrdir)/ruby/internal/intern/vm.h +sha1.o: $(hdrdir)/ruby/internal/interpreter.h +sha1.o: $(hdrdir)/ruby/internal/iterator.h +sha1.o: $(hdrdir)/ruby/internal/memory.h +sha1.o: $(hdrdir)/ruby/internal/method.h +sha1.o: $(hdrdir)/ruby/internal/module.h +sha1.o: $(hdrdir)/ruby/internal/newobj.h +sha1.o: $(hdrdir)/ruby/internal/scan_args.h +sha1.o: $(hdrdir)/ruby/internal/special_consts.h +sha1.o: $(hdrdir)/ruby/internal/static_assert.h +sha1.o: $(hdrdir)/ruby/internal/stdalign.h +sha1.o: $(hdrdir)/ruby/internal/stdbool.h +sha1.o: $(hdrdir)/ruby/internal/stdckdint.h +sha1.o: $(hdrdir)/ruby/internal/symbol.h +sha1.o: $(hdrdir)/ruby/internal/value.h +sha1.o: $(hdrdir)/ruby/internal/value_type.h +sha1.o: $(hdrdir)/ruby/internal/variable.h +sha1.o: $(hdrdir)/ruby/internal/warning_push.h +sha1.o: $(hdrdir)/ruby/internal/xmalloc.h +sha1.o: $(hdrdir)/ruby/missing.h +sha1.o: $(hdrdir)/ruby/ruby.h +sha1.o: $(hdrdir)/ruby/st.h +sha1.o: $(hdrdir)/ruby/subst.h +sha1.o: $(srcdir)/../defs.h +sha1.o: sha1.c +sha1.o: sha1.h +sha1init.o: $(RUBY_EXTCONF_H) +sha1init.o: $(arch_hdrdir)/ruby/config.h +sha1init.o: $(hdrdir)/ruby.h +sha1init.o: $(hdrdir)/ruby/assert.h +sha1init.o: $(hdrdir)/ruby/backward.h +sha1init.o: $(hdrdir)/ruby/backward/2/assume.h +sha1init.o: $(hdrdir)/ruby/backward/2/attributes.h +sha1init.o: $(hdrdir)/ruby/backward/2/bool.h +sha1init.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha1init.o: $(hdrdir)/ruby/backward/2/limits.h +sha1init.o: $(hdrdir)/ruby/backward/2/long_long.h +sha1init.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha1init.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha1init.o: $(hdrdir)/ruby/defines.h +sha1init.o: $(hdrdir)/ruby/intern.h +sha1init.o: $(hdrdir)/ruby/internal/abi.h +sha1init.o: $(hdrdir)/ruby/internal/anyargs.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha1init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha1init.o: $(hdrdir)/ruby/internal/assume.h +sha1init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha1init.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha1init.o: $(hdrdir)/ruby/internal/attr/cold.h +sha1init.o: $(hdrdir)/ruby/internal/attr/const.h +sha1init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha1init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha1init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha1init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha1init.o: $(hdrdir)/ruby/internal/attr/error.h +sha1init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha1init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha1init.o: $(hdrdir)/ruby/internal/attr/format.h +sha1init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha1init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha1init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha1init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha1init.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +sha1init.o: $(hdrdir)/ruby/internal/attr/pure.h +sha1init.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha1init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha1init.o: $(hdrdir)/ruby/internal/attr/warning.h +sha1init.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha1init.o: $(hdrdir)/ruby/internal/cast.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha1init.o: $(hdrdir)/ruby/internal/compiler_since.h +sha1init.o: $(hdrdir)/ruby/internal/config.h +sha1init.o: $(hdrdir)/ruby/internal/constant_p.h +sha1init.o: $(hdrdir)/ruby/internal/core.h +sha1init.o: $(hdrdir)/ruby/internal/core/rarray.h +sha1init.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha1init.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha1init.o: $(hdrdir)/ruby/internal/core/rclass.h +sha1init.o: $(hdrdir)/ruby/internal/core/rdata.h +sha1init.o: $(hdrdir)/ruby/internal/core/rfile.h +sha1init.o: $(hdrdir)/ruby/internal/core/rhash.h +sha1init.o: $(hdrdir)/ruby/internal/core/robject.h +sha1init.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha1init.o: $(hdrdir)/ruby/internal/core/rstring.h +sha1init.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha1init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha1init.o: $(hdrdir)/ruby/internal/ctype.h +sha1init.o: $(hdrdir)/ruby/internal/dllexport.h +sha1init.o: $(hdrdir)/ruby/internal/dosish.h +sha1init.o: $(hdrdir)/ruby/internal/error.h +sha1init.o: $(hdrdir)/ruby/internal/eval.h +sha1init.o: $(hdrdir)/ruby/internal/event.h +sha1init.o: $(hdrdir)/ruby/internal/fl_type.h +sha1init.o: $(hdrdir)/ruby/internal/gc.h +sha1init.o: $(hdrdir)/ruby/internal/glob.h +sha1init.o: $(hdrdir)/ruby/internal/globals.h +sha1init.o: $(hdrdir)/ruby/internal/has/attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/builtin.h +sha1init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha1init.o: $(hdrdir)/ruby/internal/has/extension.h +sha1init.o: $(hdrdir)/ruby/internal/has/feature.h +sha1init.o: $(hdrdir)/ruby/internal/has/warning.h +sha1init.o: $(hdrdir)/ruby/internal/intern/array.h +sha1init.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha1init.o: $(hdrdir)/ruby/internal/intern/class.h +sha1init.o: $(hdrdir)/ruby/internal/intern/compar.h +sha1init.o: $(hdrdir)/ruby/internal/intern/complex.h +sha1init.o: $(hdrdir)/ruby/internal/intern/cont.h +sha1init.o: $(hdrdir)/ruby/internal/intern/dir.h +sha1init.o: $(hdrdir)/ruby/internal/intern/enum.h +sha1init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha1init.o: $(hdrdir)/ruby/internal/intern/error.h +sha1init.o: $(hdrdir)/ruby/internal/intern/eval.h +sha1init.o: $(hdrdir)/ruby/internal/intern/file.h +sha1init.o: $(hdrdir)/ruby/internal/intern/hash.h +sha1init.o: $(hdrdir)/ruby/internal/intern/io.h +sha1init.o: $(hdrdir)/ruby/internal/intern/load.h +sha1init.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha1init.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha1init.o: $(hdrdir)/ruby/internal/intern/object.h +sha1init.o: $(hdrdir)/ruby/internal/intern/parse.h +sha1init.o: $(hdrdir)/ruby/internal/intern/proc.h +sha1init.o: $(hdrdir)/ruby/internal/intern/process.h +sha1init.o: $(hdrdir)/ruby/internal/intern/random.h +sha1init.o: $(hdrdir)/ruby/internal/intern/range.h +sha1init.o: $(hdrdir)/ruby/internal/intern/rational.h +sha1init.o: $(hdrdir)/ruby/internal/intern/re.h +sha1init.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha1init.o: $(hdrdir)/ruby/internal/intern/select.h +sha1init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha1init.o: $(hdrdir)/ruby/internal/intern/set.h +sha1init.o: $(hdrdir)/ruby/internal/intern/signal.h +sha1init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha1init.o: $(hdrdir)/ruby/internal/intern/string.h +sha1init.o: $(hdrdir)/ruby/internal/intern/struct.h +sha1init.o: $(hdrdir)/ruby/internal/intern/thread.h +sha1init.o: $(hdrdir)/ruby/internal/intern/time.h +sha1init.o: $(hdrdir)/ruby/internal/intern/variable.h +sha1init.o: $(hdrdir)/ruby/internal/intern/vm.h +sha1init.o: $(hdrdir)/ruby/internal/interpreter.h +sha1init.o: $(hdrdir)/ruby/internal/iterator.h +sha1init.o: $(hdrdir)/ruby/internal/memory.h +sha1init.o: $(hdrdir)/ruby/internal/method.h +sha1init.o: $(hdrdir)/ruby/internal/module.h +sha1init.o: $(hdrdir)/ruby/internal/newobj.h +sha1init.o: $(hdrdir)/ruby/internal/scan_args.h +sha1init.o: $(hdrdir)/ruby/internal/special_consts.h +sha1init.o: $(hdrdir)/ruby/internal/static_assert.h +sha1init.o: $(hdrdir)/ruby/internal/stdalign.h +sha1init.o: $(hdrdir)/ruby/internal/stdbool.h +sha1init.o: $(hdrdir)/ruby/internal/stdckdint.h +sha1init.o: $(hdrdir)/ruby/internal/symbol.h +sha1init.o: $(hdrdir)/ruby/internal/value.h +sha1init.o: $(hdrdir)/ruby/internal/value_type.h +sha1init.o: $(hdrdir)/ruby/internal/variable.h +sha1init.o: $(hdrdir)/ruby/internal/warning_push.h +sha1init.o: $(hdrdir)/ruby/internal/xmalloc.h +sha1init.o: $(hdrdir)/ruby/missing.h +sha1init.o: $(hdrdir)/ruby/ruby.h +sha1init.o: $(hdrdir)/ruby/st.h +sha1init.o: $(hdrdir)/ruby/subst.h +sha1init.o: $(srcdir)/../defs.h +sha1init.o: $(srcdir)/../digest.h +sha1init.o: sha1.h +sha1init.o: sha1cc.h +sha1init.o: sha1init.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/sha1/extconf.rb b/ext/digest/sha1/extconf.rb index d7e52fe731..7582cd9ab5 100644 --- a/ext/digest/sha1/extconf.rb +++ b/ext/digest/sha1/extconf.rb @@ -1,24 +1,14 @@ # -*- coding: us-ascii -*- +# frozen_string_literal: false # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $ # $Id$ require "mkmf" - -$defs << "-DHAVE_CONFIG_H" -$INCFLAGS << " -I$(srcdir)/.." +require File.expand_path("../../digest_conf", __FILE__) $objs = [ "sha1init.#{$OBJEXT}" ] -dir_config("openssl") -pkg_config("openssl") -require File.expand_path('../../../openssl/deprecation', __FILE__) - -if !with_config("bundled-sha1") && - have_library("crypto") && OpenSSL.check_func("SHA1_Transform", "openssl/sha.h") - $objs << "sha1ossl.#{$OBJEXT}" -else - $objs << "sha1.#{$OBJEXT}" -end +digest_conf("sha1") have_header("sys/cdefs.h") diff --git a/ext/digest/sha1/sha1.c b/ext/digest/sha1/sha1.c index 6196ca6b82..003c87d224 100644 --- a/ext/digest/sha1/sha1.c +++ b/ext/digest/sha1/sha1.c @@ -199,7 +199,7 @@ void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]) /* * SHA1_Init - Initialize new context */ -void SHA1_Init(SHA1_CTX *context) +int SHA1_Init(SHA1_CTX *context) { _DIAGASSERT(context != 0); @@ -211,6 +211,7 @@ void SHA1_Init(SHA1_CTX *context) context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; context->count[0] = context->count[1] = 0; + return 1; } @@ -219,20 +220,28 @@ void SHA1_Init(SHA1_CTX *context) */ void SHA1_Update(SHA1_CTX *context, const uint8_t *data, size_t len) { - uint32_t i, j; + size_t i; + uint32_t j; _DIAGASSERT(context != 0); _DIAGASSERT(data != 0); j = context->count[0]; if ((context->count[0] += len << 3) < j) - context->count[1] += (len>>29)+1; + context->count[1]++; + context->count[1] += (uint32_t)(len >> 29); j = (j >> 3) & 63; if ((j + len) > 63) { (void)memcpy(&context->buffer[j], data, (i = 64-j)); SHA1_Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) + for ( ; i + 63 < len; i += 64) { + RB_DIGEST_WARNING_PUSH(); +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 11 + RB_DIGEST_WARNING_IGNORED(-Wstringop-overread); +#endif SHA1_Transform(context->state, &data[i]); + RB_DIGEST_WARNING_POP(); + } j = 0; } else { i = 0; @@ -244,7 +253,7 @@ void SHA1_Update(SHA1_CTX *context, const uint8_t *data, size_t len) /* * Add padding and return the message digest. */ -void SHA1_Finish(SHA1_CTX* context, uint8_t digest[20]) +int SHA1_Finish(SHA1_CTX* context, uint8_t digest[20]) { size_t i; uint8_t finalcount[8]; @@ -266,4 +275,5 @@ void SHA1_Finish(SHA1_CTX* context, uint8_t digest[20]) digest[i] = (uint8_t) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } + return 1; } diff --git a/ext/digest/sha1/sha1.h b/ext/digest/sha1/sha1.h index 55997e73dd..2accc46d46 100644 --- a/ext/digest/sha1/sha1.h +++ b/ext/digest/sha1/sha1.h @@ -11,7 +11,7 @@ #ifndef _SYS_SHA1_H_ #define _SYS_SHA1_H_ -#include "defs.h" +#include "../defs.h" typedef struct { uint32_t state[5]; @@ -28,9 +28,9 @@ typedef struct { #endif void SHA1_Transform _((uint32_t state[5], const uint8_t buffer[64])); -void SHA1_Init _((SHA1_CTX *context)); +int SHA1_Init _((SHA1_CTX *context)); void SHA1_Update _((SHA1_CTX *context, const uint8_t *data, size_t len)); -void SHA1_Finish _((SHA1_CTX *context, uint8_t digest[20])); +int SHA1_Finish _((SHA1_CTX *context, uint8_t digest[20])); #define SHA1_BLOCK_LENGTH 64 #define SHA1_DIGEST_LENGTH 20 diff --git a/ext/digest/sha1/sha1cc.h b/ext/digest/sha1/sha1cc.h new file mode 100644 index 0000000000..f39ecc6234 --- /dev/null +++ b/ext/digest/sha1/sha1cc.h @@ -0,0 +1,22 @@ +#define COMMON_DIGEST_FOR_OPENSSL 1 +#include <CommonCrypto/CommonDigest.h> + +#define SHA1_BLOCK_LENGTH CC_SHA1_BLOCK_BYTES +#define SHA1_DIGEST_LENGTH CC_SHA1_DIGEST_LENGTH +#define SHA1_CTX CC_SHA1_CTX + +static DEFINE_UPDATE_FUNC_FOR_UINT(SHA1) +static DEFINE_FINISH_FUNC_FROM_FINAL(SHA1) + +#undef SHA1_Update +#undef SHA1_Finish +#define SHA1_Update rb_digest_SHA1_update +#define SHA1_Finish rb_digest_SHA1_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine SHA1_Init as well. + * This is a NOP on 10.6+. + */ +#undef SHA1_Init +#define SHA1_Init CC_SHA1_Init diff --git a/ext/digest/sha1/sha1init.c b/ext/digest/sha1/sha1init.c index d52eef58b3..c39959f428 100644 --- a/ext/digest/sha1/sha1init.c +++ b/ext/digest/sha1/sha1init.c @@ -1,9 +1,10 @@ /* $RoughId: sha1init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */ /* $Id$ */ -#include "digest.h" -#if defined(HAVE_OPENSSL_SHA_H) -#include "sha1ossl.h" +#include <ruby/ruby.h> +#include "../digest.h" +#if defined(SHA1_USE_COMMONDIGEST) +#include "sha1cc.h" #else #include "sha1.h" #endif @@ -19,25 +20,43 @@ static const rb_digest_metadata_t sha1 = { }; /* + * Document-class: Digest::SHA1 < Digest::Base * A class for calculating message digests using the SHA-1 Secure Hash * Algorithm by NIST (the US' National Institute of Standards and * Technology), described in FIPS PUB 180-1. + * + * See Digest::Instance for digest API. + * + * SHA-1 calculates a digest of 160 bits (20 bytes). + * + * == Examples + * require 'digest' + * + * # Compute a complete digest + * Digest::SHA1.hexdigest 'abc' #=> "a9993e36..." + * + * # Compute digest by chunks + * sha1 = Digest::SHA1.new # =>#<Digest::SHA1> + * sha1.update "ab" + * sha1 << "c" # alias for #update + * sha1.hexdigest # => "a9993e36..." + * + * # Use the same object to compute another digest + * sha1.reset + * sha1 << "message" + * sha1.hexdigest # => "6f9b9af3..." */ void -Init_sha1() +Init_sha1(void) { VALUE mDigest, cDigest_Base, cDigest_SHA1; - rb_require("digest"); - #if 0 mDigest = rb_define_module("Digest"); /* let rdoc know */ #endif - mDigest = rb_path2class("Digest"); - cDigest_Base = rb_path2class("Digest::Base"); + mDigest = rb_digest_namespace(); + cDigest_Base = rb_const_get(mDigest, rb_intern_const("Base")); cDigest_SHA1 = rb_define_class_under(mDigest, "SHA1", cDigest_Base); - - rb_ivar_set(cDigest_SHA1, rb_intern("metadata"), - Data_Wrap_Struct(rb_cObject, 0, 0, (void *)&sha1)); + rb_iv_set(cDigest_SHA1, "metadata", rb_digest_make_metadata(&sha1)); } diff --git a/ext/digest/sha1/sha1ossl.c b/ext/digest/sha1/sha1ossl.c deleted file mode 100644 index 452cf35084..0000000000 --- a/ext/digest/sha1/sha1ossl.c +++ /dev/null @@ -1,10 +0,0 @@ -/* $Id$ */ - -#include "defs.h" -#include "sha1ossl.h" - -void -SHA1_Finish(SHA1_CTX *ctx, char *buf) -{ - SHA1_Final((unsigned char *)buf, ctx); -} diff --git a/ext/digest/sha1/sha1ossl.h b/ext/digest/sha1/sha1ossl.h deleted file mode 100644 index 8f9984cc64..0000000000 --- a/ext/digest/sha1/sha1ossl.h +++ /dev/null @@ -1,20 +0,0 @@ -/* $Id$ */ - -#ifndef SHA1OSSL_H_INCLUDED -#define SHA1OSSL_H_INCLUDED - -#include <stddef.h> -#include <openssl/sha.h> - -#define SHA1_CTX SHA_CTX - -#ifdef SHA_BLOCK_LENGTH -#define SHA1_BLOCK_LENGTH SHA_BLOCK_LENGTH -#else -#define SHA1_BLOCK_LENGTH SHA_CBLOCK -#endif -#define SHA1_DIGEST_LENGTH SHA_DIGEST_LENGTH - -void SHA1_Finish(SHA1_CTX *ctx, char *buf); - -#endif diff --git a/ext/digest/sha2/depend b/ext/digest/sha2/depend index 7373f46fc2..2b74776b3e 100644 --- a/ext/digest/sha2/depend +++ b/ext/digest/sha2/depend @@ -1,3 +1,332 @@ -sha2.o: sha2.c sha2.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -sha2init.o: sha2init.c sha2.h $(srcdir)/../digest.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) -sha2ossl.o: sha2ossl.h $(srcdir)/../defs.h $(HDRS) $(ruby_headers) +sha2.o: sha2.c sha2.h $(srcdir)/../defs.h +sha2init.o: $(LOCAL_HDRS) + +# AUTOGENERATED DEPENDENCIES START +sha2.o: $(RUBY_EXTCONF_H) +sha2.o: $(arch_hdrdir)/ruby/config.h +sha2.o: $(hdrdir)/ruby.h +sha2.o: $(hdrdir)/ruby/assert.h +sha2.o: $(hdrdir)/ruby/backward.h +sha2.o: $(hdrdir)/ruby/backward/2/assume.h +sha2.o: $(hdrdir)/ruby/backward/2/attributes.h +sha2.o: $(hdrdir)/ruby/backward/2/bool.h +sha2.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha2.o: $(hdrdir)/ruby/backward/2/limits.h +sha2.o: $(hdrdir)/ruby/backward/2/long_long.h +sha2.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha2.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha2.o: $(hdrdir)/ruby/defines.h +sha2.o: $(hdrdir)/ruby/intern.h +sha2.o: $(hdrdir)/ruby/internal/abi.h +sha2.o: $(hdrdir)/ruby/internal/anyargs.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha2.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha2.o: $(hdrdir)/ruby/internal/assume.h +sha2.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha2.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha2.o: $(hdrdir)/ruby/internal/attr/cold.h +sha2.o: $(hdrdir)/ruby/internal/attr/const.h +sha2.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha2.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha2.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha2.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha2.o: $(hdrdir)/ruby/internal/attr/error.h +sha2.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha2.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha2.o: $(hdrdir)/ruby/internal/attr/format.h +sha2.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha2.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha2.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha2.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha2.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha2.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha2.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha2.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +sha2.o: $(hdrdir)/ruby/internal/attr/pure.h +sha2.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha2.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha2.o: $(hdrdir)/ruby/internal/attr/warning.h +sha2.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha2.o: $(hdrdir)/ruby/internal/cast.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha2.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha2.o: $(hdrdir)/ruby/internal/compiler_since.h +sha2.o: $(hdrdir)/ruby/internal/config.h +sha2.o: $(hdrdir)/ruby/internal/constant_p.h +sha2.o: $(hdrdir)/ruby/internal/core.h +sha2.o: $(hdrdir)/ruby/internal/core/rarray.h +sha2.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha2.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha2.o: $(hdrdir)/ruby/internal/core/rclass.h +sha2.o: $(hdrdir)/ruby/internal/core/rdata.h +sha2.o: $(hdrdir)/ruby/internal/core/rfile.h +sha2.o: $(hdrdir)/ruby/internal/core/rhash.h +sha2.o: $(hdrdir)/ruby/internal/core/robject.h +sha2.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha2.o: $(hdrdir)/ruby/internal/core/rstring.h +sha2.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha2.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha2.o: $(hdrdir)/ruby/internal/ctype.h +sha2.o: $(hdrdir)/ruby/internal/dllexport.h +sha2.o: $(hdrdir)/ruby/internal/dosish.h +sha2.o: $(hdrdir)/ruby/internal/error.h +sha2.o: $(hdrdir)/ruby/internal/eval.h +sha2.o: $(hdrdir)/ruby/internal/event.h +sha2.o: $(hdrdir)/ruby/internal/fl_type.h +sha2.o: $(hdrdir)/ruby/internal/gc.h +sha2.o: $(hdrdir)/ruby/internal/glob.h +sha2.o: $(hdrdir)/ruby/internal/globals.h +sha2.o: $(hdrdir)/ruby/internal/has/attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/builtin.h +sha2.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha2.o: $(hdrdir)/ruby/internal/has/extension.h +sha2.o: $(hdrdir)/ruby/internal/has/feature.h +sha2.o: $(hdrdir)/ruby/internal/has/warning.h +sha2.o: $(hdrdir)/ruby/internal/intern/array.h +sha2.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha2.o: $(hdrdir)/ruby/internal/intern/class.h +sha2.o: $(hdrdir)/ruby/internal/intern/compar.h +sha2.o: $(hdrdir)/ruby/internal/intern/complex.h +sha2.o: $(hdrdir)/ruby/internal/intern/cont.h +sha2.o: $(hdrdir)/ruby/internal/intern/dir.h +sha2.o: $(hdrdir)/ruby/internal/intern/enum.h +sha2.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha2.o: $(hdrdir)/ruby/internal/intern/error.h +sha2.o: $(hdrdir)/ruby/internal/intern/eval.h +sha2.o: $(hdrdir)/ruby/internal/intern/file.h +sha2.o: $(hdrdir)/ruby/internal/intern/hash.h +sha2.o: $(hdrdir)/ruby/internal/intern/io.h +sha2.o: $(hdrdir)/ruby/internal/intern/load.h +sha2.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha2.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha2.o: $(hdrdir)/ruby/internal/intern/object.h +sha2.o: $(hdrdir)/ruby/internal/intern/parse.h +sha2.o: $(hdrdir)/ruby/internal/intern/proc.h +sha2.o: $(hdrdir)/ruby/internal/intern/process.h +sha2.o: $(hdrdir)/ruby/internal/intern/random.h +sha2.o: $(hdrdir)/ruby/internal/intern/range.h +sha2.o: $(hdrdir)/ruby/internal/intern/rational.h +sha2.o: $(hdrdir)/ruby/internal/intern/re.h +sha2.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha2.o: $(hdrdir)/ruby/internal/intern/select.h +sha2.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha2.o: $(hdrdir)/ruby/internal/intern/set.h +sha2.o: $(hdrdir)/ruby/internal/intern/signal.h +sha2.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha2.o: $(hdrdir)/ruby/internal/intern/string.h +sha2.o: $(hdrdir)/ruby/internal/intern/struct.h +sha2.o: $(hdrdir)/ruby/internal/intern/thread.h +sha2.o: $(hdrdir)/ruby/internal/intern/time.h +sha2.o: $(hdrdir)/ruby/internal/intern/variable.h +sha2.o: $(hdrdir)/ruby/internal/intern/vm.h +sha2.o: $(hdrdir)/ruby/internal/interpreter.h +sha2.o: $(hdrdir)/ruby/internal/iterator.h +sha2.o: $(hdrdir)/ruby/internal/memory.h +sha2.o: $(hdrdir)/ruby/internal/method.h +sha2.o: $(hdrdir)/ruby/internal/module.h +sha2.o: $(hdrdir)/ruby/internal/newobj.h +sha2.o: $(hdrdir)/ruby/internal/scan_args.h +sha2.o: $(hdrdir)/ruby/internal/special_consts.h +sha2.o: $(hdrdir)/ruby/internal/static_assert.h +sha2.o: $(hdrdir)/ruby/internal/stdalign.h +sha2.o: $(hdrdir)/ruby/internal/stdbool.h +sha2.o: $(hdrdir)/ruby/internal/stdckdint.h +sha2.o: $(hdrdir)/ruby/internal/symbol.h +sha2.o: $(hdrdir)/ruby/internal/value.h +sha2.o: $(hdrdir)/ruby/internal/value_type.h +sha2.o: $(hdrdir)/ruby/internal/variable.h +sha2.o: $(hdrdir)/ruby/internal/warning_push.h +sha2.o: $(hdrdir)/ruby/internal/xmalloc.h +sha2.o: $(hdrdir)/ruby/missing.h +sha2.o: $(hdrdir)/ruby/ruby.h +sha2.o: $(hdrdir)/ruby/st.h +sha2.o: $(hdrdir)/ruby/subst.h +sha2.o: $(srcdir)/../defs.h +sha2.o: sha2.c +sha2.o: sha2.h +sha2init.o: $(RUBY_EXTCONF_H) +sha2init.o: $(arch_hdrdir)/ruby/config.h +sha2init.o: $(hdrdir)/ruby.h +sha2init.o: $(hdrdir)/ruby/assert.h +sha2init.o: $(hdrdir)/ruby/backward.h +sha2init.o: $(hdrdir)/ruby/backward/2/assume.h +sha2init.o: $(hdrdir)/ruby/backward/2/attributes.h +sha2init.o: $(hdrdir)/ruby/backward/2/bool.h +sha2init.o: $(hdrdir)/ruby/backward/2/inttypes.h +sha2init.o: $(hdrdir)/ruby/backward/2/limits.h +sha2init.o: $(hdrdir)/ruby/backward/2/long_long.h +sha2init.o: $(hdrdir)/ruby/backward/2/stdalign.h +sha2init.o: $(hdrdir)/ruby/backward/2/stdarg.h +sha2init.o: $(hdrdir)/ruby/defines.h +sha2init.o: $(hdrdir)/ruby/intern.h +sha2init.o: $(hdrdir)/ruby/internal/abi.h +sha2init.o: $(hdrdir)/ruby/internal/anyargs.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sha2init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sha2init.o: $(hdrdir)/ruby/internal/assume.h +sha2init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sha2init.o: $(hdrdir)/ruby/internal/attr/artificial.h +sha2init.o: $(hdrdir)/ruby/internal/attr/cold.h +sha2init.o: $(hdrdir)/ruby/internal/attr/const.h +sha2init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sha2init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sha2init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sha2init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sha2init.o: $(hdrdir)/ruby/internal/attr/error.h +sha2init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sha2init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sha2init.o: $(hdrdir)/ruby/internal/attr/format.h +sha2init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noalias.h +sha2init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noinline.h +sha2init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sha2init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sha2init.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +sha2init.o: $(hdrdir)/ruby/internal/attr/pure.h +sha2init.o: $(hdrdir)/ruby/internal/attr/restrict.h +sha2init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sha2init.o: $(hdrdir)/ruby/internal/attr/warning.h +sha2init.o: $(hdrdir)/ruby/internal/attr/weakref.h +sha2init.o: $(hdrdir)/ruby/internal/cast.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sha2init.o: $(hdrdir)/ruby/internal/compiler_since.h +sha2init.o: $(hdrdir)/ruby/internal/config.h +sha2init.o: $(hdrdir)/ruby/internal/constant_p.h +sha2init.o: $(hdrdir)/ruby/internal/core.h +sha2init.o: $(hdrdir)/ruby/internal/core/rarray.h +sha2init.o: $(hdrdir)/ruby/internal/core/rbasic.h +sha2init.o: $(hdrdir)/ruby/internal/core/rbignum.h +sha2init.o: $(hdrdir)/ruby/internal/core/rclass.h +sha2init.o: $(hdrdir)/ruby/internal/core/rdata.h +sha2init.o: $(hdrdir)/ruby/internal/core/rfile.h +sha2init.o: $(hdrdir)/ruby/internal/core/rhash.h +sha2init.o: $(hdrdir)/ruby/internal/core/robject.h +sha2init.o: $(hdrdir)/ruby/internal/core/rregexp.h +sha2init.o: $(hdrdir)/ruby/internal/core/rstring.h +sha2init.o: $(hdrdir)/ruby/internal/core/rstruct.h +sha2init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sha2init.o: $(hdrdir)/ruby/internal/ctype.h +sha2init.o: $(hdrdir)/ruby/internal/dllexport.h +sha2init.o: $(hdrdir)/ruby/internal/dosish.h +sha2init.o: $(hdrdir)/ruby/internal/error.h +sha2init.o: $(hdrdir)/ruby/internal/eval.h +sha2init.o: $(hdrdir)/ruby/internal/event.h +sha2init.o: $(hdrdir)/ruby/internal/fl_type.h +sha2init.o: $(hdrdir)/ruby/internal/gc.h +sha2init.o: $(hdrdir)/ruby/internal/glob.h +sha2init.o: $(hdrdir)/ruby/internal/globals.h +sha2init.o: $(hdrdir)/ruby/internal/has/attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/builtin.h +sha2init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sha2init.o: $(hdrdir)/ruby/internal/has/extension.h +sha2init.o: $(hdrdir)/ruby/internal/has/feature.h +sha2init.o: $(hdrdir)/ruby/internal/has/warning.h +sha2init.o: $(hdrdir)/ruby/internal/intern/array.h +sha2init.o: $(hdrdir)/ruby/internal/intern/bignum.h +sha2init.o: $(hdrdir)/ruby/internal/intern/class.h +sha2init.o: $(hdrdir)/ruby/internal/intern/compar.h +sha2init.o: $(hdrdir)/ruby/internal/intern/complex.h +sha2init.o: $(hdrdir)/ruby/internal/intern/cont.h +sha2init.o: $(hdrdir)/ruby/internal/intern/dir.h +sha2init.o: $(hdrdir)/ruby/internal/intern/enum.h +sha2init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sha2init.o: $(hdrdir)/ruby/internal/intern/error.h +sha2init.o: $(hdrdir)/ruby/internal/intern/eval.h +sha2init.o: $(hdrdir)/ruby/internal/intern/file.h +sha2init.o: $(hdrdir)/ruby/internal/intern/hash.h +sha2init.o: $(hdrdir)/ruby/internal/intern/io.h +sha2init.o: $(hdrdir)/ruby/internal/intern/load.h +sha2init.o: $(hdrdir)/ruby/internal/intern/marshal.h +sha2init.o: $(hdrdir)/ruby/internal/intern/numeric.h +sha2init.o: $(hdrdir)/ruby/internal/intern/object.h +sha2init.o: $(hdrdir)/ruby/internal/intern/parse.h +sha2init.o: $(hdrdir)/ruby/internal/intern/proc.h +sha2init.o: $(hdrdir)/ruby/internal/intern/process.h +sha2init.o: $(hdrdir)/ruby/internal/intern/random.h +sha2init.o: $(hdrdir)/ruby/internal/intern/range.h +sha2init.o: $(hdrdir)/ruby/internal/intern/rational.h +sha2init.o: $(hdrdir)/ruby/internal/intern/re.h +sha2init.o: $(hdrdir)/ruby/internal/intern/ruby.h +sha2init.o: $(hdrdir)/ruby/internal/intern/select.h +sha2init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sha2init.o: $(hdrdir)/ruby/internal/intern/set.h +sha2init.o: $(hdrdir)/ruby/internal/intern/signal.h +sha2init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sha2init.o: $(hdrdir)/ruby/internal/intern/string.h +sha2init.o: $(hdrdir)/ruby/internal/intern/struct.h +sha2init.o: $(hdrdir)/ruby/internal/intern/thread.h +sha2init.o: $(hdrdir)/ruby/internal/intern/time.h +sha2init.o: $(hdrdir)/ruby/internal/intern/variable.h +sha2init.o: $(hdrdir)/ruby/internal/intern/vm.h +sha2init.o: $(hdrdir)/ruby/internal/interpreter.h +sha2init.o: $(hdrdir)/ruby/internal/iterator.h +sha2init.o: $(hdrdir)/ruby/internal/memory.h +sha2init.o: $(hdrdir)/ruby/internal/method.h +sha2init.o: $(hdrdir)/ruby/internal/module.h +sha2init.o: $(hdrdir)/ruby/internal/newobj.h +sha2init.o: $(hdrdir)/ruby/internal/scan_args.h +sha2init.o: $(hdrdir)/ruby/internal/special_consts.h +sha2init.o: $(hdrdir)/ruby/internal/static_assert.h +sha2init.o: $(hdrdir)/ruby/internal/stdalign.h +sha2init.o: $(hdrdir)/ruby/internal/stdbool.h +sha2init.o: $(hdrdir)/ruby/internal/stdckdint.h +sha2init.o: $(hdrdir)/ruby/internal/symbol.h +sha2init.o: $(hdrdir)/ruby/internal/value.h +sha2init.o: $(hdrdir)/ruby/internal/value_type.h +sha2init.o: $(hdrdir)/ruby/internal/variable.h +sha2init.o: $(hdrdir)/ruby/internal/warning_push.h +sha2init.o: $(hdrdir)/ruby/internal/xmalloc.h +sha2init.o: $(hdrdir)/ruby/missing.h +sha2init.o: $(hdrdir)/ruby/ruby.h +sha2init.o: $(hdrdir)/ruby/st.h +sha2init.o: $(hdrdir)/ruby/subst.h +sha2init.o: $(srcdir)/../digest.h +sha2init.o: sha2.h +sha2init.o: sha2cc.h +sha2init.o: sha2init.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/digest/sha2/extconf.rb b/ext/digest/sha2/extconf.rb index 5ab2d35af5..3b772675e1 100644 --- a/ext/digest/sha2/extconf.rb +++ b/ext/digest/sha2/extconf.rb @@ -1,33 +1,19 @@ # -*- coding: us-ascii -*- +# frozen_string_literal: false # $RoughId: extconf.rb,v 1.4 2001/08/14 19:54:51 knu Exp $ # $Id$ require "mkmf" - -$defs << "-DHAVE_CONFIG_H" -$INCFLAGS << " -I$(srcdir)/.." +require File.expand_path("../../digest_conf", __FILE__) $objs = [ "sha2init.#{$OBJEXT}" ] -dir_config("openssl") -pkg_config("openssl") -require File.expand_path('../../../openssl/deprecation', __FILE__) - -if !with_config("bundled-sha2") && - have_library("crypto") && - %w[SHA256 SHA512].all? {|d| OpenSSL.check_func("#{d}_Transform", "openssl/sha.h")} && - %w[SHA256 SHA512].all? {|d| have_type("#{d}_CTX", "openssl/sha.h")} - $objs << "sha2ossl.#{$OBJEXT}" - $defs << "-DSHA2_USE_OPENSSL" -else +unless digest_conf("sha2") have_type("u_int8_t") - $objs << "sha2.#{$OBJEXT}" end have_header("sys/cdefs.h") $preload = %w[digest] -if have_type("uint64_t", "defs.h", $defs.join(' ')) - create_makefile("digest/sha2") -end +create_makefile("digest/sha2") diff --git a/ext/digest/sha2/lib/sha2.rb b/ext/digest/sha2/lib/sha2.rb index 58d12e9b09..f17593a206 100644 --- a/ext/digest/sha2/lib/sha2.rb +++ b/ext/digest/sha2/lib/sha2.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false #-- # sha2.rb - defines Digest::SHA2 class which wraps up the SHA256, # SHA384, and SHA512 classes. @@ -10,17 +11,51 @@ # $Id$ require 'digest' -require 'digest/sha2.so' +require 'digest/sha2/loader' module Digest # # A meta digest provider class for SHA256, SHA384 and SHA512. # + # FIPS 180-2 describes SHA2 family of digest algorithms. It defines + # three algorithms: + # * one which works on chunks of 512 bits and returns a 256-bit + # digest (SHA256), + # * one which works on chunks of 1024 bits and returns a 384-bit + # digest (SHA384), + # * and one which works on chunks of 1024 bits and returns a 512-bit + # digest (SHA512). + # + # ==Examples + # require 'digest' + # + # # Compute a complete digest + # Digest::SHA2.hexdigest 'abc' # => "ba7816bf8..." + # Digest::SHA2.new(256).hexdigest 'abc' # => "ba7816bf8..." + # Digest::SHA256.hexdigest 'abc' # => "ba7816bf8..." + # + # Digest::SHA2.new(384).hexdigest 'abc' # => "cb00753f4..." + # Digest::SHA384.hexdigest 'abc' # => "cb00753f4..." + # + # Digest::SHA2.new(512).hexdigest 'abc' # => "ddaf35a19..." + # Digest::SHA512.hexdigest 'abc' # => "ddaf35a19..." + # + # # Compute digest by chunks + # sha2 = Digest::SHA2.new # =>#<Digest::SHA2:256> + # sha2.update "ab" + # sha2 << "c" # alias for #update + # sha2.hexdigest # => "ba7816bf8..." + # + # # Use the same object to compute another digest + # sha2.reset + # sha2 << "message" + # sha2.hexdigest # => "ab530a13e..." + # class SHA2 < Digest::Class # call-seq: # Digest::SHA2.new(bitlen = 256) -> digest_obj # - # Creates a new SHA2 hash object with a given bit length. + # Create a new SHA2 hash object with a given bit length. # # Valid bit lengths are 256, 384 and 512. def initialize(bitlen = 256) @@ -40,7 +75,7 @@ module Digest # call-seq: # digest_obj.reset -> digest_obj # - # Resets the digest to the initial state and returns self. + # Reset the digest to the initial state and return self. def reset @sha2.reset self @@ -50,7 +85,7 @@ module Digest # digest_obj.update(string) -> digest_obj # digest_obj << string -> digest_obj # - # Updates the digest using a given _string_ and returns self. + # Update the digest using a given _string_ and return self. def update(str) @sha2.update(str) self @@ -66,7 +101,7 @@ module Digest # call-seq: # digest_obj.block_length -> Integer # - # Returns the block length of the digest in bytes. + # Return the block length of the digest in bytes. # # Digest::SHA256.new.block_length * 8 # # => 512 @@ -81,7 +116,7 @@ module Digest # call-seq: # digest_obj.digest_length -> Integer # - # Returns the length of the hash value of the digest in bytes. + # Return the length of the hash value (the digest) in bytes. # # Digest::SHA256.new.digest_length * 8 # # => 256 diff --git a/ext/digest/sha2/lib/sha2/loader.rb b/ext/digest/sha2/lib/sha2/loader.rb new file mode 100644 index 0000000000..7d6d04a59c --- /dev/null +++ b/ext/digest/sha2/lib/sha2/loader.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require 'digest/sha2.so' diff --git a/ext/digest/sha2/sha2.c b/ext/digest/sha2/sha2.c index 3457790eea..21d5acbe96 100644 --- a/ext/digest/sha2/sha2.c +++ b/ext/digest/sha2/sha2.c @@ -34,7 +34,7 @@ * $Id$ */ -#include "defs.h" +#include "../defs.h" #include <string.h> /* memcpy()/memset() or bcopy()/bzero() */ #include <assert.h> /* assert() */ #include "sha2.h" @@ -67,7 +67,7 @@ * Please make sure that your system defines BYTE_ORDER. If your * architecture is little-endian, make sure it also defines * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are - * equivilent. + * equivalent. * * If your system does not define the above, then you can do so by * hand like this: @@ -94,7 +94,7 @@ /* * Define the followingsha2_* types to types of the correct length on - * the native archtecture. Most BSD systems and Linux define u_intXX_t + * the native architecture. Most BSD systems and Linux define u_intXX_t * types. Machines with very recent ANSI C headers, can use the * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H * during compile or in the sha.h header file. @@ -128,7 +128,7 @@ typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ #define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16) -#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__GNUC__) || defined(_HPUX_SOURCE) || defined(__IBMC__) +#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__GNUC__) || defined(__IBMC__) #define ULL(number) number##ULL #else #define ULL(number) (uint64_t)(number) @@ -341,13 +341,14 @@ static const char *sha2_hex_digits = "0123456789abcdef"; /*** SHA-256: *********************************************************/ -void SHA256_Init(SHA256_CTX* context) { +int SHA256_Init(SHA256_CTX* context) { if (context == (SHA256_CTX*)0) { - return; + return 0; } MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH); context->bitcount = 0; + return 1; } #ifdef SHA2_UNROLL_TRANSFORM @@ -574,7 +575,7 @@ void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { usedspace = freespace = 0; } -void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { +int SHA256_Final(sha2_byte digest[SHA256_DIGEST_LENGTH], SHA256_CTX* context) { sha2_word32 *d = (sha2_word32*)digest; unsigned int usedspace; @@ -636,9 +637,10 @@ void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { /* Clean up state data: */ MEMSET_BZERO(context, sizeof(*context)); usedspace = 0; + return 1; } -char *SHA256_End(SHA256_CTX* context, char buffer[]) { +char *SHA256_End(SHA256_CTX* context, char buffer[SHA256_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest; int i; @@ -670,13 +672,14 @@ char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_S /*** SHA-512: *********************************************************/ -void SHA512_Init(SHA512_CTX* context) { +int SHA512_Init(SHA512_CTX* context) { if (context == (SHA512_CTX*)0) { - return; + return 0; } MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; + return 1; } #ifdef SHA2_UNROLL_TRANSFORM @@ -940,7 +943,7 @@ void SHA512_Last(SHA512_CTX* context) { SHA512_Transform(context, (sha2_word64*)context->buffer); } -void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { +int SHA512_Final(sha2_byte digest[SHA512_DIGEST_LENGTH], SHA512_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ @@ -967,9 +970,10 @@ void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { /* Zero out state data */ MEMSET_BZERO(context, sizeof(*context)); + return 1; } -char *SHA512_End(SHA512_CTX* context, char buffer[]) { +char *SHA512_End(SHA512_CTX* context, char buffer[SHA512_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest; int i; @@ -1001,20 +1005,21 @@ char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_S /*** SHA-384: *********************************************************/ -void SHA384_Init(SHA384_CTX* context) { +int SHA384_Init(SHA384_CTX* context) { if (context == (SHA384_CTX*)0) { - return; + return 0; } MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; + return 1; } void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { SHA512_Update((SHA512_CTX*)context, data, len); } -void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { +int SHA384_Final(sha2_byte digest[SHA384_DIGEST_LENGTH], SHA384_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ @@ -1041,9 +1046,10 @@ void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { /* Zero out state data */ MEMSET_BZERO(context, sizeof(*context)); + return 1; } -char *SHA384_End(SHA384_CTX* context, char buffer[]) { +char *SHA384_End(SHA384_CTX* context, char buffer[SHA384_DIGEST_STRING_LENGTH]) { sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest; int i; diff --git a/ext/digest/sha2/sha2.h b/ext/digest/sha2/sha2.h index 465398ee19..e58f15ae12 100644 --- a/ext/digest/sha2/sha2.h +++ b/ext/digest/sha2/sha2.h @@ -165,52 +165,52 @@ typedef SHA512_CTX SHA384_CTX; #ifndef NOPROTO -void SHA256_Init(SHA256_CTX *); +int SHA256_Init(SHA256_CTX *); void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); -void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); +int SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); -void SHA384_Init(SHA384_CTX*); +int SHA384_Init(SHA384_CTX*); void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); -void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); +int SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); -void SHA512_Init(SHA512_CTX*); +int SHA512_Init(SHA512_CTX*); void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); -void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +int SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); #else /* NOPROTO */ -void SHA256_Init(); +int SHA256_Init(); void SHA256_Update(); #ifdef RUBY -void SHA256_Finish(); +int SHA256_Finish(); #else -void SHA256_Final(); +int SHA256_Final(); #endif /* RUBY */ char* SHA256_End(); char* SHA256_Data(); -void SHA384_Init(); +int SHA384_Init(); void SHA384_Update(); #ifdef RUBY -void SHA384_Finish(); +int SHA384_Finish(); #else -void SHA384_Final(); +int SHA384_Final(); #endif /* RUBY */ char* SHA384_End(); char* SHA384_Data(); -void SHA512_Init(); +int SHA512_Init(); void SHA512_Update(); #ifdef RUBY -void SHA512_Finish(); +int SHA512_Finish(); #else -void SHA512_Final(); +int SHA512_Final(); #endif /* RUBY */ char* SHA512_End(); char* SHA512_Data(); diff --git a/ext/digest/sha2/sha2cc.h b/ext/digest/sha2/sha2cc.h new file mode 100644 index 0000000000..1245a2e2c7 --- /dev/null +++ b/ext/digest/sha2/sha2cc.h @@ -0,0 +1,70 @@ +#define COMMON_DIGEST_FOR_OPENSSL 1 +#include <CommonCrypto/CommonDigest.h> + +/* + * Prior to 10.5, OpenSSL-compatible definitions are missing for + * SHA2 macros, though the CC_ versions are present. + * Add the missing definitions we actually use here if needed. + * Note that the definitions are the argless 10.6+-style. + * The weird CTX mismatch is copied from the 10.6 header. + */ +#ifndef SHA256_DIGEST_LENGTH +#define SHA256_DIGEST_LENGTH CC_SHA256_DIGEST_LENGTH +#define SHA256_CTX CC_SHA256_CTX +#define SHA256_Update CC_SHA256_Update +#define SHA256_Final CC_SHA256_Final +#endif /* !defined SHA256_DIGEST_LENGTH */ + +#ifndef SHA384_DIGEST_LENGTH +#define SHA384_DIGEST_LENGTH CC_SHA384_DIGEST_LENGTH +#define SHA512_CTX CC_SHA512_CTX +#define SHA384_Update CC_SHA384_Update +#define SHA384_Final CC_SHA384_Final +#endif /* !defined SHA384_DIGEST_LENGTH */ + +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_DIGEST_LENGTH CC_SHA512_DIGEST_LENGTH +#define SHA512_Update CC_SHA512_Update +#define SHA512_Final CC_SHA512_Final +#endif /* !defined SHA512_DIGEST_LENGTH */ + +#define SHA256_BLOCK_LENGTH CC_SHA256_BLOCK_BYTES +#define SHA384_BLOCK_LENGTH CC_SHA384_BLOCK_BYTES +#define SHA512_BLOCK_LENGTH CC_SHA512_BLOCK_BYTES + +#define SHA384_CTX CC_SHA512_CTX + +static DEFINE_UPDATE_FUNC_FOR_UINT(SHA256) +static DEFINE_FINISH_FUNC_FROM_FINAL(SHA256) +static DEFINE_UPDATE_FUNC_FOR_UINT(SHA384) +static DEFINE_FINISH_FUNC_FROM_FINAL(SHA384) +static DEFINE_UPDATE_FUNC_FOR_UINT(SHA512) +static DEFINE_FINISH_FUNC_FROM_FINAL(SHA512) + + +#undef SHA256_Update +#undef SHA256_Finish +#define SHA256_Update rb_digest_SHA256_update +#define SHA256_Finish rb_digest_SHA256_finish + +#undef SHA384_Update +#undef SHA384_Finish +#define SHA384_Update rb_digest_SHA384_update +#define SHA384_Finish rb_digest_SHA384_finish + +#undef SHA512_Update +#undef SHA512_Finish +#define SHA512_Update rb_digest_SHA512_update +#define SHA512_Finish rb_digest_SHA512_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine SHA*_Init as well. + * This is a NOP on 10.6+. + */ +#undef SHA256_Init +#define SHA256_Init CC_SHA256_Init +#undef SHA384_Init +#define SHA384_Init CC_SHA384_Init +#undef SHA512_Init +#define SHA512_Init CC_SHA512_Init diff --git a/ext/digest/sha2/sha2init.c b/ext/digest/sha2/sha2init.c index 13df4bcb78..3923e3724c 100644 --- a/ext/digest/sha2/sha2init.c +++ b/ext/digest/sha2/sha2init.c @@ -1,9 +1,10 @@ /* $RoughId: sha2init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */ /* $Id$ */ -#include "digest.h" -#if defined(SHA2_USE_OPENSSL) -#include "sha2ossl.h" +#include <ruby/ruby.h> +#include "../digest.h" +#if defined(SHA2_USE_COMMONDIGEST) +#include "sha2cc.h" #else #include "sha2.h" #endif @@ -24,33 +25,50 @@ static const rb_digest_metadata_t sha##bitlen = { \ FOREACH_BITLEN(DEFINE_ALGO_METADATA) /* + * Document-class: Digest::SHA256 < Digest::Base + * * Classes for calculating message digests using the SHA-256/384/512 * Secure Hash Algorithm(s) by NIST (the US' National Institute of * Standards and Technology), described in FIPS PUB 180-2. + * + * See SHA2. + */ +/* + * Document-class: Digest::SHA384 < Digest::Base + * + * Classes for calculating message digests using the SHA-256/384/512 + * Secure Hash Algorithm(s) by NIST (the US' National Institute of + * Standards and Technology), described in FIPS PUB 180-2. + * + * See SHA2. + */ +/* + * Document-class: Digest::SHA512 < Digest::Base + * + * Classes for calculating message digests using the SHA-256/384/512 + * Secure Hash Algorithm(s) by NIST (the US' National Institute of + * Standards and Technology), described in FIPS PUB 180-2. + * + * See SHA2. */ void -Init_sha2() +Init_sha2(void) { - VALUE mDigest, cDigest_Base; - ID id_metadata; - -#define DECLARE_ALGO_CLASS(bitlen) \ - VALUE cDigest_SHA##bitlen; + VALUE mDigest, cDigest_Base, cDigest_SHA2; + ID id_metadata = rb_id_metadata(); - FOREACH_BITLEN(DECLARE_ALGO_CLASS) - - rb_require("digest"); - - id_metadata = rb_intern("metadata"); +#if 0 + mDigest = rb_define_module("Digest"); /* let rdoc know */ +#endif + mDigest = rb_digest_namespace(); + cDigest_Base = rb_const_get(mDigest, rb_intern_const("Base")); - mDigest = rb_path2class("Digest"); - cDigest_Base = rb_path2class("Digest::Base"); + cDigest_SHA2 = rb_define_class_under(mDigest, "SHA256", cDigest_Base); + rb_ivar_set(cDigest_SHA2, id_metadata, rb_digest_make_metadata(&sha256)); -#define DEFINE_ALGO_CLASS(bitlen) \ - cDigest_SHA##bitlen = rb_define_class_under(mDigest, "SHA" #bitlen, cDigest_Base); \ -\ - rb_ivar_set(cDigest_SHA##bitlen, id_metadata, \ - Data_Wrap_Struct(rb_cObject, 0, 0, (void *)&sha##bitlen)); + cDigest_SHA2 = rb_define_class_under(mDigest, "SHA384", cDigest_Base); + rb_ivar_set(cDigest_SHA2, id_metadata, rb_digest_make_metadata(&sha384)); - FOREACH_BITLEN(DEFINE_ALGO_CLASS) + cDigest_SHA2 = rb_define_class_under(mDigest, "SHA512", cDigest_Base); + rb_ivar_set(cDigest_SHA2, id_metadata, rb_digest_make_metadata(&sha512)); } diff --git a/ext/digest/sha2/sha2ossl.c b/ext/digest/sha2/sha2ossl.c deleted file mode 100644 index 34353be8b8..0000000000 --- a/ext/digest/sha2/sha2ossl.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "defs.h" -#include "sha2ossl.h" - -#define SHA_Finish(bit) \ - void SHA##bit##_Finish(SHA##bit##_CTX *ctx, char *buf) \ - { SHA##bit##_Final((unsigned char *)buf, ctx);} -#ifndef __DragonFly__ -#define SHA384_Final SHA512_Final -#endif - -SHA_Finish(256) -SHA_Finish(384) -SHA_Finish(512) diff --git a/ext/digest/sha2/sha2ossl.h b/ext/digest/sha2/sha2ossl.h deleted file mode 100644 index 4229d14cf9..0000000000 --- a/ext/digest/sha2/sha2ossl.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef SHA2OSSL_H_INCLUDED -#define SHA2OSSL_H_INCLUDED - -#include <stddef.h> -#include <openssl/sha.h> - -#define SHA256_BLOCK_LENGTH SHA256_CBLOCK -#define SHA384_BLOCK_LENGTH SHA512_CBLOCK -#define SHA512_BLOCK_LENGTH SHA512_CBLOCK - -typedef SHA512_CTX SHA384_CTX; - -void SHA256_Finish(SHA256_CTX *ctx, char *buf); -void SHA384_Finish(SHA384_CTX *ctx, char *buf); -void SHA512_Finish(SHA512_CTX *ctx, char *buf); - -#endif diff --git a/ext/digest/test.sh b/ext/digest/test.sh deleted file mode 100644 index 328c7575e6..0000000000 --- a/ext/digest/test.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -# -# $RoughId: test.sh,v 1.5 2001/07/13 15:38:27 knu Exp $ -# $Id$ - -RUBY=${RUBY:=ruby} -MAKE=${MAKE:=make} -CFLAGS=${CFLAGS:=-Wall} - -${RUBY} extconf.rb --with-cflags="${CFLAGS}" -${MAKE} clean -${MAKE} - -for algo in md5 rmd160 sha1 sha2; do - args=--with-cflags="${CFLAGS}" - - if [ $WITH_BUNDLED_ENGINES ]; then - args="$args --with-bundled-$algo" - fi - - (cd $algo && - ${RUBY} extconf.rb $args; - ${MAKE} clean; - ${MAKE}) - ln -sf ../../$algo/$algo.so lib/digest/ -done - -${RUBY} -I. -I./lib ../../test/digest/test_digest.rb - -rm lib/digest/*.so |
