diff --git a/test/asn1/asn1_parser_test.dart b/test/asn1/asn1_parser_test.dart
index 45bb5c0..3da0a79 100644
--- a/test/asn1/asn1_parser_test.dart
+++ b/test/asn1/asn1_parser_test.dart
@@ -13,40 +13,7 @@
 import 'package:pointycastle/asn1/primitives/asn1_set.dart';
 import 'package:test/test.dart';
 
-import '../test/src/helpers.dart';
-
 void main() {
-  test('data offset regression PR #111', () {
-    /*
-   both vectors are OCTET STRINGS generate using bc-java
-
-     byte[] z = new byte[127];
-        for (int t=0; t<z.length; t++) {
-            z[t] = (byte)t;
-        }
-        System.out.println(Hex.toHexString(new DEROctetString(z).getEncoded()));
-
-        z = new byte[128];
-        for (int t=0; t<z.length; t++) {
-            z[t] = (byte)t;
-        }
-        System.out.println( Hex.toHexString(new DEROctetString(z).getEncoded()));
-
-   */
-
-    var octetString127Len = createUint8ListFromHexString(
-        '047f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e');
-    var octetString128Len = createUint8ListFromHexString(
-        '048180000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f');
-
-    var offset127 = ASN1Utils.calculateValueStartPosition(octetString127Len);
-    expect(offset127, equals(2));
-    expect(octetString127Len[offset127], equals(00));
-
-    var offset128 = ASN1Utils.calculateValueStartPosition(octetString128Len);
-    expect(offset128, equals(3));
-    expect(octetString128Len[offset128], equals(00));
-  });
 
   ///
   /// Test simple structur
diff --git a/test/asn1/asn1_utils_test.dart b/test/asn1/asn1_utils_test.dart
index 3c0f1f2..2dc6a4d 100644
--- a/test/asn1/asn1_utils_test.dart
+++ b/test/asn1/asn1_utils_test.dart
@@ -3,7 +3,41 @@
 import 'package:pointycastle/asn1/asn1_utils.dart';
 import 'package:test/test.dart';
 
+import '../test/src/helpers.dart';
+
 void main() {
+  test('data offset regression PR #111', () {
+    /*
+   both vectors are OCTET STRINGS generate using bc-java
+
+     byte[] z = new byte[127];
+        for (int t=0; t<z.length; t++) {
+            z[t] = (byte)t;
+        }
+        System.out.println(Hex.toHexString(new DEROctetString(z).getEncoded()));
+
+        z = new byte[128];
+        for (int t=0; t<z.length; t++) {
+            z[t] = (byte)t;
+        }
+        System.out.println( Hex.toHexString(new DEROctetString(z).getEncoded()));
+
+   */
+
+    var octetString127Len = createUint8ListFromHexString(
+        '047f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e');
+    var octetString128Len = createUint8ListFromHexString(
+        '048180000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f');
+
+    var offset127 = ASN1Utils.calculateValueStartPosition(octetString127Len);
+    expect(offset127, equals(2));
+    expect(octetString127Len[offset127], equals(00));
+
+    var offset128 = ASN1Utils.calculateValueStartPosition(octetString128Len);
+    expect(offset128, equals(3));
+    expect(octetString128Len[offset128], equals(00));
+  });
+
   test('Test decodeLength', () {
     // Test with second byte larger than 127
     expect(ASN1Utils.decodeLength(Uint8List.fromList([0x30, 0x82, 0x01, 0x26])),
