Skip to content

Commit

Permalink
KeyStore typo on prf / prg
Browse files Browse the repository at this point in the history
* Using boyncy for utf8 bytes encoding (to avoid confusion)
* Forcing EcKey to 32 bytes avoiding signed too
  • Loading branch information
juanfranblanco committed Apr 11, 2017
1 parent 0388d17 commit 61c8f02
Show file tree
Hide file tree
Showing 11 changed files with 19 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"4b187ceb1929f56e9bf2dd49ae808ef294bbea2fddf66a2f72096d4feefb84b8","cipherparams":{"iv":"024f21a6cff54f7cc6bd204ae03539c6"},"kdf":"scrypt","mac":"a8abea06b06292da5a92934f8a10a3fe4dad7ea8736f45fb8d9de6e9d9af06e4","kdfparams":{"n":262144,"r":1,"p":8,"dklen":32,"salt":"80fc3154b90efdc6f8a3b94f2f8373f32f3e0ed08832fb39b5714364309153af"}},"id":"3d3ad39c-747e-45af-9f0a-6a783c5a55fb","address":"12890d2cce102216644c59dae5baed380d84830c","version":3}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"3f6e9aac96168db67d83c7952ebbe8472e6ff564ecd6ddac083fe62e585bea4f","cipherparams":{"iv":"8057805fd27e5566c41a2de91a435b7c"},"kdf":"pbkdf2","mac":"b4d42c5f7971a5ac79529a001c94bd785c36208639f8e053a5fe2d47a84650dc","kdfparams":{"c":262144,"prf":"hmac-sha256","dklen":32,"salt":"1a8ae1dd78e4f33879df668a55e5736b28f61aa72b6369d5b5d575040bff7942"}},"id":"c0ec917b-931f-48b6-b42c-d2f8d76c681d","address":"0x6b23D35cFd1Ce9c95b52E5CBfDC2eE1FFDec6A93","version":3}
10 changes: 7 additions & 3 deletions src/Nethereum.KeyStore/Crypto/KeyStoreCrypto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Nethereum.Hex.HexConvertors.Extensions;
using Org.BouncyCastle.Crypto;

namespace Nethereum.KeyStore.Crypto
{
Expand Down Expand Up @@ -41,10 +42,13 @@ public byte[] GenerateMac(byte[] derivedKey, byte[] cipherText)
}

