I was exploring this code from the tests in eth-lightwallet:
describe('Asymmetric Encryption', function() {
it('encrypts and decrypts a string', function (done) {
var pw = Uint8Array.from(fixtures.valid[0].pwDerivedKey);
var ks = new keyStore(fixtures.valid[0].mnSeed, pw);
var hdPath = "m/0'/0'/2'";
ks.addHdDerivationPath(hdPath, pw, {curve: 'curve25519', purpose: 'asymEncrypt'});
ks.generateNewEncryptionKeys(pw, 2, hdPath);
var pubKeys = ks.getPubKeys(hdPath);
var msg = "Hello World!";
var encrypted = encryption.asymEncryptString(ks, pw, msg, pubKeys[0], pubKeys[1], hdPath);
var cleartext = encryption.asymDecryptString(ks, pw, encrypted, pubKeys[1], pubKeys[0], hdPath);
expect(cleartext).to.equal(msg);
done();
});
});
The use of encryption.asymEncryptString()
is described as:
encryption.multiEncryptString(keystore, pwDerivedKey, msg, myPubKey, theirPubKeyArray [, hdPathString])
Ignorant of a possible difference between the keys for signing and encryption I tried an Eth address in the theirPubKeyArray
Eg.
pubKeys[0] = ["09d5043d675d5ca75ee7bb51691fcc44543faade"];
I got an error in a checkBoxLengths
function somewhere reporting that it was a bad public key size.
I noticed the keys generated by generateNewEncryptionKeys()
were longer. What is the difference here?