Skip to content

Commit ed85aff

Browse files
Add support for UTF-8 encoded passwords when using the hash types :ssha and ssha256
1 parent 7f060e1 commit ed85aff

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

Diff for: lib/net/ldap/password.rb

+6-2
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ def generate(type, str)
2828
'{SHA}' + Base64.strict_encode64(Digest::SHA1.digest(str))
2929
when :ssha
3030
salt = SecureRandom.random_bytes(16)
31-
'{SSHA}' + Base64.strict_encode64(Digest::SHA1.digest(str + salt) + salt)
31+
digest = Digest::SHA1.new
32+
digest << str << salt
33+
'{SSHA}' + Base64.strict_encode64(digest.digest + salt)
3234
when :ssha256
3335
salt = SecureRandom.random_bytes(16)
34-
'{SSHA256}' + Base64.strict_encode64(Digest::SHA256.digest(str + salt) + salt)
36+
digest = Digest::SHA256.new
37+
digest << str << salt
38+
'{SSHA256}' + Base64.strict_encode64(digest.digest + salt)
3539
else
3640
raise Net::LDAP::HashTypeUnsupportedError, "Unsupported password-hash type (#{type})"
3741
end

Diff for: test/test_password.rb

+7
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,11 @@ def test_psw_with_ssha256_should_not_contain_linefeed
1212
flexmock(SecureRandom).should_receive(:random_bytes).and_return('\xE5\x8A\x99\xF8\xCB\x15GW\xE8\xEA\xAD\x0F\xBF\x95\xB0\xDC')
1313
assert_equal("{SSHA256}Cc7MXboTyUP5PnPAeJeCrgMy8+7Gus0sw7kBJuTrmf1ceEU1XHg4QVx4OTlceEY4XHhDQlx4MTVHV1x4RThceEVBXHhBRFx4MEZceEJGXHg5NVx4QjBceERD", Net::LDAP::Password.generate(:ssha256, "cashflow"))
1414
end
15+
16+
def test_utf8_psw
17+
flexmock(SecureRandom).should_receive(:random_bytes).and_return('\xE5\x8A\x99\xF8\xCB\x15GW\xE8\xEA\xAD\x0F\xBF\x95\xB0\xDC')
18+
utf8_psw = "iHVh©NjrLR§h!cru"
19+
assert_equal("{SSHA}shzNiWgSPr3DoDm+Re7QPCcu1g1ceEU1XHg4QVx4OTlceEY4XHhDQlx4MTVHV1x4RThceEVBXHhBRFx4MEZceEJGXHg5NVx4QjBceERD", Net::LDAP::Password.generate(:ssha, utf8_psw))
20+
assert_equal("{SSHA256}/aS06GodUyRYx+z436t+WZsH2aQCSac9FY4ewaXzhSNceEU1XHg4QVx4OTlceEY4XHhDQlx4MTVHV1x4RThceEVBXHhBRFx4MEZceEJGXHg5NVx4QjBceERD", Net::LDAP::Password.generate(:ssha256, utf8_psw))
21+
end
1522
end

0 commit comments

Comments
 (0)