mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* ext/digest/digest.c (rb_digest_instance_digest)
(rb_digest_instance_hexdigest): Save a method call of reset()
  for a disposable clone.
* ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix
  rdoc.
* ext/digest/lib/digest.rb (Digest::Class.base64digest)
  (Digest::Instance#base64digest{,!}): New methods.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@26341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
			
			
This commit is contained in:
		
							parent
							
								
									f9ce73f6a6
								
							
						
					
					
						commit
						fbc0b59bd6
					
				
					 5 changed files with 61 additions and 14 deletions
				
			
		
							
								
								
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							|  | @ -1,3 +1,15 @@ | ||||||
|  | Mon Jan 18 04:15:58 2010  Akinori MUSHA  <knu@iDaemons.org> | ||||||
|  | 
 | ||||||
|  | 	* ext/digest/digest.c (rb_digest_instance_digest) | ||||||
|  | 	  (rb_digest_instance_hexdigest): Save a method call of reset() | ||||||
|  | 	  for a disposable clone. | ||||||
|  | 
 | ||||||
|  | 	* ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix | ||||||
|  | 	  rdoc. | ||||||
|  | 
 | ||||||
|  | 	* ext/digest/lib/digest.rb (Digest::Class.base64digest) | ||||||
|  | 	  (Digest::Instance#base64digest{,!}): New methods. | ||||||
|  | 
 | ||||||
| Mon Jan 18 03:39:05 2010  Akinori MUSHA  <knu@iDaemons.org> | Mon Jan 18 03:39:05 2010  Akinori MUSHA  <knu@iDaemons.org> | ||||||
| 
 | 
 | ||||||
| 	* lib/base64.rb (Base64#{strict_encode64,strict_decode64,urlsafe_encode64, | 	* lib/base64.rb (Base64#{strict_encode64,strict_decode64,urlsafe_encode64, | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								NEWS
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								NEWS
									
										
									
									
									
								
							|  | @ -194,6 +194,12 @@ with all sufficient information, see the ChangeLog file. | ||||||
| 
 | 
 | ||||||
|     Added as an alias to #ungetc. |     Added as an alias to #ungetc. | ||||||
| 
 | 
 | ||||||
|  | * digest | ||||||
|  |     * new methods: | ||||||
|  |       * Digest::Class.base64digest | ||||||
|  |       * Digest::Instance#base64digest | ||||||
|  |       * Digest::Instance#base64digest! | ||||||
|  | 
 | ||||||
| * rss | * rss | ||||||
| 
 | 
 | ||||||
|   * 0.2.4 -> 0.2.7. |   * 0.2.4 -> 0.2.7. | ||||||
|  |  | ||||||
|  | @ -179,10 +179,7 @@ rb_digest_instance_digest(int argc, VALUE *argv, VALUE self) | ||||||
|         value = rb_funcall(self, id_finish, 0); |         value = rb_funcall(self, id_finish, 0); | ||||||
|         rb_funcall(self, id_reset, 0); |         rb_funcall(self, id_reset, 0); | ||||||
|     } else { |     } else { | ||||||
|         VALUE clone = rb_obj_clone(self); |         value = rb_funcall(rb_obj_clone(self), id_finish, 0); | ||||||
| 
 |  | ||||||
|         value = rb_funcall(clone, id_finish, 0); |  | ||||||
|         rb_funcall(clone, id_reset, 0); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return value; |     return value; | ||||||
|  | @ -227,10 +224,7 @@ rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self) | ||||||
|         value = rb_funcall(self, id_finish, 0); |         value = rb_funcall(self, id_finish, 0); | ||||||
|         rb_funcall(self, id_reset, 0); |         rb_funcall(self, id_reset, 0); | ||||||
|     } else { |     } else { | ||||||
|         VALUE clone = rb_obj_clone(self); |         value = rb_funcall(rb_obj_clone(self), id_finish, 0); | ||||||
| 
 |  | ||||||
|         value = rb_funcall(clone, id_finish, 0); |  | ||||||
|         rb_funcall(clone, id_reset, 0); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return hexencode_str_new(value); |     return hexencode_str_new(value); | ||||||
|  | @ -240,8 +234,8 @@ rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self) | ||||||
|  * call-seq: |  * call-seq: | ||||||
|  *     digest_obj.hexdigest! -> string |  *     digest_obj.hexdigest! -> string | ||||||
|  * |  * | ||||||
|  * Returns the resulting hash value and resets the digest to the |  * Returns the resulting hash value in a hex-encoded form and resets | ||||||
|  * initial state. |  * the digest to the initial state. | ||||||
|  */ |  */ | ||||||
| static VALUE | static VALUE | ||||||
| rb_digest_instance_hexdigest_bang(VALUE self) | rb_digest_instance_hexdigest_bang(VALUE self) | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| require 'digest.so' | require 'digest.so' | ||||||
|  | autoload :Base64, 'base64' | ||||||
| 
 | 
 | ||||||
| module Digest | module Digest | ||||||
|   def self.const_missing(name) |   def self.const_missing(name) | ||||||
|  | @ -28,6 +29,13 @@ module Digest | ||||||
|     def self.file(name) |     def self.file(name) | ||||||
|       new.file(name) |       new.file(name) | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     # Returns the base64 encoded hash value of a given _string_.  The | ||||||
|  |     # return value is properly padded with '=' and contains no line | ||||||
|  |     # feeds. | ||||||
|  |     def self.base64digest(str, *args) | ||||||
|  |       Base64.strict_encode64(digest(str, *args)) | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   module Instance |   module Instance | ||||||
|  | @ -42,6 +50,25 @@ module Digest | ||||||
|       } |       } | ||||||
|       self |       self | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     # If none is given, returns the resulting hash value of the digest | ||||||
|  |     # in a base64 encoded form, keeping the digest's state. | ||||||
|  |     # | ||||||
|  |     # If a _string_ is given, returns the hash value for the given | ||||||
|  |     # _string_ in a base64 encoded form, resetting the digest to the | ||||||
|  |     # initial state before and after the process. | ||||||
|  |     # | ||||||
|  |     # In either case, the return value is properly padded with '=' and | ||||||
|  |     # contains no line feeds. | ||||||
|  |     def base64digest(str = nil) | ||||||
|  |       Base64.strict_encode64(str ? digest(str) : digest) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     # Returns the resulting hash value and resets the digest to the | ||||||
|  |     # initial state. | ||||||
|  |     def base64digest! | ||||||
|  |       Base64.strict_encode64(digest!) | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,14 +18,22 @@ module TestDigest | ||||||
|   Data2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |   Data2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" | ||||||
| 
 | 
 | ||||||
|   def test_s_hexdigest |   def test_s_hexdigest | ||||||
|     self.class::DATA.each do |str, digest| |     self.class::DATA.each do |str, hexdigest| | ||||||
|       assert_equal(digest, self.class::ALGO.hexdigest(str)) |       assert_equal(hexdigest, self.class::ALGO.hexdigest(str)) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def test_s_base64digest | ||||||
|  |     self.class::DATA.each do |str, hexdigest| | ||||||
|  |       digest = [hexdigest].pack("H*") | ||||||
|  |       assert_equal([digest].pack("m0").delete("\n"), self.class::ALGO.base64digest(str)) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def test_s_digest |   def test_s_digest | ||||||
|     self.class::DATA.each do |str, digest| |     self.class::DATA.each do |str, hexdigest| | ||||||
|       assert_equal([digest].pack("H*"), self.class::ALGO.digest(str)) |       digest = [hexdigest].pack("H*") | ||||||
|  |       assert_equal(digest, self.class::ALGO.digest(str)) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 knu
						knu