Esempio n. 1
0
        private static string Encrypt004(string content, byte[] key, string assocData)
        {
            var nonce = RandomSeed(24);

            var authenticated_data = Convert.ToBase64String(Encoding.UTF8.GetBytes(assocData));

            var ciphertext = ANCrypt.XChaCha20Encrypt(Encoding.UTF8.GetBytes(content), EncodingConverter.StringToByteArrayCaseInsensitive(nonce), key, Encoding.UTF8.GetBytes(authenticated_data));

            return(string.Join(":", "004", nonce, Convert.ToBase64String(ciphertext), authenticated_data));
        }
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
        private static string Decrypt004(string encContent, byte[] key)
        {
            var split = encContent.Split(':');

            var version            = split[0];
            var nonce              = EncodingConverter.StringToByteArrayCaseInsensitive(split[1]);
            var ciphertext         = Convert.FromBase64String(split[2]);
            var authenticated_data = Encoding.UTF8.GetBytes(split[3]);

            if (version != "004")
            {
                throw new StandardNoteAPIException($"Version must be 004 to decrypt 004 encrypted item (duh.)");
            }

            var plain = ANCrypt.XChaCha20Decrypt(ciphertext, nonce, key, authenticated_data);

            return(Encoding.UTF8.GetString(plain));
        }