Esempio n. 1
0
        public static (byte[] pw, byte[] mk, string reqpw) CreateAuthData001(StandardNoteAPI.APIResultAuthParams apiparams, string mail, string uip)
        {
            if (apiparams.pw_func != StandardNoteAPI.PasswordFunc.pbkdf2)
            {
                throw new Exception("Unsupported pw_func: " + apiparams.pw_func);
            }

            byte[] bytes;

            if (apiparams.pw_alg == StandardNoteAPI.PasswordAlg.sha512)
            {
                bytes = PBKDF2.GenerateDerivedKey(apiparams.pw_key_size / 8, Encoding.UTF8.GetBytes(uip), Encoding.UTF8.GetBytes(apiparams.pw_salt), apiparams.pw_cost, PBKDF2.HMACType.SHA512);
            }
            else if (apiparams.pw_alg == StandardNoteAPI.PasswordAlg.sha512)
            {
                bytes = PBKDF2.GenerateDerivedKey(apiparams.pw_key_size / 8, Encoding.UTF8.GetBytes(uip), Encoding.UTF8.GetBytes(apiparams.pw_salt), apiparams.pw_cost, PBKDF2.HMACType.SHA512);
            }
            else
            {
                throw new Exception("Unknown pw_alg: " + apiparams.pw_alg);
            }

            var pw = bytes.Take(bytes.Length / 2).ToArray();
            var mk = bytes.Skip(bytes.Length / 2).ToArray();

            var reqpw = EncodingConverter.ByteToHexBitFiddleLowercase(pw);

            return(pw, mk, reqpw);
        }
Esempio n. 2
0
        public static (byte[] mk, byte[] sp, string reqpw) CreateAuthData004(StandardNoteAPI.APIResultAuthParams apiparams, string mail, string uip)
        {
            var salt = StandardNoteCrypt.SHA256Bytes(string.Join(":", apiparams.identifier, apiparams.pw_nonce)).Take(128 / 8).ToArray();

            var derivedKey = ANCrypt.Argon2(Encoding.UTF8.GetBytes(uip), salt, 5, 64 * 1024, 64);

            var masterKey      = derivedKey.Skip(00).Take(32).ToArray();
            var serverPassword = derivedKey.Skip(32).Take(32).ToArray();

            var requestPassword = EncodingConverter.ByteToHexBitFiddleLowercase(serverPassword);

            return(masterKey, serverPassword, requestPassword);
        }
Esempio n. 3
0
        public static (byte[] pw, byte[] mk, byte[] ak, string reqpw) CreateAuthData003(StandardNoteAPI.APIResultAuthParams apiparams, string mail, string uip)
        {
            if (apiparams.pw_cost < 100000)
            {
                throw new StandardNoteAPIException($"Account pw_cost is too small ({apiparams.pw_cost})");
            }

            var salt = StandardNoteCrypt.SHA256Hex(string.Join(":", mail, "SF", "003", apiparams.pw_cost.ToString(), apiparams.pw_nonce));

            byte[] bytes = PBKDF2.GenerateDerivedKey(768 / 8, Encoding.UTF8.GetBytes(uip), Encoding.UTF8.GetBytes(salt), apiparams.pw_cost, PBKDF2.HMACType.SHA512);

            var pw = bytes.Skip(0 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();
            var mk = bytes.Skip(1 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();
            var ak = bytes.Skip(2 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();

            var reqpw = EncodingConverter.ByteToHexBitFiddleUppercase(pw).ToLower();

            return(pw, mk, ak, reqpw);
        }
Esempio n. 4
0
        public static (byte[] pw, byte[] mk, byte[] ak, string reqpw) CreateAuthData002(StandardNoteAPI.APIResultAuthParams apiparams, string uip)
        {
            if (apiparams.pw_func != StandardNoteAPI.PasswordFunc.pbkdf2)
            {
                throw new Exception("Unknown pw_func: " + apiparams.pw_func);
            }

            byte[] bytes = PBKDF2.GenerateDerivedKey(768 / 8, Encoding.UTF8.GetBytes(uip), Encoding.UTF8.GetBytes(apiparams.pw_salt), apiparams.pw_cost, PBKDF2.HMACType.SHA512);

            var pw = bytes.Skip(0 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();
            var mk = bytes.Skip(1 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();
            var ak = bytes.Skip(2 * (bytes.Length / 3)).Take(bytes.Length / 3).ToArray();

            var reqpw = EncodingConverter.ByteToHexBitFiddleUppercase(pw).ToLower();

            return(pw, mk, ak, reqpw);
        }