mirror of
https://github.com/bitwarden/mobile
synced 2025-12-24 04:04:34 +00:00
Argon2id KDF (#2309)
* add gcc_flags for libargon2.a * fix up ios proj * remove unused tag * add gcc_flags to ios projects * ios libargon2 binary * fix paths in ios project * update pathing on other projs * Argon2id primitive * fix typing issues * comment * remove ds store * [PS-2249] Implement Argon2 (#2293) * Implement Argon2 * Fix incorrect argon2 type on iOS * Switch argon2 implementation to native bindings * Change argon2 to save iterations instead of memory as 'kdfIterations' * Remove mistakenly added import * Remove unused library * cleanup * move android libs * move android libs * Revert "move android libs" This reverts commit0b91b22cd2. * Revert "move android libs" This reverts commit139839c469. * PR feedback Co-authored-by: Bernd Schoolmann <mail@quexten.com>
This commit is contained in:
@@ -39,9 +39,30 @@ namespace Bit.iOS.Core.Services
|
||||
return keyBytes;
|
||||
}
|
||||
|
||||
public byte[] Argon2id(byte[] password, byte[] salt, int iterations, int memory, int parallelism)
|
||||
{
|
||||
uint keySize = 32;
|
||||
var keyData = new NSMutableData();
|
||||
keyData.Length = keySize;
|
||||
|
||||
var passwordData = NSData.FromArray(password);
|
||||
var saltData = NSData.FromArray(salt);
|
||||
|
||||
argon2id_hash_raw(iterations, memory, parallelism, passwordData.Bytes, passwordData.Length,
|
||||
saltData.Bytes, saltData.Length, keyData.MutableBytes, keyData.Length);
|
||||
|
||||
var keyBytes = new byte[keyData.Length];
|
||||
Marshal.Copy(keyData.Bytes, keyBytes, 0, Convert.ToInt32(keyData.Length));
|
||||
return keyBytes;
|
||||
}
|
||||
|
||||
// ref: http://opensource.apple.com/source/CommonCrypto/CommonCrypto-55010/CommonCrypto/CommonKeyDerivation.h
|
||||
[DllImport(ObjCRuntime.Constants.libSystemLibrary, EntryPoint = "CCKeyDerivationPBKDF")]
|
||||
private extern static int CCKeyCerivationPBKDF(uint algorithm, IntPtr password, nuint passwordLen,
|
||||
IntPtr salt, nuint saltLen, uint prf, nuint rounds, IntPtr derivedKey, nuint derivedKeyLength);
|
||||
|
||||
[DllImport("__Internal", EntryPoint = "argon2id_hash_raw")]
|
||||
private static extern int argon2id_hash_raw(int timeCost, int memoryCost, int parallelism, IntPtr pwd,
|
||||
nuint pwdlen, IntPtr salt, nuint saltlen, IntPtr hash, nuint hashlen);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user