//http://stackoverflow.com/questions/34950611/how-to-create-a-pbkdf2-sha256-password-hash-in-c-sharp-bouncy-castle//
public byte[] GeneratePbkdf2Sha256DerivedKey(byte[] password, byte[] salt, int count, int dklen)
public byte[] GeneratePbkdf2Sha256DerivedKey(string password, byte[] salt, int count, int dklen)
{
var pdb = new Pkcs5S2ParametersGenerator(new Sha256Digest());
pdb.Init(password, salt, count);

pdb.Init(PbeParametersGenerator.Pkcs5PasswordToUtf8Bytes(password.ToCharArray()), salt,
count);
// pdb.Init(password, salt, count);
//if dklen == 32, then it is 256 (8 * 32)
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(8 * dklen);
return key.GetKey();
Expand All @@ -68,7 +72,7 @@ public byte[] DecryptScrypt(string password, byte[] mac, byte[] iv, byte[] ciphe

public byte[] DecryptPbkdf2Sha256(string password, byte[] mac, byte[] iv, byte[] cipherText, int c, byte[] salt, int dklen)
{
var derivedKey = GeneratePbkdf2Sha256DerivedKey(GetPasswordAsBytes(password), salt, c, dklen);
var derivedKey = GeneratePbkdf2Sha256DerivedKey(password, salt, c, dklen);
return Decrypt(mac, iv, cipherText, derivedKey);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Nethereum.KeyStore/KeyStorePbkdf2Service.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public KeyStorePbkdf2Service(IRandomBytesGenerator randomBytesGenerator) : base(

}

protected override byte[] GenerateDerivedKey(byte[] pasword, byte[] salt, Pbkdf2Params kdfParams)
protected override byte[] GenerateDerivedKey(string pasword, byte[] salt, Pbkdf2Params kdfParams)
{
return KeyStoreCrypto.GeneratePbkdf2Sha256DerivedKey(pasword, salt, kdfParams.Count, kdfParams.Dklen);
}
Expand Down
4 changes: 2 additions & 2 deletions src/Nethereum.KeyStore/KeyStoreScryptService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ public KeyStoreScryptService(IRandomBytesGenerator randomBytesGenerator) : base(
{
}

protected override byte[] GenerateDerivedKey(byte[] password, byte[] salt, ScryptParams kdfParams)
protected override byte[] GenerateDerivedKey(string password, byte[] salt, ScryptParams kdfParams)
{
return KeyStoreCrypto.GenerateDerivedScryptKey(password, salt, kdfParams.N, kdfParams.R,
return KeyStoreCrypto.GenerateDerivedScryptKey(KeyStoreCrypto.GetPasswordAsBytes(password), salt, kdfParams.N, kdfParams.R,
kdfParams.P, kdfParams.Dklen);
}

Expand Down
4 changes: 2 additions & 2 deletions src/Nethereum.KeyStore/KeyStoreServiceBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public KeyStore<T> EncryptAndGenerateKeyStore(string password, byte[] privateKey

var salt = RandomBytesGenerator.GenerateRandomSalt();

var derivedKey = GenerateDerivedKey(KeyStoreCrypto.GetPasswordAsBytes(password), salt, kdfParams);
var derivedKey = GenerateDerivedKey(password, salt, kdfParams);

var cipherKey = KeyStoreCrypto.GenerateCipherKey(derivedKey);

Expand Down Expand Up @@ -101,7 +101,7 @@ protected virtual byte[] GenerateCipher(byte[] privateKey, byte[] iv, byte[] cip

public abstract string GetKdfType();

protected abstract byte[] GenerateDerivedKey(byte[] pasword, byte[] salt, T kdfParams);
protected abstract byte[] GenerateDerivedKey(string pasword, byte[] salt, T kdfParams);

protected abstract T GetDefaultParams();

Expand Down
2 changes: 1 addition & 1 deletion src/Nethereum.KeyStore/Model/Pbkdf2Params.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class Pbkdf2Params: KdfParams
[JsonProperty("c")]
public int Count { get; set; }

[JsonProperty("prg")]
[JsonProperty("prf")]
public string Prf { get; set; }
}
}
2 changes: 1 addition & 1 deletion src/Nethereum.Signer/EthECKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public static EthECKey GenerateKey()
var keyGenParam = new KeyGenerationParameters(SecureRandom, 256);
gen.Init(keyGenParam);
var keyPair = gen.GenerateKeyPair();
var privateBytes = ((ECPrivateKeyParameters) keyPair.Private).D.ToByteArrayUnsigned();
var privateBytes = ((ECPrivateKeyParameters) keyPair.Private).D.ToByteArray();
if (privateBytes.Length != 32)
{
return GenerateKey();
Expand Down
2 changes: 1 addition & 1 deletion src/Nethereum.Uport/contracts/UportRegistry.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity 0.4.9;
pragma solidity 0.4.10;

contract UportRegistry{
uint public version;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"1b3a1cb1ecdd43896ec9168496d97745c1680a9f859642a5f24ec7bfa73be927","cipherparams":{"iv":"489bed7cf0ba8a3ba8ec1c66a4123c79"},"kdf":"pbkdf2","mac":"6b8cb72ea4ee31cb53c9274f83f863372316fb240f2bec363b57c4daa3d381a5","kdfparams":{"c":262144,"prg":"hmac-sha256","dklen":32,"salt":"2dcddc31c2d1237a8b2265e198320c06ecc07aabf0351532033eb6722545d49b"}},"id":"00f08126-dca5-44d3-9a25-981c7328f718","address":"0xAe63aFbAC20dFd5a952bB7Efe196196c40a7AcD0","version":3}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"3f6e9aac96168db67d83c7952ebbe8472e6ff564ecd6ddac083fe62e585bea4f","cipherparams":{"iv":"8057805fd27e5566c41a2de91a435b7c"},"kdf":"pbkdf2","mac":"b4d42c5f7971a5ac79529a001c94bd785c36208639f8e053a5fe2d47a84650dc","kdfparams":{"c":262144,"prf":"hmac-sha256","dklen":32,"salt":"1a8ae1dd78e4f33879df668a55e5736b28f61aa72b6369d5b5d575040bff7942"}},"id":"c0ec917b-931f-48b6-b42c-d2f8d76c681d","address":"0x6b23D35cFd1Ce9c95b52E5CBfDC2eE1FFDec6A93","version":3}

0 comments on commit 61c8f02

Please sign in to comment.