Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Index out of range: index should be less than 36: 36 #53

Closed
Jethro87 opened this issue Jun 17, 2019 · 3 comments
Closed

Index out of range: index should be less than 36: 36 #53

Jethro87 opened this issue Jun 17, 2019 · 3 comments
Assignees
Labels
help wanted Extra attention is needed question Further information is requested

Comments

@Jethro87
Copy link

Hi there!

I'm having an issue when I try to pass padding: null to the AES encrypter. I'm getting exception: flutter: Another exception was thrown: RangeError (index): Index out of range: index should be less than 36: 36

All I'm doing (so far) is instantiating a Crypto object and calling encrypt on a string. Here's my Crypto class:

import 'dart:typed_data';
import 'package:encrypt/encrypt.dart';
import 'package:password_hash/pbkdf2.dart';

class Crypto {
  final String salt;
  final String encryptionKey;
  String key_256;
  Encrypter encrypter;

  Crypto({this.salt, this.encryptionKey}) {
    var generator = new PBKDF2();
    key_256 = generator.generateBase64Key(encryptionKey, salt, 1, 32);
    encrypter = Encrypter(
      AES(Key.fromBase64(key_256), mode: AESMode.ctr, padding: null),
    );
  }

  Encrypted encrypt(String text) {
    Uint8List list =
        Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]);
    IV iv = IV(list);
    Encrypted encrypted = encrypter.encrypt(text, iv: iv);
    return encrypted;
  }

  String decrypt(Encrypted encrypted) {
    Uint8List list =
        Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]);
    IV iv = IV(list);
    String decrypted = encrypter.decrypt(encrypted, iv: iv);
    return decrypted;
  }
}

And here's the full debug console:

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following IndexError was thrown building RandomScreen(dirty, dependencies:
flutter: [InheritedProvider<User>, InheritedProvider<FirebaseUser>]):
flutter: RangeError (index): Index out of range: index should be less than 36: 36
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      Uint8List.[]  (dart:typed_data-patch/typed_data_patch.dart:2188:7)
flutter: #1      SICStreamCipher.processBytes 
package:pointycastle/stream/sic.dart:61
flutter: #2      StreamCipherAsBlockCipher.processBlock 
package:pointycastle/adapters/stream_cipher_as_block_cipher.dart:31
flutter: #3      AES._processBlocks 
package:encrypt/…/algorithms/aes.dart:45
flutter: #4      AES.encrypt 
package:encrypt/…/algorithms/aes.dart:22
flutter: #5      Encrypter.encryptBytes 
package:encrypt/src/encrypter.dart:11
flutter: #6      Encrypter.encrypt 
package:encrypt/src/encrypter.dart:16
flutter: #7      Crypto.encrypt 
package:frankly_native/services/crypto.dart:23
flutter: #8      RandomScreen.build 
package:frankly_native/screens/random.dart:19
flutter: #9      StatelessElement.build 
package:flutter/…/widgets/framework.dart:3789
flutter: #10     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3739
flutter: #11     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #12     StatelessElement.update 
package:flutter/…/widgets/framework.dart:3796
flutter: #13     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #14     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #15     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #16     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #17     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #18     StatelessElement.update 
package:flutter/…/widgets/framework.dart:3796
flutter: #19     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #20     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #21     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #22     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #23     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #24     RenderObjectElement.updateChildren 
package:flutter/…/widgets/framework.dart:4601
flutter: #25     MultiChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4992
flutter: #26     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #27     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #28     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #29     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #30     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #31     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #32     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #33     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #34     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #35     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #36     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #37     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #38     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #39     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #40     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #41     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #42     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #43     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #44     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #45     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #46     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #47     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #48     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #49     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #50     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #51     StatelessElement.update 
package:flutter/…/widgets/framework.dart:3796
flutter: #52     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #53     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #54     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #55     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #56     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #57     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #58     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #59     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #60     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #61     ProxyElement.update 
package:flutter/…/widgets/framework.dart:4006
flutter: #62     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #63     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #64     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #65     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #66     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #67     StatefulElement.update 
package:flutter/…/widgets/framework.dart:3894
flutter: #68     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #69     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #70     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #71     StatelessElement.update 
package:flutter/…/widgets/framework.dart:3796
flutter: #72     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #73     SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4883
flutter: #74     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #75     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #76     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #77     ProxyElement.update 
package:flutter/…/widgets/framework.dart:4006
flutter: #78     Element.updateChild 
package:flutter/…/widgets/framework.dart:2753
flutter: #79     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3750
flutter: #80     Element.rebuild 
package:flutter/…/widgets/framework.dart:3565
flutter: #81     BuildOwner.buildScope 
package:flutter/…/widgets/framework.dart:2278
flutter: #82     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame 
package:flutter/…/widgets/binding.dart:700
flutter: #83     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback 
package:flutter/…/rendering/binding.dart:286
flutter: #84     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback 
package:flutter/…/scheduler/binding.dart:1012
flutter: #85     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame 
package:flutter/…/scheduler/binding.dart:952
flutter: #86     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> 
package:flutter/…/scheduler/binding.dart:773
flutter: #88     _Timer._runTimers  (dart:isolate-patch/timer_impl.dart:382:19)
flutter: #89     _Timer._handleMessage  (dart:isolate-patch/timer_impl.dart:416:5)
flutter: #90     _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:171:12)
flutter: (elided one frame from package dart:async-patch)
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
Reloaded 11 of 684 libraries in 386ms.
flutter: Another exception was thrown: RangeError (index): Index out of range: index should be less than 36: 36

I don't get this error when I remove padding: null from the Encrypter. But, I'm already encrypting using AES.ctr in my web app (using the aesjs library), which doesn't add padding.

Can you point me in the right direction?

Thanks for your help!

@leocavalcante leocavalcante self-assigned this Jun 18, 2019
@leocavalcante leocavalcante added the question Further information is requested label Jun 18, 2019
@leocavalcante
Copy link
Owner

When not padded, inputs should be multiples of the block size. Can you share your input or an input that reproduces the error?

@Jethro87
Copy link
Author

Hi @leocavalcante 👋

Sure thing. I'm trying to encrypt a String of 'String'.

var encrypted = crypto.encrypt('String');
print(encrypted.base16);

I get this error: flutter: Another exception was thrown: RangeError (index): Index out of range: index should be less than 6: 6

On a higher level, what I'm trying to do is be able to encrypt/decrypt in my Flutter app (using encrypt) and my web app (using aesjs). Aesjs (using Aes.ctr), does not require padding as per their example below:

var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ];

// Convert text to bytes
var text = 'Text may be any length you wish, no padding is required.';
var textBytes = aesjs.utils.utf8.toBytes(text);

// The counter is optional, and if omitted will begin at 1
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var encryptedBytes = aesCtr.encrypt(textBytes);

// To print or store the binary data, you may convert it to hex
var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
console.log(encryptedHex);
// "a338eda3874ed884b6199150d36f49988c90f5c47fe7792b0cf8c7f77eeffd87
//  ea145b73e82aefcf2076f881c88879e4e25b1d7b24ba2788"

// When ready to decrypt the hex string, convert it back to bytes
var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex);

// The counter mode of operation maintains internal state, so to
// decrypt a new instance must be instantiated.
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var decryptedBytes = aesCtr.decrypt(encryptedBytes);

// Convert our bytes back into text
var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes);
console.log(decryptedText);
// "Text may be any length you wish, no padding is required."

If I encrypt the string 'String' in aesjs and print the base16 result, I get this:

0d957ea17dad

If I encrypt the string 'String' in encrypt without setting padding: null, I get this:

0d957ea17dad88c50c817dac320c1bbc

But if I set padding: null, I get this error: flutter: Another exception was thrown: RangeError (index): Index out of range: index should be less than 6: 6

Would you mind elaborating on your point, with respect to what I'm trying to do as per above? I'm quite new to encryption. Thanks for your time.

@Jethro87
Copy link
Author

Jethro87 commented Jul 9, 2019

I managed to figure this out. Ended up using CBC instead of CTR, with padding. Closing this issue.

@Jethro87 Jethro87 closed this as completed Jul 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants