GithubHelp home page GithubHelp logo

Comments (5)

rweather avatar rweather commented on July 28, 2024

Can you provide an example of what you are trying to do? Which cipher are you trying to use?

from arduinolibs.

Kasperdelasopa avatar Kasperdelasopa commented on July 28, 2024

I want to use either AES256, AESTiny256, or AESSmall256

I want to do something like this:

String in = "This Is a very long text, which much longer than 16";
setKey(_keyOfLength32);
String out = myEncrypt(in);

.....

String encryptedString = out;
setKey(_keyOfLength32);
String decryptedString = myDecrypt(encryptedString);

Im not able to use Strings that are longer than 16. Im looking for an example to write the functions "myEncrypt()" and "myDecrypt"

from arduinolibs.

rweather avatar rweather commented on July 28, 2024

The AES block ciphers on their own are not useful for encrypting large blocks of data. They are a building block. What you need is to wrap the block cipher with a mode like CTR, GCM, EAX, or XTS. Then you can encrypt or decrypt as much data as you would like. Some brief examples here:

http://rweather.github.io/arduinolibs/classCTR.html
http://rweather.github.io/arduinolibs/classGCM.html

Some background information on block cipher modes and when to apply them:

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

from arduinolibs.

Kasperdelasopa avatar Kasperdelasopa commented on July 28, 2024

Thanks allot for your reply!!!

I did some tests with CTR. But it seems to cut of the last part of my strings.
I have created these functions:

String My_Secure::encrypt(String msg){

    ctr.clear();
    ctr.setKey(_key, 32);
    ctr.setIV(_iv, 16);
    ctr.setCounterSize(16);

    uint8_t out[msg.length()+1];

    uint8_t in[msg.length()];
    msg.getBytes(in, msg.length());

    ctr.encrypt(out, in, msg.length());
    
    out[msg.length()-1] = '\0';

    return String(reinterpret_cast<const char*> (out));
}

String My_Secure::decrypt(String msg){
    
    ctr.clear();
    ctr.setKey(_key, 32);
    ctr.setIV(_iv, 16);
    ctr.setCounterSize(16);

    uint8_t out[msg.length()+1];

    uint8_t in[msg.length()];
    msg.getBytes(in, msg.length());

    ctr.decrypt(out, in, msg.length());
    
    out[msg.length()-1] = '\0';
    
    return String(reinterpret_cast<const char*> (out));
}

and i tested with these code:

String out = "String with a length of 65 .....................................!";
String eout = _secure->encrypt(out);
String dout = _secure->decrypt(eout);

Serial.printf("Orig: %d | Encrypted: %d | Decrypted: %d\n",out.length(), eout.length(),dout.length() );

Result:

Orig: 65 | Encrypted: 63 | Decrypted: 62

Did i missed something on ctr.setKey(_key, 32), ctr.setIV(_iv, 16), or ctr.setCounterSize(16)?

from arduinolibs.

EgHubs avatar EgHubs commented on July 28, 2024

did you find a way to do that?
would you please post it

from arduinolibs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.