Skip to content

Commit ea06253

Browse files
committed
[fix] respect @unused_bits in BitString (#323)
1 parent 976a3f5 commit ea06253

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

src/main/java/org/jruby/ext/openssl/ASN1.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,13 +1678,10 @@ private ASN1Encodable toASN1Primitive(final ThreadContext context) {
16781678
}
16791679
if ( type == DERBitString.class ) {
16801680
final byte[] data = val.asString().getBytes();
1681-
int padBits = 0; // padBits < 8 && padBits >= 0
1682-
for (int i = (data.length - 1); i > -1; i--) {
1683-
int b = Byte.toUnsignedInt(data[i]);
1684-
if (b != 0) {
1685-
padBits = Integer.numberOfTrailingZeros(b);
1686-
break;
1687-
}
1681+
int padBits = 0;
1682+
IRubyObject unused_bits = getInstanceVariable("@unused_bits");
1683+
if (unused_bits != null) {
1684+
padBits = unused_bits.convertToInteger("to_i").getIntValue();
16881685
}
16891686
return new DERBitString(data, padBits);
16901687
}

src/test/ruby/test_asn1.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,16 @@ def test_bitstring
11891189
#}
11901190
end
11911191

1192+
def test_bit_string_unused_length
1193+
asn = "\x00\x04".b
1194+
asn.prepend "\x03#{asn.bytesize.chr}"
1195+
bs = OpenSSL::ASN1.decode(asn)
1196+
assert_equal asn, bs.to_der
1197+
1198+
bs.unused_bits = 6
1199+
assert_equal "\x03\x02\x06\x00", bs.to_der
1200+
end
1201+
11921202
def test_bit_string_infinite_length
11931203
begin
11941204
content = [ OpenSSL::ASN1::BitString.new("\x01"), OpenSSL::ASN1::EndOfContent.new() ]

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy